diff options
Diffstat (limited to 'ACE/apps/JAWS/server/HTTP_Server.h')
-rw-r--r-- | ACE/apps/JAWS/server/HTTP_Server.h | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/ACE/apps/JAWS/server/HTTP_Server.h b/ACE/apps/JAWS/server/HTTP_Server.h new file mode 100644 index 00000000000..942b1575d77 --- /dev/null +++ b/ACE/apps/JAWS/server/HTTP_Server.h @@ -0,0 +1,160 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file HTTP_Server.h + * + * $Id$ + * + * @author James Hu + */ +//============================================================================= + + +#ifndef HTTP_SERVER_H +#define HTTP_SERVER_H + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Service_Config.h" +#include "ace/Service_Object.h" +#include "ace/Thread_Manager.h" +#include "ace/Acceptor.h" +#include "ace/LOCK_SOCK_Acceptor.h" +#include "ace/Task_T.h" +#include "ace/Asynch_IO.h" +#include "ace/svc_export.h" +#include "HTTP_Handler.h" +#include "ace/Synch_Traits.h" +#include "ace/Thread_Mutex.h" +#include "ace/Null_Mutex.h" +#include "ace/Global_Macros.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL +// Forward declaration. +class ACE_Proactor; +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (ACE_HAS_THREAD_SAFE_ACCEPT) +typedef ACE_LOCK_SOCK_Acceptor<ACE_SYNCH_NULL_MUTEX> HTTP_SOCK_Acceptor; +#else +typedef ACE_LOCK_SOCK_Acceptor<ACE_SYNCH_MUTEX> HTTP_SOCK_Acceptor; +#endif /* ACE_HAS_THREAD_SAFE_ACCEPT */ + +typedef HTTP_SOCK_Acceptor HTTP_Acceptor; + +/** + * @class HTTP_Server + * + * @brief This server is used to create HTTP Handlers for the Web + * server + * + */ +class ACE_Svc_Export HTTP_Server : public ACE_Service_Object +{ +public: + /// Initialization + virtual int init (int argc, ACE_TCHAR *argv[]); + + /// Exit hooks + virtual int fini (void); + +protected: + /// Thread Per Request implementation + virtual int thread_per_request (HTTP_Handler_Factory &factory); + + /// Asynch Thread Pool implementation + virtual int asynch_thread_pool (void); + + /// Synch Thread Pool implementation + virtual int synch_thread_pool (HTTP_Handler_Factory &factory); + +private: + // James, comment these data members. + void parse_args (int argc, ACE_TCHAR **argv); + int port_; + int threads_; + int strategy_; + int backlog_; + int throttle_; + bool caching_; + ACE_Thread_Manager tm_; + HTTP_Acceptor acceptor_; +}; + +/** + * @class Synch_Thread_Pool_Task + * + * @brief Used to implement Synch Thread Pool + * + * Describe this and the others below. + * NOTE: this class was modified to make caching disabling possible + */ +class Synch_Thread_Pool_Task : public ACE_Task<ACE_NULL_SYNCH> +{ +public: + Synch_Thread_Pool_Task (HTTP_Acceptor &acceptor, + ACE_Thread_Manager &tm, + int threads, + HTTP_Handler_Factory &factory); + virtual int svc (void); + +private: + HTTP_Acceptor &acceptor_; + HTTP_Handler_Factory &factory_; +}; + +/** + * @class Thread_Per_Request_Task + * + * @brief Used to implement Thread Per Request. + * + * Spawns a new thread for every new incoming connection. The + * handle below is the socket stream of the incoming connection. + * NOTE: this class was modified to make caching disabling possible + */ +class Thread_Per_Request_Task : public ACE_Task<ACE_NULL_SYNCH> +{ +public: + Thread_Per_Request_Task (ACE_HANDLE handle, + ACE_Thread_Manager &tm, + int &grp_id, + HTTP_Handler_Factory &factory); + virtual int open (void *args = 0); + virtual int close (u_long); + virtual int svc (void); + +private: + ACE_HANDLE handle_; + int &grp_id_; + HTTP_Handler_Factory &factory_; +}; + +// This only works on Win32 +#if defined (ACE_HAS_WIN32_OVERLAPPED_IO) +/** + * @class Asynch_Thread_Pool_Task + * + * @brief Used to implement Asynch Thread Pool + * + * The proactor below utilizes WaitForMultipleObjects. + */ +class Asynch_Thread_Pool_Task : public ACE_Task<ACE_NULL_SYNCH> +{ +public: + Asynch_Thread_Pool_Task (ACE_Proactor &proactor, + ACE_Thread_Manager &tm); + virtual int svc (void); + +private: + ACE_Proactor &proactor_; +}; +#endif /* ACE_HAS_WIN32_OVERLAPPED_IO */ + +ACE_SVC_FACTORY_DECLARE (HTTP_Server) + +ACE_STATIC_SVC_DECLARE_EXPORT (ACE_Svc, HTTP_Server) + +#endif /* HTTP_SERVER_H */ |