diff options
author | jxh <jxh@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1998-02-28 11:23:46 +0000 |
---|---|---|
committer | jxh <jxh@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1998-02-28 11:23:46 +0000 |
commit | 49b9daa7c3a780cf6f086ff0405e4186f99e8201 (patch) | |
tree | 658acd36af3679f1c1761c5b1d312a69f74b76e5 /apps/JAWS | |
parent | 0aa5cb39e193806069b2791b1ca0ea9cf7c98941 (diff) | |
download | ATCD-49b9daa7c3a780cf6f086ff0405e4186f99e8201.tar.gz |
Initial add for IO_Handler -- more implementation details added.
Diffstat (limited to 'apps/JAWS')
-rw-r--r-- | apps/JAWS/server/PROTOTYPE/JAWS/IO.cpp | 3 | ||||
-rw-r--r-- | apps/JAWS/server/PROTOTYPE/JAWS/IO.h | 66 | ||||
-rw-r--r-- | apps/JAWS/server/PROTOTYPE/JAWS/IO_Handler.cpp | 104 | ||||
-rw-r--r-- | apps/JAWS/server/PROTOTYPE/JAWS/IO_Handler.h | 223 | ||||
-rw-r--r-- | apps/JAWS/server/PROTOTYPE/JAWS/Makefile | 87 |
5 files changed, 400 insertions, 83 deletions
diff --git a/apps/JAWS/server/PROTOTYPE/JAWS/IO.cpp b/apps/JAWS/server/PROTOTYPE/JAWS/IO.cpp index fc0144a9fe1..b820a0430d1 100644 --- a/apps/JAWS/server/PROTOTYPE/JAWS/IO.cpp +++ b/apps/JAWS/server/PROTOTYPE/JAWS/IO.cpp @@ -1,8 +1,11 @@ // $Id$ #include "JAWS/IO.h" +#include "JAWS/IO_Handler.h" #include "JAWS/IO_Acceptor.h" + // #include "HTTP_Helpers.h" + #include "ace/Message_Block.h" #include "ace/SOCK_Stream.h" #include "ace/Filecache.h" diff --git a/apps/JAWS/server/PROTOTYPE/JAWS/IO.h b/apps/JAWS/server/PROTOTYPE/JAWS/IO.h index 41fdd57a8bc..a3d55e5498b 100644 --- a/apps/JAWS/server/PROTOTYPE/JAWS/IO.h +++ b/apps/JAWS/server/PROTOTYPE/JAWS/IO.h @@ -79,71 +79,6 @@ protected: JAWS_IO_Acceptor *acceptor_; }; -class JAWS_IO_Handler - // = TITLE - // - // This class defines the abstract interface for an I/O handler class in - // the context of Web-likes servers - // - // = DESCRIPTION -{ -public: - virtual void accept_complete (void) {}; - // This method is called by the IO class when new passive connection has - // been established. - - virtual void accept_error (void) {}; - // This method is called by the IO class when new passive connection has - // been established. - -#if 0 - virtual void connect_complete (ACE_Message_Block &) {}; - // This method is called by the IO class when new active connection has - // been established. - - virtual void connect_error (ACE_Message_Block &) {}; - // This method is called by the IO class when new active connection has - // been established. -#endif - - virtual void read_complete (ACE_Message_Block &data) = 0; - // This method is called by the IO class when new client data shows - // up. - - virtual void read_error (void) = 0; - // This method is called by the IO class when there was an error in - // reading new data from the client. - - virtual void transmit_file_complete (void) = 0; - // This method is called by the IO class when the requested file has - // been successfully transmitted to the client. - - virtual void transmit_file_error (int result) = 0; - // This method is called by the IO class when there was an error in - // transmitting the requested file to the client. - - virtual void receive_file_complete (void) = 0; - // This method is called by the IO class when the requested file has - // been successfully received from the client. - - virtual void receive_file_error (int result) = 0; - // This method is called by the IO class when there was an error in - // receiving the requested file from the client. - - virtual void write_error (void) = 0; - // This method is called by the IO class when there was an error in - // writing data to the client. - - virtual void confirmation_message_complete (void) = 0; - // This method is called by the IO class when the confirmation - // message has been delivered to the client. - - virtual void error_message_complete (void) = 0; - // This method is called by the IO class when the error message has - // been delivered to the client. - -}; - class JAWS_Synch_IO : public JAWS_IO // = TITLE // @@ -182,6 +117,7 @@ protected: int length); }; + // This only works on Win32 #if defined (ACE_WIN32) diff --git a/apps/JAWS/server/PROTOTYPE/JAWS/IO_Handler.cpp b/apps/JAWS/server/PROTOTYPE/JAWS/IO_Handler.cpp new file mode 100644 index 00000000000..45191082b3a --- /dev/null +++ b/apps/JAWS/server/PROTOTYPE/JAWS/IO_Handler.cpp @@ -0,0 +1,104 @@ +// $Id$ + +#include "JAWS/IO.h" +#include "JAWS/IO_Handler.h" + +JAWS_IO_Handler_Factory::~JAWS_IO_Handler_Factory (void) +{ +} + +JAWS_Synch_IO_Handler::JAWS_Synch_IO_Handler (JAWS_IO *io, + JAWS_IO_Handler_Factory *factory) + : io_ (io), + factory_ (factory) +{ +} + +void +JAWS_Synch_IO_Handler::accept_complete (void) +{ + // callback into pipeline task, notify that the accept has completed +} + +void +JAWS_Synch_IO_Handler::accept_error (void) +{ + // callback into pipeline task, notify that the accept has failed +} + +void +JAWS_Synch_IO_Handler::read_complete (ACE_Message_Block &data) +{ + ACE_UNUSED_ARG(data); +} + +void +JAWS_Synch_IO_Handler::read_error (void) +{ +} + +void +JAWS_Synch_IO_Handler::transmit_file_complete (void) +{ +} + +void +JAWS_Synch_IO_Handler::transmit_file_error (int result) +{ + ACE_UNUSED_ARG(result); +} + +void +JAWS_Synch_IO_Handler::receive_file_complete (void) +{ +} + +void +JAWS_Synch_IO_Handler::receive_file_error (int result) +{ + ACE_UNUSED_ARG(result); +} + +void +JAWS_Synch_IO_Handler::write_error (void) +{ +} + +void +JAWS_Synch_IO_Handler::confirmation_message_complete (void) +{ +} + +void +JAWS_Synch_IO_Handler::error_message_complete (void) +{ +} + +JAWS_IO_Handler_Factory * +JAWS_Synch_IO_Handler::factory (void) +{ + return this->factory_; +} + +JAWS_IO_Handler * +JAWS_Synch_IO_Handler_Factory::create_io_handler (void) +{ + JAWS_Synch_IO *io; + JAWS_Synch_IO_Handler *handler; + + io = new JAWS_Synch_IO; + if (io == 0) return 0; + + handler = new JAWS_Synch_IO_Handler (io, this); + if (handler == 0) destroy_io_handler (0, io); + + return handler; +} + +void +JAWS_Synch_IO_Handler_Factory::destroy_io_handler (JAWS_IO_Handler *handler, + JAWS_IO *io) +{ + delete handler; + delete io; +} diff --git a/apps/JAWS/server/PROTOTYPE/JAWS/IO_Handler.h b/apps/JAWS/server/PROTOTYPE/JAWS/IO_Handler.h new file mode 100644 index 00000000000..37a6ca40a5e --- /dev/null +++ b/apps/JAWS/server/PROTOTYPE/JAWS/IO_Handler.h @@ -0,0 +1,223 @@ +/* -*- c++ -*- */ +// Hey, Emacs! This is a C++ file! +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// jaws +// +// = FILENAME +// IO.h +// +// = AUTHOR +// James Hu +// +// ============================================================================ + +#if !defined (JAWS_IO_HANDLER_H) +#define JAWS_IO_HANDLER_H + +#include "ace/Asynch_IO.h" + +// #include "JAWS/IO.h" +class JAWS_IO; +class JAWS_Synch_IO; +class JAWS_Asynch_IO; +class JAWS_IO_Handler; +class JAWS_Synch_IO_Handler; +class JAWS_Asynch_IO_Handler; +class JAWS_IO_Handler_Factory; +class JAWS_Synch_IO_Handler_Factory; +class JAWS_Asynch_IO_Handler_Factory; +class JAWS_Pipeline; + +class JAWS_IO_Handler + // = TITLE + // + // This class defines the abstract interface for an I/O handler + // class in the context of Web-likes servers + // + // = DESCRIPTION +{ +public: + virtual void accept_complete (void) = 0; + // This method is called by the IO class when new passive connection has + // been established. + + virtual void accept_error (void) = 0; + // This method is called by the IO class when new passive connection has + // been established. + +#if 0 + virtual void connect_complete (ACE_Message_Block &) = 0; + // This method is called by the IO class when new active connection has + // been established. + + virtual void connect_error (ACE_Message_Block &) = 0; + // This method is called by the IO class when new active connection has + // been established. +#endif + + virtual void read_complete (ACE_Message_Block &data) = 0; + // This method is called by the IO class when new client data shows + // up. + + virtual void read_error (void) = 0; + // This method is called by the IO class when there was an error in + // reading new data from the client. + + virtual void transmit_file_complete (void) = 0; + // This method is called by the IO class when the requested file has + // been successfully transmitted to the client. + + virtual void transmit_file_error (int result) = 0; + // This method is called by the IO class when there was an error in + // transmitting the requested file to the client. + + virtual void receive_file_complete (void) = 0; + // This method is called by the IO class when the requested file has + // been successfully received from the client. + + virtual void receive_file_error (int result) = 0; + // This method is called by the IO class when there was an error in + // receiving the requested file from the client. + + virtual void write_error (void) = 0; + // This method is called by the IO class when there was an error in + // writing data to the client. + + virtual void confirmation_message_complete (void) = 0; + // This method is called by the IO class when the confirmation + // message has been delivered to the client. + + virtual void error_message_complete (void) = 0; + // This method is called by the IO class when the error message has + // been delivered to the client. + + virtual JAWS_IO_Handler_Factory *factory (void) = 0; + // Returns the factory for this IO handler +}; + +class JAWS_IO_Handler_Factory +#if defined (ACE_WIN32) + : public ACE_Service_Handler +#endif +{ +public: + virtual ~JAWS_IO_Handler_Factory (void); + // Destructor + + virtual JAWS_IO_Handler *create_io_handler (void) = 0; + // This creates a new HTTP_Handler + + virtual void destroy_io_handler (JAWS_IO_Handler *handler, JAWS_IO *io) = 0; + // The HTTP handler will call this method from HTTP_Handler::done to + // tell the factory to reap up the handler as it is now done with + // the protocol +}; + +class JAWS_Synch_IO_Handler : protected JAWS_IO_Handler +{ +friend class JAWS_Synch_IO; +friend class JAWS_Synch_IO_Handler_Factory; + +public: + JAWS_Synch_IO_Handler (JAWS_IO *io, JAWS_IO_Handler_Factory *factory); + virtual ~JAWS_Synch_IO_Handler (void); + +protected: + // Inherited from JAWS_IO_Handler + + virtual void accept_complete (void); + virtual void accept_error (void); + virtual void read_complete (ACE_Message_Block &data); + virtual void read_error (void); + virtual void transmit_file_complete (void); + virtual void transmit_file_error (int result); + virtual void receive_file_complete (void); + virtual void receive_file_error (int result); + virtual void write_error (void); + virtual void confirmation_message_complete (void); + virtual void error_message_complete (void); + virtual JAWS_IO_Handler_Factory *factory (void); + +private: + ACE_Message_Block *state_; + // This maintains the state of the request. + + JAWS_IO *io_; + // The reference to our IO interface (synch vs. asynch) + + JAWS_Pipeline *pipeline_; + // This is a reference to the next stage of the pipeline when the IO + // request completes. + + JAWS_IO_Handler_Factory *factory_; +}; + +class JAWS_Synch_IO_Handler_Factory : public JAWS_IO_Handler_Factory +{ +public: + JAWS_IO_Handler *create_io_handler (void); + // This creates a new HTTP_Handler + + void destroy_io_handler (JAWS_IO_Handler *handler, JAWS_IO *io); + // The HTTP handler will call this method from HTTP_Handler::done to + // tell the factory to reap up the handler as it is now done with + // the protocol +}; + +// This only works on Win32 +#if defined (ACE_WIN32) + +class JAWS_Asynch_IO_Handler : protected JAWS_IO_Handler +{ +public: + JAWS_Asynch_IO_Handler (void); + virtual ~JAWS_Asynch_IO_Handler (void); + +protected: + // Inherited from JAWS_IO_Handler + + virtual void accept_complete (void); + virtual void accept_error (void); + virtual void read_complete (ACE_Message_Block &data); + virtual void read_error (void); + virtual void transmit_file_complete (void); + virtual void transmit_file_error (int result); + virtual void receive_file_complete (void); + virtual void receive_file_error (int result); + virtual void write_error (void); + virtual void confirmation_message_complete (void); + virtual void error_message_complete (void); + virtual JAWS_Handler_Factory *factory (void); + +private: + ACE_Message_Block *state_; + // This maintains the state of the request. + + JAWS_IO *io_; + // The reference to our IO interface (synch vs. asynch) + + JAWS_Pipeline *pipeline_; + // This is a reference to the next stage of the pipeline when the IO + // request completes. + + JAWS_IO_Handler_Factory *factory_; +}; + +class JAWS_Asynch_IO_Handler_Factory : public JAWS_IO_Handler_Factory +{ +public: + JAWS_IO_Handler *create_io_handler (void); + // This creates a new HTTP_Handler + + void destroy_io_handler (JAWS_IO_Handler *handler, JAWS_IO *io); + // The HTTP handler will call this method from HTTP_Handler::done to + // tell the factory to reap up the handler as it is now done with + // the protocol +}; + +#endif /* ACE_WIN32 */ +#endif /* JAWS_IO_H */ diff --git a/apps/JAWS/server/PROTOTYPE/JAWS/Makefile b/apps/JAWS/server/PROTOTYPE/JAWS/Makefile index 0c490eb4d68..77bc7a5c2b2 100644 --- a/apps/JAWS/server/PROTOTYPE/JAWS/Makefile +++ b/apps/JAWS/server/PROTOTYPE/JAWS/Makefile @@ -16,6 +16,7 @@ MYFILES = \ Pipeline \ Concurrency \ IO_Acceptor \ + IO_Handler \ IO LSRC = $(addsuffix .cpp,$(MYFILES)) @@ -262,7 +263,19 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Stream_Modules.h \ $(ACE_ROOT)/ace/Stream_Modules.i \ $(ACE_ROOT)/ace/Stream_Modules.cpp \ - JAWS/JAWS/IO.h $(ACE_ROOT)/ace/Asynch_IO.h + JAWS/JAWS/IO.h $(ACE_ROOT)/ace/Asynch_IO.h \ + $(ACE_ROOT)/ace/SOCK_Stream.h \ + $(ACE_ROOT)/ace/SOCK_IO.h \ + $(ACE_ROOT)/ace/SOCK.h \ + $(ACE_ROOT)/ace/Addr.h \ + $(ACE_ROOT)/ace/Addr.i \ + $(ACE_ROOT)/ace/IPC_SAP.h \ + $(ACE_ROOT)/ace/IPC_SAP.i \ + $(ACE_ROOT)/ace/SOCK.i \ + $(ACE_ROOT)/ace/SOCK_IO.i \ + $(ACE_ROOT)/ace/INET_Addr.h \ + $(ACE_ROOT)/ace/INET_Addr.i \ + $(ACE_ROOT)/ace/SOCK_Stream.i .obj/IO_Acceptor.o .obj/IO_Acceptor.so .shobj/IO_Acceptor.o .shobj/IO_Acceptor.so: IO_Acceptor.cpp JAWS/IO_Acceptor.h \ $(ACE_ROOT)/ace/Asynch_Acceptor.h \ $(ACE_ROOT)/ace/OS.h \ @@ -313,6 +326,37 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Atomic_Op.i \ $(ACE_ROOT)/ace/Synch_T.cpp JAWS/JAWS/IO.h \ $(ACE_ROOT)/ace/Asynch_IO.h +.obj/IO_Handler.o .obj/IO_Handler.so .shobj/IO_Handler.o .shobj/IO_Handler.so: IO_Handler.cpp JAWS/IO.h \ + $(ACE_ROOT)/ace/ACE.h \ + $(ACE_ROOT)/ace/OS.h \ + $(ACE_ROOT)/ace/inc_user_config.h \ + $(ACE_ROOT)/ace/config.h \ + $(ACE_ROOT)/ace/config-g++-common.h \ + $(ACE_ROOT)/ace/streams.h \ + $(ACE_ROOT)/ace/Basic_Types.h \ + $(ACE_ROOT)/ace/Basic_Types.i \ + $(ACE_ROOT)/ace/OS.i \ + $(ACE_ROOT)/ace/Trace.h \ + $(ACE_ROOT)/ace/Log_Msg.h \ + $(ACE_ROOT)/ace/Log_Record.h \ + $(ACE_ROOT)/ace/Log_Priority.h \ + $(ACE_ROOT)/ace/Log_Record.i \ + $(ACE_ROOT)/ace/Version.h \ + $(ACE_ROOT)/ace/ACE.i \ + $(ACE_ROOT)/ace/Asynch_IO.h \ + $(ACE_ROOT)/ace/SOCK_Stream.h \ + $(ACE_ROOT)/ace/SOCK_IO.h \ + $(ACE_ROOT)/ace/SOCK.h \ + $(ACE_ROOT)/ace/Addr.h \ + $(ACE_ROOT)/ace/Addr.i \ + $(ACE_ROOT)/ace/IPC_SAP.h \ + $(ACE_ROOT)/ace/IPC_SAP.i \ + $(ACE_ROOT)/ace/SOCK.i \ + $(ACE_ROOT)/ace/SOCK_IO.i \ + $(ACE_ROOT)/ace/INET_Addr.h \ + $(ACE_ROOT)/ace/INET_Addr.i \ + $(ACE_ROOT)/ace/SOCK_Stream.i \ + JAWS/IO_Handler.h .obj/IO.o .obj/IO.so .shobj/IO.o .shobj/IO.so: IO.cpp JAWS/IO.h $(ACE_ROOT)/ace/ACE.h \ $(ACE_ROOT)/ace/OS.h \ $(ACE_ROOT)/ace/inc_user_config.h \ @@ -330,10 +374,25 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Version.h \ $(ACE_ROOT)/ace/ACE.i \ $(ACE_ROOT)/ace/Asynch_IO.h \ - $(ACE_ROOT)/ace/Message_Block.h \ - $(ACE_ROOT)/ace/Malloc.h \ - $(ACE_ROOT)/ace/Malloc.i \ - $(ACE_ROOT)/ace/Malloc_T.h \ + $(ACE_ROOT)/ace/SOCK_Stream.h \ + $(ACE_ROOT)/ace/SOCK_IO.h \ + $(ACE_ROOT)/ace/SOCK.h \ + $(ACE_ROOT)/ace/Addr.h \ + $(ACE_ROOT)/ace/Addr.i \ + $(ACE_ROOT)/ace/IPC_SAP.h \ + $(ACE_ROOT)/ace/IPC_SAP.i \ + $(ACE_ROOT)/ace/SOCK.i \ + $(ACE_ROOT)/ace/SOCK_IO.i \ + $(ACE_ROOT)/ace/INET_Addr.h \ + $(ACE_ROOT)/ace/INET_Addr.i \ + $(ACE_ROOT)/ace/SOCK_Stream.i \ + JAWS/IO_Handler.h JAWS/IO_Acceptor.h \ + $(ACE_ROOT)/ace/Asynch_Acceptor.h \ + $(ACE_ROOT)/ace/LOCK_SOCK_Acceptor.h \ + $(ACE_ROOT)/ace/SOCK_Acceptor.h \ + $(ACE_ROOT)/ace/Time_Value.h \ + $(ACE_ROOT)/ace/SOCK_Acceptor.i \ + $(ACE_ROOT)/ace/LOCK_SOCK_Acceptor.cpp \ $(ACE_ROOT)/ace/Synch.h \ $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ @@ -347,7 +406,11 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Thread.h \ $(ACE_ROOT)/ace/Thread.i \ $(ACE_ROOT)/ace/Atomic_Op.i \ - $(ACE_ROOT)/ace/Synch_T.cpp \ + $(ACE_ROOT)/ace/Synch_T.cpp JAWS/JAWS/IO.h \ + $(ACE_ROOT)/ace/Message_Block.h \ + $(ACE_ROOT)/ace/Malloc.h \ + $(ACE_ROOT)/ace/Malloc.i \ + $(ACE_ROOT)/ace/Malloc_T.h \ $(ACE_ROOT)/ace/Free_List.h \ $(ACE_ROOT)/ace/Free_List.i \ $(ACE_ROOT)/ace/Free_List.cpp \ @@ -368,18 +431,6 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Mem_Map.i \ $(ACE_ROOT)/ace/Memory_Pool.i \ $(ACE_ROOT)/ace/Message_Block.i \ - $(ACE_ROOT)/ace/SOCK_Stream.h \ - $(ACE_ROOT)/ace/SOCK_IO.h \ - $(ACE_ROOT)/ace/SOCK.h \ - $(ACE_ROOT)/ace/Addr.h \ - $(ACE_ROOT)/ace/Addr.i \ - $(ACE_ROOT)/ace/IPC_SAP.h \ - $(ACE_ROOT)/ace/IPC_SAP.i \ - $(ACE_ROOT)/ace/SOCK.i \ - $(ACE_ROOT)/ace/SOCK_IO.i \ - $(ACE_ROOT)/ace/INET_Addr.h \ - $(ACE_ROOT)/ace/INET_Addr.i \ - $(ACE_ROOT)/ace/SOCK_Stream.i \ $(ACE_ROOT)/ace/Filecache.h \ $(ACE_ROOT)/ace/Hash_Map_Manager.h \ $(ACE_ROOT)/ace/Hash_Map_Manager.cpp \ |