sipxtacklib  Version 3.3
XmlRpcDispatch.h
Go to the documentation of this file.
1 //
2 // Copyright (C) 2006-2012 SIPez LLC. All rights reserved.
3 //
4 // Copyright (C) 2004-2006 SIPfoundry Inc.
5 // Licensed by SIPfoundry under the LGPL license.
6 //
7 // Copyright (C) 2004-2006 Pingtel Corp. All rights reserved.
8 // Licensed to SIPfoundry under a Contributor Agreement.
9 //
10 // $$
12 
13 #ifndef _XMLRPCDISPATCH_H_
14 #define _XMLRPCDISPATCH_H_
15 
16 // SYSTEM INCLUDES
17 
18 // APPLICATION INCLUDES
19 #include <os/OsBSem.h>
20 #include <xmlparser/tinyxml.h>
21 #include "net/HttpService.h"
22 #include "net/HttpServer.h"
23 #include "net/XmlRpcMethod.h"
24 
25 // DEFINES
26 // MACROS
27 // EXTERNAL FUNCTIONS
28 // EXTERNAL VARIABLES
29 // CONSTANTS
30 // STRUCTS
31 // TYPEDEFS
32 
33 // FORWARD DECLARATIONS
34 
35 // Private class to contain XmlRpcMethod and user data for each methodName
36 class XmlRpcMethodContainer : public UtlContainable
37 {
38 public:
39  static const UtlContainableType TYPE ;
42 
43  virtual ~XmlRpcMethodContainer();
44 
45  virtual UtlContainableType getContainableType() const;
46 
47  virtual unsigned int hash() const;
48 
49  int compareTo(const UtlContainable *b) const;
50 
51  void setData(XmlRpcMethod::Get* method, void* userData);
52 
53  void getData(XmlRpcMethod::Get*& method, void*& userData);
54 
55 private:
56 
57  void* mpUserData;
58  XmlRpcMethod::Get* mpMethod;
59 
61  XmlRpcMethodContainer(const XmlRpcMethodContainer& rXmlRpcMethodContainer);
62  XmlRpcMethodContainer& operator=(const XmlRpcMethodContainer& rhs);
63 };
64 
79 {
80 /* //////////////////////////// PUBLIC //////////////////////////////////// */
81 public:
82  static const char* DEFAULT_URL_PATH;
83 
84 /* ============================ CREATORS ================================== */
85 
87  XmlRpcDispatch(int httpServerPort,
88  bool isSecureServer,
89  const char* uriPath = DEFAULT_URL_PATH,
90  const char* httpBindAddress = NULL
91  );
92 
94  virtual ~XmlRpcDispatch();
95 
96 /* ============================ MANIPULATORS ============================== */
97 
99  void processRequest(const HttpRequestContext& requestContext,
100  const HttpMessage& request,
101  HttpMessage*& response );
102 
104  static bool parseValue(TiXmlNode* valueNode, int index, UtlSList& params);
105 
107  static void cleanUp(UtlHashMap* members);
108 
110  static void cleanUp(UtlSList* array);
111 
112 /* ============================ ACCESSORS ================================= */
113 
115  void addMethod(const char* methodName, XmlRpcMethod::Get* method, void* userData = NULL);
116 
118  void removeMethod(const char* methodName);
119 
121  HttpServer* getHttpServer();
122 
123 /* ============================ INQUIRY =================================== */
124 
125 /* //////////////////////////// PROTECTED ///////////////////////////////// */
126 protected:
127 
128  friend class XmlRpcTest;
129 
131  bool parseXmlRpcRequest(UtlString& requestContent,
132  XmlRpcMethodContainer*& method,
133  UtlSList& params,
134  XmlRpcResponse& response);
135 
136 /* //////////////////////////// PRIVATE /////////////////////////////////// */
137 private:
138 
140  static bool parseArray(TiXmlNode* valueNode, UtlSList*& array);
141 
143  static bool parseStruct(TiXmlNode* valueNode, UtlHashMap*& memebers);
144 
146  HttpServer* mpHttpServer;
147 
149  UtlHashMap mMethods;
150 
152  OsBSem mLock;
153 
155  XmlRpcDispatch(const XmlRpcDispatch& rXmlRpcDispatch);
156 
158  XmlRpcDispatch& operator=(const XmlRpcDispatch& rhs);
159 
160 };
161 
162 /* ============================ INLINE METHODS ============================ */
163 
164 #endif // _XMLRPCDISPATCH_H_
165 
166 
static const char * DEFAULT_URL_PATH
Definition: XmlRpcDispatch.h:82
int compareTo(const UtlContainable *b) const
Definition: XmlRpcDispatch.cpp:50
HTTP message container.
Definition: HttpMessage.h:191
XmlRpcMethodContainer()
< Class type used for runtime checking
Definition: XmlRpcDispatch.cpp:40
virtual unsigned int hash() const
Definition: XmlRpcDispatch.cpp:57
static const UtlContainableType TYPE
Definition: XmlRpcDispatch.h:39
Definition: HttpServer.h:46
virtual ~XmlRpcMethodContainer()
Definition: XmlRpcDispatch.cpp:45
Definition: XmlRpcDispatch.h:36
A XmlRpcDispatch is a object that monitors the incoming XML-RPC requests, parses XmlRpcRequest messag...
Definition: XmlRpcDispatch.h:78
Definition: HttpRequestContext.h:37
This object is used to create a XML-RPC response to a XmlRpcRequest request.
Definition: XmlRpcResponse.h:57
void setData(XmlRpcMethod::Get *method, void *userData)
Definition: XmlRpcDispatch.cpp:68
A HttpService is a dynamically loaded object that is invoked by the HttpServer during the runtime...
Definition: HttpService.h:40
void getData(XmlRpcMethod::Get *&method, void *&userData)
Definition: XmlRpcDispatch.cpp:74
virtual UtlContainableType getContainableType() const
Definition: XmlRpcDispatch.cpp:63
XmlRpcMethod * Get()
Definition: XmlRpcMethod.h:81

sipXtackLib home page