2 // Open Service Platform
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://www.apache.org/licenses/LICENSE-2.0
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
19 * @file FBaseUtilUri.h
20 * @brief This is the header file for the %Uri class.
22 * This header file contains the declarations of the %Uri class.
24 #ifndef _FBASE_UTIL_URI_H_
25 #define _FBASE_UTIL_URI_H_
27 #include <FBaseObject.h>
28 #include <FBaseString.h>
29 #include <FBaseBuffer.h>
32 namespace Tizen { namespace Base { namespace Utility
37 * @brief This class provides useful methods for URI.
41 * The %Uri class represents a Uniform Resource Identifier (URI) as defined by RFC2396 and provides accessors
42 * which access the URI component.
43 * It also provides methods for creating, accessing, normalizing, resolving, and relativizing %Uri instances.
45 * For more information on the class features, see <a href="../org.tizen.native.appprogramming/html/guide/base/uri.htm">URI</a>.
47 * The following example demonstrates how to use the %Uri class.
53 * using namespace Tizen::Base;
54 * using namespace Tizen::Base::Utility;
57 * MyClass::UriSample(void)
59 * String base(L"http://www.samsung.com");
60 * String against(L"/osp/framework/index.html");
61 * String resolveString(L"http://www.samsung.com/osp/framework/index.html");
64 * baseUri.SetUri(base);
67 * againstUri.SetUri(against);
70 * baseUri.Resolve(againstUri, resultUri);
72 * String resultString = resultUri.ToString();
73 * if (resultString.Equals(resolveString))
81 class _OSP_EXPORT_ Uri
82 : public Tizen::Base::Object
86 * This is the default constructor for this class.
93 * Copying of objects using this copy constructor is allowed.
97 * @param[in] uri An instance of %Uri to copy
102 * This destructor overrides Tizen::Base::Object::~Object().
109 * Sets the current %Uri instance to the value of the specified instance of %Uri.
113 * @param[in] uri An instance of %Uri
115 void SetUri(const Uri& uri);
118 * Sets the current %Uri instance by parsing a given string.
122 * @return An error code
123 * @param[in] str A string to parse into a URI
124 * @exception E_SUCCESS The method is successful.
125 * @exception E_INVALID_ARG The specified @c str is an empty string.
126 * @exception E_INVALID_FORMAT The specified @c str violates the URI syntax (RFC 2396).
128 result SetUri(const Tizen::Base::String& str);
131 * Sets an absolute %Uri instance with given components.
135 * @return An error code
136 * @param[in] scheme The scheme
137 * @param[in] ssp The scheme-specific-part
138 * @param[in] fragment The fragment
139 * @exception E_SUCCESS The method is successful.
140 * @exception E_INVALID_FORMAT A component violates the URI syntax(RFC 2396).
142 result SetUri(const Tizen::Base::String& scheme, const Tizen::Base::String& ssp, const Tizen::Base::String& fragment);
145 * Sets an absolute and hierarchical %Uri instance with the given components.
149 * @return An error code
150 * @param[in] scheme The scheme
151 * @param[in] userInfo The user name and authorization
152 * @param[in] host The host name
153 * @param[in] port The port number
154 * @param[in] path The path
155 * @param[in] query The query
156 * @param[in] fragment The fragment
157 * @exception E_SUCCESS The method is successful.
158 * @exception E_INVALID_FORMAT A component violates the URI syntax(RFC 2396).
160 result SetUri(const Tizen::Base::String& scheme, const Tizen::Base::String& userInfo, const Tizen::Base::String& host, int port, const Tizen::Base::String& path, const Tizen::Base::String& query, const Tizen::Base::String& fragment);
163 * Sets an absolute and hierarchical %Uri instance with the given components.
167 * @return An error code
168 * @param[in] scheme The scheme
169 * @param[in] host The host name
170 * @param[in] path The path
171 * @param[in] fragment The fragment
172 * @exception E_SUCCESS The method is successful.
173 * @exception E_INVALID_FORMAT A component violates the URI syntax(RFC 2396).
174 * @remarks The authority and query component are left empty, and the port is set to @c -1.
176 result SetUri(const Tizen::Base::String& scheme, const Tizen::Base::String& host, const Tizen::Base::String& path, const Tizen::Base::String& fragment);
179 * Sets an absolute and hierarchical %Uri instance with the given components.
183 * @return An error code
184 * @param[in] scheme The scheme
185 * @param[in] authority The authority
186 * @param[in] path The path
187 * @param[in] query The query
188 * @param[in] fragment The fragment
189 * @exception E_SUCCESS The method is successful.
190 * @exception E_INVALID_FORMAT A component violates the URI syntax(RFC 2396).
192 result SetUri(const Tizen::Base::String& scheme, const Tizen::Base::String& authority, const Tizen::Base::String& path, const Tizen::Base::String& query, const Tizen::Base::String& fragment);
195 * Copying of objects using this copy assignment operator is allowed.
199 * @return A reference to the calling instance
200 * @param[in] rhs An instance of %Uri
202 Uri& operator =(const Uri& rhs);
205 * Gets the value of the authority component.
209 * @return The value of the authority component, @n
210 * else an empty string if the authority component is undefined
211 * @remarks The string returned by this method is equal to the string returned by GetEncodedAuthority(),
212 * except that all sequences of the escaped octets are decoded.
214 Tizen::Base::String GetAuthority(void) const;
217 * Gets the value of the fragment component.
221 * @return The value of the fragment component, @n
222 * else an empty string if the fragment component is undefined
223 * @remarks The string returned by this method is equal to the string returned by GetEncodedFragment(),
224 * except that all sequences of the escaped octets are decoded.
226 Tizen::Base::String GetFragment(void) const;
229 * Gets the value of the host component.
233 * @return The value of the host component, @n
234 * else an empty string if the host component is undefined
236 Tizen::Base::String GetHost(void) const;
239 * Gets the value of the path component.
243 * @return The value of the path component, @n
244 * else an empty string if the path component is undefined
245 * @remarks The string returned by this method is equal to the string returned by GetEncodedPath(),
246 * except that all sequences of the escaped octets are decoded.
248 Tizen::Base::String GetPath(void) const;
252 * Gets the value of the port component.
256 * @return The value of the port component, @n
257 * else @c -1 if the port component is undefined
259 int GetPort(void) const;
263 * Gets the value of the query component.
267 * @return The value of the query component, @n
268 * else an empty string if the query component is undefined
269 * @remarks The string returned by this method is equal to the string returned by GetEncodedQuery(),
270 * except that all sequences of the escaped octets are decoded.
272 Tizen::Base::String GetQuery(void) const;
276 * Gets the value of the scheme component.
280 * @return The value of the query scheme, @n
281 * else an empty string if the query scheme is undefined
283 Tizen::Base::String GetScheme(void) const;
287 * Gets the value of the scheme-specific-part component.
291 * @return The value of the scheme-specific-part component, @n
292 * else an empty string if the scheme-specific-part component is undefined
293 * @remarks The string returned by this method is equal to the string returned by GetEncodedSchemeSpecificPart(),
294 * except that all sequences of the escaped octets are decoded.
296 Tizen::Base::String GetSchemeSpecificPart(void) const;
300 * Gets the value of the user-info component.
304 * @return The value of the user-info component, @n
305 * else an empty string if the user-info component is undefined
306 * @remarks The string returned by this method is equal to the string returned by GetEncodedUserInfo(),
307 * except that all sequences of the escaped octets are decoded.
309 Tizen::Base::String GetUserInfo(void) const;
313 * Gets the encoded value of the authority component. @n
314 * The non-US-ASCII characters in the authority component are encoded to escaped octets.
318 * @return The encoded value of the authority component, @n
319 * else an empty string if the authority component is undefined
321 Tizen::Base::String GetEncodedAuthority(void) const;
325 * Gets the encoded value of the fragment component. @n
326 * The non-US-ASCII characters in the fragment component are encoded to escaped octets.
330 * @return The encoded value of the fragment component, @n
331 * else an empty string if the fragment component is undefined
333 Tizen::Base::String GetEncodedFragment(void) const;
337 * Gets the encoded value of the path component. @n
338 * The non-US-ASCII characters in the path component are encoded to escaped octets.
342 * @return The encoded value of the path component, @n
343 * else an empty string if the path component is undefined
345 Tizen::Base::String GetEncodedPath(void) const;
349 * Gets the encoded value of the query component. @n
350 * The non-US-ASCII characters in the query component are encoded to escaped octets.
354 * @return The encoded value of the query component, @n
355 * else an empty string if the query component is undefined
357 Tizen::Base::String GetEncodedQuery(void) const;
361 * Gets the encoded value of the scheme-specific-part component. @n
362 * The non-US-ASCII characters in the scheme-specific-part component are encoded to escaped octets.
366 * @return The encoded value of the scheme-specific-part component, @n
367 * else an empty string if the scheme-specific-part component is undefined
369 Tizen::Base::String GetEncodedSchemeSpecificPart(void) const;
372 * Gets the encoded value of a user-info component,
373 * or returns an empty string if the user-info component is undefined. @n
374 * The non-US-ASCII characters in the user-info component are encoded to escaped octets.
378 * @return The encoded value of user-info, @n
379 * else an empty string if the user-info component is undefined
381 Tizen::Base::String GetEncodedUserInfo(void) const;
385 * Checks whether the current %Uri instance is an absolute URI.
389 * @return @c true if the current %Uri instance is an absolute URI, @n
392 bool IsAbsolute(void) const;
396 * Checks whether the calling %Uri instance is an opaque URI.
400 * @return @c true if the current %Uri instance is an opaque URI, @n
403 bool IsOpaque(void) const;
407 * Gets the encoded US-ASCII string.
411 * @return The encoded US-ASCII string
412 * @remarks If this URI does not contain any non US_ASCII characters,
413 * then the string returned by this method is equal to the string returned by ToString().
415 * The following example demonstrates how to use the %GetEncodedString() method.
418 * String str(L"http://www.sec.com/osp?currency==\u20ac");
423 * String encode = uri.GetEncodedString(); // encode == L"http://www.sec.com/osp?currency==%E2%82%AC"
427 Tizen::Base::String GetEncodedString(void) const;
430 * Compares the calling URI instance to the specified %Uri instance. @n
431 * When comparing corresponding components of two URIs, if one component in the current instance is undefined
432 * but the other is defined, then the current instance is considered to be less than the given object.
436 * @return The result of the comparison
438 * < 0 if the current instance is less than the given object
439 * = 0 if the current instance is equal to the given object
440 * > 0 if the current instance is greater than the given object
442 * @param[in] uri An instance of %Uri
447 * Two URIs are ordered according to the ordering of schemes, without regard to case.
448 * 2. Hierarchical URI vs. Opaque URI
449 * A hierarchical URI is less than an opaque URI if they have an identical scheme.
450 * 3. Scheme-specific-part
451 * If two opaque URIs have an identical scheme, they are ordered according to
452 * the scheme-specific-part, without regard to %case.
454 * If two opaque URIs have identical schemes and scheme-specific-parts, they are ordered according
455 * to the ordering of fragments, without regard to case.
457 * If two hierarchical URIs have identical schemes, they are ordered according to the authority,
458 * without regard to the case.
459 * 5-1. Server-based authority
460 * If two URIs are server-based, they are ordered according to their user-information,
461 * without regard to case.
462 * If the hosts are identical, then the URIs are ordered according to the ordering of ports.
464 * If two hierarchical URIs have identical schemas and authority components, they are ordered according to the
465 * ordering of paths, without regard to the case.
466 * If their paths are identical, their queries are compared. And if the queries are the same, then their fragments
470 int CompareTo(const Uri& uri) const;
474 * Compares the specified instance to the current instance.
478 * @return @c true if the two instances are equal, @n
480 * @param[in] obj The object to compare with the current instance
481 * @remarks Two equal instances must return the same hash value. The default
482 * implementation of this method returns @c true if two instances
483 * have the same address. @n
484 * The method can be overridden to support value equality. Furthermore, the Equals()
485 * method must return the same results as the equality operator.
487 virtual bool Equals(const Tizen::Base::Object& obj) const;
491 * Gets the hash value of the current instance.
495 * @return The hash value of the current instance
496 * @remarks Two equal instances must return the same hash value. For better performance,
497 * the used hash function must generate a random distribution for all inputs.
499 virtual int GetHashCode(void) const;
503 * Normalizes the current URI.
507 * @return The normalized URI, @n
508 * else the current URI in case any error occurs
509 * @remarks Normalization is the process of removing unnecessary "." and ".." segments from the path component of the
510 * hierarchical URI. All "." segments are removed and If a ".." segment is preceded by a non-".." segment,
511 * both of these segments are removed. If a URI is opaque, the normalization has no effect.
513 * The following example demonstrates how to use the %Normalize() method.
517 * uri1.SetUri(L"http://www.example.com/a/b/../c/./d.html");
519 * Uri uriNormalized = uri1.Normalize();
520 * String uriStr = uriNormalized.ToString(); // uriStr == L"http://www.example.com/a/c/d.html"
528 * Parses the server-based authority component, if defined.
532 * @return An error code
533 * @param[out] uri The parsed URI
534 * @exception E_SUCCESS The method is successful.
535 * @exception E_INVALID_FORMAT The authority component is defined but cannot be parsed as a server-based authority.
536 * @remarks This method is provided because the generic URI syntax cannot always distinguish a malformed server-based authority from a legitimate registry-based authority.
537 * For example, the authority component in the URI string "//foo:bar/" is not a legal
538 * server-based authority but it is legal as a registry-based authority.
540 result ParseAuthority(Uri& uri);
544 * Relativizes the specified %Uri instance against the calling %Uri instance.
548 * @return An error code
549 * @param[in] uri The %Uri to relativize against the calling %Uri
550 * @param[out] resultUri The relativized URI
551 * @exception E_SUCCESS The method is successful.
552 * @exception E_OUT_OF_MEMORY The memory is insufficient.
553 * @remarks Relativization is the opposite of Resolution. It is used
554 * to divide a URI into the base URI and the relative URI.
556 result Relativize(const Uri& uri, Uri& resultUri);
560 * Resolves the specified %Uri instance against the calling %Uri instance.
564 * @return An error code
565 * @param[in] uri The URI to resolve against this URI
566 * @param[out] resultUri The resolved URI
567 * @exception E_SUCCESS The method is successful.
568 * @exception E_OUT_OF_MEMORY The memory is insufficient.
569 * @remarks Resolution is the process of resolving a URI against another, base URI. For hierarchical URI,
570 * the path of the original is resolved against the path of the base URI and then normalized. @n
572 * For example, to resolve the URI "/osp/framework/index.html" against the base URI "http://www.samsung.com" ,
573 * the resultant URI is "http://www.samsung.com/osp/framework/index.html".
576 result Resolve(const Uri& uri, Uri& resultUri);
580 * Sets the authority component to the specified String instance.
584 * @return An error code
585 * @param[in] authority The authority
586 * @exception E_SUCCESS The method is successful.
587 * @exception E_INVALID_FORMAT The specified string is invalid.
589 result SetAuthority(const Tizen::Base::String& authority);
593 * Sets the fragment component to the specified String instance.
597 * @return An error code
598 * @param[in] fragment The new fragment
599 * @exception E_SUCCESS The method is successful.
600 * @exception E_INVALID_FORMAT The specified string is invalid.
602 result SetFragment(const Tizen::Base::String& fragment);
606 * Sets the host component to the specified String instance.
610 * @return An error code
611 * @param[in] host The new host
612 * @exception E_SUCCESS The method is successful.
613 * @exception E_INVALID_FORMAT The specified string is invalid.
615 result SetHost(const Tizen::Base::String& host);
619 * Sets the path component to the specified String instance.
623 * @return An error code
624 * @param[in] path The new path component
625 * @exception E_SUCCESS The method is successful.
626 * @exception E_INVALID_FORMAT The specified string is invalid.
628 result SetPath(const Tizen::Base::String& path);
632 * Sets the port component to a given integer.
636 * @return An error code
637 * @param[in] port The new port component
638 * @exception E_SUCCESS The method is successful.
639 * @exception E_INVALID_ARG The specified @c port is negative.
641 result SetPort(int port);
645 * Sets the query component to the specified String instance.
649 * @return An error code
650 * @param[in] query The new query string
651 * @exception E_SUCCESS The method is successful.
652 * @exception E_INVALID_FORMAT The specified string is invalid.
654 result SetQuery(const Tizen::Base::String& query);
658 * Sets the scheme component to the specified String instance.
662 * @return An error code
663 * @param[in] scheme The new scheme
664 * @exception E_SUCCESS The method is successful.
665 * @exception E_INVALID_FORMAT The specified string is invalid.
667 result SetScheme(const Tizen::Base::String& scheme);
671 * Sets the scheme-specific-part component to the specified String instance.
675 * @return An error code
676 * @param[in] ssp The new scheme-specific-part component
677 * @exception E_SUCCESS The method is successful.
678 * @exception E_INVALID_FORMAT The specified string is invalid.
680 result SetSchemeSpecificPart(const Tizen::Base::String& ssp);
684 * Sets the user-info component to the specified String instance.
688 * @return An error code
689 * @param[in] userInfo The new user-info string
690 * @exception E_SUCCESS The method is successful.
691 * @exception E_INVALID_FORMAT The specified string is invalid.
693 result SetUserInfo(const Tizen::Base::String& userInfo);
697 * Gets the content of the calling %Uri instance as a string containing escaped octets.
701 * @return The content of this URI as a string containing escaped octets
703 Tizen::Base::String ToString(void) const;
707 // Constructs an Uri instance with the given components.
708 // scheme, ssp(opaquePart), authority, user-info, host, port, path, query, fragment
710 result SetUri(const Tizen::Base::String& scheme, const Tizen::Base::String& opaque,
711 const Tizen::Base::String& authority, const Tizen::Base::String& userInfo,
712 const Tizen::Base::String& host, int port, const Tizen::Base::String& path,
713 const Tizen::Base::String& query, const Tizen::Base::String& fragment);
716 // Appends a given scheme-specific-part to a String.
718 result AppendSchemeSpecificPart(Tizen::Base::String& strbuf, const Tizen::Base::String& opaque,
719 const Tizen::Base::String& authority, const Tizen::Base::String& userInfo,
720 const Tizen::Base::String& host, int port, const Tizen::Base::String& path,
721 const Tizen::Base::String& query) const;
724 // Appends a given fragment to a String.
726 result AppendFragment(Tizen::Base::String& strbuf, const Tizen::Base::String& fragment) const;
729 // Appends a given authority component to a String.
731 result AppendAuthority(Tizen::Base::String& strbuf, const Tizen::Base::String& authority,
732 const Tizen::Base::String& userInfo, const Tizen::Base::String& host, int port) const;
735 // Parses a given URI string.
737 result ParseUri(const Tizen::Base::String& str);
740 // Copies a given URI.
742 result CopyUri(const Uri& uri);
745 // Encodes all components - authority, fragment, path, query, and ssp.
747 void EncodeAllComponent(void);
750 // Parses a hierarchical URI string.
751 // @return The start index of the fragment. If the operation fails, @c -1 is returned.
752 // @param[in] startSsp The start index of scheme-specific-part
753 // @param[in] lengthOfUri The length of the URI string
754 // @param[out] authority A parsed authority component
755 // @param[out] path A parsed path component
756 // @param[out] query A parsed query component
758 result ParseHierarchicalUri(const Tizen::Base::String& str, int startSsp, Tizen::Base::String& authority,
759 Tizen::Base::String& path, Tizen::Base::String& query, int& index);
763 // Parses a server_based authority component.
764 // server_based authority: [user-info@]<host>[:port]
766 result ParseAuthority(const Tizen::Base::String& str, int curIndex, Tizen::Base::String& newAuth,
767 Tizen::Base::String& userInfo, Tizen::Base::String& host, int& port);
769 void SetAndEncodeAuthority(const Tizen::Base::String& authority,
770 const Tizen::Base::String& path, const Tizen::Base::String& query);
773 // Parses a server_based authority component.
774 // Assigns user-info, host and port to their member variable.
776 result ParseServerAuthority(const Tizen::Base::String& str, Tizen::Base::String& user, Tizen::Base::String& host, int& port);
779 // Parses an IPv4 address.
781 result ParseIpv4(const Tizen::Base::String& str, int index, int& count);
784 // Parses an IPv6 address.
785 // It will be implemented.
787 result ParseIpv6(const Tizen::Base::String& ip6, Tizen::Base::String& outIpv6);
790 // Parses a host name and returns a host name as an out-param.
792 result ParseHostName(const Tizen::Base::String& str, int index, Tizen::Base::String& host);
795 // These methods verify components.
796 // If a given component is valid, return @c true, else, @c false.
797 // @param[in] str A component
799 bool VerifyScheme(const Tizen::Base::String& str) const;
800 bool VerifyAuthority(const Tizen::Base::String& str) const;
801 bool VerifyHost(const Tizen::Base::String& str) const;
802 bool VerifyPath(const Tizen::Base::String& str) const;
803 bool VerifyUserInfo(const Tizen::Base::String& str) const;
804 bool VerifyUriChar(const Tizen::Base::String& str) const;
807 // Checks that a given string only consists of server_based characters.
808 // @return @c true if a string consists of only server_based characters, @n
811 bool VerifyServerAuthority(const Tizen::Base::String& str) const;
814 // Checks that a given string only consists of registry_based characters.
815 // @return @c true if a string consists of only registry_based characters, @n
818 bool VerifyRegistryAuthority(const Tizen::Base::String& str) const;
821 // Checks whether a given char is a user-info character or not.
822 // user-info char: alphabet, digit, -_.!~*'(), ;:&=+$,
824 bool IsUserInfo(wchar_t mch) const;
827 // Returns true if a given wchar_t is a mark character.
828 // mark char : -_.!~*'()
830 bool IsMark(wchar_t mch) const;
833 // Returns true if two given wchar_ts are hexadecimals.
835 bool IsEscapedChar(wchar_t ch1, wchar_t ch2) const;
838 // Returns true if a given string is already encoded.
840 bool IsEncoded(const Tizen::Base::String& str) const;
843 // Returns true if a given wchar_t is an ISO control character.
845 bool IsControlChar(wchar_t ch) const;
848 // Compares @c pStr1 with @c pStr2. @n
849 // If @c pStr1 is greater than @c pStr2, returns @c 1.
850 // If two strings are the same, return @c 0.
851 // If @c pStr1 is less than @c pStr2, returns @c -1.
853 int Compare(const Tizen::Base::String& pStr1, const Tizen::Base::String& pStr2) const;
856 // Adds leading dots.
857 // If the normalized path is relative, and if the first segment could be parsed as a scheme name,
858 // then prepend a '.' segment
860 void AddLeadingDot(Tizen::Base::WcharBuffer& path, int* segments, int numSegments);
863 // Finds the first character in stopString.
864 // If there is not a character in stopString, the last index is returned.
866 int Scan(const Tizen::Base::String& str, int start, const Tizen::Base::String& stopString);
869 // Normalizes a given string and removes unnecessary dots.
871 Tizen::Base::String InternalNormalize(const Tizen::Base::String& path);
874 // Returns the number of segments from a given path.
876 int GetNumberOfSegments(const Tizen::Base::String& path) const;
878 // Join the segments in the given path according to the given segment-index array,
879 // ignoring those segments whose index entries have been set to @c -1, and inserting slashes as needed.
880 // Return the length of the resulting path.
883 // segs[i] == @c -1 implies segment i is to be ignored
884 // path computed by split, as above, with '\0' having replaced '/'
887 // path[0] .. path[return value] == Resulting path
889 int Join(Tizen::Base::WcharBuffer& path, int* segments, int segCount);
892 // Removes unnecessary dots and segment pairs consisting of a non-".." segment
893 // followed by a ".." segment
895 void RemoveDots(const Tizen::Base::WcharBuffer& mb, int* segments, int segCount, int length);
898 // Splits a path component into segments.
900 void SplitIntoSegments(Tizen::Base::WcharBuffer& mb, int* segments, int segCount);
903 // Implements Uri resolution in RFC2396 5.2
905 result Resolve(const Uri& baseUri, const Uri& childUri, Uri& resultUri);
908 // Resolves the path of the base and child URI.
910 Tizen::Base::String ResolvePath(const Tizen::Base::String& path, const Tizen::Base::String& resolve, bool isAbsolute);
912 bool EqualsComponent(const Tizen::Base::String& comp1, const Tizen::Base::String& comp2);
913 result Relativize(const Uri& baseUri, const Uri& childUri, Uri& resultUri);
916 // Converts a component represented by UTF8 to a component represented by Unicode.
918 Tizen::Base::String Decode(const Tizen::Base::String& str);
921 // Converts a component represented by Unicode to a component represented by UTF8.
923 Tizen::Base::String Encode(const Tizen::Base::String& str) const;
925 static result AppendEscape(Tizen::Base::String& strbuf, byte b);
928 // Clears the current instance.
933 Tizen::Base::String __scheme;
934 Tizen::Base::String __ssp;
935 Tizen::Base::String __authority;
936 Tizen::Base::String __host;
937 Tizen::Base::String __fragment;
938 Tizen::Base::String __path;
939 Tizen::Base::String __userInfo;
940 Tizen::Base::String __query;
941 Tizen::Base::String __ipv4;
942 Tizen::Base::String __ipv6;
945 Tizen::Base::String __encodedAuth;
946 Tizen::Base::String __encodedFragment;
947 Tizen::Base::String __encodedPath;
948 Tizen::Base::String __encodedQuery;
949 Tizen::Base::String __encodedSsp;
950 Tizen::Base::String __encodedUserInfo;
956 friend class _UriImpl;
957 class _UriImpl* __pUriImpl;
961 }}} // Tizen::Base::Utility
963 #endif //_FBASE_UTIL_URI_H_