OSDN Git Service

7794a88c80ba1bd72f8094f81771fa0b4d2f65b0
[iptd/iPTd.git] / src / net / HTTPDaemon.h
1 //\r
2 //  HTTPDaemon.h\r
3 //\r
4 \r
5 #pragma once\r
6 \r
7 #include <windows.h>\r
8 #include <process.h>\r
9 #include <stdlib.h>\r
10 #include <winsock.h>\r
11 \r
12 #include "Raym/Raym.h"\r
13 \r
14 #include "net/HTTPRequest.h"\r
15 #include "net/HTTPResponse.h"\r
16 \r
17 \r
18 namespace NET\r
19 {\r
20 \r
21 class HTTPDaemonDelegate\r
22 {\r
23 public:\r
24     virtual HTTPResponse *request(HTTPRequest *request, struct sockaddr_in *client) = 0;\r
25 \r
26 };\r
27 \r
28 class HTTPDaemon : public Raym::Object\r
29 {\r
30 private:\r
31     int                     _port;\r
32     int                     _backlog;\r
33     HTTPDaemonDelegate *    _delegate;\r
34     Raym::String *          _rootPath;\r
35     enum _state\r
36     {\r
37         ST_IDLE,\r
38         ST_READY,\r
39         ST_RUN,\r
40         ST_DONE\r
41     }                       _state;\r
42 \r
43 protected:\r
44     HTTPDaemon();\r
45     ~HTTPDaemon();\r
46 \r
47 public:\r
48     static HTTPDaemon *alloc();\r
49     HTTPDaemon *initWithPort(int port, int backlog);\r
50 \r
51     void setDelegate(HTTPDaemonDelegate *delegate);\r
52     void setRootPath(Raym::String *path);\r
53     Raym::String *rootPath();\r
54     void run();\r
55     bool start();\r
56     void stop();\r
57     void wait();\r
58 \r
59     HTTPResponse *responseWithReason(Raym::String *reason, int status, Raym::String *version);\r
60     HTTPResponse *responseWithPath(Raym::String *path, HTTPRequest *request);\r
61     static Raym::String *reasonForStatus(int status);\r
62 \r
63     // for internal use\r
64     Raym::Array * _sockets;\r
65     void session(SOCKET sock, struct sockaddr_in *client);\r
66 \r
67     virtual const char *className();\r
68 };\r
69 \r
70 \r
71 class HTTPDaemonSessionArgs\r
72 {\r
73 public:\r
74     HTTPDaemon *        _daemon;\r
75     SOCKET              _sock;\r
76     struct sockaddr_in  _client;\r
77 };\r
78 \r
79 } // NET\r