OSDN Git Service

EPG予約、キーワード予約の不具合修正
[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 HTTPRequest *readRequest(SOCKET sock) = 0;\r
25     virtual HTTPResponse *request(HTTPRequest *request, SOCKET sock, struct sockaddr_in *client) = 0;\r
26 \r
27 };\r
28 \r
29 class HTTPDaemon : public Raym::Object\r
30 {\r
31 private:\r
32     int                     _port;\r
33     int                     _backlog;\r
34     HTTPDaemonDelegate *    _delegate;\r
35     Raym::String *          _rootPath;\r
36     enum _state\r
37     {\r
38         ST_IDLE,\r
39         ST_READY,\r
40         ST_RUN,\r
41         ST_DONE\r
42     }                       _state;\r
43 \r
44 protected:\r
45     HTTPDaemon();\r
46     ~HTTPDaemon();\r
47 \r
48 public:\r
49     static HTTPDaemon *alloc();\r
50     HTTPDaemon *initWithPort(int port, int backlog);\r
51 \r
52     void setDelegate(HTTPDaemonDelegate *delegate);\r
53     void setRootPath(Raym::String *path);\r
54     Raym::String *rootPath();\r
55     void run();\r
56     bool start();\r
57     void stop();\r
58     void wait();\r
59 \r
60     HTTPResponse *responseWithReason(Raym::String *reason, int status, Raym::String *version);\r
61     HTTPResponse *responseWithPath(Raym::String *path, HTTPRequest *request);\r
62     static HTTPResponse *responseOfUnnecessary();\r
63     static Raym::String *reasonForStatus(int status);\r
64 \r
65     // for internal use\r
66     Raym::Array * _sockets;\r
67     void session(SOCKET sock, struct sockaddr_in *client);\r
68 \r
69     virtual const char *className();\r
70 };\r
71 \r
72 \r
73 class HTTPDaemonSessionArgs\r
74 {\r
75 public:\r
76     HTTPDaemon *        _daemon;\r
77     SOCKET              _sock;\r
78     struct sockaddr_in  _client;\r
79 };\r
80 \r
81 } // NET\r