//---------------------------------------------------------------------------- // // Copyright (C) Intel Corporation, 2007-2009 // // File: CimWinRMClient.h // // Contents: An implementation of the ICimWsmanClient interface using Microsoft WinRM // //---------------------------------------------------------------------------- #ifndef __CIM_WINRM_CLIENT_H #define __CIM_WINRM_CLIENT_H #include #include "CimWsman.h" #include namespace Intel { namespace WSManagement { //using namespace WsmanClientNamespace; using Intel::Manageability::Cim::CimReference; using Intel::Manageability::Cim::WsManSelectors; const string CIMBINDING_NS = "http://schemas.dmtf.org/wbem/wsman/1/cimbinding.xsd"; class CimWinRMClient : public ICimWsmanClient { private: CLSID _wsmanOleClsid; IDispatch * _pWsmanDispatch; IDispatch * _pWsmanSessionDispatch; IDispatch * _pWsmanConnectionOptions; DISPID _dispPropertyPut; DISPID _getDispid; DISPID _identifyDispid; DISPID _putDispid; DISPID _createDispid; DISPID _enumerateDispid; DISPID _invokeDispid; DISPID _deleteDispid; DISPID _createSessionDispid; DISPID _createConnectionOptionsDispid; DISPID _createResourceLocatorDispid; long _connectionFlags; bool Init(); void ReleaseDisps(); bool CreateSession(); bool SetConnectionOptions(wchar_t* fieldName, const string& fieldValue); bool AddSessionFlag(wchar_t* flagName); bool CreateConnectionOptions(); bool CreateSessionFlags(); bool GetFunctionIds(); bool GetDispId(IDispatch* disp, DISPID* id, wchar_t* name); bool CreateResourceLocator(IDispatch** disp, const string& uri, const NameValuePairs *s) const; bool GetEnumerationItems(IDispatch* disp, vector &enumRes) const; bool CheckForMoreItems(IDispatch* disp, DISPID& id, bool& hasItems) const; bool AddSelectors(IDispatch* disp, const NameValuePairs *s) const; bool AddSelector(IDispatch* disp, DISPID& selId, const string& name, const string& value) const; ConnectionInfo connection; // Copy constructor is declared private CimWinRMClient(const CimWinRMClient& cl); // operator = is declared private CimWinRMClient& operator=(const CimWinRMClient& other); //void OpenConnection(const ConnectionInfo Connection); public: // Construct from params. explicit CimWinRMClient(const string &host = "localhost", const int port = 80, bool secure = false, AuthMethod auth_method = DIGEST, const string &username = "", const string &password = "" ); explicit CimWinRMClient(const ConnectionInfo &Connection); // Destructor. virtual ~CimWinRMClient(); // ConnectionInfo virtual ConnectionInfo Connection() const; // Creates a new instance of a resource. virtual string Create(const string &resourceUri, const string &data) const; // Identify. virtual string Identify() const; // Delete a resource. virtual void Delete(const string &resourceUri, const NameValuePairs *s = NULL) const; // Enumerate resource. virtual void Enumerate(const string &resourceUri, vector &enumRes, const NameValuePairs *s = NULL) const; // Enumerate a resource. virtual void Enumerate(vector &enumRes, const EnumerateFilter &filter) const; // Enumerate reference. virtual void EnumerateRef(vector &enumRes, const EnumerateFilter &filter) const; // Retrieve a resource. virtual string Get(const string &resourceUri, const NameValuePairs *s = NULL) const; // Update a resource. virtual string Put(const string &resourceUri, const string &content, const NameValuePairs *s = NULL) const; // Invokes a method and returns the results of the method call. virtual string Invoke(const string &resourceUri, const string &methodName, const string &content, const NameValuePairs *s = NULL) const; // Submit a subscription virtual string Subscribe(const string &resourceUri, const SubscribeInfo &info, string &identifier) const; // Renew a subscription virtual string Renew(const string &resourceUri, const string &identifier, float expire, const NameValuePairs *s = NULL) const; // Terminate a subscription virtual void Unsubscribe(const string &resourceUri, const string &identifier, const NameValuePairs *s = NULL) const; // Set auth method virtual void SetAuth(const char *auth_method = "digest"); // Set user name virtual void SetUserName(const char *user_name); // Set passsword virtual void SetPassword(const char *password); // Set encoding virtual void SetEncoding(const char *encoding); // Set CIM namespace virtual void SetNamespace(const char *ns); // Set client certificate params void SetClientCert(const char *caOid=NULL, const char *caName=NULL, const bool localCert=false); void SetProxy(const char *proxy=NULL, const char *proxy_username=NULL, const char *proxy_password=NULL); }; } // namespace WSManagement } // namespace Intel #endif // __CIM_WINRM_CLIENT_H