http_handler.h

来自「ace开发环境 用来开发网络程序 其运用了设计模式、多平台、C++等多种知识」· C头文件 代码 · 共 238 行

H
238
字号
/* -*- c++ -*- *///=============================================================================/** *  @file    HTTP_Handler.h * *  $Id: HTTP_Handler.h 78721 2007-07-02 10:49:41Z johnnyw $ * *  @author James Hu and Irfan Pyarali *///=============================================================================#ifndef HTTP_HANDLER_H#define HTTP_HANDLER_H// = Forward declarationsclass Message_Block;class HTTP_Handler_Factory;#include "ace/Asynch_IO.h"#if !defined (ACE_LACKS_PRAGMA_ONCE)# pragma once#endif /* ACE_LACKS_PRAGMA_ONCE */#include "HTTP_Request.h"#include "HTTP_Response.h"#include "IO.h"/** * @class HTTP_Handler * * @brief This class is used to implement the HTTP protocol * * The HTTP_Handler class is a state based implementation of the * HTTP protocol. Therefore, it can be used synchronously and * asynchronously. It uses an abstract IO class to move between * different HTTP protocol states. It is up to the IO class to * decide on synchronous or asynchronous I/O. */class HTTP_Handler : protected JAWS_IO_Handler{  // Friend I/O classes. Can call protected methods.  friend class JAWS_Synch_IO;  friend class JAWS_Synch_IO_No_Cache;  friend class JAWS_Asynch_IO;  // Factories  friend class Asynch_HTTP_Handler_Factory;  friend class Synch_HTTP_Handler_Factory;  friend class No_Cache_Synch_HTTP_Handler_Factory;public:  /**   * The handler is initialized with a connection <handle> of a new   * client and any <initial_data> that came across. The   * <initial_data> block will be of MAX_REQUEST_SIZE and the number   * of bytes in <initial_data> can be found from   * <initial_data>.length ()   */  virtual void open (ACE_HANDLE handle,                     ACE_Message_Block &initial_data);protected:  /// The constructor is passed the factory that created <this> and the  /// IO mechanism that the handler should use.  HTTP_Handler (JAWS_IO &io,                HTTP_Handler_Factory &factory);  /// Destructor  virtual ~HTTP_Handler (void);  /// This method is called by the framework when there is a timeout.  virtual void timeout (void);  /**   * This is the termination state of the handler. After successful or   * unsuccessful completions, the handler will end up in this state   * (method).   */  virtual void done (void);  /// Request too long.  virtual void request_too_long (void);  /// Reference to the creating factory.  HTTP_Handler_Factory &factory_;protected:  // = Completion methods inherited from <JAWS_IO_Handler>.  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);public:  enum  {    MAX_SOCKBUFSIZE = 64 * 1024,    MAX_REQUEST_SIZE = 8192,    METHODSIZ = 10,    VERSIONSIZ = 10  };private:  /// This points to the request sent by the client  ACE_Message_Block *request_data_;  /// I/O handle to the client  ACE_HANDLE handle_;  HTTP_Request request_;  HTTP_Response response_;  /// IO class used by the handler  JAWS_IO &io_;};/** * @class HTTP_Handler_Factory * * @brief This class is used to create new HTTP handlers * * This is an abstract factory for creating new HTTP handlers. */class HTTP_Handler_Factory{public:  /// Destructor  virtual ~HTTP_Handler_Factory (void);  /// This creates a new HTTP_Handler  virtual HTTP_Handler *create_http_handler (void) = 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   */  virtual void destroy_http_handler (HTTP_Handler &handler,                                     JAWS_IO &io) = 0;};/** * @class Synch_HTTP_Handler_Factory * * @brief This class is used to create new HTTP handlers that will use * Synch IO * */class Synch_HTTP_Handler_Factory : public HTTP_Handler_Factory{public:  /// This creates a new HTTP_Handler  HTTP_Handler *create_http_handler (void);  /**   * 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   */  void destroy_http_handler (HTTP_Handler &handler,                             JAWS_IO &io);};//--------------Added a factory for SYNCH IO without caching/** * @class No_Cache_Synch_HTTP_Handler_Factory * * @brief This class is used to create new HTTP handlers that will use * Synch IO without caching * */class No_Cache_Synch_HTTP_Handler_Factory : public HTTP_Handler_Factory{public:  /// This creates a new HTTP_Handler  HTTP_Handler *create_http_handler (void);  /**   * 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   */  void destroy_http_handler (HTTP_Handler &handler,                             JAWS_IO &io);};//--------------#if defined (ACE_HAS_WIN32_OVERLAPPED_IO)/** * @class Asynch_HTTP_Handler_Factory * * @brief This class is used to create new HTTP handlers that will use * Asynchronous IO.  This only works on Win32. * */class Asynch_HTTP_Handler_Factory : public HTTP_Handler_Factory, public ACE_Service_Handler{public:  /**   * 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   */  void destroy_http_handler (HTTP_Handler &handler,                             JAWS_IO &io);  /**   * <open> is called by <ACE_Asynch_Acceptor> to initialize a new   * instance of ACE_Service_Handler that has been created after the a   * new connection is accepted.   *   * This will act as a creation point for new handlers.   */  virtual void open (ACE_HANDLE handle,                     ACE_Message_Block &message_block);private:  /**   * This method is private as users are not allowed to create new   * handlers. New handlers can only be created by the framework when   * new client connections arrive.   */  HTTP_Handler *create_http_handler (void);};#endif /* ACE_HAS_WIN32_OVERLAPPED_IO */#endif /* HTTP_HANDLER_H */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?