00001 00002 #ifndef _XMLRPCSERVER_H_ 00003 #define _XMLRPCSERVER_H_ 00004 // 00005 // XmlRpc++ Copyright (c) 2002-2003 by Chris Morley 00006 // 00007 00013 #if defined(_MSC_VER) 00014 # pragma warning(disable:4786) // identifier was truncated in debug info 00015 #endif 00016 00017 #ifndef MAKEDEPEND 00018 # include <map> 00019 # include <string> 00020 #endif 00021 00022 #include "XmlRpcDispatch.h" 00023 #include "XmlRpcSource.h" 00024 00025 namespace XmlRpc { 00026 00027 00028 // An abstract class supporting XML RPC methods 00029 class XmlRpcServerMethod; 00030 00031 // Class representing connections to specific clients 00032 class XmlRpcServerConnection; 00033 00034 // Class representing argument and result values 00035 class XmlRpcValue; 00036 00037 00039 class XmlRpcServer : public XmlRpcSource { 00040 public: 00042 XmlRpcServer(); 00044 virtual ~XmlRpcServer(); 00045 00047 void enableIntrospection(bool enabled=true); 00048 00050 void addMethod(XmlRpcServerMethod* method); 00051 00053 void removeMethod(XmlRpcServerMethod* method); 00054 00056 void removeMethod(const std::string& methodName); 00057 00059 XmlRpcServerMethod* findMethod(const std::string& name) const; 00060 00065 bool bindAndListen(int port, int backlog = 5); 00066 00068 int getPort(void) const; 00069 00071 void work(double msTime); 00072 00074 void exit(); 00075 00077 void shutdown(); 00078 00080 void listMethods(XmlRpcValue& result); 00081 00082 00085 virtual std::string executeRequest(std::string const& request); 00086 00087 00088 // XmlRpcSource interface implementation 00089 00091 virtual unsigned handleEvent(unsigned eventType); 00092 00094 virtual void removeConnection(XmlRpcServerConnection*); 00095 00096 protected: 00097 00098 // Static data 00099 static const char METHODNAME_TAG[]; 00100 static const char PARAMS_TAG[]; 00101 static const char PARAMS_ETAG[]; 00102 static const char PARAM_TAG[]; 00103 static const char PARAM_ETAG[]; 00104 00105 static const std::string SYSTEM_MULTICALL; 00106 static const std::string METHODNAME; 00107 static const std::string PARAMS; 00108 00109 static const std::string FAULTCODE; 00110 static const std::string FAULTSTRING; 00111 00112 00114 virtual void acceptConnection(); 00115 00118 virtual XmlRpcServerConnection* createConnection(int socket); 00119 00121 virtual void dispatchConnection(XmlRpcServerConnection* sc); 00122 00123 00126 std::string parseRequest(std::string const& request, XmlRpcValue& params); 00127 00129 bool executeMethod(const std::string& methodName, XmlRpcValue& params, XmlRpcValue& result); 00130 00133 bool executeMulticall(const std::string& methodName, XmlRpcValue& params, XmlRpcValue& result); 00134 00136 std::string generateResponse(std::string const& resultXml); 00137 00139 std::string generateFaultResponse(std::string const& msg, int errorCode = -1); 00140 00142 std::string generateHeader(std::string const& body); 00143 00144 00145 00147 bool _introspectionEnabled; 00148 00150 XmlRpcDispatch _disp; 00151 00153 typedef std::map< std::string, XmlRpcServerMethod* > MethodMap; 00154 00156 MethodMap _methods; 00157 00159 XmlRpcServerMethod* _listMethods; 00160 00162 XmlRpcServerMethod* _methodHelp; 00163 00164 }; 00165 } // namespace XmlRpc 00166 00167 #endif //_XMLRPCSERVER_H_
1.5.8