00001 // $Id: ClientRequestHandler.h 91120 2010-07-17 14:07:20Z mcorino $ 00002 00003 /** 00004 * @file ClientRequestHandler.h 00005 * 00006 * @author Martin Corino <mcorino@remedy.nl> 00007 */ 00008 00009 #ifndef ACE_INET_CLIENT_REQUEST_HANDLER_H 00010 #define ACE_INET_CLIENT_REQUEST_HANDLER_H 00011 00012 #include /**/ "ace/pre.h" 00013 00014 #include "ace/SString.h" 00015 #include "ace/Singleton.h" 00016 #include "ace/Synch_Traits.h" 00017 #include "ace/Null_Mutex.h" 00018 #include "ace/Thread_Mutex.h" 00019 #include "ace/INet/INet_Export.h" 00020 #include "ace/INet/RequestHandler.h" 00021 #include "ace/INet/ConnectionCache.h" 00022 #include <iostream> 00023 00024 ACE_BEGIN_VERSIONED_NAMESPACE_DECL 00025 00026 namespace ACE 00027 { 00028 namespace INet 00029 { 00030 class URL_Base; // forward 00031 00032 /** 00033 * @class ACE_INet_ClientRequestHandler 00034 * 00035 * @brief 00036 * 00037 */ 00038 class ACE_INET_Export ClientRequestHandler 00039 : public RequestHandler 00040 { 00041 public: 00042 ClientRequestHandler (); 00043 virtual ~ClientRequestHandler (); 00044 00045 virtual std::istream& handle_open_request (const URL_Base& url) = 0; 00046 00047 virtual std::istream& response_stream () = 0; 00048 00049 virtual bool is_response_ok () const = 0; 00050 00051 static ConnectionCache& connection_cache (); 00052 00053 private: 00054 typedef ACE_Singleton<ConnectionCache, 00055 ACE_SYNCH_MUTEX> TConnectionCacheSingleton; 00056 }; 00057 00058 /** 00059 * @class ACE_INet_ClientINetRequestHandler 00060 * 00061 * @brief 00062 * 00063 */ 00064 class ACE_INET_Export ClientINetRequestHandler 00065 : public ClientRequestHandler 00066 { 00067 public: 00068 ClientINetRequestHandler (); 00069 virtual ~ClientINetRequestHandler (); 00070 00071 /** 00072 * @class ACE_INet_INetConnectionKey 00073 * 00074 * @brief 00075 * 00076 */ 00077 class INetConnectionKey 00078 : public ConnectionKey 00079 { 00080 public: 00081 INetConnectionKey (const ACE_CString& host, 00082 u_short port); 00083 virtual ~INetConnectionKey (); 00084 00085 virtual u_long hash () const; 00086 00087 virtual ConnectionKey* duplicate () const; 00088 00089 const ACE_CString& host () const; 00090 00091 u_short port () const; 00092 00093 protected: 00094 virtual bool equal (const ConnectionKey& key) const; 00095 00096 private: 00097 ACE_CString host_; 00098 u_short port_; 00099 }; 00100 }; 00101 00102 } 00103 } 00104 00105 ACE_END_VERSIONED_NAMESPACE_DECL 00106 00107 #if defined (__ACE_INLINE__) 00108 #include "ace/INet/ClientRequestHandler.inl" 00109 #endif 00110 00111 #include /**/ "ace/post.h" 00112 #endif /* ACE_INET_CLIENT_REQUEST_HANDLER_H */