00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef PTLIB_XMLRPCSRVR_H
00032 #define PTLIB_XMLRPCSRVR_H
00033
00034 #ifdef P_USE_PRAGMA
00035 #pragma interface
00036 #endif
00037
00038 #include <ptclib/pxmlrpc.h>
00039 #include <ptclib/http.h>
00040
00041
00042 class PXMLRPCServerMethod : public PString
00043 {
00044 PCLASSINFO(PXMLRPCServerMethod, PString);
00045 public:
00046 PXMLRPCServerMethod(const PString & name)
00047 : PString(name) { }
00048
00049 PNotifier methodFunc;
00050 };
00051
00052
00053 PSORTED_LIST(PXMLRPCServerMethodList, PXMLRPCServerMethod);
00054
00055
00056 class PXMLRPCServerResource : public PHTTPResource
00057 {
00058 PCLASSINFO(PXMLRPCServerResource, PHTTPResource);
00059 public:
00060 PXMLRPCServerResource();
00061 PXMLRPCServerResource(
00062 const PHTTPAuthority & auth
00063 );
00064 PXMLRPCServerResource(
00065 const PURL & url
00066 );
00067 PXMLRPCServerResource(
00068 const PURL & url,
00069 const PHTTPAuthority & auth
00070 );
00071
00072
00073 PBoolean LoadHeaders(PHTTPRequest & request);
00074 PBoolean OnPOSTData(PHTTPRequest & request, const PStringToString & data);
00075
00076
00077 virtual void OnXMLRPCRequest(const PString & body, PString & reply);
00078 virtual PBoolean SetMethod(const PString & methodName, const PNotifier & func);
00079 void OnXMLRPCRequest(const PString & methodName, PXMLRPCBlock & request, PString & reply);
00080
00081 virtual PString FormatFault(
00082 PINDEX code,
00083 const PString & str
00084 );
00085
00086 protected:
00087 PMutex methodMutex;
00088 PXMLRPCServerMethodList methodList;
00089 };
00090
00091
00092 class PXMLRPCServerParms : public PObject
00093 {
00094 PCLASSINFO(PXMLRPCServerParms, PObject);
00095 public:
00096 PXMLRPCServerParms(
00097 PXMLRPCServerResource & res,
00098 PXMLRPCBlock & req
00099 ) : resource(res), request(req) { }
00100
00101 void SetFault(
00102 PINDEX code,
00103 const PString & text
00104 ) { request.SetFault(code, resource.FormatFault(code, text)); }
00105
00106 PXMLRPCServerResource & resource;
00107 PXMLRPCBlock & request;
00108 PXMLRPCBlock response;
00109 };
00110
00111
00112 #endif // PTLIB_XMLRPCSRVR_H
00113
00114
00115