lluri.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:6k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file lluri.h
  3.  * @author Phoenix
  4.  * @date 2006-02-05
  5.  * @brief Declaration of the URI class.
  6.  *
  7.  * $LicenseInfo:firstyear=2006&license=viewergpl$
  8.  * 
  9.  * Copyright (c) 2006-2010, Linden Research, Inc.
  10.  * 
  11.  * Second Life Viewer Source Code
  12.  * The source code in this file ("Source Code") is provided by Linden Lab
  13.  * to you under the terms of the GNU General Public License, version 2.0
  14.  * ("GPL"), unless you have obtained a separate licensing agreement
  15.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  16.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  17.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  18.  * 
  19.  * There are special exceptions to the terms and conditions of the GPL as
  20.  * it is applied to this Source Code. View the full text of the exception
  21.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  22.  * online at
  23.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  24.  * 
  25.  * By copying, modifying or distributing this software, you acknowledge
  26.  * that you have read and understood your obligations described above,
  27.  * and agree to abide by those obligations.
  28.  * 
  29.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  30.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  31.  * COMPLETENESS OR PERFORMANCE.
  32.  * $/LicenseInfo$
  33.  */
  34. #ifndef LL_LLURI_H
  35. #define LL_LLURI_H
  36. #include <string>
  37. class LLSD;
  38. class LLUUID;
  39. class LLApp;
  40. /** 
  41.  *
  42.  * LLURI instances are immutable
  43.  * See: http://www.ietf.org/rfc/rfc3986.txt
  44.  *
  45.  */
  46. class LL_COMMON_API LLURI
  47. {
  48. public:
  49.   LLURI();
  50.   LLURI(const std::string& escaped_str);
  51.   LLURI(const std::string& scheme,
  52. const std::string& userName,
  53. const std::string& password,
  54. const std::string& hostName,
  55. U16 hostPort,
  56. const std::string& escapedPath,
  57. const std::string& escapedQuery);
  58.   
  59.   // construct from escaped string, as would be transmitted on the net
  60. ~LLURI();
  61. static LLURI buildHTTP(
  62. const std::string& prefix,
  63. const LLSD& path);
  64. static LLURI buildHTTP(
  65. const std::string& prefix,
  66. const LLSD& path,
  67. const LLSD& query);
  68. ///< prefix is either a full URL prefix of the form
  69. /// "http://example.com:8080", or it can be simply a host and
  70. /// optional port like "example.com" or "example.com:8080", in
  71. /// these cases, the "http://" will be added
  72. static LLURI buildHTTP(
  73. const std::string& host,
  74. const U32& port,
  75. const LLSD& path);
  76. static LLURI buildHTTP(
  77. const std::string& host,
  78. const U32& port,
  79. const LLSD& path,
  80. const LLSD& query);
  81. std::string asString() const;
  82. ///< the whole URI, escaped as needed
  83.   
  84. /** @name Parts of a URI */
  85. //@{
  86. // These functions return parts of the decoded URI.  The returned
  87. // strings are un-escaped as needed
  88.   
  89. // for all schemes
  90. std::string scheme() const; ///< ex.: "http", note lack of colon
  91. std::string opaque() const; ///< everything after the colon
  92.   
  93.   // for schemes that follow path like syntax (http, https, ftp)
  94.   std::string authority() const; // ex.: "host.com:80"
  95.   std::string hostName() const; // ex.: "host.com"
  96.   std::string userName() const;
  97.   std::string password() const;
  98.   U16 hostPort() const; // ex.: 80, will include implicit port
  99.   BOOL defaultPort() const; // true if port is default for scheme
  100.   const std::string& escapedPath() const { return mEscapedPath; }
  101.   std::string path() const; // ex.: "/abc/def", includes leading slash
  102.   LLSD pathArray() const; // above decoded into an array of strings
  103.   std::string query() const; // ex.: "x=34", section after "?"
  104.   const std::string& escapedQuery() const { return mEscapedQuery; }
  105.   LLSD queryMap() const; // above decoded into a map
  106.   static LLSD queryMap(std::string escaped_query_string);
  107. /**
  108.  * @brief given a name value map, return a serialized query string.
  109.  *
  110.  * @param query_map a map of name value. every value must be
  111.  * representable as a string.
  112.  * @return Returns an url query string of '?n1=v1&n2=v2&...'
  113.  */
  114. static std::string mapToQueryString(const LLSD& query_map);
  115. /** @name Escaping Utilities */
  116. //@{
  117. /**
  118.  * @brief Escape the string passed except for unreserved
  119.  *
  120.  *  ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
  121.  *  0123456789
  122.  *  -._~
  123.  *
  124.  * @see http://www.ietf.org/rfc/rfc1738.txt
  125.  *
  126.  * @param str The raw URI to escape.
  127.  * @return Returns the rfc 1738 escaped uri or an empty string.
  128.  */
  129. static std::string escape(const std::string& str);
  130. /**
  131.  * @brief Escape a string with a specified set of allowed characters.
  132.  *
  133.  * Escape a string by urlencoding all the characters that aren't
  134.  * in the allowed string.
  135.  * @param str The raw URI to escape.
  136.  * @param allowed Character array of allowed characters
  137.  * @param is_allowed_sorted Optimization hint if allowed array is sorted.
  138.  * @return Returns the escaped uri or an empty string.
  139.  */
  140. static std::string escape(
  141. const std::string& str,
  142. const std::string& allowed,
  143. bool is_allowed_sorted = false);
  144. /**
  145.  * @brief unescape an escaped URI string.
  146.  *
  147.  * @param str The escped URI to unescape.
  148.  * @return Returns the unescaped uri or an empty string.
  149.  */
  150. static std::string unescape(const std::string& str);
  151. //@}
  152. private:
  153.  // only "http", "https", "ftp", and "secondlife" schemes are parsed
  154.  // secondlife scheme parses authority as "" and includes it as part of
  155.  // the path.  See lluri_tut.cpp
  156.  // i.e. secondlife://app/login has mAuthority = "" and mPath = "/app/login"
  157. void parseAuthorityAndPathUsingOpaque();
  158. std::string mScheme;
  159. std::string mEscapedOpaque;
  160. std::string mEscapedAuthority;
  161. std::string mEscapedPath;
  162. std::string mEscapedQuery;
  163. };
  164. // this operator required for tut
  165. LL_COMMON_API bool operator!=(const LLURI& first, const LLURI& second);
  166. #endif // LL_LLURI_H