ROOT  6.06/09
Reference Guide
TUri.h
Go to the documentation of this file.
1 // @(#)root/base:$Id$
2 // Author: Gerhard E. Bruckner 15/07/07
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2007, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 #ifndef ROOT_TUri
13 #define ROOT_TUri
14 
15 
16 //////////////////////////////////////////////////////////////////////////
17 // //
18 // TUri //
19 // //
20 // This class represents a RFC3986 compatible URI. //
21 // See http://rfc.net/rfc3986.html. //
22 // It provides member functions to return the different parts of //
23 // an URI. //
24 // //
25 //////////////////////////////////////////////////////////////////////////
26 
27 #ifndef ROOT_TObject
28 #include "TObject.h"
29 #endif
30 #ifndef ROOT_TString
31 #include "TString.h"
32 #endif
33 
34 
35 class TUri;
36 Bool_t operator==(const TUri &u1, const TUri &u2);
37 
38 
39 class TUri : public TObject {
40 
41 friend Bool_t operator==(const TUri &u1, const TUri &u2); // comparison operator
42 
43 private:
44 
45  // In order to represent the five basic components of an URI,
46  // we use 7 member variables (authority gets split in 3 parts)
47  //
48  // foo://user:pass@example.com:8042/over/there?name=ferret#nose
49  // \_/ \________________________/\_________/ \_________/ \__/
50  // | | | | |
51  // scheme authority path query fragment
52  //
53  // In many cases we have to distinguish between empty
54  // TString and undefined value (i.e. delimiter not found).
55  // Therefore, we use a TString to hold the string value
56  // and a corresponding Bool_t to store if it is defined or not.
57  // The Bool_t has precedence.
58 
60  TString fUserinfo; // authority/userinfo: user@password, ...
61  TString fHost; // authority/host: hostname or ip-address
62  TString fPort; // authority/port: port number, normally 1-65535
66 
74 
75 public:
76  TUri(const TUri &uri);
77  TUri() { Reset(); }
78  TUri(const TString &uri);
79  TUri(const char *uri);
80  TUri &operator=(const TUri &rhs); //copy ctor
81  virtual ~TUri() { }
82 
83  const TString GetUri() const;
84  const TString GetScheme() const { return fScheme; }
85  const TString GetHierPart() const;
86  const TString GetRelativePart() const;
87  const TString GetAuthority() const;
88  const TString GetUserInfo() const { return fUserinfo; }
89  const TString GetHost() const { return fHost; }
90  const TString GetPort() const { return fPort; }
91  const TString GetPath() const { return fPath; }
92  const TString GetQuery() const { return fQuery; }
93  const TString GetFragment() const { return fFragment; }
94 
95  Bool_t HasScheme() const { return fHasScheme; }
96  Bool_t HasHierPart() const { return IsHierPart(GetHierPart()); }
97  Bool_t HasAuthority() const { return fHasHost; }
98  Bool_t HasUserInfo() const { return fHasUserinfo; }
99  Bool_t HasHost() const { return fHasHost; }
100  Bool_t HasPort() const { return fHasPort; }
101  Bool_t HasPath() const { return fHasPath; }
102  Bool_t HasQuery() const { return fHasQuery; }
103  Bool_t HasFragment() const { return fHasFragment; }
105 
106  Bool_t SetUri(const TString &uri);
107  Bool_t SetScheme(const TString &scheme);
108  Bool_t SetHierPart(const TString &hier);
109  Bool_t SetAuthority(const TString &authority);
110  Bool_t SetUserInfo(const TString &userinfo);
111  Bool_t SetHost(const TString &host);
112  Bool_t SetPort(const TString &port);
113  Bool_t SetPath(const TString &path);
114  Bool_t SetQuery(const TString &path);
115  Bool_t SetFragment(const TString &fragment);
116 
118 
119  void Print(Option_t *option = "") const;
120  Bool_t IsSortable() const { return kTRUE; }
121 
122  void Normalise();
123  void Reset();
124 
125  Bool_t IsAbsolute() const;
126  Bool_t IsRelative() const;
127  Bool_t IsUri() const;
128  Bool_t IsReference() const;
129 
130  static Bool_t IsUnreserved(const TString &string);
131 
132  static const TString PctEncode(const TString &source);
133  static const TString PctDecode(const TString &source);
134  static const TString PctDecodeUnreserved(const TString &source);
135  static const TString PctNormalise(const TString &source);
136 
137  static Bool_t IsScheme(const TString&);
138  static Bool_t IsHierPart(const TString&);
139  static Bool_t IsAuthority(const TString&);
140  static Bool_t IsUserInfo(const TString&);
141  static Bool_t IsHost(const TString&);
142  static Bool_t IsIpv4(const TString&);
143  static Bool_t IsRegName(const TString&);
144  static Bool_t IsPort(const TString&);
145  static Bool_t IsPath(const TString&);
146  static Bool_t IsPathAbsolute(const TString&);
147  static Bool_t IsPathAbempty(const TString&);
148  static Bool_t IsPathNoscheme(const TString&);
149  static Bool_t IsPathRootless(const TString&);
150  static Bool_t IsPathEmpty(const TString&);
151  static Bool_t IsQuery(const TString&);
152  static Bool_t IsFragment(const TString&);
153 
154  static Bool_t IsRelativePart(const TString&);
155 
156  static const TString RemoveDotSegments(const TString&);
157 
158  static TUri Transform(const TUri &reference, const TUri &base);
159  static const TString MergePaths(const TUri &reference, const TUri &base);
160 
161  ClassDef(TUri, 1) //Represents an URI
162 };
163 
164 #endif
virtual ~TUri()
Definition: TUri.h:81
Bool_t fHasUserinfo
Definition: TUri.h:68
static Bool_t IsIpv4(const TString &)
Returns kTRUE, if string holds a valid IPv4 address currently only decimal variant supported...
Definition: TUri.cxx:961
static Bool_t IsAuthority(const TString &)
Returns kTRUE if string qualifies as valid URI authority: authority = [ userinfo "@" ] host [ ":" p...
Definition: TUri.cxx:382
const TString GetScheme() const
Definition: TUri.h:84
const TString GetUserInfo() const
Definition: TUri.h:88
const TString GetFragment() const
Definition: TUri.h:93
Bool_t SetPath(const TString &path)
Set path component of URI: path = path-abempty ; begins with "/" or is empty ...
Definition: TUri.cxx:480
static Bool_t IsRegName(const TString &)
Returns kTRUE if string qualifies as valid reg-name: reg-name = *( unreserved / pct-encoded / sub-...
Definition: TUri.cxx:949
const TString GetHierPart() const
hier-part = "//" authority path-abempty / path-absolute / path-rootless ...
Definition: TUri.cxx:659
const char Option_t
Definition: RtypesCore.h:62
void Normalise()
Syntax based normalisation according to RFC chapter 6.2.2.
Definition: TUri.cxx:984
const TString GetHost() const
Definition: TUri.h:89
Bool_t SetHierPart(const TString &hier)
returns hier-part component of URI hier-part = "//" authority path-abempty / path-absol...
Definition: TUri.cxx:692
Bool_t fHasQuery
Definition: TUri.h:72
TString fUserinfo
Definition: TUri.h:60
Bool_t fHasScheme
Definition: TUri.h:67
static Bool_t IsUserInfo(const TString &)
Return kTRUE is string qualifies as valid URI userinfo: userinfo = *( unreserved / pct-encoded / s...
Definition: TUri.cxx:427
Bool_t SetUserInfo(const TString &userinfo)
Set userinfo component of URI: userinfo = *( unreserved / pct-encoded / sub-delims / ":" )...
Definition: TUri.cxx:404
const TString GetAuthority() const
Returns the authority part of the instance: authority = [ userinfo "@" ] host [ ":" port ]...
Definition: TUri.cxx:282
Basic string class.
Definition: TString.h:137
Bool_t HasAuthority() const
Definition: TUri.h:97
Bool_t SetPort(const TString &port)
Set port component of URI: port = *DIGIT.
Definition: TUri.cxx:459
bool Bool_t
Definition: RtypesCore.h:59
This class represents a RFC 3986 compatible URI.
Definition: TUri.h:39
Bool_t IsReference() const
Returns kTRUE if instance qualifies as URI-reference URI-reference = URI / relative-ref cf...
Definition: TUri.cxx:236
void Print(Option_t *option="") const
Display function,.
Definition: TUri.cxx:527
TString fPath
Definition: TUri.h:63
Bool_t fHasPort
Definition: TUri.h:70
static const TString PctDecode(const TString &source)
Percent-decode the given string according to chapter 2.1 we assume a valid pct-encoded string...
Definition: TUri.cxx:1085
Bool_t SetQuery(const TString &path)
Set query component of URI: query = *( pchar / "/" / "?" ).
Definition: TUri.cxx:297
TUri & operator=(const TUri &rhs)
TUri assignment operator.
Definition: TUri.cxx:88
Bool_t IsUri() const
Returns kTRUE if instance qualifies as URI URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ] ...
Definition: TUri.cxx:226
static const TString PctDecodeUnreserved(const TString &source)
Percent-decode the given string according to chapter 2.1 we assume a valid pct-encoded string...
Definition: TUri.cxx:1011
Bool_t SetUri(const TString &uri)
Parse URI and set the member variables accordingly, returns kTRUE if URI validates, and kFALSE otherwise: URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ] hier-part = "//" authority path-abempty / path-absolute / path-rootless / path-empty.
Definition: TUri.cxx:600
Bool_t HasPath() const
Definition: TUri.h:101
const TString GetPort() const
Definition: TUri.h:90
#define ClassDef(name, id)
Definition: Rtypes.h:254
Bool_t HasHierPart() const
Definition: TUri.h:96
TString fQuery
Definition: TUri.h:64
Bool_t IsAbsolute() const
Returns kTRUE if instance qualifies as absolute-URI absolute-URI = scheme ":" hier-part [ "...
Definition: TUri.cxx:206
static const TString PctEncode(const TString &source)
Percent-encode and return the given string according to RFC 3986 in principle, this function cannot f...
Definition: TUri.cxx:814
Bool_t HasHost() const
Definition: TUri.h:99
Bool_t SetAuthority(const TString &authority)
Set authority part of URI: authority = [ userinfo "@" ] host [ ":" port ].
Definition: TUri.cxx:337
Bool_t IsRelative() const
Returns kTRUE if instance qualifies as relative-ref relative-ref = relative-part [ "...
Definition: TUri.cxx:216
static Bool_t IsPathNoscheme(const TString &)
Returns kTRUE if string qualifies as valid path-noscheme component: path-noscheme = segment-nz-nc *( ...
Definition: TUri.cxx:899
void Reset()
Initialize this URI object.
Definition: TUri.cxx:570
const TString GetPath() const
Definition: TUri.h:91
Bool_t fHasFragment
Definition: TUri.h:73
Bool_t SetScheme(const TString &scheme)
Set scheme component of URI: scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." ).
Definition: TUri.cxx:247
const TString GetUri() const
Returns the whole URI - an implementation of chapter 5.3 component recomposition. ...
Definition: TUri.cxx:139
TString fScheme
Definition: TUri.h:59
static Bool_t IsPathEmpty(const TString &)
Returns kTRUE if string qualifies as valid path-empty component: path-empty = 0.
Definition: TUri.cxx:925
Bool_t fHasPath
Definition: TUri.h:71
Bool_t HasPort() const
Definition: TUri.h:100
TUri()
Definition: TUri.h:77
Bool_t HasFragment() const
Definition: TUri.h:103
TString fHost
Definition: TUri.h:61
const TString GetQuery() const
Definition: TUri.h:92
Bool_t SetFragment(const TString &fragment)
Set fragment component of URI: fragment = *( pchar / "/" / "?" ).
Definition: TUri.cxx:497
static TUri Transform(const TUri &reference, const TUri &base)
Transform a URI reference into its target URI using given a base URI.
Definition: TUri.cxx:1121
const TString GetRelativePart() const
relative-part = "//" authority path-abempty / path-absolute / path-noscheme / path-empty ...
Definition: TUri.cxx:675
static Bool_t IsQuery(const TString &)
Returns kTRUE if string qualifies as URI query: query = *( pchar / "/" / "?" )...
Definition: TUri.cxx:319
static Bool_t IsRelativePart(const TString &)
Returns kTRUE is string qualifies as relative-part: relative-part = "//" authority path-abempty ...
Definition: TUri.cxx:759
Bool_t fHasHost
Definition: TUri.h:69
static Bool_t IsPort(const TString &)
Returns kTRUE if string qualifies as valid port component: RFC 3986: port = *DIGIT...
Definition: TUri.cxx:936
Bool_t HasUserInfo() const
Definition: TUri.h:98
Bool_t HasQuery() const
Definition: TUri.h:102
Mother of all ROOT objects.
Definition: TObject.h:58
friend Bool_t operator==(const TUri &u1, const TUri &u2)
Implementation of a TUri Equivalence operator that uses syntax-based normalisation see chapter 6...
Definition: TUri.cxx:115
Bool_t SetHost(const TString &host)
Set host component of URI: RFC 3986: host = IP-literal / IPv4address / reg-name implemented: host ...
Definition: TUri.cxx:441
Bool_t HasScheme() const
Definition: TUri.h:95
TString fFragment
Definition: TUri.h:65
static Bool_t IsPath(const TString &)
Returns kTRUE if string qualifies as valid path component: path = path-abempty ; begins w...
Definition: TUri.cxx:853
TString fPort
Definition: TUri.h:62
static Bool_t IsHost(const TString &)
Returns kTRUE if string qualifies as valid host component: host = IP-literal / IPv4address / reg-name...
Definition: TUri.cxx:838
Bool_t IsSortable() const
Definition: TUri.h:120
static const TString MergePaths(const TUri &reference, const TUri &base)
RFC 3986, 5.3.2.
Definition: TUri.cxx:1179
static Bool_t IsPathAbempty(const TString &)
Returns kTRUE if string qualifies as valid path-abempty component: path-abempty = *( "/" segment ) s...
Definition: TUri.cxx:869
static Bool_t IsPathAbsolute(const TString &)
Returns kTRUE if string qualifies as valid path-absolute component path-absolute = "/" [ segment-nz *...
Definition: TUri.cxx:884
static Bool_t IsUnreserved(const TString &string)
Returns kTRUE, if the given string does not contain RFC 3986 reserved characters unreserved = ALPHA ...
Definition: TUri.cxx:974
Bool_t HasRelativePart() const
Definition: TUri.h:104
Bool_t SetRelativePart(const TString &)
Returns kTRUE is string qualifies as relative-part: relative-part = "//" authority path-abempty ...
Definition: TUri.cxx:776
static const TString PctNormalise(const TString &source)
Normalise the percent-encoded parts of the string i.e.
Definition: TUri.cxx:1056
const Bool_t kTRUE
Definition: Rtypes.h:91
static Bool_t IsPathRootless(const TString &)
Returns kTRUE if string qualifies as valid path-rootless component: path-rootless = segment-nz *( "/"...
Definition: TUri.cxx:912
Bool_t operator==(const TUri &u1, const TUri &u2)
Implementation of a TUri Equivalence operator that uses syntax-based normalisation see chapter 6...
Definition: TUri.cxx:115
static Bool_t IsFragment(const TString &)
Returns kTRUE if string qualifies as valid fragment component fragment = *( pchar / "/" / "...
Definition: TUri.cxx:515
static const TString RemoveDotSegments(const TString &)
This functions implements the "remove_dot_segments" routine of chapter 5.2.4 "for interpreting and re...
Definition: TUri.cxx:158
static Bool_t IsHierPart(const TString &)
Returns kTRUE if string qualifies as hier-part: hier-part = "//" authority path-abempty ...
Definition: TUri.cxx:742
static Bool_t IsScheme(const TString &)
Returns kTRUE if string qualifies as URI scheme: scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "...
Definition: TUri.cxx:269