// XMLClientPacket.h: interface for the CXMLClientPacket class. // ////////////////////////////////////////////////////////////////////// #ifndef WMI_XML_CLIENTPACKET_H #define WMI_XML_CLIENTPACKET_H //Abstract base class . all classes creating client xml packets MUST //derive from this class. class CXMLClientPacket { protected: // Function that retrieves the key bindings in XML format from the INSTANCE name. HRESULT GetKeyBindingsInStream(IStream *pStream); //get standard body till \r\n HRESULT GetBodyTillLocalNamespacePathInStream(IStream **ppStream); //get the HTTP header in M-POST format HRESULT GetMPostHeader(WCHAR **pwszHeader); //get the HTTP header in POST format HRESULT GetPostHeader(WCHAR **pwszHeader); //the length of the XML representation of namespace viz., .... HRESULT GetNamespaceLength(DWORD *pdwTotalLength,DWORD *pdwNumberofNamespaces); // Get the namespace in XML format HRESULT GetXMLNamespaceInStream(IStream *pStream); // This creates an IWbemContext object with some specific // flags set in it for use by the WMIXML convertor HRESULT CreateFlagsContext(IWbemContext **ppCtx); // A string used to identify a Whistler method static LPCWSTR WMI_WHISTLERSTRING; // Whether this is a WMI client bool m_bWMI; // Indicates which HTTP method is being used int m_iPostType; /*1 for POST, 2 for M-POST*/ // These are static strings used as the value of many operation parameters static LPCWSTR TRUE_STRING; static LPCWSTR FALSE_STRING; static LPCWSTR WHISTLER_HTTP_HEADER; WCHAR *m_pwszNameSpace; //the namespace WCHAR *m_pwszObjPath; //the obj path. eg root/cimv2 WCHAR *m_pwszNewObjPath; //for operations that take an old and new path. eg. Copy. // The following should not be deleted in the destructor since // they will be made to point to static members LPCWSTR m_pwszLocalOnly; //"TRUE" or "FALSE" LPCWSTR m_pwszIncludeQualifier; //'' LPCWSTR m_pwszDeepInheritance; //'' LPCWSTR m_pwszIncludeClassOrigin; //'' WCHAR *m_pwszCimOperation; //CimOperation - eg "GetClass" WCHAR *m_pwszLocale; DWORD m_dwXMLNamespaceLength; DWORD m_dwNumberofNamespaceparts; WCHAR m_pwszQueryLanguage[80]; //Used only by ExecQuery packet class. by default "WQL" WCHAR *m_pwszQueryString; //stores the query. used only by ExecQuery packet class //additional flags that clients would be setting that need to be passed through our packet. LONG m_lFlags; IWbemContext *m_pCtx; IWbemClassObject *m_pWbemClassObject; ePATHSTYLE m_ePathstyle; //WHISTLER OR NOVA ? HRESULT m_hResult; //function calls made in the ctor set this member.. public: CXMLClientPacket(const WCHAR *pwszObjPath, const WCHAR *pwszNameSpace, const WCHAR *pwszCimOperation); virtual ~CXMLClientPacket(); //function that would be called by the creating packet factory to determine if the //class construction completed without any errors.. bool ClassConstructionSucceeded(); // Function to convert given IWbemClassObject to XML representation. HRESULT ConvertWbemObjectToXMLStream(IStream *pStream); //this function mainly used by ExecMethodPacket class... when parameters are passed //via an IWbemClassObject pointer, this function decodes them into IPARAMVALUEs (XML) HRESULT GetParamsFromObjectInStream(IStream *pStream); //boolean flag set to mean the server is a WMI server HRESULT SetWMI(bool bFlag); public: //returns the http extension header for specified CIMOperation virtual HRESULT GetHeader(WCHAR **ppwszHeader); //retunrs the message body virtual HRESULT GetBody(WCHAR **ppwszBody,DWORD *pdwLengthofPacket=NULL)=0; //retunrs the message body //This version takes an XML version of ObjPath directly and forms the body. //useful if you already have the objpath in xml version and dont want //this class to convert for you. virtual HRESULT GetBodyDirect(const WCHAR *pwszXMLObjPath, DWORD dwLengthofObjPath, WCHAR **ppwszBody, DWORD *pdwLengthofPacket); //this is a better implementation. uses UINT rather than strings for specifying post type. //keeping the old fn to prevent breaking of any existing code that uses this.. virtual HRESULT SetPostType(int uPostType/*1 for POST, 2 for M-POST*/); virtual HRESULT SetOptions(const WCHAR *pwszLocale, IWbemContext *pCtx, IWbemClassObject *pWbemClassObject, bool bLocalOnly, bool bIncludeQualifier, bool bDeepInheritance, bool bIncludeClassOrigin); //flags like WBEM_FLAG_AMMENDED_QUALIFIER that would be passed //as Iparamnames in the packet. virtual HRESULT SetFlags(LONG lFlags); //only for ExecQuery packet class. doesnt makesense for others. //including this fn in base class to maintain uniformity. //clients only get a base class ptr. virtual HRESULT SetQueryLanguage(const WCHAR *pwszQueryLanguage); virtual HRESULT SetQueryString(const WCHAR *pwszQueryString); //For EXTRINSIC method invocations, the CimOperation would be //the method name that the user would pass. - it would have been //nice if the standard was maintained and the CimOperation for ExecuteMethod //had been "ExecuteMethod" and the actual method name had been one of the elements //of the xml packet - but then.... virtual HRESULT SetMethod(const WCHAR *pwszMethod); }; #endif // WMI_XML_CLIENTPACKET_H