Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef ACE_INET_URL_BASE_H
00010 #define ACE_INET_URL_BASE_H
00011
00012 #include "ace/pre.h"
00013
00014 #include "ace/SString.h"
00015 #include "ace/Map_Manager.h"
00016 #include "ace/Singleton.h"
00017 #include "ace/Null_Mutex.h"
00018 #include "ace/Recursive_Thread_Mutex.h"
00019 #include "ace/Refcounted_Auto_Ptr.h"
00020 #include "ace/INet/INet_Export.h"
00021 #include "ace/INet/AuthenticationBase.h"
00022 #include "ace/INet/ClientRequestHandler.h"
00023 #include <iosfwd>
00024
00025 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00026
00027 namespace ACE
00028 {
00029 namespace INet
00030 {
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 class ACE_INET_Export URLStream
00042 {
00043 public:
00044 URLStream (const URLStream& url_stream);
00045 ~URLStream ();
00046
00047 bool operator ! ();
00048
00049 operator bool ();
00050
00051 std::istream& operator * ();
00052
00053 std::istream* operator -> ();
00054
00055 private:
00056 friend class URL_Base;
00057
00058 URLStream (ClientRequestHandler& rh);
00059 URLStream (ClientRequestHandler* rh);
00060
00061 typedef ACE_Refcounted_Auto_Ptr<ClientRequestHandler,
00062 ACE_Null_Mutex> TRequestHandlerRef;
00063
00064 TRequestHandlerRef request_handler_ref_;
00065 ClientRequestHandler* request_handler_;
00066 };
00067
00068
00069
00070
00071
00072
00073
00074 class ACE_INET_Export URL_Base
00075 {
00076 public:
00077 URL_Base ();
00078 virtual ~URL_Base ();
00079
00080 virtual bool parse (const ACE_CString& url_string);
00081
00082 void set_path (const ACE_CString& path);
00083
00084 virtual void set_query (const ACE_CString& query);
00085
00086 virtual void set_fragment (const ACE_CString& fragment);
00087
00088 virtual const ACE_CString& get_scheme () const = 0;
00089
00090 const ACE_CString& get_protocol () const;
00091
00092 virtual ACE_CString get_authority () const;
00093
00094 const ACE_CString& get_path () const;
00095
00096 virtual const ACE_CString& get_query () const;
00097
00098 virtual const ACE_CString& get_fragment () const;
00099
00100 virtual URLStream open () const;
00101
00102 virtual URLStream open (ClientRequestHandler& rh) const;
00103
00104 virtual ACE_CString to_string () const = 0;
00105
00106 static URL_Base* create_from_string (const ACE_CString& url_string);
00107
00108 #if defined (ACE_HAS_WCHAR)
00109 virtual bool parse (const ACE_WString& url_string);
00110
00111 virtual ACE_WString to_wstring () const;
00112
00113 static URL_Base* create_from_wstring (const ACE_WString& url_string);
00114 #endif
00115
00116 virtual bool validate ();
00117
00118 protected:
00119 static const ACE_CString empty_;
00120
00121 bool strip_scheme (ACE_CString& url_string);
00122
00123 virtual int parse_authority (std::istream& is);
00124
00125 virtual bool has_authority ();
00126
00127 virtual ClientRequestHandler* create_default_request_handler () const = 0;
00128
00129 private:
00130 ACE_CString path_;
00131
00132 public:
00133 class Factory
00134 {
00135 public:
00136 Factory ();
00137 virtual ~Factory ();
00138 virtual const ACE_CString& protocol () = 0;
00139 virtual URL_Base* create_from_string (const ACE_CString& url_string) = 0;
00140 };
00141
00142 static void register_factory (Factory* url_factory);
00143 static void deregister_factory (Factory* url_factory);
00144
00145 private:
00146 typedef ACE_Map_Manager<ACE_CString,
00147 Factory*,
00148 ACE_SYNCH::MUTEX> TURLFactoryMap;
00149 typedef ACE_Singleton<TURLFactoryMap,
00150 ACE_SYNCH::NULL_MUTEX> TURLFactorySingleton;
00151 static TURLFactoryMap* factories_;
00152 };
00153
00154
00155
00156
00157
00158
00159
00160
00161 class ACE_INET_Export URL_INetBase
00162 : public URL_Base
00163 {
00164 public:
00165 URL_INetBase(u_short port);
00166 virtual ~URL_INetBase ();
00167
00168 void set_host (const ACE_CString& host);
00169
00170 void set_port (u_short port);
00171
00172 const ACE_CString& get_host () const;
00173
00174 u_short get_port () const;
00175
00176 virtual u_short default_port () const = 0;
00177
00178 virtual ACE_CString get_authority () const;
00179
00180 virtual bool validate ();
00181
00182 protected:
00183 virtual int parse_authority (std::istream& is);
00184
00185 virtual bool has_authority ();
00186
00187 int parse_authority_i (std::istream& is,
00188 std::ostream& os,
00189 int lastch);
00190
00191 private:
00192 ACE_CString host_;
00193 u_short port_;
00194 };
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207 class ACE_INET_Export URL_INetAuthBase
00208 : public URL_INetBase
00209 {
00210 public:
00211 URL_INetAuthBase(u_short port);
00212 virtual ~URL_INetAuthBase ();
00213
00214 const ACE_CString& get_user_info () const;
00215
00216 void set_user_info (const ACE_CString& userinfo);
00217
00218 virtual ACE_CString get_authority () const;
00219
00220 protected:
00221 virtual int parse_authority (std::istream& is);
00222
00223 private:
00224 ACE_CString userinfo_;
00225
00226 public:
00227 static bool add_authenticator (const ACE_CString& auth_id, AuthenticatorBase* authenticator);
00228
00229 static bool has_authenticator (const ACE_CString& auth_id);
00230
00231 static AuthenticatorBase* remove_authenticator (const ACE_CString& auth_id);
00232
00233 static bool authenticate (AuthenticationBase& authentication);
00234
00235 private:
00236 typedef ACE_Refcounted_Auto_Ptr<AuthenticatorBase,
00237 ACE_SYNCH::NULL_MUTEX> authenticator_ptr;
00238 typedef ACE_Map_Manager<ACE_CString,
00239 authenticator_ptr,
00240 ACE_SYNCH::RECURSIVE_MUTEX> authenticator_map;
00241
00242 static authenticator_map authenticators_;
00243 };
00244
00245 }
00246 }
00247
00248 ACE_END_VERSIONED_NAMESPACE_DECL
00249
00250 #if defined (__ACE_INLINE__)
00251 #include "ace/INet/URLBase.inl"
00252 #endif
00253
00254 #include "ace/post.h"
00255 #endif