1 /////////////////////////////////////////////////////////////////////////////
2 // Name:        url.h
3 // Purpose:     URL parser
4 // Author:      Guilhem Lavaux
5 // Modified by: Ryan Norton
6 // Created:     20/07/1997
7 // RCS-ID:      $Id: url.h 41263 2006-09-17 10:59:18Z RR $
8 // Copyright:   (c) 1997, 1998 Guilhem Lavaux
9 // Licence:     wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11 
12 #ifndef _WX_URL_H
13 #define _WX_URL_H
14 
15 #include "wx/defs.h"
16 
17 #if wxUSE_URL
18 
19 #include "wx/uri.h"
20 #include "wx/protocol/protocol.h"
21 
22 #if wxUSE_PROTOCOL_HTTP
23   #include "wx/protocol/http.h"
24 #endif
25 
26 typedef enum {
27   wxURL_NOERR = 0,
28   wxURL_SNTXERR,
29   wxURL_NOPROTO,
30   wxURL_NOHOST,
31   wxURL_NOPATH,
32   wxURL_CONNERR,
33   wxURL_PROTOERR
34 } wxURLError;
35 
36 #if wxUSE_URL_NATIVE
37 class WXDLLIMPEXP_NET wxURL;
38 
39 class WXDLLIMPEXP_NET wxURLNativeImp : public wxObject
40 {
41 public:
~wxURLNativeImp()42     virtual ~wxURLNativeImp() { }
43     virtual wxInputStream *GetInputStream(wxURL *owner) = 0;
44 };
45 #endif // wxUSE_URL_NATIVE
46 
47 class WXDLLIMPEXP_NET wxURL : public wxURI
48 {
49 public:
50     wxURL(const wxString& sUrl = wxEmptyString);
51     wxURL(const wxURI& url);
52     virtual ~wxURL();
53 
54     wxURL& operator = (const wxString& url);
55     wxURL& operator = (const wxURI& url);
56 
GetProtocol()57     wxProtocol& GetProtocol()        { return *m_protocol; }
GetError()58     wxURLError GetError() const      { return m_error; }
GetURL()59     wxString GetURL() const          { return m_url; }
60 
SetURL(const wxString & url)61     wxURLError SetURL(const wxString &url)
62         { *this = url; return m_error; }
63 
IsOk()64     bool IsOk() const
65         { return m_error == wxURL_NOERR; }
66 
67     wxInputStream *GetInputStream();
68 
69 #if wxUSE_PROTOCOL_HTTP
70     static void SetDefaultProxy(const wxString& url_proxy);
71     void SetProxy(const wxString& url_proxy);
72 #endif // wxUSE_PROTOCOL_HTTP
73 
74 #if WXWIN_COMPATIBILITY_2_4
75     //Use the proper wxURI accessors instead
76     wxDEPRECATED( wxString GetProtocolName() const );
77     wxDEPRECATED( wxString GetHostName() const );
78     wxDEPRECATED( wxString GetPath() const );
79 
80     //Use wxURI instead - this does not work that well
81     wxDEPRECATED( static wxString ConvertToValidURI(
82                         const wxString& uri,
83                         const wxChar* delims = wxT(";/?:@&=+$,")
84                   ) );
85 
86     //Use wxURI::Unescape instead
87     wxDEPRECATED( static wxString ConvertFromURI(const wxString& uri) );
88 #endif
89 
90 protected:
91     static wxProtoInfo *ms_protocols;
92 
93 #if wxUSE_PROTOCOL_HTTP
94     static wxHTTP *ms_proxyDefault;
95     static bool ms_useDefaultProxy;
96     wxHTTP *m_proxy;
97 #endif // wxUSE_PROTOCOL_HTTP
98 
99 #if wxUSE_URL_NATIVE
100     friend class wxURLNativeImp;
101     // pointer to a native URL implementation object
102     wxURLNativeImp *m_nativeImp;
103     // Creates on the heap and returns a native
104     // implementation object for the current platform.
105     static wxURLNativeImp *CreateNativeImpObject();
106 #endif
107     wxProtoInfo *m_protoinfo;
108     wxProtocol *m_protocol;
109 
110     wxURLError m_error;
111     wxString m_url;
112     bool m_useProxy;
113 
114     void Init(const wxString&);
115     bool ParseURL();
116     void CleanData();
117     bool FetchProtocol();
118 
119     friend class wxProtoInfo;
120     friend class wxURLModule;
121 
122 private:
123     DECLARE_DYNAMIC_CLASS(wxURL)
124 };
125 
126 #endif // wxUSE_URL
127 
128 #endif // _WX_URL_H
129 
130