00001 // $Id: HTTP_URL.h 91118 2010-07-17 10:29:57Z mcorino $ 00002 00003 /** 00004 * @file HTTP_URL.h 00005 * 00006 * @author Martin Corino <mcorino@remedy.nl> 00007 */ 00008 00009 #ifndef ACE_HTTP_URL_H 00010 #define ACE_HTTP_URL_H 00011 00012 #include /**/ "ace/pre.h" 00013 00014 #include /**/ "ace/config-all.h" 00015 00016 #if !defined (ACE_LACKS_PRAGMA_ONCE) 00017 # pragma once 00018 #endif /* ACE_LACKS_PRAGMA_ONCE */ 00019 00020 #include "ace/INet/INet_Export.h" 00021 #include "ace/INet/URLBase.h" 00022 00023 ACE_BEGIN_VERSIONED_NAMESPACE_DECL 00024 00025 namespace ACE 00026 { 00027 namespace HTTP 00028 { 00029 /** 00030 * @class ACE_HTTP_URL 00031 * 00032 * @brief Implements HTTP url support. 00033 * 00034 */ 00035 class ACE_INET_Export URL 00036 : public ACE::INet::URL_INetAuthBase 00037 { 00038 public: 00039 URL (); 00040 URL (const ACE_CString& url_string); 00041 URL (const URL& url); 00042 virtual ~URL (); 00043 00044 URL& operator =(const URL& url); 00045 00046 virtual const ACE_CString& get_scheme () const; 00047 00048 virtual const ACE_CString& get_query () const; 00049 00050 virtual const ACE_CString& get_fragment () const; 00051 00052 virtual ACE_CString get_request_uri () const; 00053 00054 virtual void set_query (const ACE_CString& query); 00055 00056 virtual void set_fragment (const ACE_CString& fargment); 00057 00058 void set_proxy (const ACE_CString& proxy_host, u_short proxy_port = HTTP_PROXY_PORT); 00059 00060 const ACE_CString& get_proxy_host () const; 00061 00062 u_short get_proxy_port () const; 00063 00064 bool has_proxy () const; 00065 00066 virtual ACE_CString to_string () const; 00067 00068 virtual u_short default_port () const; 00069 00070 static const char* PROTOCOL; 00071 00072 static const ACE_CString& protocol (); 00073 00074 enum 00075 { 00076 HTTP_PORT = 80, 00077 HTTP_PROXY_PORT = 8080 00078 }; 00079 00080 protected: 00081 URL (u_short port); 00082 00083 virtual ACE::INet::ClientRequestHandler* create_default_request_handler () const; 00084 00085 private: 00086 ACE_CString query_; 00087 ACE_CString fragment_; 00088 ACE_CString proxy_host_; 00089 u_short proxy_port_; 00090 00091 private: 00092 class Factory 00093 : public ACE::INet::URL_Base::Factory 00094 { 00095 public: 00096 Factory (); 00097 virtual ~Factory (); 00098 virtual const ACE_CString& protocol (); 00099 virtual ACE::INet::URL_Base* create_from_string (const ACE_CString& url_string); 00100 }; 00101 00102 typedef ACE_Singleton<Factory, 00103 ACE_Null_Mutex> TURLFactorySingleton; 00104 static const Factory& factory_; 00105 }; 00106 } 00107 } 00108 00109 ACE_END_VERSIONED_NAMESPACE_DECL 00110 00111 #if defined (__ACE_INLINE__) 00112 #include "ace/INet/HTTP_URL.inl" 00113 #endif 00114 00115 #include /**/ "ace/post.h" 00116 #endif /* ACE_HTTP_URL_H */