xref: /haiku/src/apps/poorman/PoorManServer.h (revision 000fe088a79bbd17ce42078273c04b306967827f)
1*000fe088SStephan Aßmus /*
2*000fe088SStephan Aßmus  * Copyright 2009 Haiku Inc. All rights reserved.
3*000fe088SStephan Aßmus  * Distributed under the terms of the MIT License.
4*000fe088SStephan Aßmus  *
5*000fe088SStephan Aßmus  * Author(s):
6*000fe088SStephan Aßmus  *		Ma Jie, china.majie at gmail
7*000fe088SStephan Aßmus  */
8*000fe088SStephan Aßmus #ifndef POOR_MAN_SERVER_H
9*000fe088SStephan Aßmus #define POOR_MAN_SERVER_H
10*000fe088SStephan Aßmus 
11*000fe088SStephan Aßmus #include <pthread.h>
12*000fe088SStephan Aßmus 
13*000fe088SStephan Aßmus #include <OS.h>
14*000fe088SStephan Aßmus #include <SupportDefs.h>
15*000fe088SStephan Aßmus 
16*000fe088SStephan Aßmus #include "libhttpd/libhttpd.h"
17*000fe088SStephan Aßmus 
18*000fe088SStephan Aßmus #define POOR_MAN_BUF_SIZE 1048576ll
19*000fe088SStephan Aßmus 
20*000fe088SStephan Aßmus #ifdef __cplusplus
21*000fe088SStephan Aßmus class PoorManServer{
22*000fe088SStephan Aßmus public:
23*000fe088SStephan Aßmus 						PoorManServer(const char* webDir, int32 maxConns,
24*000fe088SStephan Aßmus 							bool listDir, const char* idxName);
25*000fe088SStephan Aßmus 	virtual             ~PoorManServer();
26*000fe088SStephan Aßmus 
27*000fe088SStephan Aßmus 			status_t	Run();
28*000fe088SStephan Aßmus 			status_t	Stop();
29*000fe088SStephan Aßmus 
IsRunning()30*000fe088SStephan Aßmus 			bool        IsRunning()const{return fIsRunning;}
31*000fe088SStephan Aßmus 
32*000fe088SStephan Aßmus 			status_t    SetWebDir(const char* webDir);
33*000fe088SStephan Aßmus 			status_t    SetMaxConns(int32 count);
34*000fe088SStephan Aßmus 			status_t	SetListDir(bool listDir);
35*000fe088SStephan Aßmus 			status_t	SetIndexName(const char* idxName);
36*000fe088SStephan Aßmus 
GetWebDirLock()37*000fe088SStephan Aßmus 			pthread_rwlock_t* GetWebDirLock(){return &fWebDirLock;}
GetIndexNameLock()38*000fe088SStephan Aßmus 			pthread_rwlock_t* GetIndexNameLock(){return &fIndexNameLock;}
39*000fe088SStephan Aßmus private:
40*000fe088SStephan Aßmus 			bool        fIsRunning;
41*000fe088SStephan Aßmus 			int32       fMaxConns;//Max Thread Count
42*000fe088SStephan Aßmus 			char*		fIndexName;//Index File Name
43*000fe088SStephan Aßmus 
44*000fe088SStephan Aßmus 			thread_id	  fListenerTid;
45*000fe088SStephan Aßmus 			int32		  fCurConns;
46*000fe088SStephan Aßmus 			httpd_server* fHttpdServer;
47*000fe088SStephan Aßmus 
48*000fe088SStephan Aßmus 			pthread_rwlock_t fWebDirLock;
49*000fe088SStephan Aßmus 			pthread_rwlock_t fIndexNameLock;
50*000fe088SStephan Aßmus 
PoorManServer()51*000fe088SStephan Aßmus 			PoorManServer(){}
PoorManServer(PoorManServer & s)52*000fe088SStephan Aßmus 			PoorManServer(PoorManServer& s){}
53*000fe088SStephan Aßmus 			PoorManServer& operator=(PoorManServer& s){return *this;}
54*000fe088SStephan Aßmus 
55*000fe088SStephan Aßmus 	//two thread functions.
56*000fe088SStephan Aßmus 	static 	int32		_Listener(void* data);
57*000fe088SStephan Aßmus 	static  int32		_Worker(void* data);
58*000fe088SStephan Aßmus 
59*000fe088SStephan Aßmus 			status_t   _HandleGet(httpd_conn* hc);
60*000fe088SStephan Aßmus 			status_t   _HandleHead(httpd_conn* hc);
61*000fe088SStephan Aßmus 			status_t   _HandlePost(httpd_conn* hc);
62*000fe088SStephan Aßmus };
63*000fe088SStephan Aßmus #endif
64*000fe088SStephan Aßmus 
65*000fe088SStephan Aßmus #ifdef __cplusplus
66*000fe088SStephan Aßmus extern "C" {
67*000fe088SStephan Aßmus #endif
68*000fe088SStephan Aßmus 
69*000fe088SStephan Aßmus pthread_rwlock_t* get_web_dir_lock();
70*000fe088SStephan Aßmus pthread_rwlock_t* get_index_name_lock();
71*000fe088SStephan Aßmus 
72*000fe088SStephan Aßmus #ifdef __cplusplus
73*000fe088SStephan Aßmus }
74*000fe088SStephan Aßmus #endif
75*000fe088SStephan Aßmus 
76*000fe088SStephan Aßmus #endif //POOR_MAN_SERVER_H
77