Small HTTP daemon
[reactos.git] / reactos / apps / utils / net / roshttpd / include / httpd.h
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS HTTP Daemon
4 * FILE: include/httpd.h
5 */
6 #ifndef __HTTPD_H
7 #define __HTTPD_H
8
9 #include <thread.h>
10 #include <socket.h>
11 #include <http.h>
12
13 #define HTTPD_START WM_USER + 1
14 #define HTTPD_STOP WM_USER + 2
15 #define HTTPD_SUSPEND WM_USER + 3
16 #define HTTPD_RESUME WM_USER + 4
17
18 enum HTTPdState {
19 hsStopped = 0,
20 hsRunning,
21 hsSuspended
22 };
23
24 class CHttpDaemon;
25
26 class CHttpClient : public CServerClientSocket {
27 public:
28 CHttpClient();
29 CHttpClient(LPCServerSocket lpServerSocket);
30 virtual void OnRead();
31 //virtual void OnWrite();
32 virtual void OnClose();
33 HANDLE ThreadHandle;
34 DWORD ThreadId;
35 CHttpParser Parser;
36 void SplitUri(const LPSTR lpsUri, LPSTR lpsHost, LPSTR lpsResource, LPSTR lpsParams);
37 void SplitResource(const LPSTR lpsResource, LPSTR lpsPath, LPSTR lpsFilename, LPSTR lpsExtension);
38 void ProcessRequest();
39 void SendFile(const LPSTR lpsFilename);
40 void Report(const LPSTR lpsCode, const LPSTR lpsStr);
41 private:
42 BOOL bStop;
43 LPSTR lpsBuffer;
44 LONG nBufferSize;
45 unsigned __int64 nTotalRead;
46 unsigned __int64 nFileSize;
47 HANDLE hFile;
48 };
49 typedef CHttpClient* LPCHttpClient;
50
51 class CHttpClientThread : public CServerClientThread {
52 public:
53 CHttpClientThread() {};
54 CHttpClientThread(LPCServerClientSocket Socket);
55 virtual void Execute();
56 };
57 typedef CHttpClientThread* LPCHttpClientThread;
58
59 class CHttpDaemon : public CServerSocket {
60 public:
61 CHttpDaemon();
62 virtual ~CHttpDaemon();
63 HTTPdState GetState() const;
64 virtual BOOL Start();
65 virtual BOOL Stop();
66 virtual LPCServerClientSocket OnGetSocket(LPCServerSocket lpServerSocket);
67 virtual LPCServerClientThread OnGetThread(LPCServerClientSocket Socket);
68 virtual void OnAccept(const LPCServerClientThread lpThread);
69 private:
70 HTTPdState State;
71 };
72 typedef CHttpDaemon* LPCHttpDaemon;
73
74 class CHttpDaemonThread : public CThread {
75 public:
76 CHttpDaemonThread() {};
77 virtual void Execute();
78 private:
79 CHttpDaemon *Daemon;
80 };
81 typedef CHttpDaemonThread* LPCHttpDaemonThread;
82
83 #endif /* __HTTPD_H */