<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://opensimulator.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://opensimulator.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Haravikk+Mistral</id>
		<title>OpenSimulator - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://opensimulator.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Haravikk+Mistral"/>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Special:Contributions/Haravikk_Mistral"/>
		<updated>2026-04-21T10:28:55Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.19.9</generator>

	<entry>
		<id>http://opensimulator.org/wiki/User:Haravikk_Mistral/ExpandedGridInfoAvailability</id>
		<title>User:Haravikk Mistral/ExpandedGridInfoAvailability</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:Haravikk_Mistral/ExpandedGridInfoAvailability"/>
				<updated>2017-08-15T12:26:33Z</updated>
		
		<summary type="html">&lt;p&gt;Haravikk Mistral: /* X-Grid-Location Header */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
== Problem ==&lt;br /&gt;
An avatar's UUID is not guaranteed to be unique, thus it remains a possibility that two avatars on two different grids could have the same UUID either by accident or by design. This is compounded by a general lack of access to grid info, as many useful functions are restricted to an OSSL threat level of Low, placing them above the OSSL default threat level of VeryLow.&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution ==&lt;br /&gt;
The proposal is to make grid-awareness more readily available to scripts, and to any services with which they may communicate, making it easier to record an avatar, region, object etc. not only by UUID, but also by grid, thus ensuring no possibility of a cross-grid collision. For scripts and services this means that data can be more easily partitioned by the grid to which it belongs, and roaming avatars can be recorded differently (or ignored altogether), and cross-grid data handled more intelligently.&lt;br /&gt;
&lt;br /&gt;
= Detailed Design =&lt;br /&gt;
== Reduced Threat Levels ==&lt;br /&gt;
The first step to this proposal is to reduce the threat level of the following functions to VeryLow or None:&lt;br /&gt;
&lt;br /&gt;
* [[osGetAvatarHomeURI]]()&lt;br /&gt;
* [[osGetGridCustom]]()&lt;br /&gt;
* [[osGetGridGatekeeperURI]]()&lt;br /&gt;
* [[osGetGridHomeURI]]()&lt;br /&gt;
* [[osGetGridLoginURI]]()&lt;br /&gt;
&lt;br /&gt;
At a minimum, only [[osGetAvatarHomeURI]]() and [[osGetGridHomeURI]]() are required, however it is unclear why any of the above functions are rated above VeryLow to begin with, as all of this information is readily available to any connecting viewer, so it seems strange that objects within an actual region upon a grid should have such restricted access to their own environment; in terms of security there is no real threat to relaxing restrictions on these functions, as at best all they can do is try to provide security through obscurity, which is no real protection at all.&lt;br /&gt;
&lt;br /&gt;
== X-Grid-Location Header ==&lt;br /&gt;
This step proposes simply to add an additional header to all outgoing HTTP requests generated by [https://wiki.secondlife.com/wiki/LlHTTPRequest llHTTPRequest()]. The proposed format for this header is as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;X-OpenSim-Location: x-grid-info://example.org:9000/region/Some%20Region/1/2/3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The header provides an &amp;lt;tt&amp;gt;x-grid-info://&amp;lt;/tt&amp;gt; URI as supported by most Open Simulator compatible clients; while the URI provides a full location including region name and coordinates, the only new information is the grid's address, as the region name and coordinates are already provided by &amp;lt;tt&amp;gt;X-SecondLife-Region&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;X-SecondLife-Local-Position&amp;lt;/tt&amp;gt; respectively, and these should in fact match the path of the URI.&lt;br /&gt;
&lt;br /&gt;
The advantage of this header is that it eliminates the need for scripts themselves to add the information to requests in a non-standard way, and allows the information to be sent even if there is no access to any &amp;lt;tt&amp;gt;os*()&amp;lt;/tt&amp;gt; functions at all, as any up-to-date simulator would simply send the header automatically, including for existing scripts.&lt;br /&gt;
&lt;br /&gt;
This would be particularly useful when combined with the ability to [[User:Haravikk_Mistral/RegionVerification|verify a region]].&lt;br /&gt;
&lt;br /&gt;
== Alternatives Considered ==&lt;br /&gt;
The main alternative considered was generating some kind of grid UUID, probably by hashing the grid-address (i.e- a v5 UUID), with the idea being that this would avoid the need to send any actual details of the grid. The problem with this however is that it only makes things more awkward with no real benefit, as it would be fairly easy to identify common grids anyway, and hiding the address offers no real security for a grid, when this information is known by regions etc. anyway.&lt;br /&gt;
&lt;br /&gt;
Also, one key area for consideration is the naming of the proposed HTTP header, and which exact URI scheme it should use (would &amp;lt;tt&amp;gt;x-grid-location-info&amp;lt;/tt&amp;gt; be a better fit?).&lt;/div&gt;</summary>
		<author><name>Haravikk Mistral</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/User:Haravikk_Mistral/ExpandedGridInfoAvailability</id>
		<title>User:Haravikk Mistral/ExpandedGridInfoAvailability</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:Haravikk_Mistral/ExpandedGridInfoAvailability"/>
				<updated>2017-08-15T12:25:53Z</updated>
		
		<summary type="html">&lt;p&gt;Haravikk Mistral: /* X-Grid-Location Header */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
== Problem ==&lt;br /&gt;
An avatar's UUID is not guaranteed to be unique, thus it remains a possibility that two avatars on two different grids could have the same UUID either by accident or by design. This is compounded by a general lack of access to grid info, as many useful functions are restricted to an OSSL threat level of Low, placing them above the OSSL default threat level of VeryLow.&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution ==&lt;br /&gt;
The proposal is to make grid-awareness more readily available to scripts, and to any services with which they may communicate, making it easier to record an avatar, region, object etc. not only by UUID, but also by grid, thus ensuring no possibility of a cross-grid collision. For scripts and services this means that data can be more easily partitioned by the grid to which it belongs, and roaming avatars can be recorded differently (or ignored altogether), and cross-grid data handled more intelligently.&lt;br /&gt;
&lt;br /&gt;
= Detailed Design =&lt;br /&gt;
== Reduced Threat Levels ==&lt;br /&gt;
The first step to this proposal is to reduce the threat level of the following functions to VeryLow or None:&lt;br /&gt;
&lt;br /&gt;
* [[osGetAvatarHomeURI]]()&lt;br /&gt;
* [[osGetGridCustom]]()&lt;br /&gt;
* [[osGetGridGatekeeperURI]]()&lt;br /&gt;
* [[osGetGridHomeURI]]()&lt;br /&gt;
* [[osGetGridLoginURI]]()&lt;br /&gt;
&lt;br /&gt;
At a minimum, only [[osGetAvatarHomeURI]]() and [[osGetGridHomeURI]]() are required, however it is unclear why any of the above functions are rated above VeryLow to begin with, as all of this information is readily available to any connecting viewer, so it seems strange that objects within an actual region upon a grid should have such restricted access to their own environment; in terms of security there is no real threat to relaxing restrictions on these functions, as at best all they can do is try to provide security through obscurity, which is no real protection at all.&lt;br /&gt;
&lt;br /&gt;
== X-Grid-Location Header ==&lt;br /&gt;
This step proposes simply to add an additional header to all outgoing HTTP requests generated by [https://wiki.secondlife.com/wiki/LlHTTPRequest llHTTPRequest()]. The proposed format for this header is as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;X-OpenSim-Grid-Info: x-grid-info://example.org:9000/region/Some%20Region/1/2/3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The header provides an &amp;lt;tt&amp;gt;x-grid-info://&amp;lt;/tt&amp;gt; URI as supported by most Open Simulator compatible clients; while the URI provides a full location including region name and coordinates, the only new information is the grid's address, as the region name and coordinates are already provided by &amp;lt;tt&amp;gt;X-SecondLife-Region&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;X-SecondLife-Local-Position&amp;lt;/tt&amp;gt; respectively, and these should in fact match the path of the URI.&lt;br /&gt;
&lt;br /&gt;
The advantage of this header is that it eliminates the need for scripts themselves to add the information to requests in a non-standard way, and allows the information to be sent even if there is no access to any &amp;lt;tt&amp;gt;os*()&amp;lt;/tt&amp;gt; functions at all, as any up-to-date simulator would simply send the header automatically, including for existing scripts.&lt;br /&gt;
&lt;br /&gt;
This would be particularly useful when combined with the ability to [[User:Haravikk_Mistral/RegionVerification|verify a region]].&lt;br /&gt;
&lt;br /&gt;
== Alternatives Considered ==&lt;br /&gt;
The main alternative considered was generating some kind of grid UUID, probably by hashing the grid-address (i.e- a v5 UUID), with the idea being that this would avoid the need to send any actual details of the grid. The problem with this however is that it only makes things more awkward with no real benefit, as it would be fairly easy to identify common grids anyway, and hiding the address offers no real security for a grid, when this information is known by regions etc. anyway.&lt;br /&gt;
&lt;br /&gt;
Also, one key area for consideration is the naming of the proposed HTTP header, and which exact URI scheme it should use (would &amp;lt;tt&amp;gt;x-grid-location-info&amp;lt;/tt&amp;gt; be a better fit?).&lt;/div&gt;</summary>
		<author><name>Haravikk Mistral</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/User:Haravikk_Mistral/RegionVerification</id>
		<title>User:Haravikk Mistral/RegionVerification</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:Haravikk_Mistral/RegionVerification"/>
				<updated>2017-08-14T22:22:35Z</updated>
		
		<summary type="html">&lt;p&gt;Haravikk Mistral: /* Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
== Problem ==&lt;br /&gt;
When receiving an HTTP request from a scripted object within an Open Simulator region, there is currently no means of verifying whether the request came from a legitimate source. For Second Life this is possible with a reverse DNS lookup on the IP address, if it has a valid &amp;lt;tt&amp;gt;simXXXX.&amp;lt;grid&amp;gt;.lindenlab.com&amp;lt;/tt&amp;gt; address you can confirm that the request came from a legitimate source, but such a technique is not possible with Open Simulator based grids.&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution ==&lt;br /&gt;
This proposal is to provide a call-back mechanism with which a web-service, [[User:Haravikk Mistral/ExpandedGridInfoAvailability|knowing the source grid]], region name and simulator IP address, can query the source grid to verify whether the IP address and region name are valid, i.e- asking the grid to confirm that it has a simulator with a given IP address, hosting the given region name.&lt;br /&gt;
&lt;br /&gt;
= Detailed Design =&lt;br /&gt;
== The Callback Service ==&lt;br /&gt;
Essentially what this feature boils down to is a callback service, implemented in much the same way as the [[GridInfo]] protocol. The proposed protocol would take the form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;http://example.org:9000/verify_region?name=Some%20Region&amp;amp;ip=123.123.123.123&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To which the server would respond simply 'OK' if there exists a region named &amp;quot;Some Region&amp;quot;, hosted by a simulator with IP address &amp;lt;tt&amp;gt;123.123.123.123&amp;lt;/tt&amp;gt;, or else 'NO' if there exists no region by that name assigned to that IP. Thus a web service knows either that the combo exists (OK), doesn't exist (NO) or that the grid cannot or will not verify it (any other response).&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
The following example assumes the presence of the &amp;lt;tt&amp;gt;X-OpenSim-Location&amp;lt;/tt&amp;gt; as proposed [[User:Haravikk Mistral/ExpandedGridInfoAvailability|here]]:&lt;br /&gt;
&amp;lt;source lang = &amp;quot;php&amp;quot;&amp;gt;&amp;lt;?php&lt;br /&gt;
function fetch(array $array, $key, $default = null) { return (isset($array[$key])) ? $array[$key] : $default; }&lt;br /&gt;
&lt;br /&gt;
// TODO: Verify basic headers first (since they require no callbacks)&lt;br /&gt;
&lt;br /&gt;
if (isset($_SERVER['HTTP_X_OPENSIM_LOCATION'])) {&lt;br /&gt;
    $uri = parse_url($_SERVER['HTTP_X_OPENSIM_LOCATION']);&lt;br /&gt;
    if ((fetch($uri, 'scheme') == 'x-grid-info') || !$host = fetch($uri, 'host')) { die('Invalid URI'); }&lt;br /&gt;
&lt;br /&gt;
    $grid_address = $host . (($port = fetch($uri, 'port')) ? &amp;quot;:$port&amp;quot; : '');&lt;br /&gt;
    if (!preg_match(';^/region/([0-9]*[^0-9/]+[^/]*)((?:/([0-9]+)(?:/([0-9]+)(?:/([0-9]+))?)?)?;i', fetch($uri, 'path'), $match)) { die('Invalid URI'); }&lt;br /&gt;
&lt;br /&gt;
    $region_name = urldecode($match[1]); $coords = [];&lt;br /&gt;
    if (strlen($match[2]) &amp;amp;&amp;amp; strlen($match[3])) { // 2-D coords&lt;br /&gt;
        $coords = [(int)$match[2], (int)$match[3]];&lt;br /&gt;
        if (strlen($match[4])) { $coords[] = (int)$match[4]; }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // TODO: Look up $grid_address and $_SERVER['REMOTE_ADDR'] in database, if they have been confirmed recently then don't do it again&lt;br /&gt;
&lt;br /&gt;
    // Host is unconfirmed, try to confirm it now&lt;br /&gt;
    $curl = curl_init(&amp;quot;http://$grid_address/verify_region?region=&amp;quot; . urlencode($region_name) . '&amp;amp;ip=' . $_SERVER['REMOTE_ADDR']);&lt;br /&gt;
    curl_setopts_array($curl = [CURLOPT_RETURNTRANSFER =&amp;gt; true, CURLOPT_FOLLOWLOCATION =&amp;gt; true]);&lt;br /&gt;
    $response = curl_exec($curl);&lt;br /&gt;
    if ((curl_errno($curl) != 0) || (curl_getinfo($curl, CURLINFO_HTTP_CODE) != 200)) { die('Error occurred verifying region'); }&lt;br /&gt;
    curl_close($curl);&lt;br /&gt;
&lt;br /&gt;
    switch($response) {&lt;br /&gt;
        case 'OK':&lt;br /&gt;
            // The grid confirmed the region and IP combo, we should cache it in our database to avoid repeated lookups&lt;br /&gt;
        break;&lt;br /&gt;
        case 'NO':&lt;br /&gt;
            die('Invalid region/IP');&lt;br /&gt;
        break;&lt;br /&gt;
        default:&lt;br /&gt;
            // TODO: Use some kind of fallback or &amp;quot;untrusted&amp;quot; behaviour instead&lt;br /&gt;
            die('Unable to verify region/IP');&lt;br /&gt;
        break;&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Alternatives Considered ==&lt;br /&gt;
An alternative protocol for the verification would be to have the grid return some information about a region in an XML format. For example, a request for &amp;quot;Some Region&amp;quot; could return details such as its map location and IP, with the web-service extracting the IP itself to confirm. However, this raises the question of how much data should be revealed, and whether the ability to scrape by region name is desirable or not.&lt;br /&gt;
&lt;br /&gt;
The proposed system above, while limited in the information it returns, requires the web-service to posses a valid region name and IP address, and can do nothing more than confirm that they are valid; if the IP address is incorrect then no data is returned (or some error, anything other than &amp;lt;tt&amp;gt;OK&amp;lt;/tt&amp;gt; is considered to mean the combo was invalid or the operation is unsupported).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;A DDOS attack against the grid servie is a very real possibility. A solution&lt;br /&gt;
needs to include ratelimiting&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Haravikk Mistral</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/User:Haravikk_Mistral/RegionVerification</id>
		<title>User:Haravikk Mistral/RegionVerification</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:Haravikk_Mistral/RegionVerification"/>
				<updated>2017-08-14T22:21:45Z</updated>
		
		<summary type="html">&lt;p&gt;Haravikk Mistral: /* Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
== Problem ==&lt;br /&gt;
When receiving an HTTP request from a scripted object within an Open Simulator region, there is currently no means of verifying whether the request came from a legitimate source. For Second Life this is possible with a reverse DNS lookup on the IP address, if it has a valid &amp;lt;tt&amp;gt;simXXXX.&amp;lt;grid&amp;gt;.lindenlab.com&amp;lt;/tt&amp;gt; address you can confirm that the request came from a legitimate source, but such a technique is not possible with Open Simulator based grids.&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution ==&lt;br /&gt;
This proposal is to provide a call-back mechanism with which a web-service, [[User:Haravikk Mistral/ExpandedGridInfoAvailability|knowing the source grid]], region name and simulator IP address, can query the source grid to verify whether the IP address and region name are valid, i.e- asking the grid to confirm that it has a simulator with a given IP address, hosting the given region name.&lt;br /&gt;
&lt;br /&gt;
= Detailed Design =&lt;br /&gt;
== The Callback Service ==&lt;br /&gt;
Essentially what this feature boils down to is a callback service, implemented in much the same way as the [[GridInfo]] protocol. The proposed protocol would take the form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;http://example.org:9000/verify_region?name=Some%20Region&amp;amp;ip=123.123.123.123&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To which the server would respond simply 'OK' if there exists a region named &amp;quot;Some Region&amp;quot;, hosted by a simulator with IP address &amp;lt;tt&amp;gt;123.123.123.123&amp;lt;/tt&amp;gt;, or else 'NO' if there exists no region by that name assigned to that IP. Thus a web service knows either that the combo exists (OK), doesn't exist (NO) or that the grid cannot or will not verify it (any other response).&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
The following example assumes the presence of the &amp;lt;tt&amp;gt;X-OpenSim-Location&amp;lt;/tt&amp;gt; as proposed [[User:Haravikk Mistral/ExpandedGridInfoAvailability|here]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;?php&lt;br /&gt;
function fetch(array $array, $key, $default = null) { return (isset($array[$key])) ? $array[$key] : $default; }&lt;br /&gt;
&lt;br /&gt;
// TODO: Verify basic headers first (since they require no callbacks)&lt;br /&gt;
&lt;br /&gt;
if (isset($_SERVER['HTTP_X_OPENSIM_LOCATION'])) {&lt;br /&gt;
    $uri = parse_url($_SERVER['HTTP_X_OPENSIM_LOCATION']);&lt;br /&gt;
    if ((fetch($uri, 'scheme') == 'x-grid-info') || !$host = fetch($uri, 'host')) { die('Invalid URI'); }&lt;br /&gt;
&lt;br /&gt;
    $grid_address = $host . (($port = fetch($uri, 'port')) ? &amp;quot;:$port&amp;quot; : '');&lt;br /&gt;
    if (!preg_match(';^/region/([0-9]*[^0-9/]+[^/]*)((?:/([0-9]+)(?:/([0-9]+)(?:/([0-9]+))?)?)?;i', fetch($uri, 'path'), $match)) { die('Invalid URI'); }&lt;br /&gt;
&lt;br /&gt;
    $region_name = urldecode($match[1]); $coords = [];&lt;br /&gt;
    if (strlen($match[2]) &amp;amp;&amp;amp; strlen($match[3])) { // 2-D coords&lt;br /&gt;
        $coords = [(int)$match[2], (int)$match[3]];&lt;br /&gt;
        if (strlen($match[4])) { $coords[] = (int)$match[4]; }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // TODO: Look up $grid_address and $_SERVER['REMOTE_ADDR'] in database, if they have been confirmed recently then don't do it again&lt;br /&gt;
&lt;br /&gt;
    // Host is unconfirmed, try to confirm it now&lt;br /&gt;
    $curl = curl_init(&amp;quot;http://$grid_address/verify_region?region=&amp;quot; . urlencode($region_name) . '&amp;amp;ip=' . $_SERVER['REMOTE_ADDR']);&lt;br /&gt;
    curl_setopts_array($curl = [CURLOPT_RETURNTRANSFER =&amp;gt; true, CURLOPT_FOLLOWLOCATION =&amp;gt; true]);&lt;br /&gt;
    $response = curl_exec($curl);&lt;br /&gt;
    if ((curl_errno($curl) != 0) || (curl_getinfo($curl, CURLINFO_HTTP_CODE) != 200)) { die('Error occurred verifying region'); }&lt;br /&gt;
    curl_close($curl);&lt;br /&gt;
&lt;br /&gt;
    switch($response) {&lt;br /&gt;
        case 'OK':&lt;br /&gt;
            // The grid confirmed the region and IP combo, we should cache it in our database to avoid repeated lookups&lt;br /&gt;
        break;&lt;br /&gt;
        case 'NO':&lt;br /&gt;
            die('Invalid region/IP');&lt;br /&gt;
        break;&lt;br /&gt;
        default:&lt;br /&gt;
            // TODO: Use some kind of fallback or &amp;quot;untrusted&amp;quot; behaviour instead&lt;br /&gt;
            die('Unable to verify region/IP');&lt;br /&gt;
        break;&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Alternatives Considered ==&lt;br /&gt;
An alternative protocol for the verification would be to have the grid return some information about a region in an XML format. For example, a request for &amp;quot;Some Region&amp;quot; could return details such as its map location and IP, with the web-service extracting the IP itself to confirm. However, this raises the question of how much data should be revealed, and whether the ability to scrape by region name is desirable or not.&lt;br /&gt;
&lt;br /&gt;
The proposed system above, while limited in the information it returns, requires the web-service to posses a valid region name and IP address, and can do nothing more than confirm that they are valid; if the IP address is incorrect then no data is returned (or some error, anything other than &amp;lt;tt&amp;gt;OK&amp;lt;/tt&amp;gt; is considered to mean the combo was invalid or the operation is unsupported).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;A DDOS attack against the grid servie is a very real possibility. A solution&lt;br /&gt;
needs to include ratelimiting&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Haravikk Mistral</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/User:Haravikk_Mistral/RegionVerification</id>
		<title>User:Haravikk Mistral/RegionVerification</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:Haravikk_Mistral/RegionVerification"/>
				<updated>2017-08-14T22:15:37Z</updated>
		
		<summary type="html">&lt;p&gt;Haravikk Mistral: /* Problem */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
== Problem ==&lt;br /&gt;
When receiving an HTTP request from a scripted object within an Open Simulator region, there is currently no means of verifying whether the request came from a legitimate source. For Second Life this is possible with a reverse DNS lookup on the IP address, if it has a valid &amp;lt;tt&amp;gt;simXXXX.&amp;lt;grid&amp;gt;.lindenlab.com&amp;lt;/tt&amp;gt; address you can confirm that the request came from a legitimate source, but such a technique is not possible with Open Simulator based grids.&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution ==&lt;br /&gt;
This proposal is to provide a call-back mechanism with which a web-service, [[User:Haravikk Mistral/ExpandedGridInfoAvailability|knowing the source grid]], region name and simulator IP address, can query the source grid to verify whether the IP address and region name are valid, i.e- asking the grid to confirm that it has a simulator with a given IP address, hosting the given region name.&lt;br /&gt;
&lt;br /&gt;
= Detailed Design =&lt;br /&gt;
== The Callback Service ==&lt;br /&gt;
Essentially what this feature boils down to is a callback service, implemented in much the same way as the [[GridInfo]] protocol. The proposed protocol would take the form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;http://example.org:9000/verify_region?name=Some%20Region&amp;amp;ip=123.123.123.123&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To which the server would respond simply 'OK' if there exists a region named &amp;quot;Some Region&amp;quot;, hosted by a simulator with IP address &amp;lt;tt&amp;gt;123.123.123.123&amp;lt;/tt&amp;gt;, or else 'NO' if there exists no region by that name assigned to that IP. Thus a web service knows either that the combo exists (OK), doesn't exist (NO) or that the grid cannot or will not verify it (any other response).&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
The following example assumes the presence of the &amp;lt;tt&amp;gt;X-OpenSim-Location&amp;lt;/tt&amp;gt; as proposed [[User:Haravikk Mistral/ExpandedGridInfoAvailability|here]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;?php&lt;br /&gt;
function fetch(array $array, $key, $default = null) { return (isset($array[$key])) ? $array[$key] : $default; }&lt;br /&gt;
&lt;br /&gt;
// TODO: Verify basic headers first (since they require no callbacks)&lt;br /&gt;
&lt;br /&gt;
if (isset($_SERVER['HTTP_X_OPENSIM_LOCATION'])) {&lt;br /&gt;
    $uri = parse_url($_SERVER['HTTP_X_OPENSIM_LOCATION']);&lt;br /&gt;
    if ((fetch($uri, 'scheme') == 'x-grid-location') || !$host = fetch($uri, 'host')) { die('Invalid URI'); }&lt;br /&gt;
&lt;br /&gt;
    $grid_address = $host . (($port = fetch($uri, 'port')) ? &amp;quot;:$port&amp;quot; : '');&lt;br /&gt;
    if (!preg_match(';^/region/([0-9]*[^0-9/]+[^/]*)((?:/([0-9]+)(?:/([0-9]+)(?:/([0-9]+))?)?)?;i', fetch($uri, 'path'), $match)) { die('Invalid URI'); }&lt;br /&gt;
&lt;br /&gt;
    $region_name = urldecode($match[1]); $coords = [];&lt;br /&gt;
    if (strlen($match[2]) &amp;amp;&amp;amp; strlen($match[3])) { // 2-D coords&lt;br /&gt;
        $coords = [(int)$match[2], (int)$match[3]];&lt;br /&gt;
        if (strlen($match[4])) { $coords[] = (int)$match[4]; }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // TODO: Look up $grid_address and $_SERVER['REMOTE_ADDR'] in database, if they have been confirmed recently then don't do it again&lt;br /&gt;
&lt;br /&gt;
    // Host is unconfirmed, try to confirm it now&lt;br /&gt;
    $curl = curl_init(&amp;quot;http://$grid_address/verify_region?region=&amp;quot; . urlencode($region_name) . '&amp;amp;ip=' . $_SERVER['REMOTE_ADDR']);&lt;br /&gt;
    curl_setopts_array($curl = [CURLOPT_RETURNTRANSFER =&amp;gt; true, CURLOPT_FOLLOWLOCATION =&amp;gt; true]);&lt;br /&gt;
    $response = curl_exec($curl);&lt;br /&gt;
    if ((curl_errno($curl) != 0) || (curl_getinfo($curl, CURLINFO_HTTP_CODE) != 200)) { die('Error occurred verifying region'); }&lt;br /&gt;
    curl_close($curl);&lt;br /&gt;
&lt;br /&gt;
    switch($response) {&lt;br /&gt;
        case 'OK':&lt;br /&gt;
            // The grid confirmed the region and IP combo, we should cache it in our database to avoid repeated lookups&lt;br /&gt;
        break;&lt;br /&gt;
        case 'NO':&lt;br /&gt;
            die('Invalid region/IP');&lt;br /&gt;
        break;&lt;br /&gt;
        default:&lt;br /&gt;
            // TODO: Use some kind of fallback or &amp;quot;untrusted&amp;quot; behaviour instead&lt;br /&gt;
            die('Unable to verify region/IP');&lt;br /&gt;
        break;&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Alternatives Considered ==&lt;br /&gt;
An alternative protocol for the verification would be to have the grid return some information about a region in an XML format. For example, a request for &amp;quot;Some Region&amp;quot; could return details such as its map location and IP, with the web-service extracting the IP itself to confirm. However, this raises the question of how much data should be revealed, and whether the ability to scrape by region name is desirable or not.&lt;br /&gt;
&lt;br /&gt;
The proposed system above, while limited in the information it returns, requires the web-service to posses a valid region name and IP address, and can do nothing more than confirm that they are valid; if the IP address is incorrect then no data is returned (or some error, anything other than &amp;lt;tt&amp;gt;OK&amp;lt;/tt&amp;gt; is considered to mean the combo was invalid or the operation is unsupported).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;A DDOS attack against the grid servie is a very real possibility. A solution&lt;br /&gt;
needs to include ratelimiting&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Haravikk Mistral</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/User:Haravikk_Mistral/ExpandedGridInfoAvailability</id>
		<title>User:Haravikk Mistral/ExpandedGridInfoAvailability</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:Haravikk_Mistral/ExpandedGridInfoAvailability"/>
				<updated>2017-08-14T22:15:04Z</updated>
		
		<summary type="html">&lt;p&gt;Haravikk Mistral: /* Alternatives Considered */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
== Problem ==&lt;br /&gt;
An avatar's UUID is not guaranteed to be unique, thus it remains a possibility that two avatars on two different grids could have the same UUID either by accident or by design. This is compounded by a general lack of access to grid info, as many useful functions are restricted to an OSSL threat level of Low, placing them above the OSSL default threat level of VeryLow.&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution ==&lt;br /&gt;
The proposal is to make grid-awareness more readily available to scripts, and to any services with which they may communicate, making it easier to record an avatar, region, object etc. not only by UUID, but also by grid, thus ensuring no possibility of a cross-grid collision. For scripts and services this means that data can be more easily partitioned by the grid to which it belongs, and roaming avatars can be recorded differently (or ignored altogether), and cross-grid data handled more intelligently.&lt;br /&gt;
&lt;br /&gt;
= Detailed Design =&lt;br /&gt;
== Reduced Threat Levels ==&lt;br /&gt;
The first step to this proposal is to reduce the threat level of the following functions to VeryLow or None:&lt;br /&gt;
&lt;br /&gt;
* [[osGetAvatarHomeURI]]()&lt;br /&gt;
* [[osGetGridCustom]]()&lt;br /&gt;
* [[osGetGridGatekeeperURI]]()&lt;br /&gt;
* [[osGetGridHomeURI]]()&lt;br /&gt;
* [[osGetGridLoginURI]]()&lt;br /&gt;
&lt;br /&gt;
At a minimum, only [[osGetAvatarHomeURI]]() and [[osGetGridHomeURI]]() are required, however it is unclear why any of the above functions are rated above VeryLow to begin with, as all of this information is readily available to any connecting viewer, so it seems strange that objects within an actual region upon a grid should have such restricted access to their own environment; in terms of security there is no real threat to relaxing restrictions on these functions, as at best all they can do is try to provide security through obscurity, which is no real protection at all.&lt;br /&gt;
&lt;br /&gt;
== X-Grid-Location Header ==&lt;br /&gt;
This step proposes simply to add an additional header to all outgoing HTTP requests generated by [https://wiki.secondlife.com/wiki/LlHTTPRequest llHTTPRequest()]. The proposed format for this header is as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;X-OpenSim-Location: x-grid-info://example.org:9000/region/Some%20Region/1/2/3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The header provides an &amp;lt;tt&amp;gt;x-grid-info://&amp;lt;/tt&amp;gt; URI as supported by most Open Simulator compatible clients; while the URI provides a full location including region name and coordinates, the only new information is the grid's address, as the region name and coordinates are already provided by &amp;lt;tt&amp;gt;X-SecondLife-Region&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;X-SecondLife-Local-Position&amp;lt;/tt&amp;gt; respectively, and these should in fact match the path of the URI.&lt;br /&gt;
&lt;br /&gt;
The advantage of this header is that it eliminates the need for scripts themselves to add the information to requests in a non-standard way, and allows the information to be sent even if there is no access to any &amp;lt;tt&amp;gt;os*()&amp;lt;/tt&amp;gt; functions at all, as any up-to-date simulator would simply send the header automatically, including for existing scripts.&lt;br /&gt;
&lt;br /&gt;
This would be particularly useful when combined with the ability to [[User:Haravikk_Mistral/RegionVerification|verify a region]].&lt;br /&gt;
&lt;br /&gt;
== Alternatives Considered ==&lt;br /&gt;
The main alternative considered was generating some kind of grid UUID, probably by hashing the grid-address (i.e- a v5 UUID), with the idea being that this would avoid the need to send any actual details of the grid. The problem with this however is that it only makes things more awkward with no real benefit, as it would be fairly easy to identify common grids anyway, and hiding the address offers no real security for a grid, when this information is known by regions etc. anyway.&lt;br /&gt;
&lt;br /&gt;
Also, one key area for consideration is the naming of the proposed HTTP header, and which exact URI scheme it should use (would &amp;lt;tt&amp;gt;x-grid-location-info&amp;lt;/tt&amp;gt; be a better fit?).&lt;/div&gt;</summary>
		<author><name>Haravikk Mistral</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/User:Haravikk_Mistral/ExpandedGridInfoAvailability</id>
		<title>User:Haravikk Mistral/ExpandedGridInfoAvailability</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:Haravikk_Mistral/ExpandedGridInfoAvailability"/>
				<updated>2017-08-01T11:21:00Z</updated>
		
		<summary type="html">&lt;p&gt;Haravikk Mistral: /* X-Grid-Location Header */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
== Problem ==&lt;br /&gt;
An avatar's UUID is not guaranteed to be unique, thus it remains a possibility that two avatars on two different grids could have the same UUID either by accident or by design. This is compounded by a general lack of access to grid info, as many useful functions are restricted to an OSSL threat level of Low, placing them above the OSSL default threat level of VeryLow.&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution ==&lt;br /&gt;
The proposal is to make grid-awareness more readily available to scripts, and to any services with which they may communicate, making it easier to record an avatar, region, object etc. not only by UUID, but also by grid, thus ensuring no possibility of a cross-grid collision. For scripts and services this means that data can be more easily partitioned by the grid to which it belongs, and roaming avatars can be recorded differently (or ignored altogether), and cross-grid data handled more intelligently.&lt;br /&gt;
&lt;br /&gt;
= Detailed Design =&lt;br /&gt;
== Reduced Threat Levels ==&lt;br /&gt;
The first step to this proposal is to reduce the threat level of the following functions to VeryLow or None:&lt;br /&gt;
&lt;br /&gt;
* [[osGetAvatarHomeURI]]()&lt;br /&gt;
* [[osGetGridCustom]]()&lt;br /&gt;
* [[osGetGridGatekeeperURI]]()&lt;br /&gt;
* [[osGetGridHomeURI]]()&lt;br /&gt;
* [[osGetGridLoginURI]]()&lt;br /&gt;
&lt;br /&gt;
At a minimum, only [[osGetAvatarHomeURI]]() and [[osGetGridHomeURI]]() are required, however it is unclear why any of the above functions are rated above VeryLow to begin with, as all of this information is readily available to any connecting viewer, so it seems strange that objects within an actual region upon a grid should have such restricted access to their own environment; in terms of security there is no real threat to relaxing restrictions on these functions, as at best all they can do is try to provide security through obscurity, which is no real protection at all.&lt;br /&gt;
&lt;br /&gt;
== X-Grid-Location Header ==&lt;br /&gt;
This step proposes simply to add an additional header to all outgoing HTTP requests generated by [https://wiki.secondlife.com/wiki/LlHTTPRequest llHTTPRequest()]. The proposed format for this header is as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;X-OpenSim-Location: x-grid-info://example.org:9000/region/Some%20Region/1/2/3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The header provides an &amp;lt;tt&amp;gt;x-grid-info://&amp;lt;/tt&amp;gt; URI as supported by most Open Simulator compatible clients; while the URI provides a full location including region name and coordinates, the only new information is the grid's address, as the region name and coordinates are already provided by &amp;lt;tt&amp;gt;X-SecondLife-Region&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;X-SecondLife-Local-Position&amp;lt;/tt&amp;gt; respectively, and these should in fact match the path of the URI.&lt;br /&gt;
&lt;br /&gt;
The advantage of this header is that it eliminates the need for scripts themselves to add the information to requests in a non-standard way, and allows the information to be sent even if there is no access to any &amp;lt;tt&amp;gt;os*()&amp;lt;/tt&amp;gt; functions at all, as any up-to-date simulator would simply send the header automatically, including for existing scripts.&lt;br /&gt;
&lt;br /&gt;
This would be particularly useful when combined with the ability to [[User:Haravikk_Mistral/RegionVerification|verify a region]].&lt;br /&gt;
&lt;br /&gt;
== Alternatives Considered ==&lt;br /&gt;
The main alternative considered was generating some kind of grid UUID, probably by hashing the grid-address (i.e- a v5 UUID), with the idea being that this would avoid the need to send any actual details of the grid. The problem with this however is that it only makes things more awkward with no real benefit, as it would be fairly easy to identify common grids anyway, and hiding the address offers no real security for a grid, when this information is known by regions etc. anyway.&lt;br /&gt;
&lt;br /&gt;
Also, one key area for consideration is the naming of the proposed HTTP header, and which exact URI scheme it should use (would &amp;lt;tt&amp;gt;x-grid-info&amp;lt;/tt&amp;gt; be a better fit?).&lt;/div&gt;</summary>
		<author><name>Haravikk Mistral</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/User:Haravikk_Mistral/ExpandedGridInfoAvailability</id>
		<title>User:Haravikk Mistral/ExpandedGridInfoAvailability</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:Haravikk_Mistral/ExpandedGridInfoAvailability"/>
				<updated>2017-08-01T11:19:10Z</updated>
		
		<summary type="html">&lt;p&gt;Haravikk Mistral: /* X-Grid-Location Header */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
== Problem ==&lt;br /&gt;
An avatar's UUID is not guaranteed to be unique, thus it remains a possibility that two avatars on two different grids could have the same UUID either by accident or by design. This is compounded by a general lack of access to grid info, as many useful functions are restricted to an OSSL threat level of Low, placing them above the OSSL default threat level of VeryLow.&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution ==&lt;br /&gt;
The proposal is to make grid-awareness more readily available to scripts, and to any services with which they may communicate, making it easier to record an avatar, region, object etc. not only by UUID, but also by grid, thus ensuring no possibility of a cross-grid collision. For scripts and services this means that data can be more easily partitioned by the grid to which it belongs, and roaming avatars can be recorded differently (or ignored altogether), and cross-grid data handled more intelligently.&lt;br /&gt;
&lt;br /&gt;
= Detailed Design =&lt;br /&gt;
== Reduced Threat Levels ==&lt;br /&gt;
The first step to this proposal is to reduce the threat level of the following functions to VeryLow or None:&lt;br /&gt;
&lt;br /&gt;
* [[osGetAvatarHomeURI]]()&lt;br /&gt;
* [[osGetGridCustom]]()&lt;br /&gt;
* [[osGetGridGatekeeperURI]]()&lt;br /&gt;
* [[osGetGridHomeURI]]()&lt;br /&gt;
* [[osGetGridLoginURI]]()&lt;br /&gt;
&lt;br /&gt;
At a minimum, only [[osGetAvatarHomeURI]]() and [[osGetGridHomeURI]]() are required, however it is unclear why any of the above functions are rated above VeryLow to begin with, as all of this information is readily available to any connecting viewer, so it seems strange that objects within an actual region upon a grid should have such restricted access to their own environment; in terms of security there is no real threat to relaxing restrictions on these functions, as at best all they can do is try to provide security through obscurity, which is no real protection at all.&lt;br /&gt;
&lt;br /&gt;
== X-Grid-Location Header ==&lt;br /&gt;
This step proposes simply to add an additional header to all outgoing HTTP requests generated by [https://wiki.secondlife.com/wiki/LlHTTPRequest llHTTPRequest()]. The proposed format for this header is as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;X-OpenSim-Location: x-grid-location-info://example.org:9000/region/Some%20Region/1/2/3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The header provides an &amp;lt;tt&amp;gt;x-grid-location-info://&amp;lt;/tt&amp;gt; URI as supported by most Open Simulator compatible clients; while the URI provides a full location including region name and coordinates, the only new information is the grid's address, as the region name and coordinates are already provided by &amp;lt;tt&amp;gt;X-SecondLife-Region&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;X-SecondLife-Local-Position&amp;lt;/tt&amp;gt; respectively, and these should in fact match the path of the URI.&lt;br /&gt;
&lt;br /&gt;
The advantage of this header is that it eliminates the need for scripts themselves to add the information to requests in a non-standard way, and allows the information to be sent even if there is no access to any &amp;lt;tt&amp;gt;os*()&amp;lt;/tt&amp;gt; functions at all, as any up-to-date simulator would simply send the header automatically, including for existing scripts.&lt;br /&gt;
&lt;br /&gt;
This would be particularly useful when combined with the ability to [[User:Haravikk_Mistral/RegionVerification|verify a region]].&lt;br /&gt;
&lt;br /&gt;
== Alternatives Considered ==&lt;br /&gt;
The main alternative considered was generating some kind of grid UUID, probably by hashing the grid-address (i.e- a v5 UUID), with the idea being that this would avoid the need to send any actual details of the grid. The problem with this however is that it only makes things more awkward with no real benefit, as it would be fairly easy to identify common grids anyway, and hiding the address offers no real security for a grid, when this information is known by regions etc. anyway.&lt;br /&gt;
&lt;br /&gt;
Also, one key area for consideration is the naming of the proposed HTTP header, and which exact URI scheme it should use (would &amp;lt;tt&amp;gt;x-grid-info&amp;lt;/tt&amp;gt; be a better fit?).&lt;/div&gt;</summary>
		<author><name>Haravikk Mistral</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/User:Haravikk_Mistral/ExpandedGridInfoAvailability</id>
		<title>User:Haravikk Mistral/ExpandedGridInfoAvailability</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:Haravikk_Mistral/ExpandedGridInfoAvailability"/>
				<updated>2017-07-31T14:11:31Z</updated>
		
		<summary type="html">&lt;p&gt;Haravikk Mistral: /* Alternatives Considered */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
== Problem ==&lt;br /&gt;
An avatar's UUID is not guaranteed to be unique, thus it remains a possibility that two avatars on two different grids could have the same UUID either by accident or by design. This is compounded by a general lack of access to grid info, as many useful functions are restricted to an OSSL threat level of Low, placing them above the OSSL default threat level of VeryLow.&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution ==&lt;br /&gt;
The proposal is to make grid-awareness more readily available to scripts, and to any services with which they may communicate, making it easier to record an avatar, region, object etc. not only by UUID, but also by grid, thus ensuring no possibility of a cross-grid collision. For scripts and services this means that data can be more easily partitioned by the grid to which it belongs, and roaming avatars can be recorded differently (or ignored altogether), and cross-grid data handled more intelligently.&lt;br /&gt;
&lt;br /&gt;
= Detailed Design =&lt;br /&gt;
== Reduced Threat Levels ==&lt;br /&gt;
The first step to this proposal is to reduce the threat level of the following functions to VeryLow or None:&lt;br /&gt;
&lt;br /&gt;
* [[osGetAvatarHomeURI]]()&lt;br /&gt;
* [[osGetGridCustom]]()&lt;br /&gt;
* [[osGetGridGatekeeperURI]]()&lt;br /&gt;
* [[osGetGridHomeURI]]()&lt;br /&gt;
* [[osGetGridLoginURI]]()&lt;br /&gt;
&lt;br /&gt;
At a minimum, only [[osGetAvatarHomeURI]]() and [[osGetGridHomeURI]]() are required, however it is unclear why any of the above functions are rated above VeryLow to begin with, as all of this information is readily available to any connecting viewer, so it seems strange that objects within an actual region upon a grid should have such restricted access to their own environment; in terms of security there is no real threat to relaxing restrictions on these functions, as at best all they can do is try to provide security through obscurity, which is no real protection at all.&lt;br /&gt;
&lt;br /&gt;
== X-Grid-Location Header ==&lt;br /&gt;
This step proposes simply to add an additional header to all outgoing HTTP requests generated by [https://wiki.secondlife.com/wiki/LlHTTPRequest llHTTPRequest()]. The proposed format for this header is as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;X-OpenSim-Location: x-grid-location://example.org:9000/region/Some%20Region/1/2/3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The header provides an &amp;lt;tt&amp;gt;x-grid-location://&amp;lt;/tt&amp;gt; URI as supported by most Open Simulator compatible clients; while the URI provides a full location including region name and coordinates, the only new information is the grid's address, as the region name and coordinates are already provided by &amp;lt;tt&amp;gt;X-SecondLife-Region&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;X-SecondLife-Local-Position&amp;lt;/tt&amp;gt; respectively, and these should in fact match the path of the URI.&lt;br /&gt;
&lt;br /&gt;
The advantage of this header is that it eliminates the need for scripts themselves to add the information to requests in a non-standard way, and allows the information to be sent even if there is no access to any &amp;lt;tt&amp;gt;os*()&amp;lt;/tt&amp;gt; functions at all, as any up-to-date simulator would simply send the header automatically, including for existing scripts.&lt;br /&gt;
&lt;br /&gt;
This would be particularly useful when combined with the ability to [[User:Haravikk_Mistral/RegionVerification|verify a region]].&lt;br /&gt;
&lt;br /&gt;
== Alternatives Considered ==&lt;br /&gt;
The main alternative considered was generating some kind of grid UUID, probably by hashing the grid-address (i.e- a v5 UUID), with the idea being that this would avoid the need to send any actual details of the grid. The problem with this however is that it only makes things more awkward with no real benefit, as it would be fairly easy to identify common grids anyway, and hiding the address offers no real security for a grid, when this information is known by regions etc. anyway.&lt;br /&gt;
&lt;br /&gt;
Also, one key area for consideration is the naming of the proposed HTTP header, and which exact URI scheme it should use (would &amp;lt;tt&amp;gt;x-grid-info&amp;lt;/tt&amp;gt; be a better fit?).&lt;/div&gt;</summary>
		<author><name>Haravikk Mistral</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/User:Haravikk_Mistral/ExpandedGridInfoAvailability</id>
		<title>User:Haravikk Mistral/ExpandedGridInfoAvailability</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:Haravikk_Mistral/ExpandedGridInfoAvailability"/>
				<updated>2017-07-31T13:50:46Z</updated>
		
		<summary type="html">&lt;p&gt;Haravikk Mistral: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
== Problem ==&lt;br /&gt;
An avatar's UUID is not guaranteed to be unique, thus it remains a possibility that two avatars on two different grids could have the same UUID either by accident or by design. This is compounded by a general lack of access to grid info, as many useful functions are restricted to an OSSL threat level of Low, placing them above the OSSL default threat level of VeryLow.&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution ==&lt;br /&gt;
The proposal is to make grid-awareness more readily available to scripts, and to any services with which they may communicate, making it easier to record an avatar, region, object etc. not only by UUID, but also by grid, thus ensuring no possibility of a cross-grid collision. For scripts and services this means that data can be more easily partitioned by the grid to which it belongs, and roaming avatars can be recorded differently (or ignored altogether), and cross-grid data handled more intelligently.&lt;br /&gt;
&lt;br /&gt;
= Detailed Design =&lt;br /&gt;
== Reduced Threat Levels ==&lt;br /&gt;
The first step to this proposal is to reduce the threat level of the following functions to VeryLow or None:&lt;br /&gt;
&lt;br /&gt;
* [[osGetAvatarHomeURI]]()&lt;br /&gt;
* [[osGetGridCustom]]()&lt;br /&gt;
* [[osGetGridGatekeeperURI]]()&lt;br /&gt;
* [[osGetGridHomeURI]]()&lt;br /&gt;
* [[osGetGridLoginURI]]()&lt;br /&gt;
&lt;br /&gt;
At a minimum, only [[osGetAvatarHomeURI]]() and [[osGetGridHomeURI]]() are required, however it is unclear why any of the above functions are rated above VeryLow to begin with, as all of this information is readily available to any connecting viewer, so it seems strange that objects within an actual region upon a grid should have such restricted access to their own environment; in terms of security there is no real threat to relaxing restrictions on these functions, as at best all they can do is try to provide security through obscurity, which is no real protection at all.&lt;br /&gt;
&lt;br /&gt;
== X-Grid-Location Header ==&lt;br /&gt;
This step proposes simply to add an additional header to all outgoing HTTP requests generated by [https://wiki.secondlife.com/wiki/LlHTTPRequest llHTTPRequest()]. The proposed format for this header is as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;X-OpenSim-Location: x-grid-location://example.org:9000/region/Some%20Region/1/2/3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The header provides an &amp;lt;tt&amp;gt;x-grid-location://&amp;lt;/tt&amp;gt; URI as supported by most Open Simulator compatible clients; while the URI provides a full location including region name and coordinates, the only new information is the grid's address, as the region name and coordinates are already provided by &amp;lt;tt&amp;gt;X-SecondLife-Region&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;X-SecondLife-Local-Position&amp;lt;/tt&amp;gt; respectively, and these should in fact match the path of the URI.&lt;br /&gt;
&lt;br /&gt;
The advantage of this header is that it eliminates the need for scripts themselves to add the information to requests in a non-standard way, and allows the information to be sent even if there is no access to any &amp;lt;tt&amp;gt;os*()&amp;lt;/tt&amp;gt; functions at all, as any up-to-date simulator would simply send the header automatically, including for existing scripts.&lt;br /&gt;
&lt;br /&gt;
This would be particularly useful when combined with the ability to [[User:Haravikk_Mistral/RegionVerification|verify a region]].&lt;br /&gt;
&lt;br /&gt;
== Alternatives Considered ==&lt;br /&gt;
The main alternative considered was generating some kind of grid UUID, probably by hashing the grid-address (i.e- a v5 UUID), with the idea being that this would avoid the need to send any actual details of the grid. The problem with this however is that it only makes things more awkward with no real benefit, as it would be fairly easy to identify common grids anyway, and hiding the address offers no real security for a grid, when this information is known by regions etc. anyway.&lt;/div&gt;</summary>
		<author><name>Haravikk Mistral</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/User:Haravikk_Mistral/ExpandedGridInfoAvailability</id>
		<title>User:Haravikk Mistral/ExpandedGridInfoAvailability</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:Haravikk_Mistral/ExpandedGridInfoAvailability"/>
				<updated>2017-07-31T11:54:06Z</updated>
		
		<summary type="html">&lt;p&gt;Haravikk Mistral: /* X-Grid-Location Header */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
== Problem ==&lt;br /&gt;
An avatar's UUID is not guaranteed to be unique, thus it remains a possibility that two avatars on two different grids could have the same UUID either by accident or by design. This is compounded by a general lack of access to grid info, as many useful functions are restricted to an OSSL threat level of Low, placing them above the OSSL default threat level of VeryLow.&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution ==&lt;br /&gt;
The proposal is to make grid-awareness more readily available to scripts, and to any services with which they may communicate, making it easier to record an avatar, region, object etc. not only by UUID, but also by grid, thus ensuring no possibility of a cross-grid collision. For scripts and services this means that data can be more easily partitioned by the grid to which it belongs, and roaming avatars can be recorded differently (or ignored altogether).&lt;br /&gt;
&lt;br /&gt;
= Detailed Design =&lt;br /&gt;
== Reduced Threat Levels ==&lt;br /&gt;
The first step to this proposal is to reduce the threat level of the following functions to VeryLow or None:&lt;br /&gt;
&lt;br /&gt;
* [[osGetAvatarHomeURI]]()&lt;br /&gt;
* [[osGetGridCustom]]()&lt;br /&gt;
* [[osGetGridGatekeeperURI]]()&lt;br /&gt;
* [[osGetGridHomeURI]]()&lt;br /&gt;
* [[osGetGridLoginURI]]()&lt;br /&gt;
&lt;br /&gt;
At a minimum, only [[osGetAvatarHomeURI]]() and [[osGetGridHomeURI]]() are required, however it is unclear why any of the above functions are rated above VeryLow to begin with, as all of this information is readily available to any connecting viewer, so it seems strange that objects within an actual region upon a grid should have such restricted access to their own environment; in terms of security there is no real threat to relaxing restrictions on these functions, as at best all they can do is try to provide security through obscurity, which is no real protection at all.&lt;br /&gt;
&lt;br /&gt;
== X-Grid-Location Header ==&lt;br /&gt;
This step proposes simply to add an additional header to all outgoing HTTP requests generated by [https://wiki.secondlife.com/wiki/LlHTTPRequest llHTTPRequest()]. The proposed format for this header is as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;X-OpenSim-Location: x-grid-location://example.org:9000/region/Some%20Region/1/2/3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The header provides an &amp;lt;tt&amp;gt;x-grid-location://&amp;lt;/tt&amp;gt; URI as supported by most Open Simulator compatible clients; while the URI provides a full location including region name and coordinates, the only new information is the grid's address, as the region name and coordinates are already provided by &amp;lt;tt&amp;gt;X-SecondLife-Region&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;X-SecondLife-Local-Position&amp;lt;/tt&amp;gt; respectively, and these should in fact match the path of the URI.&lt;br /&gt;
&lt;br /&gt;
The advantage of this header is that it eliminates the need for scripts themselves to add the information to requests in a non-standard way, and allows the information to be sent even if there is no access to any &amp;lt;tt&amp;gt;os*()&amp;lt;/tt&amp;gt; functions at all, as any up-to-date simulator would simply send the header automatically, including for existing scripts.&lt;br /&gt;
&lt;br /&gt;
This would be particularly useful when combined with the ability to [[User:Haravikk_Mistral/RegionVerification|verify a region]].&lt;br /&gt;
&lt;br /&gt;
== Alternatives Considered ==&lt;br /&gt;
The main alternative considered was generating some kind of grid UUID, probably by hashing the grid-address (i.e- a v5 UUID), with the idea being that this would avoid the need to send any actual details of the grid. The problem with this however is that it only makes things more awkward with no real benefit, as it would be fairly easy to identify common grids anyway, and hiding the address offers no real security for a grid, when this information is known by regions etc. anyway.&lt;/div&gt;</summary>
		<author><name>Haravikk Mistral</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/User:Haravikk_Mistral/ExpandedGridInfoAvailability</id>
		<title>User:Haravikk Mistral/ExpandedGridInfoAvailability</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:Haravikk_Mistral/ExpandedGridInfoAvailability"/>
				<updated>2017-07-31T11:53:06Z</updated>
		
		<summary type="html">&lt;p&gt;Haravikk Mistral: Created page with &amp;quot;= Overview = == Problem == An avatar's UUID is not guaranteed to be unique, thus it remains a possibility that two avatars on two different grids could have the same UUID eith...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
== Problem ==&lt;br /&gt;
An avatar's UUID is not guaranteed to be unique, thus it remains a possibility that two avatars on two different grids could have the same UUID either by accident or by design. This is compounded by a general lack of access to grid info, as many useful functions are restricted to an OSSL threat level of Low, placing them above the OSSL default threat level of VeryLow.&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution ==&lt;br /&gt;
The proposal is to make grid-awareness more readily available to scripts, and to any services with which they may communicate, making it easier to record an avatar, region, object etc. not only by UUID, but also by grid, thus ensuring no possibility of a cross-grid collision. For scripts and services this means that data can be more easily partitioned by the grid to which it belongs, and roaming avatars can be recorded differently (or ignored altogether).&lt;br /&gt;
&lt;br /&gt;
= Detailed Design =&lt;br /&gt;
== Reduced Threat Levels ==&lt;br /&gt;
The first step to this proposal is to reduce the threat level of the following functions to VeryLow or None:&lt;br /&gt;
&lt;br /&gt;
* [[osGetAvatarHomeURI]]()&lt;br /&gt;
* [[osGetGridCustom]]()&lt;br /&gt;
* [[osGetGridGatekeeperURI]]()&lt;br /&gt;
* [[osGetGridHomeURI]]()&lt;br /&gt;
* [[osGetGridLoginURI]]()&lt;br /&gt;
&lt;br /&gt;
At a minimum, only [[osGetAvatarHomeURI]]() and [[osGetGridHomeURI]]() are required, however it is unclear why any of the above functions are rated above VeryLow to begin with, as all of this information is readily available to any connecting viewer, so it seems strange that objects within an actual region upon a grid should have such restricted access to their own environment; in terms of security there is no real threat to relaxing restrictions on these functions, as at best all they can do is try to provide security through obscurity, which is no real protection at all.&lt;br /&gt;
&lt;br /&gt;
== X-Grid-Location Header ==&lt;br /&gt;
This step proposes simply to add an additional header to all outgoing HTTP requests generated by [https://wiki.secondlife.com/wiki/LlHTTPRequest llHTTPRequest()]. The proposed format for this header is as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;X-OpenSim-Location: x-grid-location://example.org:9000/region/Some%20Region/1/2/3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The header provides an &amp;lt;tt&amp;gt;x-grid-location://&amp;lt;/tt&amp;gt; URI as supported by most Open Simulator compatible clients; while the URI provides a full location including region name and coordinates, the only new information is the grid's address, as the region name and coordinates are already provided by &amp;lt;tt&amp;gt;X-SecondLife-Region&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;X-SecondLife-Local-Position&amp;lt;/tt&amp;gt; respectively, and these should in fact match the path of the URI.&lt;br /&gt;
&lt;br /&gt;
The advantage of this header is that it eliminates the need for scripts themselves to add the information to requests in a non-standard way, and allows the information to be sent even if there is no access to any &amp;lt;tt&amp;gt;os*()&amp;lt;/tt&amp;gt; functions at all, as any up-to-date simulator would simply send the header automatically, including for existing scripts.&lt;br /&gt;
&lt;br /&gt;
== Alternatives Considered ==&lt;br /&gt;
The main alternative considered was generating some kind of grid UUID, probably by hashing the grid-address (i.e- a v5 UUID), with the idea being that this would avoid the need to send any actual details of the grid. The problem with this however is that it only makes things more awkward with no real benefit, as it would be fairly easy to identify common grids anyway, and hiding the address offers no real security for a grid, when this information is known by regions etc. anyway.&lt;/div&gt;</summary>
		<author><name>Haravikk Mistral</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/User:Haravikk_Mistral/RegionVerification</id>
		<title>User:Haravikk Mistral/RegionVerification</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:Haravikk_Mistral/RegionVerification"/>
				<updated>2017-07-31T11:43:17Z</updated>
		
		<summary type="html">&lt;p&gt;Haravikk Mistral: Created page with &amp;quot;= Overview = == Problem == When receiving an HTTP request from a scripted object within an Open Simulator region, there is currently no means of verifying whether the request ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
== Problem ==&lt;br /&gt;
When receiving an HTTP request from a scripted object within an Open Simulator region, there is currently no means of verifying whether the request came from a legitimate source. For Second Life this is possible with a reverse DNS lookup on the IP address, and if has a valid &amp;lt;tt&amp;gt;simXXXX.&amp;lt;grid&amp;gt;.lindenlab.com&amp;lt;/tt&amp;gt; address you can confirm that the request came from a legitimate source, but such a technique is not possible with Open Simulator based grids.&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution ==&lt;br /&gt;
This proposal is to provide a call-back mechanism with which a web-service, [[User:Haravikk Mistral/ExpandedGridInfoAvailability|knowing the source grid]], region name and simulator IP address, can query the source grid to verify whether the IP address and region name are valid, i.e- asking the grid to confirm that it has a simulator with a given IP address, hosting the given region name.&lt;br /&gt;
&lt;br /&gt;
= Detailed Design =&lt;br /&gt;
== The Callback Service ==&lt;br /&gt;
Essentially what this feature boils down to is a callback service, implemented in much the same way as the [[GridInfo]] protocol. The proposed protocol would take the form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;http://example.org:9000/verify_region?name=Some%20Region&amp;amp;ip=123.123.123.123&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To which the server would respond simply 'OK' if there exists a region named &amp;quot;Some Region&amp;quot;, hosted by a simulator with IP address &amp;lt;tt&amp;gt;123.123.123.123&amp;lt;/tt&amp;gt;, or else 'NO' if there exists no region by that name assigned to that IP. Thus a web service knows either that the combo exists (OK), doesn't exist (NO) or that the grid cannot or will not verify it (any other response).&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
The following example assumes the presence of the &amp;lt;tt&amp;gt;X-OpenSim-Location&amp;lt;/tt&amp;gt; as proposed [[User:Haravikk Mistral/ExpandedGridInfoAvailability|here]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;?php&lt;br /&gt;
function fetch(array $array, $key, $default = null) { return (isset($array[$key])) ? $array[$key] : $default; }&lt;br /&gt;
&lt;br /&gt;
// TODO: Verify basic headers first (since they require no callbacks)&lt;br /&gt;
&lt;br /&gt;
if (isset($_SERVER['HTTP_X_OPENSIM_LOCATION'])) {&lt;br /&gt;
    $uri = parse_url($_SERVER['HTTP_X_OPENSIM_LOCATION']);&lt;br /&gt;
    if ((fetch($uri, 'scheme') == 'x-grid-location') || !$host = fetch($uri, 'host')) { die('Invalid URI'); }&lt;br /&gt;
&lt;br /&gt;
    $grid_address = $host . (($port = fetch($uri, 'port')) ? &amp;quot;:$port&amp;quot; : '');&lt;br /&gt;
    if (!preg_match(';^/region/([0-9]*[^0-9/]+[^/]*)((?:/([0-9]+)(?:/([0-9]+)(?:/([0-9]+))?)?)?;i', fetch($uri, 'path'), $match)) { die('Invalid URI'); }&lt;br /&gt;
&lt;br /&gt;
    $region_name = urldecode($match[1]); $coords = [];&lt;br /&gt;
    if (strlen($match[2]) &amp;amp;&amp;amp; strlen($match[3])) { // 2-D coords&lt;br /&gt;
        $coords = [(int)$match[2], (int)$match[3]];&lt;br /&gt;
        if (strlen($match[4])) { $coords[] = (int)$match[4]; }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // TODO: Look up $grid_address and $_SERVER['REMOTE_ADDR'] in database, if they have been confirmed recently then don't do it again&lt;br /&gt;
&lt;br /&gt;
    // Host is unconfirmed, try to confirm it now&lt;br /&gt;
    $curl = curl_init(&amp;quot;http://$grid_address/verify_region?region=&amp;quot; . urlencode($region_name) . '&amp;amp;ip=' . $_SERVER['REMOTE_ADDR']);&lt;br /&gt;
    curl_setopts_array($curl = [CURLOPT_RETURNTRANSFER =&amp;gt; true, CURLOPT_FOLLOWLOCATION =&amp;gt; true]);&lt;br /&gt;
    $response = curl_exec($curl);&lt;br /&gt;
    if ((curl_errno($curl) != 0) || (curl_getinfo($curl, CURLINFO_HTTP_CODE) != 200)) { die('Error occurred verifying region'); }&lt;br /&gt;
    curl_close($curl);&lt;br /&gt;
&lt;br /&gt;
    switch($response) {&lt;br /&gt;
        case 'OK':&lt;br /&gt;
            // The grid confirmed the region and IP combo, we should cache it in our database to avoid repeated lookups&lt;br /&gt;
        break;&lt;br /&gt;
        case 'NO':&lt;br /&gt;
            die('Invalid region/IP');&lt;br /&gt;
        break;&lt;br /&gt;
        default:&lt;br /&gt;
            // TODO: Use some kind of fallback or &amp;quot;untrusted&amp;quot; behaviour instead&lt;br /&gt;
            die('Unable to verify region/IP');&lt;br /&gt;
        break;&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Alternatives Considered ==&lt;br /&gt;
An alternative protocol for the verification would be to have the grid return some information about a region in an XML format. For example, a request for &amp;quot;Some Region&amp;quot; could return details such as its map location and IP, with the web-service extracting the IP itself to confirm. However, this raises the question of how much data should be revealed, and whether the ability to scrape by region name is desirable or not.&lt;br /&gt;
&lt;br /&gt;
The proposed system above, while limited in the information it returns, requires the web-service to posses a valid region name and IP address, and can do nothing more than confirm that they are valid; if the IP address is incorrect then no data is returned (or some error, anything other than &amp;lt;tt&amp;gt;OK&amp;lt;/tt&amp;gt; is considered to mean the combo was invalid or the operation is unsupported).&lt;/div&gt;</summary>
		<author><name>Haravikk Mistral</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/User:Haravikk_Mistral</id>
		<title>User:Haravikk Mistral</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:Haravikk_Mistral"/>
				<updated>2017-07-31T10:19:09Z</updated>
		
		<summary type="html">&lt;p&gt;Haravikk Mistral: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= About =&lt;br /&gt;
&lt;br /&gt;
Haravikk Mistral is a virtual worlds veteran, with nearly 12 years as a resident of Second Life, as well as minor involvement with many other virtual world efforts. After irreconcilable differences with Linden Lab staff Haravikk quit Second Life as of 20th July 2017 to pursue the freedom and openness of Open Simulator based grids, with a keen interest in helping to develop them.&lt;br /&gt;
&lt;br /&gt;
Haravikk has been a professional programmer for over 8 years, but has been programming and scripting for the better part of 15 years, with experience in a wide range of languages including C, C++, Objective-C, C#, Swift, Java, Javascript, PHP and Ruby, and of course LSL.&lt;/div&gt;</summary>
		<author><name>Haravikk Mistral</name></author>	</entry>

	</feed>