:pserver:cvsanon@mok.lvcm.com:/CVS/ReactOS reactos
[reactos.git] / 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 long long nTotalRead;
47         //      unsigned __int64 nFileSize;
48         unsigned long long nFileSize;
49     HANDLE hFile;
50 };
51 typedef CHttpClient* LPCHttpClient;
52
53 class CHttpClientThread : public CServerClientThread {
54 public:
55         CHttpClientThread() {};
56         CHttpClientThread(LPCServerClientSocket Socket);
57         virtual void Execute();
58 };
59 typedef CHttpClientThread* LPCHttpClientThread;
60
61 class CHttpDaemon : public CServerSocket {
62 public:
63     CHttpDaemon();
64     virtual ~CHttpDaemon();
65         HTTPdState GetState() const;
66         virtual BOOL Start();
67         virtual BOOL Stop();
68         virtual LPCServerClientSocket OnGetSocket(LPCServerSocket lpServerSocket);
69         virtual LPCServerClientThread OnGetThread(LPCServerClientSocket Socket);
70         virtual void OnAccept(const LPCServerClientThread lpThread);
71 private:
72         HTTPdState State;
73 };
74 typedef CHttpDaemon* LPCHttpDaemon;
75
76 class CHttpDaemonThread : public CThread {
77 public:
78         CHttpDaemonThread() {};
79         virtual void Execute();
80 private:
81         CHttpDaemon *Daemon;
82 };
83 typedef CHttpDaemonThread* LPCHttpDaemonThread;
84
85 #endif /* __HTTPD_H */