⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pxmlrpc.h

📁 安装 H323需要的pwlib库
💻 H
📖 第 1 页 / 共 2 页
字号:
/* * pxmlrpc.h * * XML/RPC support * * Portable Windows Library * * Copyright (c) 2002 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Portable Windows Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Log: pxmlrpc.h,v $ * Revision 1.20  2004/05/17 06:05:20  csoutheren * Changed "make docs" to use doxygen * Added new config file and main page * * Revision 1.19  2003/04/15 07:08:36  robertj * Changed read and write from streams for base array classes so operates in *   the same way for both PIntArray and PArray<int> etc * * Revision 1.18  2003/04/15 03:00:41  robertj * Added array support to XML/RPC * Fixed XML/RPC parsing when lots of white space in raw XML, caused by *   big fix to base XML parser not returning internal data elements. * * Revision 1.17  2003/01/28 05:08:07  robertj * Fixed copy constructor on function arguments and return value * * Revision 1.16  2002/12/16 06:57:15  robertj * Added ability to specify certain elemets (by name) that are exempt from *   the indent formatting. Useful for XML/RPC where leading white space is *   not ignored by all servers. * Improved the macros for defining RPC functions. * * Revision 1.15  2002/12/13 01:04:56  robertj * Added copy constructor and assignment operator to XML/RPC structs * * Revision 1.14  2002/12/10 04:44:43  robertj * Added support in PTime for ISO 8601 format. * * Revision 1.13  2002/12/09 04:06:18  robertj * Added macros for defining multi-argument functions * * Revision 1.12  2002/12/04 02:09:26  robertj * Changed macro name prefix to PXMLRPC * * Revision 1.11  2002/12/04 00:31:13  robertj * Fixed GNU compatibility * * Revision 1.10  2002/12/04 00:15:56  robertj * Large enhancement to create automatically encoding and decoding structures *   using macros to build a class. * * Revision 1.9  2002/11/06 22:47:24  robertj * Fixed header comment (copyright etc) * * Revision 1.8  2002/10/02 08:54:34  craigs * Added support for XMLRPC server * * Revision 1.7  2002/09/16 01:08:59  robertj * Added #define so can select if #pragma interface/implementation is used on *   platform basis (eg MacOS) rather than compiler, thanks Robert Monaghan. * * Revision 1.6  2002/08/13 03:02:07  robertj * Removed previous fix for memory leak, as object was already deleted. * * Revision 1.5  2002/08/13 01:55:00  craigs * Fixed memory leak on PXMLRPCRequest class * * Revision 1.4  2002/08/06 01:04:03  robertj * Fixed missing pragma interface/implementation * * Revision 1.3  2002/07/12 05:51:14  craigs * Added structs to XMLRPC response types * * Revision 1.2  2002/03/27 00:50:44  craigs * Fixed problems with parsing faults and creating structs * * Revision 1.1  2002/03/26 07:06:50  craigs * Initial version * */#ifndef _PXMLRPC_H#define _PXMLRPC_H#ifdef P_USE_PRAGMA#pragma interface#endif#include <ptclib/pxml.h>#include <ptclib/url.h>class PXMLRPCBlock;class PXMLRPCVariableBase;class PXMLRPCStructBase;/////////////////////////////////////////////////////////////////class PXMLRPC : public PObject{  PCLASSINFO(PXMLRPC, PObject);  public:    enum {      CannotCreateRequestXML          = 100,      CannotParseResponseXML,      CannotParseRequestXML,      HTTPPostFailed,      CannotReadResponseContentBody,      ResponseRootNotMethodResponse,      ResponseEmpty,      ResponseUnknownFormat,      ParamNotValue,      ScalarWithoutElement,      ParamNotStruct,      MemberIncomplete,      MemberUnnamed,      FaultyFault,      RequestHasWrongDocumentType,      RequestHasNoMethodName,      RequestHasNoParms,      MethodNameIsEmpty,      UnknownMethod,      ParamNotArray,      UserFault                       = 1000,    };    PXMLRPC(      const PURL & url,      unsigned options = 0    );    void SetTimeout(const PTimeInterval & _timeout) { timeout = _timeout; }    BOOL MakeRequest(const PString & method);    BOOL MakeRequest(const PString & method,  PXMLRPCBlock & response);    BOOL MakeRequest(PXMLRPCBlock & request, PXMLRPCBlock & response);    BOOL MakeRequest(const PString & method, const PXMLRPCStructBase & args, PXMLRPCStructBase & reply);    PString GetFaultText() const { return faultText; }    PINDEX  GetFaultCode() const { return faultCode; }    static BOOL    ISO8601ToPTime(const PString & iso8601, PTime & val, int tz = PTime::GMT);    static PString PTimeToISO8601(const PTime & val);  protected:    BOOL PerformRequest(PXMLRPCBlock & request, PXMLRPCBlock & response);    PURL          url;    PINDEX        faultCode;    PString       faultText;    PTimeInterval timeout;    unsigned      options;};/////////////////////////////////////////////////////////////////class PXMLRPCBlock : public PXML{  PCLASSINFO(PXMLRPCBlock, PXML);  public:    PXMLRPCBlock();    PXMLRPCBlock(const PString & method);    PXMLRPCBlock(const PString & method, const PXMLRPCStructBase & structData);    BOOL Load(const PString & str);    PXMLElement * GetParams();    PXMLElement * GetParam(PINDEX idx) const;    PINDEX GetParamCount() const;    // used when used as a response    PINDEX  GetFaultCode() const                     { return faultCode; }    PString GetFaultText() const                     { return faultText; }    void SetFault(PINDEX code, const PString & text) { faultCode = code; faultText = text; }    BOOL ValidateResponse();    // helper functions for getting parameters    BOOL GetParams(PXMLRPCStructBase & data);    BOOL GetParam(PINDEX idx, PString & type, PString & result);    BOOL GetExpectedParam(PINDEX idx, const PString & expectedType, PString & value);    BOOL GetParam(PINDEX idx, PString & result);    BOOL GetParam(PINDEX idx, int & result);    BOOL GetParam(PINDEX idx, double & result);    BOOL GetParam(PINDEX idx, PTime & result, int tz = PTime::GMT);    BOOL GetParam(PINDEX idx, PStringToString & result);    BOOL GetParam(PINDEX idx, PXMLRPCStructBase & result);    BOOL GetParam(PINDEX idx, PStringArray & result);    BOOL GetParam(PINDEX idx, PArray<PStringToString> & result);    // static functions for parsing values    BOOL ParseScalar(PXMLElement * element, PString & type, PString & value);    BOOL ParseStruct(PXMLElement * element, PStringToString & structDict);    BOOL ParseStruct(PXMLElement * element, PXMLRPCStructBase & structData);    BOOL ParseArray(PXMLElement * element, PStringArray & array);    BOOL ParseArray(PXMLElement * element, PArray<PStringToString> & array);    BOOL ParseArray(PXMLElement * element, PXMLRPCVariableBase & array);    // static functions for creating values    static PXMLElement * CreateValueElement(PXMLElement * element);    static PXMLElement * CreateScalar(const PString & type, const PString & scalar);    static PXMLElement * CreateMember(const PString & name, PXMLElement * value);    static PXMLElement * CreateScalar(const PString & str);    static PXMLElement * CreateScalar(int value);    static PXMLElement * CreateScalar(double value);    static PXMLElement * CreateDateAndTime(const PTime & time);    static PXMLElement * CreateBinary(const PBYTEArray & data);    static PXMLElement * CreateStruct();    static PXMLElement * CreateStruct(const PStringToString & dict);    static PXMLElement * CreateStruct(const PStringToString & dict, const PString & typeStr);    static PXMLElement * CreateStruct(const PXMLRPCStructBase & structData);    static PXMLElement * CreateArray(const PStringArray & array);    static PXMLElement * CreateArray(const PStringArray & array, const PString & typeStr);    static PXMLElement * CreateArray(const PStringArray & array, const PStringArray & types);    static PXMLElement * CreateArray(const PArray<PStringToString> & array);    static PXMLElement * CreateArray(const PXMLRPCVariableBase & array);    // helper functions for adding parameters    void AddParam(PXMLElement * parm);    void AddParam(const PString & str);    void AddParam(int value);    void AddParam(double value);    void AddParam(const PTime & time);    void AddParam(const PXMLRPCStructBase & structData);    void AddBinary(const PBYTEArray & data);    void AddStruct(const PStringToString & dict);    void AddStruct(const PStringToString & dict, const PString & typeStr);    void AddArray(const PStringArray & array);    void AddArray(const PStringArray & array, const PString & typeStr);    void AddArray(const PStringArray & array, const PStringArray & types);    void AddArray(const PArray<PStringToString> & array);  protected:    PXMLElement * params;    PString faultText;    PINDEX  faultCode;};/////////////////////////////////////////////////////////////////class PXMLRPCVariableBase : public PObject {    PCLASSINFO(PXMLRPCVariableBase, PObject);  protected:    PXMLRPCVariableBase(const char * name, const char * type = NULL);  public:    const char * GetName() const { return name; }    const char * GetType() const { return type; }    virtual void Copy(const PXMLRPCVariableBase & other) = 0;    virtual PString ToString(PINDEX i) const;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -