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