1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
/**
* @file lluri.h
* @author Phoenix
* @date 2006-02-05
* @brief Declaration of the URI class.
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
* ("Other License"), formally executed by you and Linden Lab. Terms of
* the GPL can be found in doc/GPL-license.txt in this distribution, or
* online at http://secondlife.com/developers/opensource/gplv2
*
* There are special exceptions to the terms and conditions of the GPL as
* it is applied to this Source Code. View the full text of the exception
* in the file doc/FLOSS-exception.txt in this software distribution, or
* online at http://secondlife.com/developers/opensource/flossexception
*
* By copying, modifying or distributing this software, you acknowledge
* that you have read and understood your obligations described above,
* and agree to abide by those obligations.
*
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
* COMPLETENESS OR PERFORMANCE.
*/
#ifndef LL_LLURI_H
#define LL_LLURI_H
#include <string>
class LLSD;
class LLUUID;
class LLApp;
/**
*
* 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& 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& 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
// 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"
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
// Escape a string by urlencoding all the characters that aren't in the allowed string.
static std::string escape(const std::string& str, const std::string & allowed);
static std::string unescape(const std::string& str);
// Functions for building specific URIs for web services
static LLURI buildAgentPresenceURI(const LLUUID& agent_id, LLApp* app);
static LLURI buildBulkAgentPresenceURI(LLApp* app);
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 buildInventoryHostURI(const LLUUID& agent_id, LLApp* app);
static LLURI buildAgentNameURI(const LLUUID& agent_id, LLApp* app);
private:
std::string mScheme;
std::string mEscapedOpaque;
std::string mEscapedAuthority;
std::string mEscapedPath;
std::string mEscapedQuery;
};
#endif // LL_LLURI_H
|