147 lines
4.9 KiB
C++

//----------------------------------------------------------------------------
//
// 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 <windows.h>
#include "CimWsman.h"
#include <stdexcept>
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<string> &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<string> &enumRes, const NameValuePairs *s = NULL) const;
// Enumerate a resource.
virtual void Enumerate(vector<string> &enumRes, const EnumerateFilter &filter) const;
// Enumerate reference.
virtual void EnumerateRef(vector<string> &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