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