summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjxh <jxh@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1998-02-28 11:23:46 +0000
committerjxh <jxh@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1998-02-28 11:23:46 +0000
commit49b9daa7c3a780cf6f086ff0405e4186f99e8201 (patch)
tree658acd36af3679f1c1761c5b1d312a69f74b76e5
parent0aa5cb39e193806069b2791b1ca0ea9cf7c98941 (diff)
downloadATCD-49b9daa7c3a780cf6f086ff0405e4186f99e8201.tar.gz
Initial add for IO_Handler -- more implementation details added.
-rw-r--r--apps/JAWS/server/PROTOTYPE/JAWS/IO.cpp3
-rw-r--r--apps/JAWS/server/PROTOTYPE/JAWS/IO.h66
-rw-r--r--apps/JAWS/server/PROTOTYPE/JAWS/IO_Handler.cpp104
-rw-r--r--apps/JAWS/server/PROTOTYPE/JAWS/IO_Handler.h223
-rw-r--r--apps/JAWS/server/PROTOTYPE/JAWS/Makefile87
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 \