sipxtacklib  Version 3.3
HttpServer.h
Go to the documentation of this file.
1 //
2 // Copyright (C) 2004-2006 SIPfoundry Inc.
3 // Licensed by SIPfoundry under the LGPL license.
4 //
5 // Copyright (C) 2004-2006 Pingtel Corp. All rights reserved.
6 // Licensed to SIPfoundry under a Contributor Agreement.
7 //
8 // $$
10 
11 
12 #ifndef _HttpServer_h_
13 #define _HttpServer_h_
14 
15 // SYSTEM INCLUDES
16 //#include <...>
17 
18 // APPLICATION INCLUDES
19 #include <utl/UtlInt.h>
20 #include <utl/UtlHashMap.h>
21 #include <utl/UtlHashBag.h>
22 #include <os/OsTask.h>
23 #include <os/OsConfigDb.h>
24 #include <net/HttpConnection.h>
25 
26 // DEFINES
27 #define MAX_PERSISTENT_HTTP_CONNECTIONS 5
28 
29 // MACROS
30 // EXTERNAL FUNCTIONS
31 // EXTERNAL VARIABLES
32 // CONSTANTS
33 // STRUCTS
34 // TYPEDEFS
35 // FORWARD DECLARATIONS
36 class HttpMessage;
37 class HttpBody;
38 class OsServerSocket;
39 class OsConnectionSocket;
40 class HttpRequestContext;
41 class HttpService;
42 class HttpConnection;
43 
44 //:Class short description which may consist of multiple lines (note the ':')
45 // Class detailed description which may extend to multiple lines
46 class HttpServer : public OsTask
47 {
48 /* //////////////////////////// PUBLIC //////////////////////////////////// */
49 public:
50  friend class HttpConnection;
51 
52 /* ============================ CREATORS ================================== */
53 
54  HttpServer(OsServerSocket *pSocket, OsConfigDb* userPasswordDb,
55  const char* realm, OsConfigDb* validIpAddressDB = NULL,
56  bool bPersistentConnection = false);
57  //:Default constructor
58 
59  virtual
60  ~HttpServer();
61  //:Destructor
62 
63 /* ============================ MANIPULATORS ============================== */
64 
65  virtual int run(void* runArg);
66 
67  // Request processors
68  static void processPostFile(const HttpRequestContext& requestContext,
69  const HttpMessage& request,
70  HttpMessage*& response);
71  static int doPostFile(const HttpRequestContext& requestContext,
72  const HttpMessage& request,
73  HttpMessage*& response,
74  UtlString& status);
75 
76  static void processFileRequest(const HttpRequestContext& requestContext,
77  const HttpMessage& request,
78  HttpMessage*& response);
79 
80  // Error request processors
81  static void processNotSupportedRequest(const HttpRequestContext& requestContext,
82  const HttpMessage& request,
83  HttpMessage*& response);
84  static void processFileNotFound(const HttpRequestContext& requestContext,
85  const HttpMessage& request,
86  HttpMessage*& response);
87 
88  static void processUserNotAuthorized(const HttpRequestContext& requestContext,
89  const HttpMessage& request,
90  HttpMessage*& response,
91  const char* text = 0);
92 
93  static void createHtmlResponse(int responseCode, const char* responseCodeText,
94  const char* htmlBodyText, HttpMessage*& response);
95 
96  static void testCgiRequest(const HttpRequestContext& requestContext,
97  const HttpMessage& request,
98  HttpMessage*& response);
99 
100  static UtlBoolean mapUri(OsConfigDb& configDb, const char* uri, UtlString& mappedUri);
101 
102  void addUriMap(const char* fromUri, const char* toUri);
103 
104  typedef void RequestProcessor(const HttpRequestContext& requestContext,
105  const HttpMessage& request,
106  HttpMessage*& response
107  );
108 
109  void addRequestProcessor(const char* fileUrl, RequestProcessor* requestProcessor);
110 
111  void addHttpService(const char* fileUrl, HttpService* service);
112 
114  void allowFileAccess(bool fileAccess
115  );
116 
117  void setPasswordDigest(const char* user, const char* password,
118  UtlString& userPasswordDigest);
119 
120 
121  void setPasswordDigest(const char* user, const char* passwordDigest);
122  //: Sets the password, given an already digested password.
123 
124 
125 
126  void getDigest(const char* user, const char* password,
127  UtlString& userPasswordDigest) ;
128 
129  void setPasswordBasic(const char* user, const char* password);
130 
131  void removeUser(const char* user, const char* password) ;
132 
133  static void constructFileList(UtlString & indexText, UtlString uri, UtlString uriFilename) ;
134 
135  //get current http server status
136  OsStatus getStatus();
137 
138 
139 /* ============================ ACCESSORS ================================= */
140 
141 /* ============================ INQUIRY =================================== */
142 
143 /* //////////////////////////// PROTECTED ///////////////////////////////// */
144 protected:
145 
146  void processRequest(const HttpMessage& request,
147  HttpMessage*& response,
148  const OsConnectionSocket* connection
149  );
150 
151  UtlBoolean processRequestIpAddr(const UtlString& remoteIp,
152  const HttpMessage& request,
153  HttpMessage*& response);
154 
155 
156  UtlBoolean isRequestAuthorized(const HttpMessage& request,
157  HttpMessage*& response,
158  UtlString& userId);
159 
160  void processPutRequest(const HttpRequestContext& requestContext,
161  const HttpMessage& request,
162  HttpMessage*& response);
163 
164  void getFile(const char* fileName, HttpBody*& body);
165 
166  void putFile(const char* fileName, HttpBody& body);
167 
168  UtlBoolean findRequestProcessor(const char* fileUri,
169  RequestProcessor*& requestProcessor
170  );
171 
172  UtlBoolean findHttpService(const char* fileUri, HttpService*& service);
173 
174  void loadValidIpAddrList();
175 
176 /* //////////////////////////// PRIVATE /////////////////////////////////// */
177 private:
178  HttpServer(const HttpServer& rHttpServer);
179  //:Copy constructor (disabled)
180  HttpServer& operator=(const HttpServer& rhs);
181  //:Assignment operator (disabled)
182  OsStatus httpStatus;
183  int mServerPort;
184  OsServerSocket* mpServerSocket;
185  OsConfigDb * mpUserPasswordDigestDb;
186  OsConfigDb * mpUserPasswordBasicDb;
187  OsConfigDb * mpValidIpAddressDB;
188  OsConfigDb mUriMaps;
189  OsConfigDb * mpNonceDb;
190  UtlString mRealm;
191  UtlHashMap mRequestProcessorMethods;
192  UtlHashMap mHttpServices;
193  bool mAllowMappedFiles;
194  UtlHashBag mValidIpAddrList;
195  UtlBoolean mbPersistentConnection;
196  int mHttpConnections;
197  UtlSList* mpHttpConnectionList;
198 };
199 
200 /* ============================ INLINE METHODS ============================ */
201 
202 #endif // _HttpServer_h_
HttpServer(OsServerSocket *pSocket, OsConfigDb *userPasswordDb, const char *realm, OsConfigDb *validIpAddressDB=NULL, bool bPersistentConnection=false)
Definition: HttpServer.cpp:87
static void processUserNotAuthorized(const HttpRequestContext &requestContext, const HttpMessage &request, HttpMessage *&response, const char *text=0)
Definition: HttpServer.cpp:1359
static void constructFileList(UtlString &indexText, UtlString uri, UtlString uriFilename)
Definition: HttpServer.cpp:863
static void testCgiRequest(const HttpRequestContext &requestContext, const HttpMessage &request, HttpMessage *&response)
Definition: HttpServer.cpp:1392
virtual int run(void *runArg)
Definition: HttpServer.cpp:226
static void processFileNotFound(const HttpRequestContext &requestContext, const HttpMessage &request, HttpMessage *&response)
Definition: HttpServer.cpp:1343
void setPasswordDigest(const char *user, const char *password, UtlString &userPasswordDigest)
Definition: HttpServer.cpp:1523
void addRequestProcessor(const char *fileUrl, RequestProcessor *requestProcessor)
Definition: HttpServer.cpp:1497
static void processFileRequest(const HttpRequestContext &requestContext, const HttpMessage &request, HttpMessage *&response)
Definition: HttpServer.cpp:697
static void processPostFile(const HttpRequestContext &requestContext, const HttpMessage &request, HttpMessage *&response)
Definition: HttpServer.cpp:1019
HTTP message container.
Definition: HttpMessage.h:191
void setPasswordBasic(const char *user, const char *password)
void removeUser(const char *user, const char *password)
Definition: HttpServer.cpp:1577
Definition: HttpConnection.h:31
void processPutRequest(const HttpRequestContext &requestContext, const HttpMessage &request, HttpMessage *&response)
Definition: HttpServer.cpp:1011
void getFile(const char *fileName, HttpBody *&body)
void putFile(const char *fileName, HttpBody &body)
static void createHtmlResponse(int responseCode, const char *responseCodeText, const char *htmlBodyText, HttpMessage *&response)
Definition: HttpServer.cpp:1475
Definition: HttpServer.h:46
UtlBoolean findRequestProcessor(const char *fileUri, RequestProcessor *&requestProcessor)
Definition: HttpServer.cpp:1597
virtual ~HttpServer()
Definition: HttpServer.cpp:153
UtlBoolean findHttpService(const char *fileUri, HttpService *&service)
Definition: HttpServer.cpp:1615
Definition: HttpRequestContext.h:37
void addUriMap(const char *fromUri, const char *toUri)
Definition: HttpServer.cpp:1489
static int doPostFile(const HttpRequestContext &requestContext, const HttpMessage &request, HttpMessage *&response, UtlString &status)
Definition: HttpServer.cpp:1027
static void processNotSupportedRequest(const HttpRequestContext &requestContext, const HttpMessage &request, HttpMessage *&response)
Definition: HttpServer.cpp:1326
void processRequest(const HttpMessage &request, HttpMessage *&response, const OsConnectionSocket *connection)
Definition: HttpServer.cpp:581
void allowFileAccess(bool fileAccess)
set permission for access to mapped file names
Definition: HttpServer.cpp:691
class to contain an HTTP body
Definition: HttpBody.h:55
A HttpService is a dynamically loaded object that is invoked by the HttpServer during the runtime...
Definition: HttpService.h:40
OsStatus getStatus()
Definition: HttpServer.cpp:221
void getDigest(const char *user, const char *password, UtlString &userPasswordDigest)
Definition: HttpServer.cpp:1567
void loadValidIpAddrList()
Definition: HttpServer.cpp:120
void RequestProcessor(const HttpRequestContext &requestContext, const HttpMessage &request, HttpMessage *&response)
Definition: HttpServer.h:104
UtlBoolean processRequestIpAddr(const UtlString &remoteIp, const HttpMessage &request, HttpMessage *&response)
Definition: HttpServer.cpp:556
static UtlBoolean mapUri(OsConfigDb &configDb, const char *uri, UtlString &mappedUri)
Definition: HttpServer.cpp:1630
void addHttpService(const char *fileUrl, HttpService *service)
Definition: HttpServer.cpp:1511
UtlBoolean isRequestAuthorized(const HttpMessage &request, HttpMessage *&response, UtlString &userId)
Definition: HttpServer.cpp:351

sipXtackLib home page