summaryrefslogtreecommitdiff
path: root/indra/llcommon/lluri.h
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llcommon/lluri.h')
-rw-r--r--indra/llcommon/lluri.h72
1 files changed, 72 insertions, 0 deletions
diff --git a/indra/llcommon/lluri.h b/indra/llcommon/lluri.h
new file mode 100644
index 0000000000..3fc62aeb98
--- /dev/null
+++ b/indra/llcommon/lluri.h
@@ -0,0 +1,72 @@
+/**
+ * @file lluri.h
+ * @author Phoenix
+ * @date 2006-02-05
+ * @brief Declaration of the URI class.
+ *
+ * Copyright (c) 2006-$CurrentYear$, Linden Research, Inc.
+ * $License$
+ */
+
+#ifndef LL_LLURI_H
+#define LL_LLURI_H
+
+#include <string>
+
+class LLSD;
+
+/**
+ *
+ * LLURI instances are immutable
+ * See: http://www.ietf.org/rfc/rfc3986.txt
+ *
+ */
+class LLURI
+{
+public:
+ LLURI();
+ LLURI(const std::string& escaped_str);
+ // construct from escaped string, as would be transmitted on the net
+
+ ~LLURI();
+
+ static LLURI buildHTTP(const std::string& host_port,
+ const LLSD& path);
+ static LLURI buildHTTP(const std::string& host_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
+
+ // 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.: "bob@host.com:80"
+ std::string hostName() const; // ex.: "host.com"
+ U16 hostPort() const; // ex.: 80, will include implicit port
+ std::string path() const; // ex.: "/abc/def", includes leading slash
+// LLSD pathArray() const; // above decoded into an array of strings
+ std::string query() const; // ex.: "x=34", section after "?"
+ LLSD queryMap() const; // above decoded into a map
+ static LLSD queryMap(std::string escaped_query_string);
+
+ // Escaping Utilities
+ static std::string escape(const std::string& str);
+ static std::string unescape(const std::string& str);
+
+private:
+ std::string mScheme;
+ std::string mEscapedOpaque;
+ std::string mEscapedAuthority;
+ std::string mEscapedPath;
+ std::string mEscapedQuery;
+};
+
+#endif // LL_LLURI_H