XmlRpcServer.h

Go to the documentation of this file.
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_

Generated on Tue Sep 8 17:26:55 2009 for OverSim by  doxygen 1.5.8