diff options
Diffstat (limited to 'src/url.h')
-rw-r--r-- | src/url.h | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/src/url.h b/src/url.h new file mode 100644 index 0000000..861bb9f --- /dev/null +++ b/src/url.h | |||
@@ -0,0 +1,74 @@ | |||
1 | #ifndef BU_URL_H | ||
2 | #define BU_URL_H | ||
3 | |||
4 | #include "bu/fstring.h" | ||
5 | #include "bu/atom.h" | ||
6 | |||
7 | namespace Bu | ||
8 | { | ||
9 | class Url | ||
10 | { | ||
11 | public: | ||
12 | typedef struct Param | ||
13 | { | ||
14 | Param() { } | ||
15 | Param( const Param &r ) : sName( r.sName ), sValue( r.sValue ) { } | ||
16 | Param( const Bu::FString &n, const Bu::FString &v ) : | ||
17 | sName( n ), sValue( v ) { } | ||
18 | Bu::FString sName; | ||
19 | Bu::FString sValue; | ||
20 | } Param; | ||
21 | typedef Bu::List<Param> ParamList; | ||
22 | |||
23 | public: | ||
24 | Url(); | ||
25 | Url( const Bu::FString &sUrl ); | ||
26 | virtual ~Url(); | ||
27 | |||
28 | void parseUrl( const Bu::FString &sUrl ); | ||
29 | void parseParams( Bu::FString::const_iterator &i ); | ||
30 | void clear(); | ||
31 | |||
32 | Bu::FString getUrl(); | ||
33 | |||
34 | const Bu::FString &getProtocol() { return sProtocol; } | ||
35 | const Bu::FString &getUser() { return sUser; } | ||
36 | const Bu::FString &getPass() { return sPass; } | ||
37 | const Bu::FString &getHost() { return sHost; } | ||
38 | const Bu::FString &getPath() { return sPath; } | ||
39 | int getPort() { return iPort; } | ||
40 | ParamList::const_iterator getParamBegin() { return lParam.begin(); } | ||
41 | |||
42 | void setProtocol( const Bu::FString &sNewHost, bool bAutoSetPort=true ); | ||
43 | void setUser( const Bu::FString &s ) { sUser = s; } | ||
44 | void setPass( const Bu::FString &s ) { sPass = s; } | ||
45 | void setHost( const Bu::FString &s ) { sHost = s; } | ||
46 | void setPath( const Bu::FString &s ) { sPath = s; } | ||
47 | void setPort( int i ) { iPort = i; } | ||
48 | void addParam( const Bu::FString &n, const Bu::FString &v ); | ||
49 | |||
50 | bool hasPort() { return iPort.has(); } | ||
51 | |||
52 | static Bu::FString decode( const Bu::FString &sStr ); | ||
53 | static Bu::FString encode( const Bu::FString &sStr ); | ||
54 | |||
55 | private: // Parsing code | ||
56 | void parseProtocol( Bu::FString::const_iterator &i ); | ||
57 | void parseUserPass( Bu::FString::const_iterator &i ); | ||
58 | void parseHost( Bu::FString::const_iterator &i ); | ||
59 | void parsePath( Bu::FString::const_iterator &i ); | ||
60 | |||
61 | private: | ||
62 | Bu::FString sProtocol; | ||
63 | Bu::FString sUser; | ||
64 | Bu::FString sPass; | ||
65 | Bu::FString sHost; | ||
66 | Bu::FString sPath; | ||
67 | Bu::Atom<int> iPort; | ||
68 | ParamList lParam; | ||
69 | |||
70 | static char hexcode[16]; | ||
71 | }; | ||
72 | }; | ||
73 | |||
74 | #endif | ||