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