summaryrefslogtreecommitdiff
path: root/apps/JAWS/PROTOTYPE/JAWS/IO_State.h
diff options
context:
space:
mode:
Diffstat (limited to 'apps/JAWS/PROTOTYPE/JAWS/IO_State.h')
-rw-r--r--apps/JAWS/PROTOTYPE/JAWS/IO_State.h225
1 files changed, 225 insertions, 0 deletions
diff --git a/apps/JAWS/PROTOTYPE/JAWS/IO_State.h b/apps/JAWS/PROTOTYPE/JAWS/IO_State.h
new file mode 100644
index 00000000000..18648f71613
--- /dev/null
+++ b/apps/JAWS/PROTOTYPE/JAWS/IO_State.h
@@ -0,0 +1,225 @@
+/* -*- c++ -*- */
+// Hey, Emacs! This is a C++ file!
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// jaws
+//
+// = FILENAME
+// IO.h
+//
+// = AUTHOR
+// James Hu
+//
+// ============================================================================
+
+#if !defined (JAWS_IO_STATE_H)
+#define JAWS_IO_STATE_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);
+
+ virtual void done (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_Dispatch_Policy *policy_;
+ // 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_STATE_H */