summaryrefslogtreecommitdiff
path: root/indra/llcommon
diff options
context:
space:
mode:
authorKartic Krishnamurthy <drunkensufi@lindenlab.com>2007-07-18 01:28:59 +0000
committerKartic Krishnamurthy <drunkensufi@lindenlab.com>2007-07-18 01:28:59 +0000
commite1ab7d8a30cc40cbd1d471c67def21508c82ff49 (patch)
tree3f834cc8207ea481f6caf820738c8cbf5388bc9a /indra/llcommon
parent7964c6f7a5b622d698f7d471690b29122966b1b2 (diff)
svn merge -r63705:65463 svn+ssh://svn/svn/linden/branches/dpo-3-bug-fix
NOTE: r63705 is *not* the earliest rev# for dpo-3-bug-fix.
Diffstat (limited to 'indra/llcommon')
-rw-r--r--indra/llcommon/lluri.cpp35
-rw-r--r--indra/llcommon/lluri.h97
2 files changed, 79 insertions, 53 deletions
diff --git a/indra/llcommon/lluri.cpp b/indra/llcommon/lluri.cpp
index 5cb6067990..22526c9a03 100644
--- a/indra/llcommon/lluri.cpp
+++ b/indra/llcommon/lluri.cpp
@@ -275,9 +275,10 @@ LLURI LLURI::buildHTTP(const std::string& prefix,
const LLSD& query)
{
LLURI uri = buildHTTP(prefix, path);
- uri.mEscapedQuery = mapToQueryString(query);
// break out and escape each query component
- uri.mEscapedOpaque += "?" + uri.mEscapedQuery ;
+ uri.mEscapedQuery = mapToQueryString(query);
+ uri.mEscapedOpaque += uri.mEscapedQuery ;
+ uri.mEscapedQuery.erase(0,1); // trim the leading '?'
return uri;
}
@@ -581,20 +582,30 @@ LLSD LLURI::queryMap(std::string escaped_query_string)
std::string LLURI::mapToQueryString(const LLSD& queryMap)
{
std::string query_string;
-
if (queryMap.isMap())
{
- for (LLSD::map_const_iterator iter = queryMap.beginMap();
- iter != queryMap.endMap();
- iter++)
+ bool first_element = true;
+ LLSD::map_const_iterator iter = queryMap.beginMap();
+ LLSD::map_const_iterator end = queryMap.endMap();
+ std::ostringstream ostr;
+ for (; iter != end; ++iter)
{
- query_string += escapeQueryVariable(iter->first) +
- (iter->second.isUndefined() ? "" : "=" + escapeQueryValue(iter->second.asString())) + "&" ;
+ if(first_element)
+ {
+ ostr << "?";
+ first_element = false;
+ }
+ else
+ {
+ ostr << "&";
+ }
+ ostr << escapeQueryVariable(iter->first);
+ if(iter->second.isDefined())
+ {
+ ostr << "=" << escapeQueryValue(iter->second.asString());
+ }
}
- //if (queryMap.size() > 0)
- //{
- // query_string += "?" + query_string ;
- //}
+ query_string = ostr.str();
}
return query_string;
}
diff --git a/indra/llcommon/lluri.h b/indra/llcommon/lluri.h
index 9ec51b4b1a..00eacf6536 100644
--- a/indra/llcommon/lluri.h
+++ b/indra/llcommon/lluri.h
@@ -38,34 +38,42 @@ public:
// construct from escaped string, as would be transmitted on the net
- ~LLURI();
+ ~LLURI();
- static LLURI buildHTTP(const std::string& prefix,
- const LLSD& path);
- static LLURI buildHTTP(const std::string& prefix,
- const LLSD& path,
- const LLSD& query);
- // prefix is either a full URL prefix of the form "http://example.com:8080",
- // or it can be simply a host and optional port like "example.com" or
- // "example.com:8080", in these cases, the "http://" will be added
+ static LLURI buildHTTP(
+ const std::string& prefix,
+ const LLSD& path);
- static LLURI buildHTTP(const std::string& host,
- const U32& port,
- const LLSD& path);
- static LLURI buildHTTP(const std::string& host,
- const U32& port,
- const LLSD& path,
- const LLSD& query);
- std::string asString() const;
- // the whole URI, escaped as needed
+ static LLURI buildHTTP(
+ const std::string& prefix,
+ const LLSD& path,
+ const LLSD& query);
+ ///< prefix is either a full URL prefix of the form
+ /// "http://example.com:8080", or it can be simply a host and
+ /// optional port like "example.com" or "example.com:8080", in
+ /// these cases, the "http://" will be added
+
+ static LLURI buildHTTP(
+ const std::string& host,
+ const U32& port,
+ const LLSD& path);
+ static LLURI buildHTTP(
+ const std::string& host,
+ const U32& port,
+ const LLSD& path,
+ const LLSD& query);
+
+ std::string asString() const;
+ ///< the whole URI, escaped as needed
- // Parts of a URI
- // These functions return parts of the decoded URI. The returned
- // strings are un-escaped as needed
+ /** @name Parts of a URI */
+ //@{
+ // These functions return parts of the decoded URI. The returned
+ // strings are un-escaped as needed
- // for all schemes
- std::string scheme() const; // ex.: "http", note lack of colon
- std::string opaque() const; // everything after the colon
+ // for all schemes
+ std::string scheme() const; ///< ex.: "http", note lack of colon
+ std::string opaque() const; ///< everything after the colon
// for schemes that follow path like syntax (http, https, ftp)
std::string authority() const; // ex.: "host.com:80"
@@ -81,27 +89,34 @@ public:
const std::string& escapedQuery() const { return mEscapedQuery; }
LLSD queryMap() const; // above decoded into a map
static LLSD queryMap(std::string escaped_query_string);
- static std::string mapToQueryString(const LLSD& queryMap);
- // Escaping Utilities
- // Escape a string by urlencoding all the characters that aren't in the allowed string.
- static std::string escape(const std::string& str);
- static std::string escape(const std::string& str, const std::string & allowed);
- static std::string unescape(const std::string& str);
+ /**
+ * @brief given a name value map, return a serialized query string.
+ *
+
+ * @param query_map a map of name value. every value must be
+ * representable as a string.
+ * @return Returns an url query string of '?n1=v1&n2=v2&...'
+ */
+ static std::string mapToQueryString(const LLSD& query_map);
- // Functions for building specific URIs for web services
- // *NOTE: DEPRECATED. use the service builder instead.
- //static LLURI buildBulkAgentNamesURI(LLApp* app);
- //static LLURI buildAgentSessionURI(const LLUUID& agent_id, LLApp* app);
- //static LLURI buildAgentLoginInfoURI(const LLUUID& agent_id, const std::string& dataserver);
- //static LLURI buildAgentNameURI(const LLUUID& agent_id, LLApp* app);
+ /** @name Escaping Utilities */
+ //@{
+ // Escape a string by urlencoding all the characters that aren't
+ // in the allowed string.
+ static std::string escape(const std::string& str);
+ static std::string escape(
+ const std::string& str,
+ const std::string & allowed);
+ static std::string unescape(const std::string& str);
+ //@}
private:
- std::string mScheme;
- std::string mEscapedOpaque;
- std::string mEscapedAuthority;
- std::string mEscapedPath;
- std::string mEscapedQuery;
+ std::string mScheme;
+ std::string mEscapedOpaque;
+ std::string mEscapedAuthority;
+ std::string mEscapedPath;
+ std::string mEscapedQuery;
};
#endif // LL_LLURI_H