move network tools
[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 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 */