<?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=Thomax</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=Thomax"/>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Special:Contributions/Thomax"/>
		<updated>2026-04-05T04:34:51Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.19.9</generator>

	<entry>
		<id>http://opensimulator.org/wiki/RestConsole</id>
		<title>RestConsole</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/RestConsole"/>
				<updated>2018-04-10T14:06:56Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: /* NOTE */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|RestConsole}}{{ReleaseInfo}}&lt;br /&gt;
== About ==&lt;br /&gt;
The REST console makes remote administration of the various OpenSimulator services possible.&lt;br /&gt;
&lt;br /&gt;
The interface allows sending commands to the server and retrieving command output. Sending and receiving data is done through RESTful HTTP calls.&lt;br /&gt;
&lt;br /&gt;
While sending is very straightforward, receiving is not. Receiving uses reverse HTTP, performing a long poll to a CAPS URI.&lt;br /&gt;
&lt;br /&gt;
In order to make the protocol more efficient, the help functionality has been pushed to the client side. Rather than sending each keystroke to the server, only validated command lines are sent. To make this possible, the server sends a burst-on-connect of data, which is the tree of allowed commands and their help information. This can be used by the client to create the &amp;quot;help&amp;quot; command output locally as well as provide command line help interactively.&lt;br /&gt;
&lt;br /&gt;
The sample console client, OpenSim.ConsoleClient.exe, shows how this is done.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
In order to use the remote console, start up OpenSimulator services with parameter &amp;lt;tt&amp;gt;-console rest&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Example for Robust server in grid mode:&lt;br /&gt;
 mono Robust.exe -console rest&lt;br /&gt;
&lt;br /&gt;
Example for simulators (both in grid and standalone mode):&lt;br /&gt;
 mono OpenSim.exe -console rest&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
We take the OpenSimulator services address &amp;lt;nowiki&amp;gt;http://foo.bar:8002&amp;lt;/nowiki&amp;gt; as example here.&lt;br /&gt;
&lt;br /&gt;
First start a new session by sending a HTTP POST request. User name and password should match the settings for &amp;lt;tt&amp;gt;ConsoleUser&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ConsolePass&amp;lt;/tt&amp;gt; in section &amp;lt;tt&amp;gt;[Network]&amp;lt;/tt&amp;gt; of OpenSim.ini.&amp;lt;br /&amp;gt;&lt;br /&gt;
Parameters: USER, PASS&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://foo.bar:8002/StartSession/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Return: (XML) &amp;lt;ConsoleSession&amp;gt;&amp;lt;SessionID&amp;gt;&amp;lt;/SessionID&amp;gt;&amp;lt;Prompt&amp;gt;&amp;lt;/Prompt&amp;gt;&amp;lt;/ConsoleSession&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we got the SessionID, which can be used to send a command and to receive output. First, retrieve the console scrollback buffer.&amp;lt;br /&amp;gt;&lt;br /&gt;
Parameters: none&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://foo.bar:8002/ReadResponses/&amp;lt;SessionID&amp;gt;/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Return: (XML) &amp;lt;ConsoleSession&amp;gt;&amp;lt;Line Number=x Level=l Prompt=p Command=c Input=i&amp;gt;&amp;lt;/Line&amp;gt;&amp;lt;/ConsoleSession&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
The reply contains all lines currently in the buffer. Subsequent fetches will only retrieve new lines. The fetch will hold for up to 30 seconds if there is no data, then return an error. The client is expected to try again (polling).&lt;br /&gt;
The attributes are as follows:&lt;br /&gt;
 Number = The line number (1 based)&lt;br /&gt;
 Level = The level this is to be logged as&lt;br /&gt;
 Prompt = bool, true if the output on this line is a prompt&lt;br /&gt;
 Command = bool, true if the prompt is for a command&lt;br /&gt;
 Input = bool, true if the output is eachoed input&lt;br /&gt;
&lt;br /&gt;
Use the SessionID as ID parameter, and send a POST request again.&amp;lt;br /&amp;gt;&lt;br /&gt;
Parameters: ID, COMMAND&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://foo.bar:8002/SessionCommand/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Return: (XML) &amp;lt;ConsoleSession&amp;gt;&amp;lt;Result&amp;gt;&amp;lt;/Result&amp;gt;&amp;lt;/ConsoleSession&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
If everything went well, the command should have been executed. Try another command.&lt;br /&gt;
&lt;br /&gt;
When you want to close down the connection, send a POST request again.&amp;lt;br /&amp;gt;&lt;br /&gt;
Parameters: ID&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://foo.bar:8002/CloseSession/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Return: (XML) &amp;lt;ConsoleSession&amp;gt;&amp;lt;Result&amp;gt;&amp;lt;/Result&amp;gt;&amp;lt;/ConsoleSession&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
The session is closed, and you have to log in again, when you want to send a command again.&lt;br /&gt;
&lt;br /&gt;
= Clients =&lt;br /&gt;
&lt;br /&gt;
== C# ==&lt;br /&gt;
&lt;br /&gt;
A C# client is included with the Opensimulator distribution. It is rudimentary and not updated to the latest protocol versions.&lt;br /&gt;
&lt;br /&gt;
== Qt ==&lt;br /&gt;
&lt;br /&gt;
The Qt 5 based client is at https://github.com/MelanieT/OpenSimConsoleClient&lt;br /&gt;
&lt;br /&gt;
= Binaries =&lt;br /&gt;
 Windows: http://opensimulator.org/downloads/ConsoleClient.zip&lt;br /&gt;
 Mac: http://opensimulator.org/downloads/ConsoleClient.dmg&lt;br /&gt;
 Linux: TBD&lt;br /&gt;
&lt;br /&gt;
= Examples =&lt;br /&gt;
&lt;br /&gt;
== NOTE ==&lt;br /&gt;
&lt;br /&gt;
Some of the examples below are for an older version of the interface. They may work to a degree but need to be revised.&lt;br /&gt;
&lt;br /&gt;
=== node.js ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 | This piece of code is published by thomax (tx0h) (c) 2018 under the&lt;br /&gt;
 | Artistic License 1.0 (http://www.perlfoundation.org/artistic_license_1_0)&lt;br /&gt;
 |&lt;br /&gt;
 | I removed my previous python approach because blueman made a better&lt;br /&gt;
 | version and it was outdated. Here is a node.js variant.&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
const readline = require('readline');&lt;br /&gt;
var Client = require('node-rest-client').Client;&lt;br /&gt;
var client = new Client();&lt;br /&gt;
var session_id;&lt;br /&gt;
var base_url = &amp;quot;http://127.0.0.1:9000&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// set http header&lt;br /&gt;
var headers = {&lt;br /&gt;
    &amp;quot;Content-Type&amp;quot;: &amp;quot;application/x-www-form-urlencoded&amp;quot;,&lt;br /&gt;
    &amp;quot;User-Agent&amp;quot;: &amp;quot;nodejs-console/0.01&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// open session&lt;br /&gt;
function open_session() {&lt;br /&gt;
    var args = {&lt;br /&gt;
        data: {&lt;br /&gt;
            &amp;quot;USER&amp;quot;: &amp;quot;Test&amp;quot;,&lt;br /&gt;
            &amp;quot;PASS&amp;quot;: 'secret'&lt;br /&gt;
        },&lt;br /&gt;
        headers,&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    client.post(base_url + &amp;quot;/StartSession/&amp;quot;, args, function (data, response) {&lt;br /&gt;
        session_id = data.ConsoleSession.SessionID;&lt;br /&gt;
        read_session_buffer();&lt;br /&gt;
    });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// close session&lt;br /&gt;
function close_session() {&lt;br /&gt;
    args = {&lt;br /&gt;
        data: { &amp;quot;ID&amp;quot;: session_id },&lt;br /&gt;
        headers&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    client.post(base_url + &amp;quot;/CloseSession/&amp;quot;, args, function (data, response) {&lt;br /&gt;
        console.log(&amp;quot;close_session: &amp;quot;+response);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    console.log('Have a great day!');&lt;br /&gt;
    process.exit(0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// read all the lines from the console buffer and print them&lt;br /&gt;
function read_session_buffer() {&lt;br /&gt;
    args = {&lt;br /&gt;
        data: { &amp;quot;ID&amp;quot;: session_id },&lt;br /&gt;
        headers&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    client.post(base_url + &amp;quot;/ReadResponses/&amp;quot;+session_id+&amp;quot;/&amp;quot;, args, function (data, response) {&lt;br /&gt;
        if(data.ConsoleSession.Line) {&lt;br /&gt;
            var i;&lt;br /&gt;
            for(i=0; i &amp;lt; data.ConsoleSession.Line.length; i++) {&lt;br /&gt;
                if(data.ConsoleSession.Line[i]._) {&lt;br /&gt;
                    console.log(data.ConsoleSession.Line[i]._);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            rl.prompt();&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// execute the command from the prompt&lt;br /&gt;
function execute_cmd(cmd) {&lt;br /&gt;
    args = {&lt;br /&gt;
        data: {&lt;br /&gt;
            &amp;quot;ID&amp;quot;: session_id,&lt;br /&gt;
            &amp;quot;COMMAND&amp;quot;: cmd&lt;br /&gt;
        },&lt;br /&gt;
        headers&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    client.post(base_url + &amp;quot;/SessionCommand/&amp;quot;, args, function (data, response) {&lt;br /&gt;
    });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// here we go.&lt;br /&gt;
open_session();&lt;br /&gt;
&lt;br /&gt;
// prepare readline&lt;br /&gt;
const rl = readline.createInterface({&lt;br /&gt;
    input: process.stdin,&lt;br /&gt;
    output: process.stdout,&lt;br /&gt;
    prompt: 'REST CONSOLE&amp;gt; '&lt;br /&gt;
});&lt;br /&gt;
rl.prompt();&lt;br /&gt;
&lt;br /&gt;
// hunt for events&lt;br /&gt;
rl.on('line', (line) =&amp;gt; {&lt;br /&gt;
    switch (line.trim()) {&lt;br /&gt;
        case 'quit':&lt;br /&gt;
            close_session();&lt;br /&gt;
            break;&lt;br /&gt;
        default:&lt;br /&gt;
            if(line.length &amp;gt; 0) {&lt;br /&gt;
                execute_cmd(line.trim());&lt;br /&gt;
            }&lt;br /&gt;
            break;&lt;br /&gt;
    }&lt;br /&gt;
    read_session_buffer();&lt;br /&gt;
    rl.prompt();&lt;br /&gt;
}).on('close', () =&amp;gt; {&lt;br /&gt;
    close_session();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Python (Updated) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# This piece of code is published by thomax (txOh) (c) 2010 under the&lt;br /&gt;
# Artistic License 1.0 (http://www.perlfoundation.org/artistic_license_1_0)&lt;br /&gt;
# Modifications (c) 2013 BlueWall&lt;br /&gt;
&lt;br /&gt;
import urllib, urllib2&lt;br /&gt;
import xml.dom.minidom&lt;br /&gt;
&lt;br /&gt;
class UserConsoleClient():&lt;br /&gt;
&lt;br /&gt;
   def __init__(self, addr):&lt;br /&gt;
       self.addr = addr&lt;br /&gt;
       url = self.addr + 'StartSession/'&lt;br /&gt;
&lt;br /&gt;
       params = urllib.urlencode({&lt;br /&gt;
           'USER': 'username',       # REST username&lt;br /&gt;
           'PASS': 'userpass'        # REST password&lt;br /&gt;
       })&lt;br /&gt;
       data = urllib2.urlopen(url, params).read()&lt;br /&gt;
       print data&lt;br /&gt;
&lt;br /&gt;
       dom = xml.dom.minidom.parseString(data)&lt;br /&gt;
       elem =  dom.getElementsByTagName('SessionID')&lt;br /&gt;
       self.sessionid = elem[0].childNodes[0].nodeValue&lt;br /&gt;
       elem = dom.getElementsByTagName('Prompt')&lt;br /&gt;
       self.prompt = elem[0].childNodes[0].nodeValue + '# '&lt;br /&gt;
&lt;br /&gt;
   def close(self):&lt;br /&gt;
       url = self.addr + 'CloseSession/'&lt;br /&gt;
       params = urllib.urlencode({&lt;br /&gt;
           'ID': self.sessionid&lt;br /&gt;
       })&lt;br /&gt;
       print urllib2.urlopen(url, params).read()&lt;br /&gt;
&lt;br /&gt;
   def do_cmd(self, cmd):&lt;br /&gt;
       url = self.addr + 'SessionCommand/'&lt;br /&gt;
       params = urllib.urlencode({&lt;br /&gt;
           'ID': self.sessionid,&lt;br /&gt;
           'COMMAND': cmd&lt;br /&gt;
       })&lt;br /&gt;
       data = urllib2.urlopen(url, params).read()&lt;br /&gt;
       dom = xml.dom.minidom.parseString(data)&lt;br /&gt;
       elem =  dom.getElementsByTagName('Result')&lt;br /&gt;
       return elem[0].childNodes[0].nodeValue&lt;br /&gt;
&lt;br /&gt;
   def read_buffer(self):&lt;br /&gt;
       url = self.addr + 'ReadResponses/' + self.sessionid + '/'&lt;br /&gt;
       params = urllib.urlencode({&lt;br /&gt;
           'ID': self.sessionid&lt;br /&gt;
       })&lt;br /&gt;
&lt;br /&gt;
       # print urllib2.urlopen(url, params).read()&lt;br /&gt;
       &lt;br /&gt;
       result = urllib2.urlopen(url, params).read()&lt;br /&gt;
       dom = xml.dom.minidom.parseString(result)&lt;br /&gt;
&lt;br /&gt;
       elem =  dom.getElementsByTagName('Line')&lt;br /&gt;
       for line in elem:&lt;br /&gt;
         x0 = line.childNodes[0].nodeValue&lt;br /&gt;
         x1 = str.replace(str(x0),':','~',2)&lt;br /&gt;
         x2 = x1.split(&amp;quot;~&amp;quot;)&lt;br /&gt;
         for lv in x2[2:]:&lt;br /&gt;
           if not '+++' in lv:&lt;br /&gt;
             print lv&lt;br /&gt;
       &lt;br /&gt;
# set the base url to the REST console (with port)&lt;br /&gt;
console = UserConsoleClient('http://example.com:8003/')&lt;br /&gt;
console.read_buffer()&lt;br /&gt;
print 'quit with a &amp;quot;.&amp;quot;'&lt;br /&gt;
cmd = &amp;quot;&amp;quot;&lt;br /&gt;
while cmd != &amp;quot;.&amp;quot;:&lt;br /&gt;
   if cmd != &amp;quot;&amp;quot;:&lt;br /&gt;
     if 'OK' in console.do_cmd(cmd):&lt;br /&gt;
       console.read_buffer()&lt;br /&gt;
   cmd = raw_input(&amp;quot;%s &amp;quot; % console.prompt)&lt;br /&gt;
&lt;br /&gt;
console.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JavaScript/HTML ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- This JavaScript code is published by Marck (c) 2010 under a --&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Creative Commons Attribution 3.0 Germany License            --&amp;gt;&lt;br /&gt;
    &amp;lt;!-- http://creativecommons.org/licenses/by/3.0/de/              --&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      var sessionId;&lt;br /&gt;
      var hostUrl;&lt;br /&gt;
&lt;br /&gt;
      function StartSession(url, user, password) {&lt;br /&gt;
        hostUrl = url;&lt;br /&gt;
        var response = SendRequest(&amp;quot;/StartSession/&amp;quot;, &amp;quot;USER=&amp;quot; + user + &amp;quot;&amp;amp;PASS=&amp;quot; + password);&lt;br /&gt;
        sessionId = response.getElementsByTagName(&amp;quot;SessionID&amp;quot;)[0].firstChild.nodeValue;&lt;br /&gt;
      };&lt;br /&gt;
&lt;br /&gt;
      function ReadResponses() {&lt;br /&gt;
        var response = this.SendRequest(&amp;quot;/ReadResponses/&amp;quot; + sessionId + &amp;quot;/&amp;quot;, '');&lt;br /&gt;
        var lines = response.getElementsByTagName(&amp;quot;Line&amp;quot;);&lt;br /&gt;
        for (var i = 0; i &amp;lt; lines.length; ++i) {&lt;br /&gt;
          var element = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
          element.appendChild(document.createTextNode(lines[i].firstChild.nodeValue));&lt;br /&gt;
          document.getElementById(&amp;quot;output&amp;quot;).appendChild(element);&lt;br /&gt;
        };&lt;br /&gt;
        document.getElementById(&amp;quot;output&amp;quot;).scrollTop = document.getElementById(&amp;quot;output&amp;quot;).scrollHeight;&lt;br /&gt;
      };&lt;br /&gt;
&lt;br /&gt;
      function Command(cmd) {&lt;br /&gt;
        void SendRequest(&amp;quot;/SessionCommand/&amp;quot;, &amp;quot;ID=&amp;quot; + sessionId + &amp;quot;&amp;amp;COMMAND=&amp;quot; + cmd);&lt;br /&gt;
      };&lt;br /&gt;
&lt;br /&gt;
      function CloseSession() {&lt;br /&gt;
        void SendRequest(&amp;quot;/CloseSession/&amp;quot;, &amp;quot;ID=&amp;quot; + sessionId);&lt;br /&gt;
      };&lt;br /&gt;
&lt;br /&gt;
      function SendRequest(path, data) {&lt;br /&gt;
        var request = new XMLHttpRequest();&lt;br /&gt;
        request.open(&amp;quot;POST&amp;quot;, hostUrl + path, false);&lt;br /&gt;
        request.send(data);&lt;br /&gt;
        return request.responseXML;&lt;br /&gt;
      };&lt;br /&gt;
&lt;br /&gt;
      window.onunload = CloseSession;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;form action=&amp;quot;#&amp;quot; onsubmit=&amp;quot;&lt;br /&gt;
        StartSession(this.address.value, this.user.value, this.password.value);&lt;br /&gt;
        ReadResponses();&lt;br /&gt;
        return false&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;input name=&amp;quot;address&amp;quot; type=&amp;quot;text&amp;quot; value=&amp;quot;http://localhost:9000&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;input name=&amp;quot;user&amp;quot; type=&amp;quot;text&amp;quot; value=&amp;quot;ConsoleUser&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;input name=&amp;quot;password&amp;quot; type=&amp;quot;text&amp;quot; value=&amp;quot;ConsolePass&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Login&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div id=&amp;quot;output&amp;quot; style=&amp;quot;height:15em; border:thin solid; overflow:auto;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;form action=&amp;quot;#&amp;quot; onsubmit=&amp;quot;&lt;br /&gt;
        Command(this.command.value);&lt;br /&gt;
        ReadResponses();&lt;br /&gt;
        return false&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;command&amp;quot; value=&amp;quot;Enter command here&amp;quot; size=&amp;quot;40&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Send Command&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/RestConsole</id>
		<title>RestConsole</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/RestConsole"/>
				<updated>2018-04-10T14:06:02Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: /* node.js */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|RestConsole}}{{ReleaseInfo}}&lt;br /&gt;
== About ==&lt;br /&gt;
The REST console makes remote administration of the various OpenSimulator services possible.&lt;br /&gt;
&lt;br /&gt;
The interface allows sending commands to the server and retrieving command output. Sending and receiving data is done through RESTful HTTP calls.&lt;br /&gt;
&lt;br /&gt;
While sending is very straightforward, receiving is not. Receiving uses reverse HTTP, performing a long poll to a CAPS URI.&lt;br /&gt;
&lt;br /&gt;
In order to make the protocol more efficient, the help functionality has been pushed to the client side. Rather than sending each keystroke to the server, only validated command lines are sent. To make this possible, the server sends a burst-on-connect of data, which is the tree of allowed commands and their help information. This can be used by the client to create the &amp;quot;help&amp;quot; command output locally as well as provide command line help interactively.&lt;br /&gt;
&lt;br /&gt;
The sample console client, OpenSim.ConsoleClient.exe, shows how this is done.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
In order to use the remote console, start up OpenSimulator services with parameter &amp;lt;tt&amp;gt;-console rest&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Example for Robust server in grid mode:&lt;br /&gt;
 mono Robust.exe -console rest&lt;br /&gt;
&lt;br /&gt;
Example for simulators (both in grid and standalone mode):&lt;br /&gt;
 mono OpenSim.exe -console rest&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
We take the OpenSimulator services address &amp;lt;nowiki&amp;gt;http://foo.bar:8002&amp;lt;/nowiki&amp;gt; as example here.&lt;br /&gt;
&lt;br /&gt;
First start a new session by sending a HTTP POST request. User name and password should match the settings for &amp;lt;tt&amp;gt;ConsoleUser&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ConsolePass&amp;lt;/tt&amp;gt; in section &amp;lt;tt&amp;gt;[Network]&amp;lt;/tt&amp;gt; of OpenSim.ini.&amp;lt;br /&amp;gt;&lt;br /&gt;
Parameters: USER, PASS&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://foo.bar:8002/StartSession/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Return: (XML) &amp;lt;ConsoleSession&amp;gt;&amp;lt;SessionID&amp;gt;&amp;lt;/SessionID&amp;gt;&amp;lt;Prompt&amp;gt;&amp;lt;/Prompt&amp;gt;&amp;lt;/ConsoleSession&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we got the SessionID, which can be used to send a command and to receive output. First, retrieve the console scrollback buffer.&amp;lt;br /&amp;gt;&lt;br /&gt;
Parameters: none&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://foo.bar:8002/ReadResponses/&amp;lt;SessionID&amp;gt;/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Return: (XML) &amp;lt;ConsoleSession&amp;gt;&amp;lt;Line Number=x Level=l Prompt=p Command=c Input=i&amp;gt;&amp;lt;/Line&amp;gt;&amp;lt;/ConsoleSession&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
The reply contains all lines currently in the buffer. Subsequent fetches will only retrieve new lines. The fetch will hold for up to 30 seconds if there is no data, then return an error. The client is expected to try again (polling).&lt;br /&gt;
The attributes are as follows:&lt;br /&gt;
 Number = The line number (1 based)&lt;br /&gt;
 Level = The level this is to be logged as&lt;br /&gt;
 Prompt = bool, true if the output on this line is a prompt&lt;br /&gt;
 Command = bool, true if the prompt is for a command&lt;br /&gt;
 Input = bool, true if the output is eachoed input&lt;br /&gt;
&lt;br /&gt;
Use the SessionID as ID parameter, and send a POST request again.&amp;lt;br /&amp;gt;&lt;br /&gt;
Parameters: ID, COMMAND&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://foo.bar:8002/SessionCommand/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Return: (XML) &amp;lt;ConsoleSession&amp;gt;&amp;lt;Result&amp;gt;&amp;lt;/Result&amp;gt;&amp;lt;/ConsoleSession&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
If everything went well, the command should have been executed. Try another command.&lt;br /&gt;
&lt;br /&gt;
When you want to close down the connection, send a POST request again.&amp;lt;br /&amp;gt;&lt;br /&gt;
Parameters: ID&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://foo.bar:8002/CloseSession/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Return: (XML) &amp;lt;ConsoleSession&amp;gt;&amp;lt;Result&amp;gt;&amp;lt;/Result&amp;gt;&amp;lt;/ConsoleSession&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
The session is closed, and you have to log in again, when you want to send a command again.&lt;br /&gt;
&lt;br /&gt;
= Clients =&lt;br /&gt;
&lt;br /&gt;
== C# ==&lt;br /&gt;
&lt;br /&gt;
A C# client is included with the Opensimulator distribution. It is rudimentary and not updated to the latest protocol versions.&lt;br /&gt;
&lt;br /&gt;
== Qt ==&lt;br /&gt;
&lt;br /&gt;
The Qt 5 based client is at https://github.com/MelanieT/OpenSimConsoleClient&lt;br /&gt;
&lt;br /&gt;
= Binaries =&lt;br /&gt;
 Windows: http://opensimulator.org/downloads/ConsoleClient.zip&lt;br /&gt;
 Mac: http://opensimulator.org/downloads/ConsoleClient.dmg&lt;br /&gt;
 Linux: TBD&lt;br /&gt;
&lt;br /&gt;
= Examples =&lt;br /&gt;
&lt;br /&gt;
== NOTE ==&lt;br /&gt;
&lt;br /&gt;
The below examples are for an older version of the interface. They may work to a degree but need to be revised.&lt;br /&gt;
&lt;br /&gt;
=== node.js ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 | This piece of code is published by thomax (tx0h) (c) 2018 under the&lt;br /&gt;
 | Artistic License 1.0 (http://www.perlfoundation.org/artistic_license_1_0)&lt;br /&gt;
 |&lt;br /&gt;
 | I removed my previous python approach because blueman made a better&lt;br /&gt;
 | version and it was outdated. Here is a node.js variant.&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
const readline = require('readline');&lt;br /&gt;
var Client = require('node-rest-client').Client;&lt;br /&gt;
var client = new Client();&lt;br /&gt;
var session_id;&lt;br /&gt;
var base_url = &amp;quot;http://127.0.0.1:9000&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// set http header&lt;br /&gt;
var headers = {&lt;br /&gt;
    &amp;quot;Content-Type&amp;quot;: &amp;quot;application/x-www-form-urlencoded&amp;quot;,&lt;br /&gt;
    &amp;quot;User-Agent&amp;quot;: &amp;quot;nodejs-console/0.01&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// open session&lt;br /&gt;
function open_session() {&lt;br /&gt;
    var args = {&lt;br /&gt;
        data: {&lt;br /&gt;
            &amp;quot;USER&amp;quot;: &amp;quot;Test&amp;quot;,&lt;br /&gt;
            &amp;quot;PASS&amp;quot;: 'secret'&lt;br /&gt;
        },&lt;br /&gt;
        headers,&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    client.post(base_url + &amp;quot;/StartSession/&amp;quot;, args, function (data, response) {&lt;br /&gt;
        session_id = data.ConsoleSession.SessionID;&lt;br /&gt;
        read_session_buffer();&lt;br /&gt;
    });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// close session&lt;br /&gt;
function close_session() {&lt;br /&gt;
    args = {&lt;br /&gt;
        data: { &amp;quot;ID&amp;quot;: session_id },&lt;br /&gt;
        headers&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    client.post(base_url + &amp;quot;/CloseSession/&amp;quot;, args, function (data, response) {&lt;br /&gt;
        console.log(&amp;quot;close_session: &amp;quot;+response);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    console.log('Have a great day!');&lt;br /&gt;
    process.exit(0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// read all the lines from the console buffer and print them&lt;br /&gt;
function read_session_buffer() {&lt;br /&gt;
    args = {&lt;br /&gt;
        data: { &amp;quot;ID&amp;quot;: session_id },&lt;br /&gt;
        headers&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    client.post(base_url + &amp;quot;/ReadResponses/&amp;quot;+session_id+&amp;quot;/&amp;quot;, args, function (data, response) {&lt;br /&gt;
        if(data.ConsoleSession.Line) {&lt;br /&gt;
            var i;&lt;br /&gt;
            for(i=0; i &amp;lt; data.ConsoleSession.Line.length; i++) {&lt;br /&gt;
                if(data.ConsoleSession.Line[i]._) {&lt;br /&gt;
                    console.log(data.ConsoleSession.Line[i]._);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            rl.prompt();&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// execute the command from the prompt&lt;br /&gt;
function execute_cmd(cmd) {&lt;br /&gt;
    args = {&lt;br /&gt;
        data: {&lt;br /&gt;
            &amp;quot;ID&amp;quot;: session_id,&lt;br /&gt;
            &amp;quot;COMMAND&amp;quot;: cmd&lt;br /&gt;
        },&lt;br /&gt;
        headers&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    client.post(base_url + &amp;quot;/SessionCommand/&amp;quot;, args, function (data, response) {&lt;br /&gt;
    });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// here we go.&lt;br /&gt;
open_session();&lt;br /&gt;
&lt;br /&gt;
// prepare readline&lt;br /&gt;
const rl = readline.createInterface({&lt;br /&gt;
    input: process.stdin,&lt;br /&gt;
    output: process.stdout,&lt;br /&gt;
    prompt: 'REST CONSOLE&amp;gt; '&lt;br /&gt;
});&lt;br /&gt;
rl.prompt();&lt;br /&gt;
&lt;br /&gt;
// hunt for events&lt;br /&gt;
rl.on('line', (line) =&amp;gt; {&lt;br /&gt;
    switch (line.trim()) {&lt;br /&gt;
        case 'quit':&lt;br /&gt;
            close_session();&lt;br /&gt;
            break;&lt;br /&gt;
        default:&lt;br /&gt;
            if(line.length &amp;gt; 0) {&lt;br /&gt;
                execute_cmd(line.trim());&lt;br /&gt;
            }&lt;br /&gt;
            break;&lt;br /&gt;
    }&lt;br /&gt;
    read_session_buffer();&lt;br /&gt;
    rl.prompt();&lt;br /&gt;
}).on('close', () =&amp;gt; {&lt;br /&gt;
    close_session();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Python (Updated) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# This piece of code is published by thomax (txOh) (c) 2010 under the&lt;br /&gt;
# Artistic License 1.0 (http://www.perlfoundation.org/artistic_license_1_0)&lt;br /&gt;
# Modifications (c) 2013 BlueWall&lt;br /&gt;
&lt;br /&gt;
import urllib, urllib2&lt;br /&gt;
import xml.dom.minidom&lt;br /&gt;
&lt;br /&gt;
class UserConsoleClient():&lt;br /&gt;
&lt;br /&gt;
   def __init__(self, addr):&lt;br /&gt;
       self.addr = addr&lt;br /&gt;
       url = self.addr + 'StartSession/'&lt;br /&gt;
&lt;br /&gt;
       params = urllib.urlencode({&lt;br /&gt;
           'USER': 'username',       # REST username&lt;br /&gt;
           'PASS': 'userpass'        # REST password&lt;br /&gt;
       })&lt;br /&gt;
       data = urllib2.urlopen(url, params).read()&lt;br /&gt;
       print data&lt;br /&gt;
&lt;br /&gt;
       dom = xml.dom.minidom.parseString(data)&lt;br /&gt;
       elem =  dom.getElementsByTagName('SessionID')&lt;br /&gt;
       self.sessionid = elem[0].childNodes[0].nodeValue&lt;br /&gt;
       elem = dom.getElementsByTagName('Prompt')&lt;br /&gt;
       self.prompt = elem[0].childNodes[0].nodeValue + '# '&lt;br /&gt;
&lt;br /&gt;
   def close(self):&lt;br /&gt;
       url = self.addr + 'CloseSession/'&lt;br /&gt;
       params = urllib.urlencode({&lt;br /&gt;
           'ID': self.sessionid&lt;br /&gt;
       })&lt;br /&gt;
       print urllib2.urlopen(url, params).read()&lt;br /&gt;
&lt;br /&gt;
   def do_cmd(self, cmd):&lt;br /&gt;
       url = self.addr + 'SessionCommand/'&lt;br /&gt;
       params = urllib.urlencode({&lt;br /&gt;
           'ID': self.sessionid,&lt;br /&gt;
           'COMMAND': cmd&lt;br /&gt;
       })&lt;br /&gt;
       data = urllib2.urlopen(url, params).read()&lt;br /&gt;
       dom = xml.dom.minidom.parseString(data)&lt;br /&gt;
       elem =  dom.getElementsByTagName('Result')&lt;br /&gt;
       return elem[0].childNodes[0].nodeValue&lt;br /&gt;
&lt;br /&gt;
   def read_buffer(self):&lt;br /&gt;
       url = self.addr + 'ReadResponses/' + self.sessionid + '/'&lt;br /&gt;
       params = urllib.urlencode({&lt;br /&gt;
           'ID': self.sessionid&lt;br /&gt;
       })&lt;br /&gt;
&lt;br /&gt;
       # print urllib2.urlopen(url, params).read()&lt;br /&gt;
       &lt;br /&gt;
       result = urllib2.urlopen(url, params).read()&lt;br /&gt;
       dom = xml.dom.minidom.parseString(result)&lt;br /&gt;
&lt;br /&gt;
       elem =  dom.getElementsByTagName('Line')&lt;br /&gt;
       for line in elem:&lt;br /&gt;
         x0 = line.childNodes[0].nodeValue&lt;br /&gt;
         x1 = str.replace(str(x0),':','~',2)&lt;br /&gt;
         x2 = x1.split(&amp;quot;~&amp;quot;)&lt;br /&gt;
         for lv in x2[2:]:&lt;br /&gt;
           if not '+++' in lv:&lt;br /&gt;
             print lv&lt;br /&gt;
       &lt;br /&gt;
# set the base url to the REST console (with port)&lt;br /&gt;
console = UserConsoleClient('http://example.com:8003/')&lt;br /&gt;
console.read_buffer()&lt;br /&gt;
print 'quit with a &amp;quot;.&amp;quot;'&lt;br /&gt;
cmd = &amp;quot;&amp;quot;&lt;br /&gt;
while cmd != &amp;quot;.&amp;quot;:&lt;br /&gt;
   if cmd != &amp;quot;&amp;quot;:&lt;br /&gt;
     if 'OK' in console.do_cmd(cmd):&lt;br /&gt;
       console.read_buffer()&lt;br /&gt;
   cmd = raw_input(&amp;quot;%s &amp;quot; % console.prompt)&lt;br /&gt;
&lt;br /&gt;
console.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JavaScript/HTML ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- This JavaScript code is published by Marck (c) 2010 under a --&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Creative Commons Attribution 3.0 Germany License            --&amp;gt;&lt;br /&gt;
    &amp;lt;!-- http://creativecommons.org/licenses/by/3.0/de/              --&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      var sessionId;&lt;br /&gt;
      var hostUrl;&lt;br /&gt;
&lt;br /&gt;
      function StartSession(url, user, password) {&lt;br /&gt;
        hostUrl = url;&lt;br /&gt;
        var response = SendRequest(&amp;quot;/StartSession/&amp;quot;, &amp;quot;USER=&amp;quot; + user + &amp;quot;&amp;amp;PASS=&amp;quot; + password);&lt;br /&gt;
        sessionId = response.getElementsByTagName(&amp;quot;SessionID&amp;quot;)[0].firstChild.nodeValue;&lt;br /&gt;
      };&lt;br /&gt;
&lt;br /&gt;
      function ReadResponses() {&lt;br /&gt;
        var response = this.SendRequest(&amp;quot;/ReadResponses/&amp;quot; + sessionId + &amp;quot;/&amp;quot;, '');&lt;br /&gt;
        var lines = response.getElementsByTagName(&amp;quot;Line&amp;quot;);&lt;br /&gt;
        for (var i = 0; i &amp;lt; lines.length; ++i) {&lt;br /&gt;
          var element = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
          element.appendChild(document.createTextNode(lines[i].firstChild.nodeValue));&lt;br /&gt;
          document.getElementById(&amp;quot;output&amp;quot;).appendChild(element);&lt;br /&gt;
        };&lt;br /&gt;
        document.getElementById(&amp;quot;output&amp;quot;).scrollTop = document.getElementById(&amp;quot;output&amp;quot;).scrollHeight;&lt;br /&gt;
      };&lt;br /&gt;
&lt;br /&gt;
      function Command(cmd) {&lt;br /&gt;
        void SendRequest(&amp;quot;/SessionCommand/&amp;quot;, &amp;quot;ID=&amp;quot; + sessionId + &amp;quot;&amp;amp;COMMAND=&amp;quot; + cmd);&lt;br /&gt;
      };&lt;br /&gt;
&lt;br /&gt;
      function CloseSession() {&lt;br /&gt;
        void SendRequest(&amp;quot;/CloseSession/&amp;quot;, &amp;quot;ID=&amp;quot; + sessionId);&lt;br /&gt;
      };&lt;br /&gt;
&lt;br /&gt;
      function SendRequest(path, data) {&lt;br /&gt;
        var request = new XMLHttpRequest();&lt;br /&gt;
        request.open(&amp;quot;POST&amp;quot;, hostUrl + path, false);&lt;br /&gt;
        request.send(data);&lt;br /&gt;
        return request.responseXML;&lt;br /&gt;
      };&lt;br /&gt;
&lt;br /&gt;
      window.onunload = CloseSession;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;form action=&amp;quot;#&amp;quot; onsubmit=&amp;quot;&lt;br /&gt;
        StartSession(this.address.value, this.user.value, this.password.value);&lt;br /&gt;
        ReadResponses();&lt;br /&gt;
        return false&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;input name=&amp;quot;address&amp;quot; type=&amp;quot;text&amp;quot; value=&amp;quot;http://localhost:9000&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;input name=&amp;quot;user&amp;quot; type=&amp;quot;text&amp;quot; value=&amp;quot;ConsoleUser&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;input name=&amp;quot;password&amp;quot; type=&amp;quot;text&amp;quot; value=&amp;quot;ConsolePass&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Login&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div id=&amp;quot;output&amp;quot; style=&amp;quot;height:15em; border:thin solid; overflow:auto;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;form action=&amp;quot;#&amp;quot; onsubmit=&amp;quot;&lt;br /&gt;
        Command(this.command.value);&lt;br /&gt;
        ReadResponses();&lt;br /&gt;
        return false&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;command&amp;quot; value=&amp;quot;Enter command here&amp;quot; size=&amp;quot;40&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Send Command&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/RestConsole</id>
		<title>RestConsole</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/RestConsole"/>
				<updated>2018-04-10T14:03:10Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: /* node.js */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|RestConsole}}{{ReleaseInfo}}&lt;br /&gt;
== About ==&lt;br /&gt;
The REST console makes remote administration of the various OpenSimulator services possible.&lt;br /&gt;
&lt;br /&gt;
The interface allows sending commands to the server and retrieving command output. Sending and receiving data is done through RESTful HTTP calls.&lt;br /&gt;
&lt;br /&gt;
While sending is very straightforward, receiving is not. Receiving uses reverse HTTP, performing a long poll to a CAPS URI.&lt;br /&gt;
&lt;br /&gt;
In order to make the protocol more efficient, the help functionality has been pushed to the client side. Rather than sending each keystroke to the server, only validated command lines are sent. To make this possible, the server sends a burst-on-connect of data, which is the tree of allowed commands and their help information. This can be used by the client to create the &amp;quot;help&amp;quot; command output locally as well as provide command line help interactively.&lt;br /&gt;
&lt;br /&gt;
The sample console client, OpenSim.ConsoleClient.exe, shows how this is done.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
In order to use the remote console, start up OpenSimulator services with parameter &amp;lt;tt&amp;gt;-console rest&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Example for Robust server in grid mode:&lt;br /&gt;
 mono Robust.exe -console rest&lt;br /&gt;
&lt;br /&gt;
Example for simulators (both in grid and standalone mode):&lt;br /&gt;
 mono OpenSim.exe -console rest&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
We take the OpenSimulator services address &amp;lt;nowiki&amp;gt;http://foo.bar:8002&amp;lt;/nowiki&amp;gt; as example here.&lt;br /&gt;
&lt;br /&gt;
First start a new session by sending a HTTP POST request. User name and password should match the settings for &amp;lt;tt&amp;gt;ConsoleUser&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ConsolePass&amp;lt;/tt&amp;gt; in section &amp;lt;tt&amp;gt;[Network]&amp;lt;/tt&amp;gt; of OpenSim.ini.&amp;lt;br /&amp;gt;&lt;br /&gt;
Parameters: USER, PASS&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://foo.bar:8002/StartSession/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Return: (XML) &amp;lt;ConsoleSession&amp;gt;&amp;lt;SessionID&amp;gt;&amp;lt;/SessionID&amp;gt;&amp;lt;Prompt&amp;gt;&amp;lt;/Prompt&amp;gt;&amp;lt;/ConsoleSession&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we got the SessionID, which can be used to send a command and to receive output. First, retrieve the console scrollback buffer.&amp;lt;br /&amp;gt;&lt;br /&gt;
Parameters: none&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://foo.bar:8002/ReadResponses/&amp;lt;SessionID&amp;gt;/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Return: (XML) &amp;lt;ConsoleSession&amp;gt;&amp;lt;Line Number=x Level=l Prompt=p Command=c Input=i&amp;gt;&amp;lt;/Line&amp;gt;&amp;lt;/ConsoleSession&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
The reply contains all lines currently in the buffer. Subsequent fetches will only retrieve new lines. The fetch will hold for up to 30 seconds if there is no data, then return an error. The client is expected to try again (polling).&lt;br /&gt;
The attributes are as follows:&lt;br /&gt;
 Number = The line number (1 based)&lt;br /&gt;
 Level = The level this is to be logged as&lt;br /&gt;
 Prompt = bool, true if the output on this line is a prompt&lt;br /&gt;
 Command = bool, true if the prompt is for a command&lt;br /&gt;
 Input = bool, true if the output is eachoed input&lt;br /&gt;
&lt;br /&gt;
Use the SessionID as ID parameter, and send a POST request again.&amp;lt;br /&amp;gt;&lt;br /&gt;
Parameters: ID, COMMAND&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://foo.bar:8002/SessionCommand/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Return: (XML) &amp;lt;ConsoleSession&amp;gt;&amp;lt;Result&amp;gt;&amp;lt;/Result&amp;gt;&amp;lt;/ConsoleSession&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
If everything went well, the command should have been executed. Try another command.&lt;br /&gt;
&lt;br /&gt;
When you want to close down the connection, send a POST request again.&amp;lt;br /&amp;gt;&lt;br /&gt;
Parameters: ID&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://foo.bar:8002/CloseSession/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Return: (XML) &amp;lt;ConsoleSession&amp;gt;&amp;lt;Result&amp;gt;&amp;lt;/Result&amp;gt;&amp;lt;/ConsoleSession&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
The session is closed, and you have to log in again, when you want to send a command again.&lt;br /&gt;
&lt;br /&gt;
= Clients =&lt;br /&gt;
&lt;br /&gt;
== C# ==&lt;br /&gt;
&lt;br /&gt;
A C# client is included with the Opensimulator distribution. It is rudimentary and not updated to the latest protocol versions.&lt;br /&gt;
&lt;br /&gt;
== Qt ==&lt;br /&gt;
&lt;br /&gt;
The Qt 5 based client is at https://github.com/MelanieT/OpenSimConsoleClient&lt;br /&gt;
&lt;br /&gt;
= Binaries =&lt;br /&gt;
 Windows: http://opensimulator.org/downloads/ConsoleClient.zip&lt;br /&gt;
 Mac: http://opensimulator.org/downloads/ConsoleClient.dmg&lt;br /&gt;
 Linux: TBD&lt;br /&gt;
&lt;br /&gt;
= Examples =&lt;br /&gt;
&lt;br /&gt;
== NOTE ==&lt;br /&gt;
&lt;br /&gt;
The below examples are for an older version of the interface. They may work to a degree but need to be revised.&lt;br /&gt;
&lt;br /&gt;
=== node.js ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 | This piece of code is published by thomax (txOh) (c) 2018 under the&lt;br /&gt;
 | Artistic License 1.0 (http://www.perlfoundation.org/artistic_license_1_0)&lt;br /&gt;
 |&lt;br /&gt;
 | I removed my previous python approach because blueman made a better&lt;br /&gt;
 | version and it was outdated. Here is a node.js variant.&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
const readline = require('readline');&lt;br /&gt;
var Client = require('node-rest-client').Client;&lt;br /&gt;
var client = new Client();&lt;br /&gt;
var session_id;&lt;br /&gt;
var base_url = &amp;quot;http://127.0.0.1:9000&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// set http header&lt;br /&gt;
var headers = {&lt;br /&gt;
    &amp;quot;Content-Type&amp;quot;: &amp;quot;application/x-www-form-urlencoded&amp;quot;,&lt;br /&gt;
    &amp;quot;User-Agent&amp;quot;: &amp;quot;nodejs-console/0.01&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// open session&lt;br /&gt;
function open_session() {&lt;br /&gt;
    var args = {&lt;br /&gt;
        data: {&lt;br /&gt;
            &amp;quot;USER&amp;quot;: &amp;quot;Test&amp;quot;,&lt;br /&gt;
            &amp;quot;PASS&amp;quot;: 'secret'&lt;br /&gt;
        },&lt;br /&gt;
        headers,&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    client.post(base_url + &amp;quot;/StartSession/&amp;quot;, args, function (data, response) {&lt;br /&gt;
        session_id = data.ConsoleSession.SessionID;&lt;br /&gt;
        read_session_buffer();&lt;br /&gt;
    });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// close session&lt;br /&gt;
function close_session() {&lt;br /&gt;
    args = {&lt;br /&gt;
        data: { &amp;quot;ID&amp;quot;: session_id },&lt;br /&gt;
        headers&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    client.post(base_url + &amp;quot;/CloseSession/&amp;quot;, args, function (data, response) {&lt;br /&gt;
        console.log(&amp;quot;close_session: &amp;quot;+response);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    console.log('Have a great day!');&lt;br /&gt;
    process.exit(0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// read all the lines from the console buffer and print them&lt;br /&gt;
function read_session_buffer() {&lt;br /&gt;
    args = {&lt;br /&gt;
        data: { &amp;quot;ID&amp;quot;: session_id },&lt;br /&gt;
        headers&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    client.post(base_url + &amp;quot;/ReadResponses/&amp;quot;+session_id+&amp;quot;/&amp;quot;, args, function (data, response) {&lt;br /&gt;
        if(data.ConsoleSession.Line) {&lt;br /&gt;
            var i;&lt;br /&gt;
            for(i=0; i &amp;lt; data.ConsoleSession.Line.length; i++) {&lt;br /&gt;
                if(data.ConsoleSession.Line[i]._) {&lt;br /&gt;
                    console.log(data.ConsoleSession.Line[i]._);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            rl.prompt();&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// execute the command from the prompt&lt;br /&gt;
function execute_cmd(cmd) {&lt;br /&gt;
    args = {&lt;br /&gt;
        data: {&lt;br /&gt;
            &amp;quot;ID&amp;quot;: session_id,&lt;br /&gt;
            &amp;quot;COMMAND&amp;quot;: cmd&lt;br /&gt;
        },&lt;br /&gt;
        headers&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    client.post(base_url + &amp;quot;/SessionCommand/&amp;quot;, args, function (data, response) {&lt;br /&gt;
    });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// here we go.&lt;br /&gt;
open_session();&lt;br /&gt;
&lt;br /&gt;
// prepare readline&lt;br /&gt;
const rl = readline.createInterface({&lt;br /&gt;
    input: process.stdin,&lt;br /&gt;
    output: process.stdout,&lt;br /&gt;
    prompt: 'REST CONSOLE&amp;gt; '&lt;br /&gt;
});&lt;br /&gt;
rl.prompt();&lt;br /&gt;
&lt;br /&gt;
// hunt for events&lt;br /&gt;
rl.on('line', (line) =&amp;gt; {&lt;br /&gt;
    switch (line.trim()) {&lt;br /&gt;
        case 'quit':&lt;br /&gt;
            close_session();&lt;br /&gt;
            break;&lt;br /&gt;
        default:&lt;br /&gt;
            if(line.length &amp;gt; 0) {&lt;br /&gt;
                execute_cmd(line.trim());&lt;br /&gt;
            }&lt;br /&gt;
            break;&lt;br /&gt;
    }&lt;br /&gt;
    read_session_buffer();&lt;br /&gt;
    rl.prompt();&lt;br /&gt;
}).on('close', () =&amp;gt; {&lt;br /&gt;
    close_session();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Python (Updated) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# This piece of code is published by thomax (txOh) (c) 2010 under the&lt;br /&gt;
# Artistic License 1.0 (http://www.perlfoundation.org/artistic_license_1_0)&lt;br /&gt;
# Modifications (c) 2013 BlueWall&lt;br /&gt;
&lt;br /&gt;
import urllib, urllib2&lt;br /&gt;
import xml.dom.minidom&lt;br /&gt;
&lt;br /&gt;
class UserConsoleClient():&lt;br /&gt;
&lt;br /&gt;
   def __init__(self, addr):&lt;br /&gt;
       self.addr = addr&lt;br /&gt;
       url = self.addr + 'StartSession/'&lt;br /&gt;
&lt;br /&gt;
       params = urllib.urlencode({&lt;br /&gt;
           'USER': 'username',       # REST username&lt;br /&gt;
           'PASS': 'userpass'        # REST password&lt;br /&gt;
       })&lt;br /&gt;
       data = urllib2.urlopen(url, params).read()&lt;br /&gt;
       print data&lt;br /&gt;
&lt;br /&gt;
       dom = xml.dom.minidom.parseString(data)&lt;br /&gt;
       elem =  dom.getElementsByTagName('SessionID')&lt;br /&gt;
       self.sessionid = elem[0].childNodes[0].nodeValue&lt;br /&gt;
       elem = dom.getElementsByTagName('Prompt')&lt;br /&gt;
       self.prompt = elem[0].childNodes[0].nodeValue + '# '&lt;br /&gt;
&lt;br /&gt;
   def close(self):&lt;br /&gt;
       url = self.addr + 'CloseSession/'&lt;br /&gt;
       params = urllib.urlencode({&lt;br /&gt;
           'ID': self.sessionid&lt;br /&gt;
       })&lt;br /&gt;
       print urllib2.urlopen(url, params).read()&lt;br /&gt;
&lt;br /&gt;
   def do_cmd(self, cmd):&lt;br /&gt;
       url = self.addr + 'SessionCommand/'&lt;br /&gt;
       params = urllib.urlencode({&lt;br /&gt;
           'ID': self.sessionid,&lt;br /&gt;
           'COMMAND': cmd&lt;br /&gt;
       })&lt;br /&gt;
       data = urllib2.urlopen(url, params).read()&lt;br /&gt;
       dom = xml.dom.minidom.parseString(data)&lt;br /&gt;
       elem =  dom.getElementsByTagName('Result')&lt;br /&gt;
       return elem[0].childNodes[0].nodeValue&lt;br /&gt;
&lt;br /&gt;
   def read_buffer(self):&lt;br /&gt;
       url = self.addr + 'ReadResponses/' + self.sessionid + '/'&lt;br /&gt;
       params = urllib.urlencode({&lt;br /&gt;
           'ID': self.sessionid&lt;br /&gt;
       })&lt;br /&gt;
&lt;br /&gt;
       # print urllib2.urlopen(url, params).read()&lt;br /&gt;
       &lt;br /&gt;
       result = urllib2.urlopen(url, params).read()&lt;br /&gt;
       dom = xml.dom.minidom.parseString(result)&lt;br /&gt;
&lt;br /&gt;
       elem =  dom.getElementsByTagName('Line')&lt;br /&gt;
       for line in elem:&lt;br /&gt;
         x0 = line.childNodes[0].nodeValue&lt;br /&gt;
         x1 = str.replace(str(x0),':','~',2)&lt;br /&gt;
         x2 = x1.split(&amp;quot;~&amp;quot;)&lt;br /&gt;
         for lv in x2[2:]:&lt;br /&gt;
           if not '+++' in lv:&lt;br /&gt;
             print lv&lt;br /&gt;
       &lt;br /&gt;
# set the base url to the REST console (with port)&lt;br /&gt;
console = UserConsoleClient('http://example.com:8003/')&lt;br /&gt;
console.read_buffer()&lt;br /&gt;
print 'quit with a &amp;quot;.&amp;quot;'&lt;br /&gt;
cmd = &amp;quot;&amp;quot;&lt;br /&gt;
while cmd != &amp;quot;.&amp;quot;:&lt;br /&gt;
   if cmd != &amp;quot;&amp;quot;:&lt;br /&gt;
     if 'OK' in console.do_cmd(cmd):&lt;br /&gt;
       console.read_buffer()&lt;br /&gt;
   cmd = raw_input(&amp;quot;%s &amp;quot; % console.prompt)&lt;br /&gt;
&lt;br /&gt;
console.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JavaScript/HTML ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- This JavaScript code is published by Marck (c) 2010 under a --&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Creative Commons Attribution 3.0 Germany License            --&amp;gt;&lt;br /&gt;
    &amp;lt;!-- http://creativecommons.org/licenses/by/3.0/de/              --&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      var sessionId;&lt;br /&gt;
      var hostUrl;&lt;br /&gt;
&lt;br /&gt;
      function StartSession(url, user, password) {&lt;br /&gt;
        hostUrl = url;&lt;br /&gt;
        var response = SendRequest(&amp;quot;/StartSession/&amp;quot;, &amp;quot;USER=&amp;quot; + user + &amp;quot;&amp;amp;PASS=&amp;quot; + password);&lt;br /&gt;
        sessionId = response.getElementsByTagName(&amp;quot;SessionID&amp;quot;)[0].firstChild.nodeValue;&lt;br /&gt;
      };&lt;br /&gt;
&lt;br /&gt;
      function ReadResponses() {&lt;br /&gt;
        var response = this.SendRequest(&amp;quot;/ReadResponses/&amp;quot; + sessionId + &amp;quot;/&amp;quot;, '');&lt;br /&gt;
        var lines = response.getElementsByTagName(&amp;quot;Line&amp;quot;);&lt;br /&gt;
        for (var i = 0; i &amp;lt; lines.length; ++i) {&lt;br /&gt;
          var element = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
          element.appendChild(document.createTextNode(lines[i].firstChild.nodeValue));&lt;br /&gt;
          document.getElementById(&amp;quot;output&amp;quot;).appendChild(element);&lt;br /&gt;
        };&lt;br /&gt;
        document.getElementById(&amp;quot;output&amp;quot;).scrollTop = document.getElementById(&amp;quot;output&amp;quot;).scrollHeight;&lt;br /&gt;
      };&lt;br /&gt;
&lt;br /&gt;
      function Command(cmd) {&lt;br /&gt;
        void SendRequest(&amp;quot;/SessionCommand/&amp;quot;, &amp;quot;ID=&amp;quot; + sessionId + &amp;quot;&amp;amp;COMMAND=&amp;quot; + cmd);&lt;br /&gt;
      };&lt;br /&gt;
&lt;br /&gt;
      function CloseSession() {&lt;br /&gt;
        void SendRequest(&amp;quot;/CloseSession/&amp;quot;, &amp;quot;ID=&amp;quot; + sessionId);&lt;br /&gt;
      };&lt;br /&gt;
&lt;br /&gt;
      function SendRequest(path, data) {&lt;br /&gt;
        var request = new XMLHttpRequest();&lt;br /&gt;
        request.open(&amp;quot;POST&amp;quot;, hostUrl + path, false);&lt;br /&gt;
        request.send(data);&lt;br /&gt;
        return request.responseXML;&lt;br /&gt;
      };&lt;br /&gt;
&lt;br /&gt;
      window.onunload = CloseSession;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;form action=&amp;quot;#&amp;quot; onsubmit=&amp;quot;&lt;br /&gt;
        StartSession(this.address.value, this.user.value, this.password.value);&lt;br /&gt;
        ReadResponses();&lt;br /&gt;
        return false&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;input name=&amp;quot;address&amp;quot; type=&amp;quot;text&amp;quot; value=&amp;quot;http://localhost:9000&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;input name=&amp;quot;user&amp;quot; type=&amp;quot;text&amp;quot; value=&amp;quot;ConsoleUser&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;input name=&amp;quot;password&amp;quot; type=&amp;quot;text&amp;quot; value=&amp;quot;ConsolePass&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Login&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div id=&amp;quot;output&amp;quot; style=&amp;quot;height:15em; border:thin solid; overflow:auto;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;form action=&amp;quot;#&amp;quot; onsubmit=&amp;quot;&lt;br /&gt;
        Command(this.command.value);&lt;br /&gt;
        ReadResponses();&lt;br /&gt;
        return false&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;command&amp;quot; value=&amp;quot;Enter command here&amp;quot; size=&amp;quot;40&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Send Command&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/RestConsole</id>
		<title>RestConsole</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/RestConsole"/>
				<updated>2018-04-10T14:02:16Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: /* javascript */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|RestConsole}}{{ReleaseInfo}}&lt;br /&gt;
== About ==&lt;br /&gt;
The REST console makes remote administration of the various OpenSimulator services possible.&lt;br /&gt;
&lt;br /&gt;
The interface allows sending commands to the server and retrieving command output. Sending and receiving data is done through RESTful HTTP calls.&lt;br /&gt;
&lt;br /&gt;
While sending is very straightforward, receiving is not. Receiving uses reverse HTTP, performing a long poll to a CAPS URI.&lt;br /&gt;
&lt;br /&gt;
In order to make the protocol more efficient, the help functionality has been pushed to the client side. Rather than sending each keystroke to the server, only validated command lines are sent. To make this possible, the server sends a burst-on-connect of data, which is the tree of allowed commands and their help information. This can be used by the client to create the &amp;quot;help&amp;quot; command output locally as well as provide command line help interactively.&lt;br /&gt;
&lt;br /&gt;
The sample console client, OpenSim.ConsoleClient.exe, shows how this is done.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
In order to use the remote console, start up OpenSimulator services with parameter &amp;lt;tt&amp;gt;-console rest&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Example for Robust server in grid mode:&lt;br /&gt;
 mono Robust.exe -console rest&lt;br /&gt;
&lt;br /&gt;
Example for simulators (both in grid and standalone mode):&lt;br /&gt;
 mono OpenSim.exe -console rest&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
We take the OpenSimulator services address &amp;lt;nowiki&amp;gt;http://foo.bar:8002&amp;lt;/nowiki&amp;gt; as example here.&lt;br /&gt;
&lt;br /&gt;
First start a new session by sending a HTTP POST request. User name and password should match the settings for &amp;lt;tt&amp;gt;ConsoleUser&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ConsolePass&amp;lt;/tt&amp;gt; in section &amp;lt;tt&amp;gt;[Network]&amp;lt;/tt&amp;gt; of OpenSim.ini.&amp;lt;br /&amp;gt;&lt;br /&gt;
Parameters: USER, PASS&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://foo.bar:8002/StartSession/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Return: (XML) &amp;lt;ConsoleSession&amp;gt;&amp;lt;SessionID&amp;gt;&amp;lt;/SessionID&amp;gt;&amp;lt;Prompt&amp;gt;&amp;lt;/Prompt&amp;gt;&amp;lt;/ConsoleSession&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we got the SessionID, which can be used to send a command and to receive output. First, retrieve the console scrollback buffer.&amp;lt;br /&amp;gt;&lt;br /&gt;
Parameters: none&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://foo.bar:8002/ReadResponses/&amp;lt;SessionID&amp;gt;/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Return: (XML) &amp;lt;ConsoleSession&amp;gt;&amp;lt;Line Number=x Level=l Prompt=p Command=c Input=i&amp;gt;&amp;lt;/Line&amp;gt;&amp;lt;/ConsoleSession&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
The reply contains all lines currently in the buffer. Subsequent fetches will only retrieve new lines. The fetch will hold for up to 30 seconds if there is no data, then return an error. The client is expected to try again (polling).&lt;br /&gt;
The attributes are as follows:&lt;br /&gt;
 Number = The line number (1 based)&lt;br /&gt;
 Level = The level this is to be logged as&lt;br /&gt;
 Prompt = bool, true if the output on this line is a prompt&lt;br /&gt;
 Command = bool, true if the prompt is for a command&lt;br /&gt;
 Input = bool, true if the output is eachoed input&lt;br /&gt;
&lt;br /&gt;
Use the SessionID as ID parameter, and send a POST request again.&amp;lt;br /&amp;gt;&lt;br /&gt;
Parameters: ID, COMMAND&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://foo.bar:8002/SessionCommand/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Return: (XML) &amp;lt;ConsoleSession&amp;gt;&amp;lt;Result&amp;gt;&amp;lt;/Result&amp;gt;&amp;lt;/ConsoleSession&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
If everything went well, the command should have been executed. Try another command.&lt;br /&gt;
&lt;br /&gt;
When you want to close down the connection, send a POST request again.&amp;lt;br /&amp;gt;&lt;br /&gt;
Parameters: ID&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://foo.bar:8002/CloseSession/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Return: (XML) &amp;lt;ConsoleSession&amp;gt;&amp;lt;Result&amp;gt;&amp;lt;/Result&amp;gt;&amp;lt;/ConsoleSession&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
The session is closed, and you have to log in again, when you want to send a command again.&lt;br /&gt;
&lt;br /&gt;
= Clients =&lt;br /&gt;
&lt;br /&gt;
== C# ==&lt;br /&gt;
&lt;br /&gt;
A C# client is included with the Opensimulator distribution. It is rudimentary and not updated to the latest protocol versions.&lt;br /&gt;
&lt;br /&gt;
== Qt ==&lt;br /&gt;
&lt;br /&gt;
The Qt 5 based client is at https://github.com/MelanieT/OpenSimConsoleClient&lt;br /&gt;
&lt;br /&gt;
= Binaries =&lt;br /&gt;
 Windows: http://opensimulator.org/downloads/ConsoleClient.zip&lt;br /&gt;
 Mac: http://opensimulator.org/downloads/ConsoleClient.dmg&lt;br /&gt;
 Linux: TBD&lt;br /&gt;
&lt;br /&gt;
= Examples =&lt;br /&gt;
&lt;br /&gt;
== NOTE ==&lt;br /&gt;
&lt;br /&gt;
The below examples are for an older version of the interface. They may work to a degree but need to be revised.&lt;br /&gt;
&lt;br /&gt;
=== node.js ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 | This piece of code is published by thomax (txOh) (c) 2018 under the&lt;br /&gt;
 | Artistic License 1.0 (http://www.perlfoundation.org/artistic_license_1_0)&lt;br /&gt;
 |&lt;br /&gt;
 | I removed my previous python approach because blueman made a better&lt;br /&gt;
 | version and it was outdated. Here is a node.js variant.&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
const readline = require('readline');&lt;br /&gt;
var Client = require('node-rest-client').Client;&lt;br /&gt;
var client = new Client();&lt;br /&gt;
var session_id;&lt;br /&gt;
var base_url = &amp;quot;http://127.0.0.1:9000&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// set http header&lt;br /&gt;
var headers = {&lt;br /&gt;
    &amp;quot;Content-Type&amp;quot;: &amp;quot;application/x-www-form-urlencoded&amp;quot;,&lt;br /&gt;
    &amp;quot;User-Agent&amp;quot;: &amp;quot;nodejs-console/0.01&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// open session&lt;br /&gt;
function open_session() {&lt;br /&gt;
    var args = {&lt;br /&gt;
        data: {&lt;br /&gt;
            &amp;quot;USER&amp;quot;: &amp;quot;Test&amp;quot;,&lt;br /&gt;
            &amp;quot;PASS&amp;quot;: 'secret'&lt;br /&gt;
        },&lt;br /&gt;
        headers,&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    client.post(base_url + &amp;quot;/StartSession/&amp;quot;, args, function (data, response) {&lt;br /&gt;
        session_id = data.ConsoleSession.SessionID;&lt;br /&gt;
        read_session_buffer();&lt;br /&gt;
    });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// close session&lt;br /&gt;
function close_session() {&lt;br /&gt;
    args = {&lt;br /&gt;
        data: { &amp;quot;ID&amp;quot;: session_id },&lt;br /&gt;
        headers&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    client.post(base_url + &amp;quot;/CloseSession/&amp;quot;, args, function (data, response) {&lt;br /&gt;
        console.log(&amp;quot;close_session: &amp;quot;+response);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    console.log('Have a great day!');&lt;br /&gt;
    process.exit(0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// read all the lines from the console buffer and print them&lt;br /&gt;
function read_session_buffer() {&lt;br /&gt;
    args = {&lt;br /&gt;
        data: { &amp;quot;ID&amp;quot;: session_id },&lt;br /&gt;
        headers&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    client.post(base_url + &amp;quot;/ReadResponses/&amp;quot;+session_id+&amp;quot;/&amp;quot;, args, function (data, response) {&lt;br /&gt;
        if(data.ConsoleSession.Line) {&lt;br /&gt;
            var i;&lt;br /&gt;
            for(i=0; i &amp;lt; data.ConsoleSession.Line.length; i++) {&lt;br /&gt;
                if(data.ConsoleSession.Line[i]._) {&lt;br /&gt;
                    console.log(data.ConsoleSession.Line[i]._);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            rl.prompt();&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// execute the command from the prompt&lt;br /&gt;
function execute_cmd(cmd) {&lt;br /&gt;
    args = {&lt;br /&gt;
        data: {&lt;br /&gt;
            &amp;quot;ID&amp;quot;: session_id,&lt;br /&gt;
            &amp;quot;COMMAND&amp;quot;: cmd&lt;br /&gt;
        },&lt;br /&gt;
        headers&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    client.post(base_url + &amp;quot;/SessionCommand/&amp;quot;, args, function (data, response) {&lt;br /&gt;
    });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// here we go.&lt;br /&gt;
open_session();&lt;br /&gt;
&lt;br /&gt;
// prepare readline&lt;br /&gt;
const rl = readline.createInterface({&lt;br /&gt;
    input: process.stdin,&lt;br /&gt;
    output: process.stdout,&lt;br /&gt;
    prompt: 'REST CONSOLE&amp;gt; '&lt;br /&gt;
});&lt;br /&gt;
rl.prompt();&lt;br /&gt;
&lt;br /&gt;
// hunt for events&lt;br /&gt;
rl.on('line', (line) =&amp;gt; {&lt;br /&gt;
    switch (line.trim()) {&lt;br /&gt;
        case 'quit':&lt;br /&gt;
            close_session();&lt;br /&gt;
            break;&lt;br /&gt;
        default:&lt;br /&gt;
            if(line.length &amp;gt; 0) {&lt;br /&gt;
                execute_cmd(line.trim());&lt;br /&gt;
            }&lt;br /&gt;
            break;&lt;br /&gt;
    }&lt;br /&gt;
    read_session_buffer();&lt;br /&gt;
    rl.prompt();&lt;br /&gt;
}).on('close', () =&amp;gt; {&lt;br /&gt;
    close_session();&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
=== Python (Updated) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# This piece of code is published by thomax (txOh) (c) 2010 under the&lt;br /&gt;
# Artistic License 1.0 (http://www.perlfoundation.org/artistic_license_1_0)&lt;br /&gt;
# Modifications (c) 2013 BlueWall&lt;br /&gt;
&lt;br /&gt;
import urllib, urllib2&lt;br /&gt;
import xml.dom.minidom&lt;br /&gt;
&lt;br /&gt;
class UserConsoleClient():&lt;br /&gt;
&lt;br /&gt;
   def __init__(self, addr):&lt;br /&gt;
       self.addr = addr&lt;br /&gt;
       url = self.addr + 'StartSession/'&lt;br /&gt;
&lt;br /&gt;
       params = urllib.urlencode({&lt;br /&gt;
           'USER': 'username',       # REST username&lt;br /&gt;
           'PASS': 'userpass'        # REST password&lt;br /&gt;
       })&lt;br /&gt;
       data = urllib2.urlopen(url, params).read()&lt;br /&gt;
       print data&lt;br /&gt;
&lt;br /&gt;
       dom = xml.dom.minidom.parseString(data)&lt;br /&gt;
       elem =  dom.getElementsByTagName('SessionID')&lt;br /&gt;
       self.sessionid = elem[0].childNodes[0].nodeValue&lt;br /&gt;
       elem = dom.getElementsByTagName('Prompt')&lt;br /&gt;
       self.prompt = elem[0].childNodes[0].nodeValue + '# '&lt;br /&gt;
&lt;br /&gt;
   def close(self):&lt;br /&gt;
       url = self.addr + 'CloseSession/'&lt;br /&gt;
       params = urllib.urlencode({&lt;br /&gt;
           'ID': self.sessionid&lt;br /&gt;
       })&lt;br /&gt;
       print urllib2.urlopen(url, params).read()&lt;br /&gt;
&lt;br /&gt;
   def do_cmd(self, cmd):&lt;br /&gt;
       url = self.addr + 'SessionCommand/'&lt;br /&gt;
       params = urllib.urlencode({&lt;br /&gt;
           'ID': self.sessionid,&lt;br /&gt;
           'COMMAND': cmd&lt;br /&gt;
       })&lt;br /&gt;
       data = urllib2.urlopen(url, params).read()&lt;br /&gt;
       dom = xml.dom.minidom.parseString(data)&lt;br /&gt;
       elem =  dom.getElementsByTagName('Result')&lt;br /&gt;
       return elem[0].childNodes[0].nodeValue&lt;br /&gt;
&lt;br /&gt;
   def read_buffer(self):&lt;br /&gt;
       url = self.addr + 'ReadResponses/' + self.sessionid + '/'&lt;br /&gt;
       params = urllib.urlencode({&lt;br /&gt;
           'ID': self.sessionid&lt;br /&gt;
       })&lt;br /&gt;
&lt;br /&gt;
       # print urllib2.urlopen(url, params).read()&lt;br /&gt;
       &lt;br /&gt;
       result = urllib2.urlopen(url, params).read()&lt;br /&gt;
       dom = xml.dom.minidom.parseString(result)&lt;br /&gt;
&lt;br /&gt;
       elem =  dom.getElementsByTagName('Line')&lt;br /&gt;
       for line in elem:&lt;br /&gt;
         x0 = line.childNodes[0].nodeValue&lt;br /&gt;
         x1 = str.replace(str(x0),':','~',2)&lt;br /&gt;
         x2 = x1.split(&amp;quot;~&amp;quot;)&lt;br /&gt;
         for lv in x2[2:]:&lt;br /&gt;
           if not '+++' in lv:&lt;br /&gt;
             print lv&lt;br /&gt;
       &lt;br /&gt;
# set the base url to the REST console (with port)&lt;br /&gt;
console = UserConsoleClient('http://example.com:8003/')&lt;br /&gt;
console.read_buffer()&lt;br /&gt;
print 'quit with a &amp;quot;.&amp;quot;'&lt;br /&gt;
cmd = &amp;quot;&amp;quot;&lt;br /&gt;
while cmd != &amp;quot;.&amp;quot;:&lt;br /&gt;
   if cmd != &amp;quot;&amp;quot;:&lt;br /&gt;
     if 'OK' in console.do_cmd(cmd):&lt;br /&gt;
       console.read_buffer()&lt;br /&gt;
   cmd = raw_input(&amp;quot;%s &amp;quot; % console.prompt)&lt;br /&gt;
&lt;br /&gt;
console.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JavaScript/HTML ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- This JavaScript code is published by Marck (c) 2010 under a --&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Creative Commons Attribution 3.0 Germany License            --&amp;gt;&lt;br /&gt;
    &amp;lt;!-- http://creativecommons.org/licenses/by/3.0/de/              --&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      var sessionId;&lt;br /&gt;
      var hostUrl;&lt;br /&gt;
&lt;br /&gt;
      function StartSession(url, user, password) {&lt;br /&gt;
        hostUrl = url;&lt;br /&gt;
        var response = SendRequest(&amp;quot;/StartSession/&amp;quot;, &amp;quot;USER=&amp;quot; + user + &amp;quot;&amp;amp;PASS=&amp;quot; + password);&lt;br /&gt;
        sessionId = response.getElementsByTagName(&amp;quot;SessionID&amp;quot;)[0].firstChild.nodeValue;&lt;br /&gt;
      };&lt;br /&gt;
&lt;br /&gt;
      function ReadResponses() {&lt;br /&gt;
        var response = this.SendRequest(&amp;quot;/ReadResponses/&amp;quot; + sessionId + &amp;quot;/&amp;quot;, '');&lt;br /&gt;
        var lines = response.getElementsByTagName(&amp;quot;Line&amp;quot;);&lt;br /&gt;
        for (var i = 0; i &amp;lt; lines.length; ++i) {&lt;br /&gt;
          var element = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
          element.appendChild(document.createTextNode(lines[i].firstChild.nodeValue));&lt;br /&gt;
          document.getElementById(&amp;quot;output&amp;quot;).appendChild(element);&lt;br /&gt;
        };&lt;br /&gt;
        document.getElementById(&amp;quot;output&amp;quot;).scrollTop = document.getElementById(&amp;quot;output&amp;quot;).scrollHeight;&lt;br /&gt;
      };&lt;br /&gt;
&lt;br /&gt;
      function Command(cmd) {&lt;br /&gt;
        void SendRequest(&amp;quot;/SessionCommand/&amp;quot;, &amp;quot;ID=&amp;quot; + sessionId + &amp;quot;&amp;amp;COMMAND=&amp;quot; + cmd);&lt;br /&gt;
      };&lt;br /&gt;
&lt;br /&gt;
      function CloseSession() {&lt;br /&gt;
        void SendRequest(&amp;quot;/CloseSession/&amp;quot;, &amp;quot;ID=&amp;quot; + sessionId);&lt;br /&gt;
      };&lt;br /&gt;
&lt;br /&gt;
      function SendRequest(path, data) {&lt;br /&gt;
        var request = new XMLHttpRequest();&lt;br /&gt;
        request.open(&amp;quot;POST&amp;quot;, hostUrl + path, false);&lt;br /&gt;
        request.send(data);&lt;br /&gt;
        return request.responseXML;&lt;br /&gt;
      };&lt;br /&gt;
&lt;br /&gt;
      window.onunload = CloseSession;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;form action=&amp;quot;#&amp;quot; onsubmit=&amp;quot;&lt;br /&gt;
        StartSession(this.address.value, this.user.value, this.password.value);&lt;br /&gt;
        ReadResponses();&lt;br /&gt;
        return false&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;input name=&amp;quot;address&amp;quot; type=&amp;quot;text&amp;quot; value=&amp;quot;http://localhost:9000&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;input name=&amp;quot;user&amp;quot; type=&amp;quot;text&amp;quot; value=&amp;quot;ConsoleUser&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;input name=&amp;quot;password&amp;quot; type=&amp;quot;text&amp;quot; value=&amp;quot;ConsolePass&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Login&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div id=&amp;quot;output&amp;quot; style=&amp;quot;height:15em; border:thin solid; overflow:auto;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;form action=&amp;quot;#&amp;quot; onsubmit=&amp;quot;&lt;br /&gt;
        Command(this.command.value);&lt;br /&gt;
        ReadResponses();&lt;br /&gt;
        return false&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;command&amp;quot; value=&amp;quot;Enter command here&amp;quot; size=&amp;quot;40&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Send Command&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Compatible_Viewers</id>
		<title>Compatible Viewers</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Compatible_Viewers"/>
				<updated>2013-05-25T05:52:09Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: /* Feature Table */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{thirdparty}}&lt;br /&gt;
&lt;br /&gt;
If you find a viewer which can connect to OpenSimulator then please add it to the bottom of the appropriate list.&lt;br /&gt;
&lt;br /&gt;
= Viewers with Grid Selector and Grid Manager =&lt;br /&gt;
&lt;br /&gt;
Below are viewers that have both a grid selector and a &amp;quot;Grid Manager&amp;quot;. It enables you to select one of the many [[Grid List|grids]], including a grid or region on localhost (your own PC). There is also a UI interface to allow you to modify or add connection settings to these grids.&lt;br /&gt;
&lt;br /&gt;
* [http://hypergrid.org/metropolis/wiki/en/index.php/Downloads Hippo Viewer] - a fork of version 1.23 of the Linden Client with OpenSimulator specific enhancements&lt;br /&gt;
* [http://imprudenceviewer.org/ Imprudence] Innovative viewer with a high focus on OpenSimulator (good [[OSSL]] support). Highly popular amongst users on [[Grid List/OSGrid|OSGrid]].&lt;br /&gt;
* [http://www.phoenixviewer.com/ Firestorm viewer] v3 based TPV, the successor to Phoenix. The most widely used viewer on Second Life, with the best features from Phoenix. OpenSimulator is fully supported with its own version.&lt;br /&gt;
* [http://www.phoenixviewer.com/ Phoenix Viewer] Based on the now discontinued Emerald Viewer (which was based on the 1.23 LL viewer), one of the most popular viewers. Combines many improvements and features from different viewers. (No longer supported)&lt;br /&gt;
* [http://www.singularityviewer.org/ Singularity] - A V1 based viewer, with all the good stuff from v2/3 added. Supports [[Mesh]], [[OSSL]], [[LightShare]], Alpha, Tattoos and Physics, multiple attachments per joint, multiple clothing layers, inventory links, etc...&lt;br /&gt;
* [http://sldev.free.fr/ Cool VL Viewer] - the oldest of all actively maintained Third Party Viewers (former name: Cool SL Viewer), fully OpenSimulator compatible. It also got support for [[Mesh]], Alpha, Tattoos and Physics, multiple attachments per joint, multiple clothing layers, inventory links, etc...&lt;br /&gt;
* [http://lumiyaviewer.com Lumiya viewer] - A Second Life and OpenSimulator viewer for Android.&lt;br /&gt;
&lt;br /&gt;
= Viewers with Grid Selector Only =&lt;br /&gt;
&lt;br /&gt;
These viewers don't have a Grid Manager, but you can a grid from a list, including localhost. You may need to manually edit a configuration file in order to connect to grids that are not originally included.&lt;br /&gt;
&lt;br /&gt;
* [http://imprudenceviewer.org/ Kokua] v2/3 based successor of Imprudence. Currently in alpha/experimental stage.&lt;br /&gt;
&lt;br /&gt;
= Viewers without Grid Selector =&lt;br /&gt;
&lt;br /&gt;
'''Note: After LL 3.3.4, the --loginuri parameter was removed from the official Linden viewer.  There is now no simple way to use this viewer to log in to OpenSimulator.'''.  You will need to launch this viewer with a --loginuri command line parameter to connect to OpenSimulator grids. See [http://wiki.secondlife.com/wiki/Viewer_parameters] for the syntax of this command, or visit the support section on the homepage of your preferred grid.&lt;br /&gt;
&lt;br /&gt;
* [http://secondlife.com/support/downloads/ Second Life Viewer]&lt;br /&gt;
&lt;br /&gt;
= Text-only Viewers =&lt;br /&gt;
These are lightweight viewers, which either do not offer a graphical component or where the graphical component is not used by deault. The function of these viewers however is to connect to a grid, chat, manage inventory, etc. Useful on systems with low specifications or for bringing an alt online without having your main avatar log out, or to quickly take care of messages, inventory, etc.&lt;br /&gt;
&lt;br /&gt;
* [http://radegast.org Radegast Metaverse Client] Works with OpenSim-based grids, as well as with SL. Has Windows, MacOS and Linux versions.&lt;br /&gt;
* [https://bitbucket.org/jchauhan/jopenmetaverse JOpenMetaverse] Purely Java based OpenSim client core library.  Windows, MacOS,, Linux and Android Compatible. Please see [http://www.slideshare.net/jchauhan/jopenmeraverse-introduction jopenmetaverse introduction]&lt;br /&gt;
&lt;br /&gt;
= Inactive Viewers =&lt;br /&gt;
* [[RealXtend]] - a fork of the 1.23 Linden Client that has specialized features (not fully supported.)&lt;br /&gt;
* [http://forge.opensimulator.org/gf/project/idealistviewer/ Idealist viewer]&lt;br /&gt;
* [http://3di-rei.org/ 3Di viewer]&lt;br /&gt;
* [[Xenki]], an XBAP 3D application intended to be a browser add-on for OpenSimulator.&lt;br /&gt;
* [http://lookingglassviewer.org/wiki/Main_Page Looking Glass viewer], Discontinued. Only OSGrid, ScienceSim and localhost are available from the list.&lt;br /&gt;
* [http://dolphinviewer.eregion.de/ Dolphin Viewer] v3 based viewer, but v1 and v2 based versions are also available. Contains modifications which are useful for building, sailing, and for using vehicles.  '''No longer supports OpenSimulator with new versions due to LL licensing changes and code constraints.  Last version 3.3.19 that works with OpenSimulator still available.&lt;br /&gt;
&lt;br /&gt;
= Feature Table =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; align=&amp;quot;center&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''Viewer&amp;lt;br /&amp;gt;Name'''&lt;br /&gt;
| Based on Version&lt;br /&gt;
| Grid&amp;lt;br /&amp;gt;Selector&lt;br /&gt;
| Grid&amp;lt;br /&amp;gt;Manager&lt;br /&gt;
| Graphical&lt;br /&gt;
| Mesh&lt;br /&gt;
| [[:Category:OSSL|OSSL]]&amp;lt;br /&amp;gt;support&lt;br /&gt;
| LightShare [[#note1|[1]]]&lt;br /&gt;
| Parcel&amp;lt;br /&amp;gt;Windlight [[#note2|[2]]]&lt;br /&gt;
| Multiple&amp;lt;br /&amp;gt;Attachments&lt;br /&gt;
| Multiple&amp;lt;br /&amp;gt;Clothing&amp;lt;br /&amp;gt;Layers&lt;br /&gt;
| Operating System&lt;br /&gt;
| '''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| [http://realxtend.wordpress.com/download/ RealXtend Naali]&lt;br /&gt;
| n/a&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | [[Image:Windows_logo.png|24px|frameless|Windows version available]][[Image:Macosx_logo.png|24px|MacOSX version available]]&lt;br /&gt;
| [[#note3|[3]]]&lt;br /&gt;
|-&lt;br /&gt;
| [http://forge.opensimulator.org/gf/project/opensim-viewer/frs/ Hippo Viewer]&lt;br /&gt;
| v1&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | [[Image:Windows_logo.png|24px|frameless|Windows version available]][[Image:Tux.png|24px|frameless|Linux version available]]&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://wiki.kokuaviewer.org/wiki/Downloads Imprudence]&lt;br /&gt;
| v1&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | [[Image:Windows_logo.png|24px|frameless|Windows version available]][[Image:Macosx_logo.png|24px|frameless|MacOSX version available]][[Image:Tux.png|24px|frameless|Linux version available]]&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.phoenixviewer.com/ Phoenix Viewer]&lt;br /&gt;
| v1&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | [[Image:Windows_logo.png|24px|frameless|Windows version available]][[Image:Macosx_logo.png|24px|MacOSX version available]][[Image:Tux.png|24px|frameless|Linux version available]]&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.singularityviewer.org/downloads Singularity]&lt;br /&gt;
| v1&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | [[Image:Windows_logo.png|24px|frameless|Windows version available]][[Image:Macosx_logo.png|24px|MacOSX version available]][[Image:Tux.png|24px|frameless|Linux version available]]&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://sldev.free.fr/ Cool VL Viewer]&lt;br /&gt;
| v1&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | [[Image:Windows_logo.png|24px|frameless|Windows version available]][[Image:Macosx_logo.png|24px|MacOSX version available]][[Image:Tux.png|24px|frameless|Linux version available]]&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://wiki.kokuaviewer.org/wiki/Kokua:Experimental Kokua]&lt;br /&gt;
| v2/3&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | [[Image:Windows_logo.png|24px|frameless|Windows version available]] [[Image:Tux.png|24px|frameless|Linux version available]]&lt;br /&gt;
| [[#note4|[4]]]&lt;br /&gt;
|-&lt;br /&gt;
| [http://lookingglassviewer.org/wiki/Download Looking Glass viewer]&lt;br /&gt;
| ?&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | [[Image:Windows_logo.png|24px|frameless|Windows version available]]&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://secondlife.com/support/downloads/ Second Life Viewer]&lt;br /&gt;
| v2/3&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | [[Image:Windows_logo.png|24px|frameless|Windows version available]][[Image:Macosx_logo.png|24px|MacOSX version available]][[Image:Tux.png|24px|frameless|Linux version available]]&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.phoenixviewer.com/ Firestorm viewer]&lt;br /&gt;
| v2/3&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | [[Image:Windows_logo.png|24px|frameless|Windows version available]][[Image:Macosx_logo.png|24px|MacOSX version available]][[Image:Tux.png|24px|frameless|Linux version available]]&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://radegast.org/wiki/Radegast_Download Radegast Metaverse Client]&lt;br /&gt;
| n/a&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | Text client&amp;lt;br /&amp;gt;with graphical&amp;lt;br /&amp;gt;component&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | [[Image:Windows_logo.png|24px|frameless|Windows version available]][[Image:Macosx_logo.png|24px|MacOSX version available]][[Image:Tux.png|24px|frameless|Linux version available]]&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://forge.opensimulator.org/gf/project/idealistviewer/ Idealist viewer]&lt;br /&gt;
| ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
| [[#note5|[5]]]&lt;br /&gt;
|-&lt;br /&gt;
| [http://3di-rei.org/home/downloads/index.html 3Di viewer]&lt;br /&gt;
| Browser&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | [[Image:Windows_logo.png|24px|frameless|Windows version available]]&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://forge.opensimulator.org/gf/project/xenki/ Xenki]&lt;br /&gt;
| Browser&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
| [[#note5|[5]]]&lt;br /&gt;
|-&lt;br /&gt;
| [http://dolphinviewer.eregion.de/2012/08/18/dolphin-viewer-and-support-for-opensim/ OpenDolphin Viewer]&lt;br /&gt;
| v1/2/3&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √ (v2/3)&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √ (v2/3)&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | [[Image:Windows_logo.png|24px|frameless|Windows version available]][[Image:Macosx_logo.png|24px|MacOSX version available]][[Image:Tux.png|24px|frameless|Linux version available]]&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
&amp;lt;!-- Copy the code below to help you fill in all the fields, but append new viewers immediately ABOVE this line!&lt;br /&gt;
|- &lt;br /&gt;
| '''Viewer&amp;lt;br/&amp;gt;Name'''&lt;br /&gt;
| Based on Version&lt;br /&gt;
| Grid&amp;lt;br/&amp;gt;Selector&lt;br /&gt;
| Grid&amp;lt;br/&amp;gt;Manager&lt;br /&gt;
| Graphical&lt;br /&gt;
| Mesh&lt;br /&gt;
| [[:Category:OSSL|OSSL]]&amp;lt;br/&amp;gt;support&lt;br /&gt;
| LightShare [[#note1|[1]]]&lt;br /&gt;
| Parcel&amp;lt;br/&amp;gt;Windlight [[#note2|[2]]]&lt;br /&gt;
| Multiple&amp;lt;br/&amp;gt;Attachments&lt;br /&gt;
| Operating System&lt;br /&gt;
| '''Notes'''&lt;br /&gt;
 --&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:'''Notes'''&lt;br /&gt;
----&lt;br /&gt;
* '''&amp;lt;span id=&amp;quot;note1&amp;quot;&amp;gt;#1&amp;lt;/span&amp;gt;''' LightShare is a method for altering WindLight settings on a parcel or region by means of a script. See [[Lightshare]].&lt;br /&gt;
* '''&amp;lt;span id=&amp;quot;note2&amp;quot;&amp;gt;#2&amp;lt;/span&amp;gt;''' The Parcel Windlight referred to here, is a Phoenix/Firestorm feature which lets parcel owners define a windlight setting which is to be applied to a user's viewer if the viewer supports it, and if the visitor has enabled that feature. See [http://wiki.phoenixviewer.com/doku.php?id=parcelwl the Parcel WL article on the Phoenix wiki] for more info.&lt;br /&gt;
* '''&amp;lt;span id=&amp;quot;note3&amp;quot;&amp;gt;#3&amp;lt;/span&amp;gt;''' RealXtend requires an additional module to be active on OpenSimulator. See [[ModRex]].&lt;br /&gt;
* '''&amp;lt;span id=&amp;quot;note4&amp;quot;&amp;gt;#4&amp;lt;/span&amp;gt;''' Data based on Kokua-3.5.2 [http://wiki.kokuaviewer.org/wiki/Kokua:Experimental], may soon be out of date!&lt;br /&gt;
* '''&amp;lt;span id=&amp;quot;note5&amp;quot;&amp;gt;#5&amp;lt;/span&amp;gt;''' Only source code is provided. No precompiled binaries!&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Compatible_Viewers</id>
		<title>Compatible Viewers</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Compatible_Viewers"/>
				<updated>2013-05-25T05:49:52Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: /* Feature Table */ updated kokua informations&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{thirdparty}}&lt;br /&gt;
&lt;br /&gt;
If you find a viewer which can connect to OpenSimulator then please add it to the bottom of the appropriate list.&lt;br /&gt;
&lt;br /&gt;
= Viewers with Grid Selector and Grid Manager =&lt;br /&gt;
&lt;br /&gt;
Below are viewers that have both a grid selector and a &amp;quot;Grid Manager&amp;quot;. It enables you to select one of the many [[Grid List|grids]], including a grid or region on localhost (your own PC). There is also a UI interface to allow you to modify or add connection settings to these grids.&lt;br /&gt;
&lt;br /&gt;
* [http://hypergrid.org/metropolis/wiki/en/index.php/Downloads Hippo Viewer] - a fork of version 1.23 of the Linden Client with OpenSimulator specific enhancements&lt;br /&gt;
* [http://imprudenceviewer.org/ Imprudence] Innovative viewer with a high focus on OpenSimulator (good [[OSSL]] support). Highly popular amongst users on [[Grid List/OSGrid|OSGrid]].&lt;br /&gt;
* [http://www.phoenixviewer.com/ Firestorm viewer] v3 based TPV, the successor to Phoenix. The most widely used viewer on Second Life, with the best features from Phoenix. OpenSimulator is fully supported with its own version.&lt;br /&gt;
* [http://www.phoenixviewer.com/ Phoenix Viewer] Based on the now discontinued Emerald Viewer (which was based on the 1.23 LL viewer), one of the most popular viewers. Combines many improvements and features from different viewers. (No longer supported)&lt;br /&gt;
* [http://www.singularityviewer.org/ Singularity] - A V1 based viewer, with all the good stuff from v2/3 added. Supports [[Mesh]], [[OSSL]], [[LightShare]], Alpha, Tattoos and Physics, multiple attachments per joint, multiple clothing layers, inventory links, etc...&lt;br /&gt;
* [http://sldev.free.fr/ Cool VL Viewer] - the oldest of all actively maintained Third Party Viewers (former name: Cool SL Viewer), fully OpenSimulator compatible. It also got support for [[Mesh]], Alpha, Tattoos and Physics, multiple attachments per joint, multiple clothing layers, inventory links, etc...&lt;br /&gt;
* [http://lumiyaviewer.com Lumiya viewer] - A Second Life and OpenSimulator viewer for Android.&lt;br /&gt;
&lt;br /&gt;
= Viewers with Grid Selector Only =&lt;br /&gt;
&lt;br /&gt;
These viewers don't have a Grid Manager, but you can a grid from a list, including localhost. You may need to manually edit a configuration file in order to connect to grids that are not originally included.&lt;br /&gt;
&lt;br /&gt;
* [http://imprudenceviewer.org/ Kokua] v2/3 based successor of Imprudence. Currently in alpha/experimental stage.&lt;br /&gt;
&lt;br /&gt;
= Viewers without Grid Selector =&lt;br /&gt;
&lt;br /&gt;
'''Note: After LL 3.3.4, the --loginuri parameter was removed from the official Linden viewer.  There is now no simple way to use this viewer to log in to OpenSimulator.'''.  You will need to launch this viewer with a --loginuri command line parameter to connect to OpenSimulator grids. See [http://wiki.secondlife.com/wiki/Viewer_parameters] for the syntax of this command, or visit the support section on the homepage of your preferred grid.&lt;br /&gt;
&lt;br /&gt;
* [http://secondlife.com/support/downloads/ Second Life Viewer]&lt;br /&gt;
&lt;br /&gt;
= Text-only Viewers =&lt;br /&gt;
These are lightweight viewers, which either do not offer a graphical component or where the graphical component is not used by deault. The function of these viewers however is to connect to a grid, chat, manage inventory, etc. Useful on systems with low specifications or for bringing an alt online without having your main avatar log out, or to quickly take care of messages, inventory, etc.&lt;br /&gt;
&lt;br /&gt;
* [http://radegast.org Radegast Metaverse Client] Works with OpenSim-based grids, as well as with SL. Has Windows, MacOS and Linux versions.&lt;br /&gt;
* [https://bitbucket.org/jchauhan/jopenmetaverse JOpenMetaverse] Purely Java based OpenSim client core library.  Windows, MacOS,, Linux and Android Compatible. Please see [http://www.slideshare.net/jchauhan/jopenmeraverse-introduction jopenmetaverse introduction]&lt;br /&gt;
&lt;br /&gt;
= Inactive Viewers =&lt;br /&gt;
* [[RealXtend]] - a fork of the 1.23 Linden Client that has specialized features (not fully supported.)&lt;br /&gt;
* [http://forge.opensimulator.org/gf/project/idealistviewer/ Idealist viewer]&lt;br /&gt;
* [http://3di-rei.org/ 3Di viewer]&lt;br /&gt;
* [[Xenki]], an XBAP 3D application intended to be a browser add-on for OpenSimulator.&lt;br /&gt;
* [http://lookingglassviewer.org/wiki/Main_Page Looking Glass viewer], Discontinued. Only OSGrid, ScienceSim and localhost are available from the list.&lt;br /&gt;
* [http://dolphinviewer.eregion.de/ Dolphin Viewer] v3 based viewer, but v1 and v2 based versions are also available. Contains modifications which are useful for building, sailing, and for using vehicles.  '''No longer supports OpenSimulator with new versions due to LL licensing changes and code constraints.  Last version 3.3.19 that works with OpenSimulator still available.&lt;br /&gt;
&lt;br /&gt;
= Feature Table =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; align=&amp;quot;center&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''Viewer&amp;lt;br /&amp;gt;Name'''&lt;br /&gt;
| Based on Version&lt;br /&gt;
| Grid&amp;lt;br /&amp;gt;Selector&lt;br /&gt;
| Grid&amp;lt;br /&amp;gt;Manager&lt;br /&gt;
| Graphical&lt;br /&gt;
| Mesh&lt;br /&gt;
| [[:Category:OSSL|OSSL]]&amp;lt;br /&amp;gt;support&lt;br /&gt;
| LightShare [[#note1|[1]]]&lt;br /&gt;
| Parcel&amp;lt;br /&amp;gt;Windlight [[#note2|[2]]]&lt;br /&gt;
| Multiple&amp;lt;br /&amp;gt;Attachments&lt;br /&gt;
| Multiple&amp;lt;br /&amp;gt;Clothing&amp;lt;br /&amp;gt;Layers&lt;br /&gt;
| Operating System&lt;br /&gt;
| '''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| [http://realxtend.wordpress.com/download/ RealXtend Naali]&lt;br /&gt;
| n/a&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | [[Image:Windows_logo.png|24px|frameless|Windows version available]][[Image:Macosx_logo.png|24px|MacOSX version available]]&lt;br /&gt;
| [[#note3|[3]]]&lt;br /&gt;
|-&lt;br /&gt;
| [http://forge.opensimulator.org/gf/project/opensim-viewer/frs/ Hippo Viewer]&lt;br /&gt;
| v1&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | [[Image:Windows_logo.png|24px|frameless|Windows version available]][[Image:Tux.png|24px|frameless|Linux version available]]&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://wiki.kokuaviewer.org/wiki/Downloads Imprudence]&lt;br /&gt;
| v1&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | [[Image:Windows_logo.png|24px|frameless|Windows version available]][[Image:Macosx_logo.png|24px|frameless|MacOSX version available]][[Image:Tux.png|24px|frameless|Linux version available]]&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.phoenixviewer.com/ Phoenix Viewer]&lt;br /&gt;
| v1&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | [[Image:Windows_logo.png|24px|frameless|Windows version available]][[Image:Macosx_logo.png|24px|MacOSX version available]][[Image:Tux.png|24px|frameless|Linux version available]]&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.singularityviewer.org/downloads Singularity]&lt;br /&gt;
| v1&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | [[Image:Windows_logo.png|24px|frameless|Windows version available]][[Image:Macosx_logo.png|24px|MacOSX version available]][[Image:Tux.png|24px|frameless|Linux version available]]&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://sldev.free.fr/ Cool VL Viewer]&lt;br /&gt;
| v1&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | [[Image:Windows_logo.png|24px|frameless|Windows version available]][[Image:Macosx_logo.png|24px|MacOSX version available]][[Image:Tux.png|24px|frameless|Linux version available]]&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://wiki.kokuaviewer.org/wiki/Kokua:Experimental Kokua]&lt;br /&gt;
| v2/3&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | [[Image:Tux.png|24px|frameless|Linux version available]]&lt;br /&gt;
| [[#note4|[4]]]&lt;br /&gt;
|-&lt;br /&gt;
| [http://lookingglassviewer.org/wiki/Download Looking Glass viewer]&lt;br /&gt;
| ?&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | [[Image:Windows_logo.png|24px|frameless|Windows version available]]&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://secondlife.com/support/downloads/ Second Life Viewer]&lt;br /&gt;
| v2/3&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | [[Image:Windows_logo.png|24px|frameless|Windows version available]][[Image:Macosx_logo.png|24px|MacOSX version available]][[Image:Tux.png|24px|frameless|Linux version available]]&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.phoenixviewer.com/ Firestorm viewer]&lt;br /&gt;
| v2/3&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | [[Image:Windows_logo.png|24px|frameless|Windows version available]][[Image:Macosx_logo.png|24px|MacOSX version available]][[Image:Tux.png|24px|frameless|Linux version available]]&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://radegast.org/wiki/Radegast_Download Radegast Metaverse Client]&lt;br /&gt;
| n/a&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | Text client&amp;lt;br /&amp;gt;with graphical&amp;lt;br /&amp;gt;component&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | [[Image:Windows_logo.png|24px|frameless|Windows version available]][[Image:Macosx_logo.png|24px|MacOSX version available]][[Image:Tux.png|24px|frameless|Linux version available]]&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://forge.opensimulator.org/gf/project/idealistviewer/ Idealist viewer]&lt;br /&gt;
| ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
| [[#note5|[5]]]&lt;br /&gt;
|-&lt;br /&gt;
| [http://3di-rei.org/home/downloads/index.html 3Di viewer]&lt;br /&gt;
| Browser&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | [[Image:Windows_logo.png|24px|frameless|Windows version available]]&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://forge.opensimulator.org/gf/project/xenki/ Xenki]&lt;br /&gt;
| Browser&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;background-color:white;text-align:center;&amp;quot; | ?&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
| [[#note5|[5]]]&lt;br /&gt;
|-&lt;br /&gt;
| [http://dolphinviewer.eregion.de/2012/08/18/dolphin-viewer-and-support-for-opensim/ OpenDolphin Viewer]&lt;br /&gt;
| v1/2/3&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √ (v2/3)&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:red;text-align:center;&amp;quot; | X&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √&lt;br /&gt;
| style=&amp;quot;background-color:chartreuse;text-align:center;&amp;quot; | √ (v2/3)&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | [[Image:Windows_logo.png|24px|frameless|Windows version available]][[Image:Macosx_logo.png|24px|MacOSX version available]][[Image:Tux.png|24px|frameless|Linux version available]]&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
&amp;lt;!-- Copy the code below to help you fill in all the fields, but append new viewers immediately ABOVE this line!&lt;br /&gt;
|- &lt;br /&gt;
| '''Viewer&amp;lt;br/&amp;gt;Name'''&lt;br /&gt;
| Based on Version&lt;br /&gt;
| Grid&amp;lt;br/&amp;gt;Selector&lt;br /&gt;
| Grid&amp;lt;br/&amp;gt;Manager&lt;br /&gt;
| Graphical&lt;br /&gt;
| Mesh&lt;br /&gt;
| [[:Category:OSSL|OSSL]]&amp;lt;br/&amp;gt;support&lt;br /&gt;
| LightShare [[#note1|[1]]]&lt;br /&gt;
| Parcel&amp;lt;br/&amp;gt;Windlight [[#note2|[2]]]&lt;br /&gt;
| Multiple&amp;lt;br/&amp;gt;Attachments&lt;br /&gt;
| Operating System&lt;br /&gt;
| '''Notes'''&lt;br /&gt;
 --&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:'''Notes'''&lt;br /&gt;
----&lt;br /&gt;
* '''&amp;lt;span id=&amp;quot;note1&amp;quot;&amp;gt;#1&amp;lt;/span&amp;gt;''' LightShare is a method for altering WindLight settings on a parcel or region by means of a script. See [[Lightshare]].&lt;br /&gt;
* '''&amp;lt;span id=&amp;quot;note2&amp;quot;&amp;gt;#2&amp;lt;/span&amp;gt;''' The Parcel Windlight referred to here, is a Phoenix/Firestorm feature which lets parcel owners define a windlight setting which is to be applied to a user's viewer if the viewer supports it, and if the visitor has enabled that feature. See [http://wiki.phoenixviewer.com/doku.php?id=parcelwl the Parcel WL article on the Phoenix wiki] for more info.&lt;br /&gt;
* '''&amp;lt;span id=&amp;quot;note3&amp;quot;&amp;gt;#3&amp;lt;/span&amp;gt;''' RealXtend requires an additional module to be active on OpenSimulator. See [[ModRex]].&lt;br /&gt;
* '''&amp;lt;span id=&amp;quot;note4&amp;quot;&amp;gt;#4&amp;lt;/span&amp;gt;''' Data based on Kokua-3.0.0-WIP [http://wiki.kokuaviewer.org/wiki/Kokua:Experimental], may soon be out of date!&lt;br /&gt;
* '''&amp;lt;span id=&amp;quot;note5&amp;quot;&amp;gt;#5&amp;lt;/span&amp;gt;''' Only source code is provided. No precompiled binaries!&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/User:Thomax:nat-loopback</id>
		<title>User:Thomax:nat-loopback</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:Thomax:nat-loopback"/>
				<updated>2010-12-05T10:27:54Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== NAT Loopback Configuration on OpenWRT ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Well, first is this little script, which should be placed in ''/etc/firewall.user'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# get the WANIP from the ppp0 interface&lt;br /&gt;
WANIP=`ifconfig ppp0 | awk '/inet addr/ {split ($2,A,&amp;quot;:&amp;quot;); print A[2]}'`&lt;br /&gt;
&lt;br /&gt;
# my lan ip&lt;br /&gt;
LANIP = 192.168.1.100&lt;br /&gt;
&lt;br /&gt;
nat_loopback() {         &lt;br /&gt;
        iptables -t nat -A prerouting_rule -d $WANIP -p $3 --dport $1 -j DNAT --to $2&lt;br /&gt;
        iptables -A forwarding_rule -p $3 --dport $1 -d $2 -j ACCEPT&lt;br /&gt;
        iptables -t nat -A postrouting_rule -s 192.168.1.0/24 -p $3 --dport $1 -d $2 -j MASQUERADE&lt;br /&gt;
}                                                                                             &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# thats for a local apache (yepp, i have a local web server..)&lt;br /&gt;
nat_loopback 80 $LANIP tcp&lt;br /&gt;
&lt;br /&gt;
# http_listen_port from the OpenSim.ini&lt;br /&gt;
nat_loopback 9000 $LANIP tcp         &lt;br /&gt;
&lt;br /&gt;
# and the udp port of the region (RegionConfig.ini)&lt;br /&gt;
nat_loopback 19010 $LANIP udp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And just because I have a dynamic IP address I need to be sure that the firewall rules get reloaded on each new PPPoE connect. Thats why I created the script ''/etc/ppp/ip-up.d/connect.sh''&lt;br /&gt;
which looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
# Put stuff here you need todo just when your router reconnects to the provider&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/firewall reload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Thats what I've additionally done beside the normal LuCI settings on my openWRT router, which is an asus wl-500gP (with this nice two USB slots :-)&lt;br /&gt;
&lt;br /&gt;
Let me know if it helps you too...&lt;br /&gt;
&lt;br /&gt;
thomax&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/User:Thomax:nat-loopback</id>
		<title>User:Thomax:nat-loopback</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:Thomax:nat-loopback"/>
				<updated>2010-12-05T10:27:32Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;NAT Loopback Configuration on OpenWRT&lt;br /&gt;
&lt;br /&gt;
Well, first is this little script, which should be placed in ''/etc/firewall.user'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# get the WANIP from the ppp0 interface&lt;br /&gt;
WANIP=`ifconfig ppp0 | awk '/inet addr/ {split ($2,A,&amp;quot;:&amp;quot;); print A[2]}'`&lt;br /&gt;
&lt;br /&gt;
# my lan ip&lt;br /&gt;
LANIP = 192.168.1.100&lt;br /&gt;
&lt;br /&gt;
nat_loopback() {         &lt;br /&gt;
        iptables -t nat -A prerouting_rule -d $WANIP -p $3 --dport $1 -j DNAT --to $2&lt;br /&gt;
        iptables -A forwarding_rule -p $3 --dport $1 -d $2 -j ACCEPT&lt;br /&gt;
        iptables -t nat -A postrouting_rule -s 192.168.1.0/24 -p $3 --dport $1 -d $2 -j MASQUERADE&lt;br /&gt;
}                                                                                             &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# thats for a local apache (yepp, i have a local web server..)&lt;br /&gt;
nat_loopback 80 $LANIP tcp&lt;br /&gt;
&lt;br /&gt;
# http_listen_port from the OpenSim.ini&lt;br /&gt;
nat_loopback 9000 $LANIP tcp         &lt;br /&gt;
&lt;br /&gt;
# and the udp port of the region (RegionConfig.ini)&lt;br /&gt;
nat_loopback 19010 $LANIP udp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And just because I have a dynamic IP address I need to be sure that the firewall rules get reloaded on each new PPPoE connect. Thats why I created the script ''/etc/ppp/ip-up.d/connect.sh''&lt;br /&gt;
which looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
# Put stuff here you need todo just when your router reconnects to the provider&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/firewall reload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Thats what I've additionally done beside the normal LuCI settings on my openWRT router, which is an asus wl-500gP (with this nice two USB slots :-)&lt;br /&gt;
&lt;br /&gt;
Let me know if it helps you too...&lt;br /&gt;
&lt;br /&gt;
thomax&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsUnixTimeToTimestamp</id>
		<title>OsUnixTimeToTimestamp</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsUnixTimeToTimestamp"/>
				<updated>2010-11-17T10:00:23Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Function Syntax:''' osUnixTimeToTimestamp(integer epoch);&amp;lt;br&amp;gt;&lt;br /&gt;
'''Returns:''' string&amp;lt;br&amp;gt;&lt;br /&gt;
'''Threat Level:''' VeryLow&lt;br /&gt;
&lt;br /&gt;
This function allows an input unix time to be converted to an llGetTimeStamp() format. Please note that there will be no second fractions. This is because the implementation works with seconds only.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// prints something similar to this:&lt;br /&gt;
// [01:08] Primitive: 2010-11-13T09:08:53.6472090Z&lt;br /&gt;
// [01:08] Primitive: 2010-11-13T09:08:53.0000000Z&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay(llGetTimestamp());&lt;br /&gt;
        llOwnerSay(osUnixTimeToTimestamp((integer)llGetUnixTime()));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsUnixTimeToTimestamp</id>
		<title>OsUnixTimeToTimestamp</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsUnixTimeToTimestamp"/>
				<updated>2010-11-17T09:59:59Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Function Syntax:''' osUnixTimeToTimestamp(integer epoch);&amp;lt;br&amp;gt;&lt;br /&gt;
'''Returns:''' string&amp;lt;br&amp;gt;&lt;br /&gt;
'''Function Threat Level:''' VeryLow&lt;br /&gt;
&lt;br /&gt;
This function allows an input unix time to be converted to an llGetTimeStamp() format. Please note that there will be no second fractions. This is because the implementation works with seconds only.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// prints something similar to this:&lt;br /&gt;
// [01:08] Primitive: 2010-11-13T09:08:53.6472090Z&lt;br /&gt;
// [01:08] Primitive: 2010-11-13T09:08:53.0000000Z&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay(llGetTimestamp());&lt;br /&gt;
        llOwnerSay(osUnixTimeToTimestamp((integer)llGetUnixTime()));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsUnixTimeToTimestamp</id>
		<title>OsUnixTimeToTimestamp</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsUnixTimeToTimestamp"/>
				<updated>2010-11-17T09:59:46Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Function Syntax:''' osUnixTimeToTimestamp(integer epoch);&amp;lt;br&amp;gt;&lt;br /&gt;
'''Returns:''' string&lt;br /&gt;
'''Function Threat Level:''' VeryLow&lt;br /&gt;
&lt;br /&gt;
This function allows an input unix time to be converted to an llGetTimeStamp() format. Please note that there will be no second fractions. This is because the implementation works with seconds only.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// prints something similar to this:&lt;br /&gt;
// [01:08] Primitive: 2010-11-13T09:08:53.6472090Z&lt;br /&gt;
// [01:08] Primitive: 2010-11-13T09:08:53.0000000Z&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay(llGetTimestamp());&lt;br /&gt;
        llOwnerSay(osUnixTimeToTimestamp((integer)llGetUnixTime()));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsUnixTimeToTimestamp</id>
		<title>OsUnixTimeToTimestamp</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsUnixTimeToTimestamp"/>
				<updated>2010-11-17T09:56:05Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Function Syntax:''' osUnixTimeToTimestamp(integer epoch);&amp;lt;br&amp;gt;&lt;br /&gt;
'''Returns:''' string &lt;br /&gt;
&lt;br /&gt;
This function allows an input unix time to be converted to an llGetTimeStamp() format. Please note that there will be no second fractions. This is because the implementation works with seconds only.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// prints something similar to this:&lt;br /&gt;
// [01:08] Primitive: 2010-11-13T09:08:53.6472090Z&lt;br /&gt;
// [01:08] Primitive: 2010-11-13T09:08:53.0000000Z&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay(llGetTimestamp());&lt;br /&gt;
        llOwnerSay(osUnixTimeToTimestamp((integer)llGetUnixTime()));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsUnixTimeToTimestamp</id>
		<title>OsUnixTimeToTimestamp</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsUnixTimeToTimestamp"/>
				<updated>2010-11-17T09:49:54Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: new function documentation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Function Syntax:''' osUnixTimeToTimestamp(integer epoch);&amp;lt;br&amp;gt;&lt;br /&gt;
'''Returns:''' string &lt;br /&gt;
&lt;br /&gt;
This function allows an input unix time to be converted to an llGetTimeStamp() format. Please note that there will be no second fractions. This is because the implementation works with seconds only.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// prints something similar to this:&lt;br /&gt;
// [01:08] Primitive: 2010-11-13T09:08:53.6472090Z&lt;br /&gt;
// [01:08] Primitive: 2010-11-13T09:08:53.0000000Z&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay(llGetTimestamp());&lt;br /&gt;
        llOwnerSay(osEpochToString((integer)llGetUnixTime()));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OSSL_Implemented</id>
		<title>OSSL Implemented</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OSSL_Implemented"/>
				<updated>2010-11-17T09:41:13Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: added link to osUnixTimeToTimestamp&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ {{Template:Quicklinks}} &amp;lt;br&amp;gt;[[Technical Reference|Technical Reference]] -&amp;amp;gt; [[Technical Reference/terms|Terms]] -&amp;amp;gt; [[Status|Status Page]] -&amp;amp;gt; [[OSSL_Implemented|OSSL Implemented Functions]] &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;{{content}} &lt;br /&gt;
&lt;br /&gt;
== Current OSSL Functions Implemented  ==&lt;br /&gt;
&lt;br /&gt;
Updated October.21.2010 From OpenSimulator Master/Dev Source. &lt;br /&gt;
&lt;br /&gt;
Special Note:&amp;amp;nbsp;&amp;amp;nbsp; Some Functions as shown use '''&amp;quot;double&amp;quot;''' as a Value instead of '''&amp;quot;float&amp;quot;&amp;amp;nbsp;'''these vary for purposes of accuracy as shown Below.&amp;amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
(Float is short for &amp;quot;floating point&amp;quot;, and just means a number with a point something on the end.) &lt;br /&gt;
&lt;br /&gt;
The difference between the two is in the size of the numbers that they can hold. For float, you can have up to 7 digits in your number. For doubles, you can have up to 16 digits. To be more precise, here's the official size: ( float: 1.5 × 10-45 to 3.4 × 1038 ) ( double: 5.0 × 10-324 to 1.7 × 10308 ) &lt;br /&gt;
&lt;br /&gt;
Each of these functions has an threat level associated to it. See [[Threat level]] for more information and an overview of each function's level.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[OsAvatarName2Key|OsAvatarName2Key]]&lt;br /&gt;
*[[OsAvatarPlayAnimation|OsAvatarPlayAnimation]]&lt;br /&gt;
*[[OsAvatarStopAnimation|OsAvatarStopAnimation]]&lt;br /&gt;
*[[OsCauseDamage|OsCauseDamage]]&lt;br /&gt;
*[[OsCauseHealing|OsCauseHealing]]&lt;br /&gt;
*[[OsConsoleCommand|OsConsoleCommand]]&lt;br /&gt;
*[[OsDrawEllipse|OsDrawEllipse]]&lt;br /&gt;
*[[OsDrawFilledPolygon|OsDrawFilledPolygon]]&lt;br /&gt;
*[[OsDrawFilledRectangle|OsDrawFilledRectangle]]&lt;br /&gt;
*[[OsDrawImage|OsDrawImage]]&lt;br /&gt;
*[[OsDrawLine|OsDrawLine]]&lt;br /&gt;
*[[OsDrawPolygon|OsDrawPolygon]]&lt;br /&gt;
*[[OsDrawRectangle|OsDrawRectangle]]&lt;br /&gt;
*[[OsDrawText|OsDrawText]]&lt;br /&gt;
*[[OsFormatString|OsFormatString]]&lt;br /&gt;
*[[OsGetAgentIP|OsGetAgentIP]]&lt;br /&gt;
*[[OsGetAgents|OsGetAgents]]&lt;br /&gt;
*[[OsGetAvatarList|OsGetAvatarList]]&lt;br /&gt;
*[[OsGetCurrentSunHour|OsGetCurrentSunHour]]&lt;br /&gt;
*[[OsGetDrawStringSize|OsGetDrawStringSize]]&lt;br /&gt;
*[[OsGetGridLoginURI|OsGetGridLoginURI]]&lt;br /&gt;
*[[OsGetGridName|OsGetGridName]]&lt;br /&gt;
*[[OsGetGridNick|OsGetGridNick]]&lt;br /&gt;
*[[OsGetLinkPrimitiveParams|OsGetLinkPrimitiveParams]]&lt;br /&gt;
*[[OsGetMapTexture|OsGetMapTexture]]&lt;br /&gt;
*[[OsGetNotecard|OsGetNotecard]]&lt;br /&gt;
*[[OsGetNotecardLine|OsGetNotecardLine]]&lt;br /&gt;
*[[OsGetNumberOfNotecardLines|OsGetNumberOfNotecardLines]]&lt;br /&gt;
*[[OsGetPrimitiveParams|OsGetPrimitiveParams]]&lt;br /&gt;
*[[OsGetRegionMapTexture|OsGetRegionMapTexture]]&lt;br /&gt;
*[[OsGetRegionStats|OsGetRegionStats]]&lt;br /&gt;
*[[OsGetScriptEngineName|OsGetScriptEngineName]]&lt;br /&gt;
*[[OsGetSimulatorMemory|OsGetSimulatorMemory]]&lt;br /&gt;
*[[OsGetSimulatorVersion|OsGetSimulatorVersion]]&lt;br /&gt;
*[[OsKey2Name|OsKey2Name]]&lt;br /&gt;
*[[OsKickAvatar|OsKickAvatar]]&lt;br /&gt;
*[[OsList2Double|OsList2Double]]&lt;br /&gt;
*[[OsLoadedCreationDate|OsLoadedCreationDate]]&lt;br /&gt;
*[[OsLoadedCreationID|OsLoadedCreationID]]&lt;br /&gt;
*[[OsLoadedCreationTime|OsLoadedCreationTime]]&lt;br /&gt;
*[[OsMakeNotecard|OsMakeNotecard]]&lt;br /&gt;
*[[OsMatchString|OsMatchString]]&lt;br /&gt;
*[[OsMessageObject|OsMessageObject]]&lt;br /&gt;
*[[OsMovePen|OsMovePen]]&lt;br /&gt;
*[[OsNpcCreate|OsNpcCreate]]&lt;br /&gt;
*[[OsNpcMoveTo|OsNpcMoveTo]]&lt;br /&gt;
*[[OsNpcRemove|OsNpcRemove]]&lt;br /&gt;
*[[OsNpcSay|OsNpcSay]]&lt;br /&gt;
*[[OsParcelJoin|OsParcelJoin]]&lt;br /&gt;
*[[OsParcelSetDetails|OsParcelSetDetails]]&lt;br /&gt;
*[[OsParcelSubdivide|OsParcelSubdivide]]&lt;br /&gt;
*[[OsParseJSON|OsParseJSON]]&lt;br /&gt;
*[[OsRegionNotice|OsRegionNotice]]&lt;br /&gt;
*[[OsRegionRestart|OsRegionRestart]]&lt;br /&gt;
*[[OsSetDynamicTextureData|OsSetDynamicTextureData]]&lt;br /&gt;
*[[OsSetDynamicTextureDataBlend|OsSetDynamicTextureDataBlend]]&lt;br /&gt;
*[[OsSetDynamicTextureDataBlendFace|OsSetDynamicTextureDataBlendFace]]&lt;br /&gt;
*[[OsSetDynamicTextureURL|OsSetDynamicTextureURL]]&lt;br /&gt;
*[[OsSetDynamicTextureURLBlend|OsSetDynamicTextureURLBlend]]&lt;br /&gt;
*[[OsSetDynamicTextureURLBlendFace|OsSetDynamicTextureURLBlendFace]]&lt;br /&gt;
*[[OsSetEstateSunSettings|OsSetEstateSunSettings]]&lt;br /&gt;
*[[OsSetFontName|OsSetFontName]]&lt;br /&gt;
*[[OsSetFontSize|OsSetFontSize]]&lt;br /&gt;
*[[OsSetParcelMediaURL|OsSetParcelMediaURL]]&lt;br /&gt;
*[[osSetParcelSIPAddress|OsSetParcelSIPAddress]]&lt;br /&gt;
*[[OsSetPenCap|OsSetPenCap]]&lt;br /&gt;
*[[OsSetPenColour|OsSetPenColour]]&lt;br /&gt;
*[[OsSetPenSize|OsSetPenSize]]&lt;br /&gt;
*[[OsSetPrimFloatOnWater|OsSetPrimFloatOnWater]]&lt;br /&gt;
*[[OsSetPrimitiveParams|OsSetPrimitiveParams]]&lt;br /&gt;
*[[OsSetProjectionParams|OsSetProjectionParams]]&lt;br /&gt;
*[[OsSetRegionSunSettings|OsSetRegionSunSettings]]&lt;br /&gt;
*[[OsSetRegionWaterHeight|OsSetRegionWaterHeight]]&lt;br /&gt;
*[[OsSetSpeed|OsSetSpeed]]&lt;br /&gt;
*[[OsSetStateEvents|OsSetStateEvents]]&lt;br /&gt;
*[[OsSunGetParam|OsSunGetParam]]&lt;br /&gt;
*[[OsSunSetParam|OsSunSetParam]]&lt;br /&gt;
*[[OsTeleportAgent|OsTeleportAgent]]&lt;br /&gt;
*[[OsTeleportOwner|OsTeleportOwner]]&lt;br /&gt;
*[[OsTerrainFlush|OsTerrainFlush]]&lt;br /&gt;
*[[OsTerrainGetHeight|OsTerrainGetHeight]]&lt;br /&gt;
*[[OsTerrainSetHeight|OsTerrainSetHeight]]&lt;br /&gt;
*[[OsUnixTimeToTimestamp|OsUnixTimeToTimestamp]]&lt;br /&gt;
*[[OsWindActiveModelPluginName|OsWindActiveModelPluginName]]&lt;br /&gt;
*[[OsWindParamGet|OsWindParamGet]]&lt;br /&gt;
*[[OsWindParamSet|OsWindParamSet]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also  ==&lt;br /&gt;
&lt;br /&gt;
*[[LSL Status|LSL/OSSL Status Page]] &lt;br /&gt;
*LSL &lt;br /&gt;
**[[LSL Status/Types|LSL Types Status Page]] &lt;br /&gt;
**[[LSL Status/Events|LSL Events Status Page]] &lt;br /&gt;
**[[LSL Status/Functions|LSL Functions Status Page]] &lt;br /&gt;
**[[LSL Status/functions/summary|LSL Functions Status Summary]] &lt;br /&gt;
**[[LSL Known Issues|LSL Known Issues]] &lt;br /&gt;
**[[Kan-Ed Tests|Kan-Ed Tests]]&lt;br /&gt;
*OSSL &lt;br /&gt;
**[[OSSL Status/Types|OSSL Types Status Page]] &lt;br /&gt;
**[[OSSL Status/Events|OSSL Events Status Page]] &lt;br /&gt;
**[[OSSL Proposals|OSSL Proposed Functions]] &lt;br /&gt;
**[[OSSL_Implemented|OSSL Implemented Functions]] &lt;br /&gt;
**[[OSSL Enabling Functions]] &lt;br /&gt;
**[[OSSL Standards|OSSL Standards]]&lt;br /&gt;
*[[Technical Reference|Technical Reference Page]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Users]] [[Category:Support]] [[Category:Tech_Reference]] [[Category:Help]] [[Category:Configuration]] [[Category:Getting_Started]] [[Category:Development]] [[Category:Todo]] [[Category:Proposal]]&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/NAT_Loopback_Routers</id>
		<title>NAT Loopback Routers</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/NAT_Loopback_Routers"/>
				<updated>2010-08-29T17:16:20Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}} {{content}}&lt;br /&gt;
&lt;br /&gt;
=INTRODUCTION=&lt;br /&gt;
&lt;br /&gt;
What is NAT Loopback and why is it needed to host a public Opensimulator Region?&lt;br /&gt;
&lt;br /&gt;
Currently (as at August 2010), a hosted region on a home connection with a broadband router needs, what is known as ''NAT Loopback'' functionality.&lt;br /&gt;
&lt;br /&gt;
Many DSL routers/modems prevent loopback connections as a security feature. This means that a NATed IP address ( such as 192.168.2.40 ) can not connect to your forward facing IP address ( such as 199.149.252.44 ) from behind your DSL router/modem. In a case like this, external IP addresses may connect to your server/region but you can not ( this applies to both standalone and grid modes ). &lt;br /&gt;
&lt;br /&gt;
Symptoms of not having NAT Loopback is you can host a completely internal region (ie the region and asset database are all on one machine) and login, but someone outside can't login, even though you have set up your region.ini with your outside IP and forwarded the correct ports.&lt;br /&gt;
&lt;br /&gt;
This page shows a list of routers supporting NAT Loopback feature in order to be able to TP in your region when you host it at home on the same computer or local network. Please add both known working and known non-working routers to the list.&lt;br /&gt;
&lt;br /&gt;
=Working Routers=&lt;br /&gt;
==D-Link==&lt;br /&gt;
&lt;br /&gt;
D-Link DGL-4500 series of routers have the largest available nat table of any router on the market.&amp;amp;nbsp; These routers range from 70$-180$ USD depending on where you live and purchase from. &lt;br /&gt;
&lt;br /&gt;
When considering a purchase, consider performance against cost. Upper end ADSL 2+ routers can add several Mbs to your modems sync speed.  &lt;br /&gt;
&lt;br /&gt;
*[http://www.dlink.com/products/?pid=64 D-Link DGL-4500] &lt;br /&gt;
*[http://www.dlink.com/products/?pid=530 D-Link DIR-655] &lt;br /&gt;
*[http://www.dlink.com/products/?pid=DIR-635 D-Link DIR-635]&lt;br /&gt;
*[http://www.dlink.com/products/?pid=DIR-601 D-Link DIR-601]&lt;br /&gt;
*[http://www.dlink.com/products/?pid=DIR-600 D-Link DIR-600]&lt;br /&gt;
*D-Link DI-524&lt;br /&gt;
&lt;br /&gt;
Note: The DGL-4100 &amp;amp; DGL-4300 have been discontinued, and the replacement model is the DIL-825 and DIL-855 - Loopback status unknown on these later models. The DGL-4300 may be available second hand.&lt;br /&gt;
&lt;br /&gt;
==Draytek==&lt;br /&gt;
&lt;br /&gt;
* Draytek Vigor 2710n [http://www.draytek.com/user/PdInfoDetail.php?Id=82] does NAT loopback out of the box and seems to be generally an all-round great router.&lt;br /&gt;
&lt;br /&gt;
==Netgear==&lt;br /&gt;
&lt;br /&gt;
*NETGEAR WNR834M&amp;amp;nbsp;: ftp://downloads.netgear.com/files/wnr834m_ref_manual.pdf &lt;br /&gt;
*NETGEAR WNR2000&amp;amp;nbsp;: With firmware 1.2.3.7 ( http://kb.netgear.com/app/answers/detail/a_id/11895 ) loopback now enabled 'out of the box' &lt;br /&gt;
*NETGEAR WGR614&amp;amp;nbsp;: has been confirmed to work out of the box &lt;br /&gt;
*Netgear RP614 v3&lt;br /&gt;
&lt;br /&gt;
==Linksys/Cisco==&lt;br /&gt;
&lt;br /&gt;
*[http://www.linksysbycisco.com/EU/en/support/WAG200G Linksys WAG200G] with Firmware Version: 1.01.09&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Linksys_WRT54G_series Linksys WRT54G]&lt;br /&gt;
*[http://homesupport.cisco.com/en-us/wireless/lbc/WAG54G Linksys WAG54G v3] &lt;br /&gt;
*[http://homesupport.cisco.com/en-us/wireless/lbc/WAG54G Linksys WAG54G v2 - NZ/Australia version] &lt;br /&gt;
*Linksys RT31P2&lt;br /&gt;
Note: The WAG54G v2 NZ/Australia version has a faster processor, more memory and larger NAT table, and works with OS out of the box. Other market versions may not.&lt;br /&gt;
&lt;br /&gt;
==3Com==&lt;br /&gt;
&lt;br /&gt;
*3CRWDR100A-72&lt;br /&gt;
*3CRWDR101A-75&lt;br /&gt;
&lt;br /&gt;
==Zyxel==&lt;br /&gt;
&lt;br /&gt;
* If you are using a ZyXEL DSL router/modem from Embarq, please read [http://opensimulator.org/wiki/OpenSim:Network_settings#A_solution_for_local_connections_when_you_are_using_NAT_and_Port_Forwarding this configuration guide]. This will show you how to reconfigure your DSL router/modem to fix this problem.&lt;br /&gt;
&lt;br /&gt;
==Other routers &amp;amp;amp; Hardware==&lt;br /&gt;
&lt;br /&gt;
*Arris TM502b&amp;amp;nbsp;: http://portforward.com/english/routers/port_forwarding/Arris/TM502b/ &lt;br /&gt;
*2wire 2701hg-s NOT Loopback capable. but the 2wire 2701hg-B &amp;amp;amp; 2701hg-D Series ARE loopback capable.&amp;amp;nbsp; (These can be purchased for approximately $50 USD) &lt;br /&gt;
*Thompson SpeedTouch router-modem&amp;amp;nbsp;ST-585i (requires Telnet acces to it to Enable Loopback) &lt;br /&gt;
*Thompson Speedtouch ST-780, ST-516 &lt;br /&gt;
*AVM FritzBox (all Models working perfect)&amp;amp;nbsp;: http://www.avm.de &lt;br /&gt;
*Ubee Wireless Cable Router DDW2600&amp;amp;nbsp; [http://www.ubeeinteractive.com/index.php/products/product-overview/wireless_cable_router1/ http://www.ubeeinteractive.com/index.php/products/product-overview/wireless_cable_router1/]&lt;br /&gt;
*BT home hub V2&lt;br /&gt;
&lt;br /&gt;
=KNOWN&amp;amp;nbsp;non-functional for OpenSim:=&lt;br /&gt;
&lt;br /&gt;
*Netgear Pro Safe VPN FVS318&amp;amp;nbsp;: [http://www.netgear.com/Products/VPNandSSL/WiredVPNFirewallRouters/FVS318.aspx http://www.netgear.com/Products/VPNandSSL/WiredVPNFirewallRouters/FVS318.aspx] &lt;br /&gt;
*NetGear WGR614 does not work with ISP required gateway modems&lt;br /&gt;
*Belkin F5D7230-4 (the router might work if 3rd party firmware is used, such as DD-WRT&amp;amp;nbsp;: http://www.dd-wrt.com/ )&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=REFERENCE&amp;amp;nbsp;LINKS:=&lt;br /&gt;
&lt;br /&gt;
More Information Related to Routers and Solutions @: [http://osgrid.org/forums/viewtopic.php?f=8&amp;amp;t=2283 osgrid.org/forums/viewtopic.php]&lt;br /&gt;
&lt;br /&gt;
=Linux specific solutions=&lt;br /&gt;
==SETTING UP A LINUX COMPUTER TO ACT AS A ROUTER==&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
For Linux based Netfilter (iptables) routers, you want to set up the NAT table with some extra entries The following script is something to get you started, you'll need to fix up the variables at the top to match your system and network. &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# vvvvv - Fix these! - vvvvv&lt;br /&gt;
IPTABLES=/usr/sbin/iptables&lt;br /&gt;
LAN_NETWORK=192.168.0.0/24&lt;br /&gt;
SERVER_IP=192.168.0.2&lt;br /&gt;
INTERNET_IP=100.100.100.100&lt;br /&gt;
REMOTING_PORT=8895&lt;br /&gt;
REGION_PORT=9000&lt;br /&gt;
# ^^^^^ - Fix these! - ^^^^^&lt;br /&gt;
&lt;br /&gt;
# First, the Destination NAT, anything going to the external address on our ports, we redirect to the server&lt;br /&gt;
# Note, if you have a double NAT running and this router doesn't actually have the internet IP address, you'll&lt;br /&gt;
# need another set of PREROUTING-DNAT lines with the --destination (-d) set to the internet facing private address&lt;br /&gt;
$IPTABLES -t nat -I PREROUTING -d $INTERNET_IP -p tcp --dport $REMOTING_PORT --jump DNAT --to-destination $SERVER_IP&lt;br /&gt;
$IPTABLES -t nat -I PREROUTING -d $INTERNET_IP -p udp --dport $REGION_PORT --jump DNAT --to-destination $SERVER_IP&lt;br /&gt;
$IPTABLES -t nat -I PREROUTING -d $INTERNET_IP -p tcp --dport $REGION_PORT --jump DNAT --to-destination $SERVER_IP&lt;br /&gt;
&lt;br /&gt;
# Second, the Source NAT, we need this so that returning packets to our LAN clients go back through the router first,&lt;br /&gt;
# otherwise, the server will try to talk directly to the client and the client will reject them&lt;br /&gt;
$IPTABLES -t nat -I POSTROUTING -s $LAN_NETWORK -d $SERVER_IP -p tcp --dport $REMOTING_PORT --jump SNAT --to-source $INTERNET_IP&lt;br /&gt;
$IPTABLES -t nat -I POSTROUTING -s $LAN_NETWORK -d $SERVER_IP -p udp --dport $REGION_PORT --jump SNAT --to-source $INTERNET_IP&lt;br /&gt;
$IPTABLES -t nat -I POSTROUTING -s $LAN_NETWORK -d $SERVER_IP -p tcp --dport $REGION_PORT --jump SNAT --to-source $INTERNET_IP&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
--[[User:Hell Fire|Hell Fire]]&lt;br /&gt;
&lt;br /&gt;
==DNS solution==&lt;br /&gt;
It's possible to host your own DNS-server, so you can prevent some of the dns-naming problems mentioned before. If http://example.org resolves to the external ip, and that loopback connection is prevented by your router, you could point your resolv.conf to a local nameserver like:&lt;br /&gt;
 nameserver 192.168.2.2&lt;br /&gt;
Now you need bind/named installed in order to handle the dns-requests. You can find a bind example configfile here.&lt;br /&gt;
&lt;br /&gt;
=openWRT Routers:=&lt;br /&gt;
&lt;br /&gt;
If you use openWRT firmware on your router, check here: [[Users:Thomax:nat-loopback|OpenWRT NATLoopback]]&lt;br /&gt;
&lt;br /&gt;
=Windows XP Work Around:=&lt;br /&gt;
&lt;br /&gt;
Please see this -&amp;gt; http://vio.blpcomputers.info/loopbacknat.php&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/NAT_Loopback_Routers</id>
		<title>NAT Loopback Routers</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/NAT_Loopback_Routers"/>
				<updated>2010-03-11T18:57:35Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ &lt;br /&gt;
&lt;br /&gt;
{{Template:Quicklinks}} {{content}} &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page show a list of routers supporting NAT Loopback feature in order to be able to TP in your region when you host it at home on the same computer or local network. Please, feel free to contribute such a list especially if these routers are cheap&amp;amp;nbsp;:D &lt;br /&gt;
&lt;br /&gt;
'''SPECIAL&amp;amp;nbsp;NOTE:'''&amp;amp;nbsp; Due to the extensive list of routers and capabilities, this is only a basic listing of reported known good routers &amp;amp;amp;&amp;amp;nbsp;modem-router combos and known working devices.&amp;amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&amp;quot;D-Link DGL-4xxx series of routers have the largest available nat table of any router on the market.&amp;amp;nbsp; These routers range from 70$-180$ USD depending on where you live and purchase from.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
*D-Link DGL-4500&amp;amp;nbsp;: http://www.dlink.com/products/?pid=643 &lt;br /&gt;
*D-Link DGL-4300&amp;amp;nbsp;: http://www.dlink.com/products/?pid=370 &lt;br /&gt;
*D-Link DGL-4100&amp;amp;nbsp;: http://www.dlink.com/products/?pid=371 &lt;br /&gt;
*D-Link, DIR-635&amp;amp;nbsp;:&amp;amp;nbsp; [http://www.dlink.com/products/?pid=DIR-635 http://www.dlink.com/products/?pid=DIR-635]&amp;amp;nbsp;&amp;amp;nbsp; Easy setup (basically followed instructions for port-forward from the site portforward.com) &lt;br /&gt;
*D-Link, DIR-655&amp;amp;nbsp;: http://www.dlink.com/products/?pid=530&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Other routers &amp;amp;amp; Hardware''' &lt;br /&gt;
&lt;br /&gt;
*NETGEAR WNR834M&amp;amp;nbsp;: ftp://downloads.netgear.com/files/wnr834m_ref_manual.pdf &lt;br /&gt;
*NETGEAR WNR2000&amp;amp;nbsp;: With firmware 1.2.3.7 ( http://kb.netgear.com/app/answers/detail/a_id/11895 ) loopback now enabled 'out of the box' &lt;br /&gt;
*NETGEAR WGR614&amp;amp;nbsp;: has been confirmed to work out of the box &lt;br /&gt;
*Linksys WRT54G&amp;amp;nbsp;&amp;amp;amp; WRT54GS: http://en.wikipedia.org/wiki/Linksys_WRT54G_series &lt;br /&gt;
*Arris TM502b&amp;amp;nbsp;: http://portforward.com/english/routers/port_forwarding/Arris/TM502b/ &lt;br /&gt;
*2wire 2701hg-s NOT Loopback capable. but the 2wire 2701hg-B &amp;amp;amp; 2701hg-D Series ARE loopback capable.&amp;amp;nbsp; (These can be purchased for approximately $50 USD) &lt;br /&gt;
*Thompson SpeedTouch router-modem&amp;amp;nbsp;ST-585i (requires Telnet acces to it to Enable Loopback) &lt;br /&gt;
*Thompson Speedtouch ST-780, ST-516 &lt;br /&gt;
*AVM FritzBox (all Models working perfect)&amp;amp;nbsp;: http://www.avm.de &lt;br /&gt;
*Ubee Wireless Cable Router DDW2600&amp;amp;nbsp; [http://www.ubeeinteractive.com/index.php/products/product-overview/wireless_cable_router1/ http://www.ubeeinteractive.com/index.php/products/product-overview/wireless_cable_router1/]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''KNOWN&amp;amp;nbsp;non-functional for OpenSim:''' &lt;br /&gt;
&lt;br /&gt;
*Netgear Pro Safe VPN FVS318&amp;amp;nbsp;: [http://www.netgear.com/Products/VPNandSSL/WiredVPNFirewallRouters/FVS318.aspx http://www.netgear.com/Products/VPNandSSL/WiredVPNFirewallRouters/FVS318.aspx] &lt;br /&gt;
*NetGear WGR614 does not work with ISP required gateway modems) &lt;br /&gt;
*Belkin F5D7230-4 (the router might work if 3rd party firmware is used, such as DD-WRT&amp;amp;nbsp;: http://www.dd-wrt.com/ )&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''REFERENCE&amp;amp;nbsp;LINKS:''' &lt;br /&gt;
&lt;br /&gt;
Thompson Electronics:&amp;amp;nbsp; [http://www.thomsonbroadbandpartner.com/dsl-modems-gateways/products/index.php http://www.thomsonbroadbandpartner.com/dsl-modems-gateways/products/index.php] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
For Linux based Netfilter (iptables) routers, you want to set up the NAT table with some extra entries The following script is something to get you started, you'll need to fix up the variables at the top to match your system and network. &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# vvvvv - Fix these! - vvvvv&lt;br /&gt;
IPTABLES=/usr/sbin/iptables&lt;br /&gt;
LAN_NETWORK=192.168.0.0/24&lt;br /&gt;
SERVER_IP=192.168.0.2&lt;br /&gt;
INTERNET_IP=100.100.100.100&lt;br /&gt;
REMOTING_PORT=8895&lt;br /&gt;
REGION_PORT=9000&lt;br /&gt;
# ^^^^^ - Fix these! - ^^^^^&lt;br /&gt;
&lt;br /&gt;
# First, the Destination NAT, anything going to the external address on our ports, we redirect to the server&lt;br /&gt;
# Note, if you have a double NAT running and this router doesn't actually have the internet IP address, you'll&lt;br /&gt;
# need another set of PREROUTING-DNAT lines with the --destination (-d) set to the internet facing private address&lt;br /&gt;
$IPTABLES -t nat -I PREROUTING -d $INTERNET_IP -p tcp --dport $REMOTING_PORT --jump DNAT --to-destination $SERVER_IP&lt;br /&gt;
$IPTABLES -t nat -I PREROUTING -d $INTERNET_IP -p udp --dport $REGION_PORT --jump DNAT --to-destination $SERVER_IP&lt;br /&gt;
$IPTABLES -t nat -I PREROUTING -d $INTERNET_IP -p tcp --dport $REGION_PORT --jump DNAT --to-destination $SERVER_IP&lt;br /&gt;
&lt;br /&gt;
# Second, the Source NAT, we need this so that returning packets to our LAN clients go back through the router first,&lt;br /&gt;
# otherwise, the server will try to talk directly to the client and the client will reject them&lt;br /&gt;
$IPTABLES -t nat -I POSTROUTING -s $LAN_NETWORK -d $SERVER_IP -p tcp --dport $REMOTING_PORT --jump SNAT --to-source $INTERNET_IP&lt;br /&gt;
$IPTABLES -t nat -I POSTROUTING -s $LAN_NETWORK -d $SERVER_IP -p udp --dport $REGION_PORT --jump SNAT --to-source $INTERNET_IP&lt;br /&gt;
$IPTABLES -t nat -I POSTROUTING -s $LAN_NETWORK -d $SERVER_IP -p tcp --dport $REGION_PORT --jump SNAT --to-source $INTERNET_IP&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
--[[User:Hell Fire|Hell Fire]] &lt;br /&gt;
&lt;br /&gt;
'''openWRT Routers:'''&lt;br /&gt;
&lt;br /&gt;
If you use openWRT firmware on your router, check here: [[Users:Thomax:nat-loopback|OpenWRT NATLoopback]]&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/RestConsole</id>
		<title>RestConsole</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/RestConsole"/>
				<updated>2010-02-28T00:11:11Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==About==&lt;br /&gt;
The REST console makes remote administration of the various OpenSim services possible.&lt;br /&gt;
&lt;br /&gt;
The interface allows sending commands to the server and retrieving command output. Sending and receiving data is done through RESTful HTTP calls.&lt;br /&gt;
&lt;br /&gt;
While sending is very straightforward, receiving is not. Receiving uses reverse HTTP, performing a long poll to a CAPS URI.&lt;br /&gt;
&lt;br /&gt;
In order to make the protocol more efficient, the help functionality has been pushed to the client side. Rather than sending each keystroke to the server, only validated command lines are sent. To make this possible, the server sends a &amp;quot;connect burst&amp;quot; of data, which is the tree of allowed commands and their help information. This can be used by the client to create the &amp;quot;help&amp;quot; command output locally as well as provide command line help interactively.&lt;br /&gt;
&lt;br /&gt;
The sample console client, OpenSim.ConsoleClient.exe, shows how this is done.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
We take the user service(http://foo.bar:8002) as example here. Startup the user service with:&lt;br /&gt;
 mono OpenSim.Grid.UserServer.exe -console rest&lt;br /&gt;
&lt;br /&gt;
First start a new session by sending a POST.&lt;br /&gt;
Params: USER, PASS&lt;br /&gt;
 http://foo.bar:8002/StartSession/ &lt;br /&gt;
Return: (XML) &amp;lt;ConsoleSession&amp;gt;&amp;lt;SessionID&amp;gt;&amp;lt;/SessionID&amp;gt;&amp;lt;Prompt&amp;gt;&amp;lt;/Prompt&amp;gt;&amp;lt;/ConsoleSession&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we got the SessionID, which can be used to send a command and to receive output. First, retrieve the console scrollback buffer.&lt;br /&gt;
Params: none&lt;br /&gt;
 http://foo.bar:8002/ReadResponnses/&amp;lt;SessionID&amp;gt;/&lt;br /&gt;
Return: (XML) &amp;lt;ConsoleSession&amp;gt;&amp;lt;Line Number=x&amp;gt;&amp;lt;/Line&amp;gt;&amp;lt;/ConsoleSession&amp;gt;&lt;br /&gt;
The reply contains all lines currently in the buffer. Subsequent fetches will only retrieve new lines. The fetch will hold for up to 30 seconds if there is no data, then return an error. The client is expected to try again (polling).&lt;br /&gt;
&lt;br /&gt;
Use the SessionID as ID param, and send a POST again.&lt;br /&gt;
Params: ID, COMMAND&lt;br /&gt;
 http://foo.bar:8002/SessionCommand/&lt;br /&gt;
Return: (XML) &amp;lt;ConsoleSession&amp;gt;&amp;lt;Result&amp;gt;&amp;lt;/Result&amp;gt;&amp;lt;/ConsoleSession&amp;gt;&lt;br /&gt;
If everything went well, the command should have been executed. Try another command.&lt;br /&gt;
&lt;br /&gt;
When you want to close down the connection, send a POST again.&lt;br /&gt;
PARAMS: ID&lt;br /&gt;
 http://foo.bar:8002/CloseSession/&lt;br /&gt;
Return: (XML) &amp;lt;ConsoleSession&amp;gt;&amp;lt;Result&amp;gt;&amp;lt;/Result&amp;gt;&amp;lt;/ConsoleSession&amp;gt;&lt;br /&gt;
The session is closed, and you have to login again, when you want to send a command again.&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
In python:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 # This piece of code is published by thomax (txOh) (c) 2010 under the&lt;br /&gt;
 # Artistic License 1.0 (http://www.perlfoundation.org/artistic_license_1_0)&lt;br /&gt;
 &lt;br /&gt;
 import urllib, urllib2&lt;br /&gt;
 import xml.dom.minidom&lt;br /&gt;
 &lt;br /&gt;
 class UserConsoleClient():&lt;br /&gt;
 &lt;br /&gt;
    def __init__(self, addr):&lt;br /&gt;
        self.addr = addr&lt;br /&gt;
        url = self.addr + 'StartSession/'&lt;br /&gt;
 &lt;br /&gt;
        params = urllib.urlencode({&lt;br /&gt;
            'USER': 'Test',         # REST username&lt;br /&gt;
            'PASS': 'secret'        # REST password&lt;br /&gt;
        })&lt;br /&gt;
        data = urllib2.urlopen(url, params).read()&lt;br /&gt;
 &lt;br /&gt;
        dom = xml.dom.minidom.parseString(data)&lt;br /&gt;
        elem =  dom.getElementsByTagName('SessionID')&lt;br /&gt;
        self.sessionid = elem[0].childNodes[0].nodeValue&lt;br /&gt;
 &lt;br /&gt;
    def close(self):&lt;br /&gt;
        url = self.addr + 'CloseSession/'&lt;br /&gt;
        params = urllib.urlencode({&lt;br /&gt;
            'ID': self.sessionid&lt;br /&gt;
        })&lt;br /&gt;
        print urllib2.urlopen(url, params).read()&lt;br /&gt;
 &lt;br /&gt;
    def do_cmd(self, cmd):&lt;br /&gt;
        url = self.addr + '/SessionCommand/'&lt;br /&gt;
        params = urllib.urlencode({&lt;br /&gt;
            'ID': self.sessionid,&lt;br /&gt;
            'COMMAND': cmd&lt;br /&gt;
        })&lt;br /&gt;
        print urllib2.urlopen(url, params).read()&lt;br /&gt;
 &lt;br /&gt;
    def read_buffer(self):&lt;br /&gt;
        url = self.addr + 'ReadResponses/' + self.sessionid + '/'&lt;br /&gt;
        params = urllib.urlencode({&lt;br /&gt;
            'ID': self.sessionid&lt;br /&gt;
        })&lt;br /&gt;
 &lt;br /&gt;
        print urllib2.urlopen(url, params).read()&lt;br /&gt;
 &lt;br /&gt;
 # set the base url to the REST console (with port)&lt;br /&gt;
 console = UserConsoleClient('http://127.0.0.1:8300/')&lt;br /&gt;
 console.read_buffer()&lt;br /&gt;
 print 'quit with a &amp;quot;.&amp;quot;'&lt;br /&gt;
 cmd = &amp;quot;&amp;quot;&lt;br /&gt;
 while cmd != &amp;quot;.&amp;quot;:&lt;br /&gt;
    if cmd != &amp;quot;&amp;quot;:&lt;br /&gt;
        console.do_cmd(cmd)&lt;br /&gt;
        console.read_buffer()&lt;br /&gt;
    cmd = raw_input(&amp;quot;&amp;gt; &amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
 console.close()&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/RestConsole</id>
		<title>RestConsole</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/RestConsole"/>
				<updated>2010-02-28T00:08:49Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==About==&lt;br /&gt;
The REST console makes remote administration of the various OpenSim services possible.&lt;br /&gt;
&lt;br /&gt;
The interface allows sending commands to the server and retrieving command output. Sending and receiving data is done through RESTful HTTP calls.&lt;br /&gt;
&lt;br /&gt;
While sending is very straightforward, receiving is not. Receiving uses reverse HTTP, performing a long poll to a CAPS URI.&lt;br /&gt;
&lt;br /&gt;
In order to make the protocol more efficient, the help functionality has been pushed to the client side. Rather than sending each keystroke to the server, only validated command lines are sent. To make this possible, the server sends a &amp;quot;connect burst&amp;quot; of data, which is the tree of allowed commands and their help information. This can be used by the client to create the &amp;quot;help&amp;quot; command output locally as well as provide command line help interactively.&lt;br /&gt;
&lt;br /&gt;
The sample console client, OpenSim.ConsoleClient.exe, shows how this is done.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
We take the user service(http://foo.bar:8002) as example here. Startup the user service with:&lt;br /&gt;
 mono OpenSim.Grid.UserServer.exe -console rest&lt;br /&gt;
&lt;br /&gt;
First start a new session by sending a POST.&lt;br /&gt;
Params: USER, PASS&lt;br /&gt;
 http://foo.bar:8002/StartSession/ &lt;br /&gt;
Return: (XML) &amp;lt;ConsoleSession&amp;gt;&amp;lt;SessionID&amp;gt;&amp;lt;/SessionID&amp;gt;&amp;lt;Prompt&amp;gt;&amp;lt;/Prompt&amp;gt;&amp;lt;/ConsoleSession&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we got the SessionID, which can be used to send a command and to receive output. First, retrieve the console scrollback buffer.&lt;br /&gt;
Params: none&lt;br /&gt;
 http://foo.bar:8002/ReadResponnses/&amp;lt;SessionID&amp;gt;/&lt;br /&gt;
Return: (XML) &amp;lt;ConsoleSession&amp;gt;&amp;lt;Line Number=x&amp;gt;&amp;lt;/Line&amp;gt;&amp;lt;/ConsoleSession&amp;gt;&lt;br /&gt;
The reply contains all lines currently in the buffer. Subsequent fetches will only retrieve new lines. The fetch will hold for up to 30 seconds if there is no data, then return an error. The client is expected to try again (polling).&lt;br /&gt;
&lt;br /&gt;
Use the SessionID as ID param, and send a POST again.&lt;br /&gt;
Params: ID, COMMAND&lt;br /&gt;
 http://foo.bar:8002/SessionCommand/&lt;br /&gt;
Return: (XML) &amp;lt;ConsoleSession&amp;gt;&amp;lt;Result&amp;gt;&amp;lt;/Result&amp;gt;&amp;lt;/ConsoleSession&amp;gt;&lt;br /&gt;
If everything went well, the command should have been executed. Try another command.&lt;br /&gt;
&lt;br /&gt;
When you want to close down the connection, send a POST again.&lt;br /&gt;
PARAMS: ID&lt;br /&gt;
 http://foo.bar:8002/CloseSession/&lt;br /&gt;
Return: (XML) &amp;lt;ConsoleSession&amp;gt;&amp;lt;Result&amp;gt;&amp;lt;/Result&amp;gt;&amp;lt;/ConsoleSession&amp;gt;&lt;br /&gt;
The session is closed, and you have to login again, when you want to send a command again.&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
In python:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 # This piece of code is published by thomax (txOh) (c) 2010 under the&lt;br /&gt;
 # Artistic License 1.0 (http://www.perlfoundation.org/artistic_license_1_0)&lt;br /&gt;
 &lt;br /&gt;
 import urllib, urllib2&lt;br /&gt;
 import xml.dom.minidom&lt;br /&gt;
 &lt;br /&gt;
 class UserConsoleClient():&lt;br /&gt;
 &lt;br /&gt;
    def __init__(self, addr):&lt;br /&gt;
        self.addr = addr&lt;br /&gt;
        url = self.addr + 'StartSession/'&lt;br /&gt;
 &lt;br /&gt;
        params = urllib.urlencode({&lt;br /&gt;
            'USER': 'Test',&lt;br /&gt;
            'PASS': 'secret'&lt;br /&gt;
        })&lt;br /&gt;
        data = urllib2.urlopen(url, params).read()&lt;br /&gt;
 &lt;br /&gt;
        dom = xml.dom.minidom.parseString(data)&lt;br /&gt;
        elem =  dom.getElementsByTagName('SessionID')&lt;br /&gt;
        self.sessionid = elem[0].childNodes[0].nodeValue&lt;br /&gt;
 &lt;br /&gt;
    def close(self):&lt;br /&gt;
        url = self.addr + 'CloseSession/'&lt;br /&gt;
        params = urllib.urlencode({&lt;br /&gt;
            'ID': self.sessionid&lt;br /&gt;
        })&lt;br /&gt;
        print urllib2.urlopen(url, params).read()&lt;br /&gt;
 &lt;br /&gt;
    def do_cmd(self, cmd):&lt;br /&gt;
        url = self.addr + '/SessionCommand/'&lt;br /&gt;
        params = urllib.urlencode({&lt;br /&gt;
            'ID': self.sessionid,&lt;br /&gt;
            'COMMAND': cmd&lt;br /&gt;
        })&lt;br /&gt;
        print urllib2.urlopen(url, params).read()&lt;br /&gt;
 &lt;br /&gt;
    def read_buffer(self):&lt;br /&gt;
        url = self.addr + 'ReadResponses/' + self.sessionid + '/'&lt;br /&gt;
        params = urllib.urlencode({&lt;br /&gt;
            'ID': self.sessionid&lt;br /&gt;
        })&lt;br /&gt;
 &lt;br /&gt;
        print urllib2.urlopen(url, params).read()&lt;br /&gt;
 &lt;br /&gt;
 console = UserConsoleClient('http://127.0.0.1:8300/')&lt;br /&gt;
 console.read_buffer()&lt;br /&gt;
 print 'quit with a &amp;quot;.&amp;quot;'&lt;br /&gt;
 cmd = &amp;quot;&amp;quot;&lt;br /&gt;
 while cmd != &amp;quot;.&amp;quot;:&lt;br /&gt;
    if cmd != &amp;quot;&amp;quot;:&lt;br /&gt;
        console.do_cmd(cmd)&lt;br /&gt;
        console.read_buffer()&lt;br /&gt;
    cmd = raw_input(&amp;quot;&amp;gt; &amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
 console.close()&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/User:Thomax</id>
		<title>User:Thomax</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:Thomax"/>
				<updated>2009-08-28T18:12:08Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Use the XML-RPC RemoteAdmin interface with perl: [[Users:Thomax:perl-xmlrpc | Snippet]]&lt;br /&gt;
&lt;br /&gt;
If you use openWRT firmware on your router, check here:  [[Users:Thomax:nat-loopback | OpenWRT NAT Loopback]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
shortcuts:&lt;br /&gt;
&lt;br /&gt;
* [ http://opensimulator.org/mantis/my_view_page.php mantis ]&lt;br /&gt;
* [ http://opensimulator.org/cgi-bin/viewvc.cgi/ browse source ]&lt;br /&gt;
* [ http://opensimulator.org/viewgit/?a=summary&amp;amp;p=opensim recent changes ]&lt;br /&gt;
* [ http://forge.opensimulator.org/gf/project/ forge projects ]&lt;br /&gt;
* [ http://panda.opensimulator.org/ recent builds history ]&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/User:Thomax</id>
		<title>User:Thomax</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:Thomax"/>
				<updated>2009-08-25T17:56:42Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Use the XML-RPC RemoteAdmin interface with perl: [[Users:Thomax:perl-xmlrpc | Snippet]]&lt;br /&gt;
&lt;br /&gt;
If you use openWRT firmware on your router, check here:  [[Users:Thomax:nat-loopback | OpenWRT NAT Loopback]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
shortcuts:&lt;br /&gt;
&lt;br /&gt;
* [ http://opensimulator.org/mantis/my_view_page.php mantis ]&lt;br /&gt;
* [ http://opensimulator.org/cgi-bin/viewvc.cgi/ browse source ]&lt;br /&gt;
* [ http://opensimulator.org/viewgit/?a=summary&amp;amp;p=opensim recent changes ]&lt;br /&gt;
* [ http://forge.opensimulator.org/gf/project/ forge projects ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [ http://panda.opensimulator.org/ recent builds history (dead)]&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/User:Thomax</id>
		<title>User:Thomax</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:Thomax"/>
				<updated>2009-08-25T17:56:20Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Use the XML-RPC RemoteAdmin interface with perl: [[Users:Thomax:perl-xmlrpc | Snippet]]&lt;br /&gt;
&lt;br /&gt;
If you use openWRT firmware on your router, check here:  [[Users:Thomax:nat-loopback | OpenWRT NAT Loopback]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
shortcuts:&lt;br /&gt;
&lt;br /&gt;
* [ http://opensimulator.org/mantis/my_view_page.php mantis ]&lt;br /&gt;
* [ http://opensimulator.org/cgi-bin/viewvc.cgi/ browse source ]&lt;br /&gt;
* [ http://opensimulator.org/viewgit/?a=summary&amp;amp;p=opensim recent changes ]&lt;br /&gt;
* [ http://forge.opensimulator.org/gf/project/ forge projects ]&lt;br /&gt;
&lt;br /&gt;
* [ http://panda.opensimulator.org/ recent builds history (dead)]&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/NAT_Loopback_Routers</id>
		<title>NAT Loopback Routers</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/NAT_Loopback_Routers"/>
				<updated>2009-07-18T21:29:40Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Template:Quicklinks}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page show a list of routers supporting NAT Loopback feature in order to be able to TP in your region when you host it at home on the same computer or local network. Please, feel free to contribute such a list especially if these routers are cheap :D&lt;br /&gt;
&lt;br /&gt;
&amp;quot;D-Link DGL-4xxx series of routers have the largest available nat table of any router on the market&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;These routers range from 70$-180$ USD depending on where you live and purchase from.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* D-Link DGL-4500 : http://games.dlink.com/products/?pid=643&lt;br /&gt;
* D-Link DGL-4300 : http://games.dlink.com/products/?pid=370&lt;br /&gt;
* D-Link DGL-4100 : http://games.dlink.com/products/?pid=371&lt;br /&gt;
&lt;br /&gt;
Other routers&lt;br /&gt;
&lt;br /&gt;
* Linksys WRT54G : http://en.wikipedia.org/wiki/Linksys_WRT54G_series&lt;br /&gt;
* Arris TM502b : http://portforward.com/english/routers/port_forwarding/Arris/TM502b/&lt;br /&gt;
* NetGear WGR614 : has been confirmed to work out of the box&lt;br /&gt;
 (note:  NetGear WGR614 does not work with ISP required gateway modems)&lt;br /&gt;
&lt;br /&gt;
Routers that users has experienced problems with&lt;br /&gt;
&lt;br /&gt;
* Belkin F5D7230-4&lt;br /&gt;
(the router might work if 3rd party firmware is used, such as DD-WRT : http://www.dd-wrt.com/ )&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
For Linux based Netfilter (iptables) routers, you want to set up the NAT table with some extra entries&lt;br /&gt;
The following script is something to get you started, you'll need to fix up the variables at the top to match your system and network.&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# vvvvv - Fix these! - vvvvv&lt;br /&gt;
IPTABLES=/usr/sbin/iptables&lt;br /&gt;
LAN_NETWORK=192.168.0.0/24&lt;br /&gt;
SERVER_IP=192.168.0.2&lt;br /&gt;
INTERNET_IP=100.100.100.100&lt;br /&gt;
REMOTING_PORT=8895&lt;br /&gt;
REGION_PORT=9000&lt;br /&gt;
# ^^^^^ - Fix these! - ^^^^^&lt;br /&gt;
&lt;br /&gt;
# First, the Destination NAT, anything going to the external address on our ports, we redirect to the server&lt;br /&gt;
# Note, if you have a double NAT running and this router doesn't actually have the internet IP address, you'll&lt;br /&gt;
# need another set of PREROUTING-DNAT lines with the --destination (-d) set to the internet facing private address&lt;br /&gt;
$IPTABLES -t nat -I PREROUTING -d $INTERNET_IP -p tcp --dport $REMOTING_PORT --jump DNAT --to-destination $SERVER_IP&lt;br /&gt;
$IPTABLES -t nat -I PREROUTING -d $INTERNET_IP -p udp --dport $REGION_PORT --jump DNAT --to-destination $SERVER_IP&lt;br /&gt;
$IPTABLES -t nat -I PREROUTING -d $INTERNET_IP -p tcp --dport $REGION_PORT --jump DNAT --to-destination $SERVER_IP&lt;br /&gt;
&lt;br /&gt;
# Second, the Source NAT, we need this so that returning packets to our LAN clients go back through the router first,&lt;br /&gt;
# otherwise, the server will try to talk directly to the client and the client will reject them&lt;br /&gt;
$IPTABLES -t nat -I POSTROUTING -s $LAN_NETWORK -d $SERVER_IP -p tcp --dport $REMOTING_PORT --jump SNAT --to-source $INTERNET_IP&lt;br /&gt;
$IPTABLES -t nat -I POSTROUTING -s $LAN_NETWORK -d $SERVER_IP -p udp --dport $REGION_PORT --jump SNAT --to-source $INTERNET_IP&lt;br /&gt;
$IPTABLES -t nat -I POSTROUTING -s $LAN_NETWORK -d $SERVER_IP -p tcp --dport $REGION_PORT --jump SNAT --to-source $INTERNET_IP&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[User:Hell Fire|Hell Fire]]&lt;br /&gt;
&lt;br /&gt;
If you use openWRT firmware on your router, check here:  [[Users:Thomax:nat-loopback | OpenWRT NAT Loopback]]&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/User:Thomax:nat-loopback</id>
		<title>User:Thomax:nat-loopback</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:Thomax:nat-loopback"/>
				<updated>2009-07-18T21:29:08Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Well, first is this little script, which should be placed in ''/etc/firewall.user'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# get the WANIP from the ppp0 interface&lt;br /&gt;
WANIP=`ifconfig ppp0 | awk '/inet addr/ {split ($2,A,&amp;quot;:&amp;quot;); print A[2]}'`&lt;br /&gt;
&lt;br /&gt;
# my lan ip&lt;br /&gt;
LANIP = 192.168.1.100&lt;br /&gt;
&lt;br /&gt;
nat_loopback() {         &lt;br /&gt;
        iptables -t nat -A prerouting_rule -d $WANIP -p $3 --dport $1 -j DNAT --to $2&lt;br /&gt;
        iptables -A forwarding_rule -p $3 --dport $1 -d $2 -j ACCEPT&lt;br /&gt;
        iptables -t nat -A postrouting_rule -s 192.168.1.0/24 -p $3 --dport $1 -d $2 -j MASQUERADE&lt;br /&gt;
}                                                                                             &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# thats for a local apache (yepp, i have a local web server..)&lt;br /&gt;
nat_loopback 80 $LANIP tcp&lt;br /&gt;
&lt;br /&gt;
# http_listen_port from the OpenSim.ini&lt;br /&gt;
nat_loopback 9000 $LANIP tcp         &lt;br /&gt;
&lt;br /&gt;
# and the udp port of the region (RegionConfig.ini)&lt;br /&gt;
nat_loopback 19010 $LANIP udp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And just because I have a dynamic IP address I need to be sure that the firewall rules get reloaded on each new PPPoE connect. Thats why I created the script ''/etc/ppp/ip-up.d/connect.sh''&lt;br /&gt;
which looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
# Put stuff here you need todo just when your router reconnects to the provider&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/firewall reload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Thats what I've additionally done beside the normal LuCI settings on my openWRT router, which is an asus wl-500gP (with this nice two USB slots :-)&lt;br /&gt;
&lt;br /&gt;
Let me know if it helps you too...&lt;br /&gt;
&lt;br /&gt;
thomax&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/User:Thomax:nat-loopback</id>
		<title>User:Thomax:nat-loopback</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:Thomax:nat-loopback"/>
				<updated>2009-07-18T21:28:44Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: New page: Well, first is this little script, which should be placed in ''/etc/firewall.user'':  &amp;lt;pre&amp;gt; # get the WANIP from the ppp0 interface WANIP=`ifconfig ppp0 | awk '/inet addr/ {split ($2,A,&amp;quot;:&amp;quot;...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Well, first is this little script, which should be placed in ''/etc/firewall.user'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# get the WANIP from the ppp0 interface&lt;br /&gt;
WANIP=`ifconfig ppp0 | awk '/inet addr/ {split ($2,A,&amp;quot;:&amp;quot;); print A[2]}'`&lt;br /&gt;
&lt;br /&gt;
# my lan ip&lt;br /&gt;
LANIP = 192.168.1.100&lt;br /&gt;
&lt;br /&gt;
nat_loopback() {         &lt;br /&gt;
        iptables -t nat -A prerouting_rule -d $WANIP -p $3 --dport $1 -j DNAT --to $2&lt;br /&gt;
        iptables -A forwarding_rule -p $3 --dport $1 -d $2 -j ACCEPT&lt;br /&gt;
        iptables -t nat -A postrouting_rule -s 192.168.1.0/24 -p $3 --dport $1 -d $2 -j MASQUERADE&lt;br /&gt;
}                                                                                             &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# thats for a local apache (yepp, i have a local web server..)&lt;br /&gt;
nat_loopback 80 $LANIP tcp&lt;br /&gt;
&lt;br /&gt;
# http_listen_port from the OpenSim.ini&lt;br /&gt;
nat_loopback 9000 $LANIP tcp         &lt;br /&gt;
&lt;br /&gt;
# and the udp port of the region (RegionConfig.ini)&lt;br /&gt;
nat_loopback 19010 $LANIP udp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Well, and just because I have a dynamic IP address I need to be sure that the firewall rules get reloaded on each new PPPoE connect. Thats why I created the script ''/etc/ppp/ip-up.d/connect.sh''&lt;br /&gt;
which looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
# Put stuff here you need todo just when your router reconnects to the provider&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/firewall reload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Thats what I've additionally done beside the normal LuCI settings on my openWRT router, which is an asus wl-500gP (with this nice two USB slots :-)&lt;br /&gt;
&lt;br /&gt;
Let me know if it helps you too...&lt;br /&gt;
&lt;br /&gt;
thomax&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/User:Thomax</id>
		<title>User:Thomax</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:Thomax"/>
				<updated>2009-07-18T20:50:41Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Use the XML-RPC RemoteAdmin interface with perl: [[Users:Thomax:perl-xmlrpc | Snippet]]&lt;br /&gt;
&lt;br /&gt;
If you use openWRT firmware on your router, check here:  [[Users:Thomax:nat-loopback | OpenWRT NAT Loopback]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
shortcuts:&lt;br /&gt;
&lt;br /&gt;
* [ http://opensimulator.org/mantis/my_view_page.php mantis ]&lt;br /&gt;
* [ http://opensimulator.org/cgi-bin/viewvc.cgi/ browse source ]&lt;br /&gt;
* [ http://panda.opensimulator.org/ recent builds history ]&lt;br /&gt;
* [ http://forge.opensimulator.org/gf/project/ forge projects ]&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/User:Thomax</id>
		<title>User:Thomax</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:Thomax"/>
				<updated>2009-07-18T20:49:14Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Use the XML-RPC RemoteAdmin interface with perl: [[Users:Thomax:perl-xmlrpc | Snippet]]&lt;br /&gt;
&lt;br /&gt;
If you use openWRT firmware on your router, check here:  [[Users:Thomax:perl-xmlrpc | OpenWRT NAT Loopback]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
shortcuts:&lt;br /&gt;
&lt;br /&gt;
* [ http://opensimulator.org/mantis/my_view_page.php mantis ]&lt;br /&gt;
* [ http://opensimulator.org/cgi-bin/viewvc.cgi/ browse source ]&lt;br /&gt;
* [ http://panda.opensimulator.org/ recent builds history ]&lt;br /&gt;
* [ http://forge.opensimulator.org/gf/project/ forge projects ]&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/HyperGrid_Team</id>
		<title>HyperGrid Team</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/HyperGrid_Team"/>
				<updated>2009-06-21T16:50:52Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: /* Collaboration Sites */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Template:Quicklinks}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What is the &amp;lt;nowiki&amp;gt;HyperGrid&amp;lt;/nowiki&amp;gt; Team? == &lt;br /&gt;
The &amp;lt;nowiki&amp;gt;HyperGrid Team&amp;lt;/nowiki&amp;gt; are a pioneering group of [[Gridnaut|Gridnauts]] dedicated to establishing a network of [[HyperGrid_Regions|HyperGrid Regions]] spanning every Grid possible. Our collective goal is to create a true [[HyperGrid]] across the [[Metaverse|Metaverse]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Who is the HyperGrid Team? == &lt;br /&gt;
The HyperGrid Team is made up of people who are excited about the endless possibilities of being able to TelePort from Grid to Grid at the click of a prim. The majority of the team are themselves owners of HyperGrid Regions.&lt;br /&gt;
&lt;br /&gt;
=== Core Hypergrid Team ===&lt;br /&gt;
&lt;br /&gt;
* Andreas mueller (Graphics/Web Designer)&lt;br /&gt;
* Bruce Patton (Builder/Scripter)&lt;br /&gt;
* Diva (Opensimulator HG Developer)&lt;br /&gt;
* eaglefx Binder (Tech/Builder/Wiki)&lt;br /&gt;
* GoldenHawk (Builder/Scripter)&lt;br /&gt;
* [[User:Mikebert |Mikebert M34]] (Wiki,Builder,Scripter,Networking Pro)&lt;br /&gt;
* Richardus Raymaker&lt;br /&gt;
* Tiffany Sicling (Builder)&lt;br /&gt;
* Warin Cascabel (Builder/Scripter)&lt;br /&gt;
&lt;br /&gt;
=== Testers on Hypergrid Team ===&lt;br /&gt;
* Andreas mueller&lt;br /&gt;
* Bruce Patton&lt;br /&gt;
* eaglefx Binder&lt;br /&gt;
* Jos Joszpe&lt;br /&gt;
* Richardus Raymaker&lt;br /&gt;
* Tiffany Sicling&lt;br /&gt;
* Carlos Roundel (owner Cyberlandia hypergrided Grid)&lt;br /&gt;
* Snoopy Pfeffer&lt;br /&gt;
* Your Name Here&lt;br /&gt;
&lt;br /&gt;
== What are you doing? ==&lt;br /&gt;
&lt;br /&gt;
=== Main ToDo List ===&lt;br /&gt;
* [[HyperGrid_Team/ToDo|HyperGrid Team Todo List]]&lt;br /&gt;
* [[HyperGrid_Team/HowTo|HyperGrid Install and Running]]&lt;br /&gt;
&lt;br /&gt;
=== Current Projects ===&lt;br /&gt;
* [[HyperGrid_Team/Current_Projects/HyperGrid_Stargate|HyperGrid Stargate]]&lt;br /&gt;
&lt;br /&gt;
=== Proposed Projects ===&lt;br /&gt;
* [[HyperGrid_Team/Proposed_Projects/HG_Stargate_Vendor|HG Stargate Vendor]]&lt;br /&gt;
* [[HyperGrid_Team/Proposed_Projects/HG_Health_Monitor|HG Health Monitor]]&lt;br /&gt;
* [[HyperGrid_Team/Proposed_Projects/Metaverse_Connection_Centers|Metaverse Connection Centers]]&lt;br /&gt;
&lt;br /&gt;
== Press ==&lt;br /&gt;
&lt;br /&gt;
[http://www.mariasworlds.com/2009/04/internet-history-made-today-travels-thorugh-the-stargate/ Travels through the Stargate from Marias World]&lt;br /&gt;
&lt;br /&gt;
[http://www.mogulus.com/metaworld2/ondemand/pla_3610768549260411462?initthumburl=http://mogulus-user-files.s3.amazonaws.com/chv2metaworld2/2009/05/13/16a8a882-c83c-4d5b-9cb1-4458ee8682e5_1440.jpg&amp;amp;playeraspectwidth=4&amp;amp;playeraspectheight=3 Diva's session in SecondLife &amp;quot;The Hypergrid: An Architecture for a New Web]&lt;br /&gt;
&lt;br /&gt;
== Are you on IRC? == &lt;br /&gt;
Yes, we are. You can find us on irc.freenode.net #hypergrid&lt;br /&gt;
&lt;br /&gt;
== When/Where are the meetings? ==&lt;br /&gt;
The Team meets once a week on Wednesday at 21:00 (9 PM) UTC/GMT (http://wwp.greenwichmeantime.com/) or 12:00 PST Viewer time.&lt;br /&gt;
&lt;br /&gt;
=== Upcoming Meetings ===&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;10&amp;quot; &lt;br /&gt;
!Date&lt;br /&gt;
!Agenda&lt;br /&gt;
!Location&lt;br /&gt;
!SLURL&lt;br /&gt;
!Team Member&lt;br /&gt;
!ToDo&lt;br /&gt;
!Chat Logs&lt;br /&gt;
|-&lt;br /&gt;
|June 3, 2009&lt;br /&gt;
|[[HyperGrid_Team/Agenda/2009.0306|Agenda]]&lt;br /&gt;
|Nibiru OSGrid&lt;br /&gt;
|secondlife://vimana.dyndns.org:9000/ &lt;br /&gt;
|Tiffany Sicling&lt;br /&gt;
|[[HyperGrid_Team/ToDo/2009.0306|Todo]]&lt;br /&gt;
|[[HyperGrid_Team/Chat_Logs/2009.0306|Chat Logs]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Previous Meetings ===&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;10&amp;quot; &lt;br /&gt;
!Date&lt;br /&gt;
!Agenda&lt;br /&gt;
!Location&lt;br /&gt;
!SLURL&lt;br /&gt;
!Team Member&lt;br /&gt;
!Todo&lt;br /&gt;
!Chat Logs&lt;br /&gt;
|-&lt;br /&gt;
|May 27, 2009&lt;br /&gt;
|[[HyperGrid_Team/Agenda/2009.2705|Agenda]]&lt;br /&gt;
|Nibiru OSGrid&lt;br /&gt;
|secondlife://vimana.dyndns.org:9000/ &lt;br /&gt;
|Tiffany Sicling&lt;br /&gt;
|[[HyperGrid_Team/ToDo/2009.2705|Todo]]&lt;br /&gt;
|[[HyperGrid_Team/Chat_Logs/2009.2705|Chat Logs]]&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|May 20, 2009&lt;br /&gt;
|[[HyperGrid_Team/Agenda/2009.2005|Agenda]]&lt;br /&gt;
|Nibiru OSGrid&lt;br /&gt;
|secondlife://vimana.dyndns.org:9000/ &lt;br /&gt;
|Tiffany Sicling&lt;br /&gt;
|[[HyperGrid_Team/ToDo/2009.2005|Todo]]&lt;br /&gt;
|[[HyperGrid_Team/Chat_Logs/2009.2005|Chat Logs]]&lt;br /&gt;
| chat log pending&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|May 13, 2009&lt;br /&gt;
|[[HyperGrid_Team/Agenda/2009.1305|Agenda]]&lt;br /&gt;
|Nibiru OSGrid&lt;br /&gt;
|secondlife://vimana.dyndns.org:9000/ &lt;br /&gt;
|Tiffany Sicling&lt;br /&gt;
|[[HyperGrid_Team/ToDo/2009.1305|Todo]]&lt;br /&gt;
|[[HyperGrid_Team/Chat_Logs/2009.1305|Chat Logs]]&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|May 6, 2009&lt;br /&gt;
|[[HyperGrid_Team/Agenda/2009.0506|Agenda]]&lt;br /&gt;
|Nibiru OSGrid&lt;br /&gt;
|secondlife://vimana.dyndns.org:9000/ &lt;br /&gt;
|Tiffany Sicling&lt;br /&gt;
|[[HyperGrid_Team/ToDo/2009.0506|Todo]]&lt;br /&gt;
|[[HyperGrid_Team/Chat_Logs/2009.0506|Chat Logs]]&lt;br /&gt;
|This meeting was cancelled&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|April 29, 2009&lt;br /&gt;
|[[HyperGrid_Team/Agenda/2009.0429|Agenda]]&lt;br /&gt;
|Nibiru OSGrid&lt;br /&gt;
|secondlife://vimana.dyndns.org:9000/ &lt;br /&gt;
|Tiffany Sicling&lt;br /&gt;
|[[HyperGrid_Team/ToDo/2009.0429|Todo]]&lt;br /&gt;
|[[HyperGrid_Team/Chat_Logs/2009.0429|Chat Logs]]&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|April 22, 2009&lt;br /&gt;
|[[HyperGrid_Team/Agenda/2009.0422|Agenda]]&lt;br /&gt;
|Nibiru OSGrid&lt;br /&gt;
|secondlife://vimana.dyndns.org:9000/ &lt;br /&gt;
|Tiffany Sicling&lt;br /&gt;
|[[HyperGrid_Team/ToDo/2009.0422|Todo]]&lt;br /&gt;
|[[HyperGrid_Team/Chat_Logs/2009.0422|Chat Logs]]&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|April 15, 2009&lt;br /&gt;
|[[HyperGrid_Team/Agenda/2009.0415|Agenda]]&lt;br /&gt;
|Nibiru OSGrid&lt;br /&gt;
|secondlife://vimana.dyndns.org:9000/ &lt;br /&gt;
|Tiffany Sicling&lt;br /&gt;
||[[HyperGrid_Team/ToDo/2009.0415|Todo]]&lt;br /&gt;
|[[HyperGrid_Team/Chat_Logs/2009.0415|Chat Logs]]&lt;br /&gt;
|-&lt;br /&gt;
|April 8, 2009&lt;br /&gt;
|[[HyperGrid_Team/Agenda/2009.0408|Agenda]]&lt;br /&gt;
|Nibiru OSGrid&lt;br /&gt;
|secondlife://vimana.dyndns.org:9000/&lt;br /&gt;
|Tiffany Sicling&lt;br /&gt;
|[[HyperGrid_Team/ToDo/2009.0408|Todo]]&lt;br /&gt;
|[[HyperGrid_Team/Chat_Logs/2009.0408|Chat Logs]]&lt;br /&gt;
|-&lt;br /&gt;
|April 1, 2009&lt;br /&gt;
|Agenda&lt;br /&gt;
|Nibiru OSGrid&lt;br /&gt;
|secondlife://vimana.dyndns.org:9000/&lt;br /&gt;
|Tiffany Sicling&lt;br /&gt;
|[[HyperGrid_Team/ToDo/2009.0401|Todo]]&lt;br /&gt;
|[[HyperGrid_Team/Chat_Logs/2009.0402|Chat Logs]]&lt;br /&gt;
|-&lt;br /&gt;
|March 25, 2009&lt;br /&gt;
|Agenda&lt;br /&gt;
|Wright Plaza&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|[[HyperGrid_Team/Chat_Logs/2009.0325|Chat Logs]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== HyperGrid Team Related Web Resources ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Collaboration Sites ===&lt;br /&gt;
&lt;br /&gt;
* http://www.hypergrids.org - Just new released&lt;br /&gt;
* http://www.opensim.de/doku.php?id=projekte:hypergrid - German Wiki&lt;br /&gt;
* http://www.gridhop.net/ - a web based hypergrid portal aimed to work with the built-in browser. It also offer a open data export, actually XML only, under http://www.gridhop.net/cgi/gridhopexport&lt;br /&gt;
&lt;br /&gt;
== Some HyperGrid Regions on the Team ==&lt;br /&gt;
&lt;br /&gt;
=== Standalone HyperGrid Regions ===&lt;br /&gt;
{| cellpadding=&amp;quot;10&amp;quot; &lt;br /&gt;
|        Richardus's Hyper&lt;br /&gt;
|                secondlife://osg.rigutech.nl:9000/&lt;br /&gt;
|        coords, x=11109,y=11111              &lt;br /&gt;
|-&lt;br /&gt;
|        Sunred Hyper&lt;br /&gt;
|                secondlife://hypergrid.sunredbeach.com:9000/&lt;br /&gt;
|        coords, x=11111, y=11111&lt;br /&gt;
|-&lt;br /&gt;
|        Hypervz&lt;br /&gt;
|                secondlife://hypervz.hypergrid.dk:9000/&lt;br /&gt;
|        coords, x=8100, y=8100&lt;br /&gt;
|-&lt;br /&gt;
|        Metaverse Sims&lt;br /&gt;
|                secondlife://metaversesims.net:9000/&lt;br /&gt;
|        coords, x=9000, y=9000&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|        OpenSIM.de / M34 Sim-1&lt;br /&gt;
|                secondlife://opensim.mydyn.de:9090/&lt;br /&gt;
|        coords, x=4400, y=4400&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|        OpenSIM.de / M34 Sim-2&lt;br /&gt;
|                secondlife://grid.mydyn.de:9190/&lt;br /&gt;
|        coords, x=7000, y=7000&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|        OpenSIM.de / M34 Sim-3&lt;br /&gt;
|                secondlife://hypergrid.mydyn.de:9290/&lt;br /&gt;
|        coords, x=11000, y=11000&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|        Cyberlandia.net &lt;br /&gt;
|                secondlife://grid.cyberlandia.net:9000/&lt;br /&gt;
|        coords, x=1002, y=1000&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
=== OSGrid HyperGrid Regions ===&lt;br /&gt;
{| cellpadding=&amp;quot;10&amp;quot; &lt;br /&gt;
|            Wright Plaza&lt;br /&gt;
|                secondlife://plaza02.osgrid.org:9101/&lt;br /&gt;
|            coords, x=10000, y=10000&lt;br /&gt;
|-&lt;br /&gt;
|            Lbsa Plaza&lt;br /&gt;
|                secondlife://plaza02.osgrid.org:9102/&lt;br /&gt;
|            coords, x=9995, y=9995&lt;br /&gt;
|-&lt;br /&gt;
|            Sandbox Plaza&lt;br /&gt;
|                secondlife://plaza02.osgrid.org:9303/&lt;br /&gt;
|            coords, x=10128, y=10126&lt;br /&gt;
|-&lt;br /&gt;
|            Samsara&lt;br /&gt;
|                secondlife://66.240.232.94:9010/&lt;br /&gt;
|            coords, x=10006, y=9999&lt;br /&gt;
|-&lt;br /&gt;
|            Snoopies&lt;br /&gt;
|                secondlife://66.240.232.94:9011/&lt;br /&gt;
|            coords, x=10005, y=9999&lt;br /&gt;
|-&lt;br /&gt;
|            Nibiru&lt;br /&gt;
|                secondlife://vimana.dyndns.org:9000/                 &lt;br /&gt;
|            coords, x=8000, y=8000&lt;br /&gt;
|-&lt;br /&gt;
|            Sunred Gateway&lt;br /&gt;
|                secondlife://217.157.61.105:9000:Sunred Gateway/&lt;br /&gt;
|            coords, x=9995, y=10006&lt;br /&gt;
|-&lt;br /&gt;
|            UCI Welcome&lt;br /&gt;
|                secondlife://osl2.nac.uci.edu:9006/&lt;br /&gt;
|            coords, x=10000, y=10000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== MyOpenGrid HyperGrid Regions ===&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;10&amp;quot; &lt;br /&gt;
|         Over Land                    &lt;br /&gt;
|            secondlife://myopengrid.com:9005/&lt;br /&gt;
|            coords, x=7001, y=7001&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Public Hypergrid Nodes ===&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;10&amp;quot; &lt;br /&gt;
|         http://opensimulator.org/wiki/Public_Hypergrid_Nodes&lt;br /&gt;
|-                &lt;br /&gt;
|}                &lt;br /&gt;
&lt;br /&gt;
{{Languages}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Help|Formatting]]&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/HyperGrid_Team</id>
		<title>HyperGrid Team</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/HyperGrid_Team"/>
				<updated>2009-06-21T16:44:14Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: /* Collaboration Sites */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Template:Quicklinks}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What is the &amp;lt;nowiki&amp;gt;HyperGrid&amp;lt;/nowiki&amp;gt; Team? == &lt;br /&gt;
The &amp;lt;nowiki&amp;gt;HyperGrid Team&amp;lt;/nowiki&amp;gt; are a pioneering group of [[Gridnaut|Gridnauts]] dedicated to establishing a network of [[HyperGrid_Regions|HyperGrid Regions]] spanning every Grid possible. Our collective goal is to create a true [[HyperGrid]] across the [[Metaverse|Metaverse]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Who is the HyperGrid Team? == &lt;br /&gt;
The HyperGrid Team is made up of people who are excited about the endless possibilities of being able to TelePort from Grid to Grid at the click of a prim. The majority of the team are themselves owners of HyperGrid Regions.&lt;br /&gt;
&lt;br /&gt;
=== Core Hypergrid Team ===&lt;br /&gt;
&lt;br /&gt;
* Andreas mueller (Graphics/Web Designer)&lt;br /&gt;
* Bruce Patton (Builder/Scripter)&lt;br /&gt;
* Diva (Opensimulator HG Developer)&lt;br /&gt;
* eaglefx Binder (Tech/Builder/Wiki)&lt;br /&gt;
* GoldenHawk (Builder/Scripter)&lt;br /&gt;
* [[User:Mikebert |Mikebert M34]] (Wiki,Builder,Scripter,Networking Pro)&lt;br /&gt;
* Richardus Raymaker&lt;br /&gt;
* Tiffany Sicling (Builder)&lt;br /&gt;
* Warin Cascabel (Builder/Scripter)&lt;br /&gt;
&lt;br /&gt;
=== Testers on Hypergrid Team ===&lt;br /&gt;
* Andreas mueller&lt;br /&gt;
* Bruce Patton&lt;br /&gt;
* eaglefx Binder&lt;br /&gt;
* Jos Joszpe&lt;br /&gt;
* Richardus Raymaker&lt;br /&gt;
* Tiffany Sicling&lt;br /&gt;
* Carlos Roundel (owner Cyberlandia hypergrided Grid)&lt;br /&gt;
* Snoopy Pfeffer&lt;br /&gt;
* Your Name Here&lt;br /&gt;
&lt;br /&gt;
== What are you doing? ==&lt;br /&gt;
&lt;br /&gt;
=== Main ToDo List ===&lt;br /&gt;
* [[HyperGrid_Team/ToDo|HyperGrid Team Todo List]]&lt;br /&gt;
* [[HyperGrid_Team/HowTo|HyperGrid Install and Running]]&lt;br /&gt;
&lt;br /&gt;
=== Current Projects ===&lt;br /&gt;
* [[HyperGrid_Team/Current_Projects/HyperGrid_Stargate|HyperGrid Stargate]]&lt;br /&gt;
&lt;br /&gt;
=== Proposed Projects ===&lt;br /&gt;
* [[HyperGrid_Team/Proposed_Projects/HG_Stargate_Vendor|HG Stargate Vendor]]&lt;br /&gt;
* [[HyperGrid_Team/Proposed_Projects/HG_Health_Monitor|HG Health Monitor]]&lt;br /&gt;
* [[HyperGrid_Team/Proposed_Projects/Metaverse_Connection_Centers|Metaverse Connection Centers]]&lt;br /&gt;
&lt;br /&gt;
== Press ==&lt;br /&gt;
&lt;br /&gt;
[http://www.mariasworlds.com/2009/04/internet-history-made-today-travels-thorugh-the-stargate/ Travels through the Stargate from Marias World]&lt;br /&gt;
&lt;br /&gt;
[http://www.mogulus.com/metaworld2/ondemand/pla_3610768549260411462?initthumburl=http://mogulus-user-files.s3.amazonaws.com/chv2metaworld2/2009/05/13/16a8a882-c83c-4d5b-9cb1-4458ee8682e5_1440.jpg&amp;amp;playeraspectwidth=4&amp;amp;playeraspectheight=3 Diva's session in SecondLife &amp;quot;The Hypergrid: An Architecture for a New Web]&lt;br /&gt;
&lt;br /&gt;
== Are you on IRC? == &lt;br /&gt;
Yes, we are. You can find us on irc.freenode.net #hypergrid&lt;br /&gt;
&lt;br /&gt;
== When/Where are the meetings? ==&lt;br /&gt;
The Team meets once a week on Wednesday at 21:00 (9 PM) UTC/GMT (http://wwp.greenwichmeantime.com/) or 12:00 PST Viewer time.&lt;br /&gt;
&lt;br /&gt;
=== Upcoming Meetings ===&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;10&amp;quot; &lt;br /&gt;
!Date&lt;br /&gt;
!Agenda&lt;br /&gt;
!Location&lt;br /&gt;
!SLURL&lt;br /&gt;
!Team Member&lt;br /&gt;
!ToDo&lt;br /&gt;
!Chat Logs&lt;br /&gt;
|-&lt;br /&gt;
|June 3, 2009&lt;br /&gt;
|[[HyperGrid_Team/Agenda/2009.0306|Agenda]]&lt;br /&gt;
|Nibiru OSGrid&lt;br /&gt;
|secondlife://vimana.dyndns.org:9000/ &lt;br /&gt;
|Tiffany Sicling&lt;br /&gt;
|[[HyperGrid_Team/ToDo/2009.0306|Todo]]&lt;br /&gt;
|[[HyperGrid_Team/Chat_Logs/2009.0306|Chat Logs]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Previous Meetings ===&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;10&amp;quot; &lt;br /&gt;
!Date&lt;br /&gt;
!Agenda&lt;br /&gt;
!Location&lt;br /&gt;
!SLURL&lt;br /&gt;
!Team Member&lt;br /&gt;
!Todo&lt;br /&gt;
!Chat Logs&lt;br /&gt;
|-&lt;br /&gt;
|May 27, 2009&lt;br /&gt;
|[[HyperGrid_Team/Agenda/2009.2705|Agenda]]&lt;br /&gt;
|Nibiru OSGrid&lt;br /&gt;
|secondlife://vimana.dyndns.org:9000/ &lt;br /&gt;
|Tiffany Sicling&lt;br /&gt;
|[[HyperGrid_Team/ToDo/2009.2705|Todo]]&lt;br /&gt;
|[[HyperGrid_Team/Chat_Logs/2009.2705|Chat Logs]]&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|May 20, 2009&lt;br /&gt;
|[[HyperGrid_Team/Agenda/2009.2005|Agenda]]&lt;br /&gt;
|Nibiru OSGrid&lt;br /&gt;
|secondlife://vimana.dyndns.org:9000/ &lt;br /&gt;
|Tiffany Sicling&lt;br /&gt;
|[[HyperGrid_Team/ToDo/2009.2005|Todo]]&lt;br /&gt;
|[[HyperGrid_Team/Chat_Logs/2009.2005|Chat Logs]]&lt;br /&gt;
| chat log pending&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|May 13, 2009&lt;br /&gt;
|[[HyperGrid_Team/Agenda/2009.1305|Agenda]]&lt;br /&gt;
|Nibiru OSGrid&lt;br /&gt;
|secondlife://vimana.dyndns.org:9000/ &lt;br /&gt;
|Tiffany Sicling&lt;br /&gt;
|[[HyperGrid_Team/ToDo/2009.1305|Todo]]&lt;br /&gt;
|[[HyperGrid_Team/Chat_Logs/2009.1305|Chat Logs]]&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|May 6, 2009&lt;br /&gt;
|[[HyperGrid_Team/Agenda/2009.0506|Agenda]]&lt;br /&gt;
|Nibiru OSGrid&lt;br /&gt;
|secondlife://vimana.dyndns.org:9000/ &lt;br /&gt;
|Tiffany Sicling&lt;br /&gt;
|[[HyperGrid_Team/ToDo/2009.0506|Todo]]&lt;br /&gt;
|[[HyperGrid_Team/Chat_Logs/2009.0506|Chat Logs]]&lt;br /&gt;
|This meeting was cancelled&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|April 29, 2009&lt;br /&gt;
|[[HyperGrid_Team/Agenda/2009.0429|Agenda]]&lt;br /&gt;
|Nibiru OSGrid&lt;br /&gt;
|secondlife://vimana.dyndns.org:9000/ &lt;br /&gt;
|Tiffany Sicling&lt;br /&gt;
|[[HyperGrid_Team/ToDo/2009.0429|Todo]]&lt;br /&gt;
|[[HyperGrid_Team/Chat_Logs/2009.0429|Chat Logs]]&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|April 22, 2009&lt;br /&gt;
|[[HyperGrid_Team/Agenda/2009.0422|Agenda]]&lt;br /&gt;
|Nibiru OSGrid&lt;br /&gt;
|secondlife://vimana.dyndns.org:9000/ &lt;br /&gt;
|Tiffany Sicling&lt;br /&gt;
|[[HyperGrid_Team/ToDo/2009.0422|Todo]]&lt;br /&gt;
|[[HyperGrid_Team/Chat_Logs/2009.0422|Chat Logs]]&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|April 15, 2009&lt;br /&gt;
|[[HyperGrid_Team/Agenda/2009.0415|Agenda]]&lt;br /&gt;
|Nibiru OSGrid&lt;br /&gt;
|secondlife://vimana.dyndns.org:9000/ &lt;br /&gt;
|Tiffany Sicling&lt;br /&gt;
||[[HyperGrid_Team/ToDo/2009.0415|Todo]]&lt;br /&gt;
|[[HyperGrid_Team/Chat_Logs/2009.0415|Chat Logs]]&lt;br /&gt;
|-&lt;br /&gt;
|April 8, 2009&lt;br /&gt;
|[[HyperGrid_Team/Agenda/2009.0408|Agenda]]&lt;br /&gt;
|Nibiru OSGrid&lt;br /&gt;
|secondlife://vimana.dyndns.org:9000/&lt;br /&gt;
|Tiffany Sicling&lt;br /&gt;
|[[HyperGrid_Team/ToDo/2009.0408|Todo]]&lt;br /&gt;
|[[HyperGrid_Team/Chat_Logs/2009.0408|Chat Logs]]&lt;br /&gt;
|-&lt;br /&gt;
|April 1, 2009&lt;br /&gt;
|Agenda&lt;br /&gt;
|Nibiru OSGrid&lt;br /&gt;
|secondlife://vimana.dyndns.org:9000/&lt;br /&gt;
|Tiffany Sicling&lt;br /&gt;
|[[HyperGrid_Team/ToDo/2009.0401|Todo]]&lt;br /&gt;
|[[HyperGrid_Team/Chat_Logs/2009.0402|Chat Logs]]&lt;br /&gt;
|-&lt;br /&gt;
|March 25, 2009&lt;br /&gt;
|Agenda&lt;br /&gt;
|Wright Plaza&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|[[HyperGrid_Team/Chat_Logs/2009.0325|Chat Logs]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== HyperGrid Team Related Web Resources ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Collaboration Sites ===&lt;br /&gt;
&lt;br /&gt;
* http://www.hypergrids.org - Just new released&lt;br /&gt;
* http://www.opensim.de/doku.php?id=projekte:hypergrid - German Wiki&lt;br /&gt;
* http://www.gridhop.net/ - a web based hypergrid portal aimed to work with the built-in browser&lt;br /&gt;
&lt;br /&gt;
== Some HyperGrid Regions on the Team ==&lt;br /&gt;
&lt;br /&gt;
=== Standalone HyperGrid Regions ===&lt;br /&gt;
{| cellpadding=&amp;quot;10&amp;quot; &lt;br /&gt;
|        Richardus's Hyper&lt;br /&gt;
|                secondlife://osg.rigutech.nl:9000/&lt;br /&gt;
|        coords, x=11109,y=11111              &lt;br /&gt;
|-&lt;br /&gt;
|        Sunred Hyper&lt;br /&gt;
|                secondlife://hypergrid.sunredbeach.com:9000/&lt;br /&gt;
|        coords, x=11111, y=11111&lt;br /&gt;
|-&lt;br /&gt;
|        Hypervz&lt;br /&gt;
|                secondlife://hypervz.hypergrid.dk:9000/&lt;br /&gt;
|        coords, x=8100, y=8100&lt;br /&gt;
|-&lt;br /&gt;
|        Metaverse Sims&lt;br /&gt;
|                secondlife://metaversesims.net:9000/&lt;br /&gt;
|        coords, x=9000, y=9000&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|        OpenSIM.de / M34 Sim-1&lt;br /&gt;
|                secondlife://opensim.mydyn.de:9090/&lt;br /&gt;
|        coords, x=4400, y=4400&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|        OpenSIM.de / M34 Sim-2&lt;br /&gt;
|                secondlife://grid.mydyn.de:9190/&lt;br /&gt;
|        coords, x=7000, y=7000&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|        OpenSIM.de / M34 Sim-3&lt;br /&gt;
|                secondlife://hypergrid.mydyn.de:9290/&lt;br /&gt;
|        coords, x=11000, y=11000&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|        Cyberlandia.net &lt;br /&gt;
|                secondlife://grid.cyberlandia.net:9000/&lt;br /&gt;
|        coords, x=1002, y=1000&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
=== OSGrid HyperGrid Regions ===&lt;br /&gt;
{| cellpadding=&amp;quot;10&amp;quot; &lt;br /&gt;
|            Wright Plaza&lt;br /&gt;
|                secondlife://plaza02.osgrid.org:9101/&lt;br /&gt;
|            coords, x=10000, y=10000&lt;br /&gt;
|-&lt;br /&gt;
|            Lbsa Plaza&lt;br /&gt;
|                secondlife://plaza02.osgrid.org:9102/&lt;br /&gt;
|            coords, x=9995, y=9995&lt;br /&gt;
|-&lt;br /&gt;
|            Sandbox Plaza&lt;br /&gt;
|                secondlife://plaza02.osgrid.org:9303/&lt;br /&gt;
|            coords, x=10128, y=10126&lt;br /&gt;
|-&lt;br /&gt;
|            Samsara&lt;br /&gt;
|                secondlife://66.240.232.94:9010/&lt;br /&gt;
|            coords, x=10006, y=9999&lt;br /&gt;
|-&lt;br /&gt;
|            Snoopies&lt;br /&gt;
|                secondlife://66.240.232.94:9011/&lt;br /&gt;
|            coords, x=10005, y=9999&lt;br /&gt;
|-&lt;br /&gt;
|            Nibiru&lt;br /&gt;
|                secondlife://vimana.dyndns.org:9000/                 &lt;br /&gt;
|            coords, x=8000, y=8000&lt;br /&gt;
|-&lt;br /&gt;
|            Sunred Gateway&lt;br /&gt;
|                secondlife://217.157.61.105:9000:Sunred Gateway/&lt;br /&gt;
|            coords, x=9995, y=10006&lt;br /&gt;
|-&lt;br /&gt;
|            UCI Welcome&lt;br /&gt;
|                secondlife://osl2.nac.uci.edu:9006/&lt;br /&gt;
|            coords, x=10000, y=10000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== MyOpenGrid HyperGrid Regions ===&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;10&amp;quot; &lt;br /&gt;
|         Over Land                    &lt;br /&gt;
|            secondlife://myopengrid.com:9005/&lt;br /&gt;
|            coords, x=7001, y=7001&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Public Hypergrid Nodes ===&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;10&amp;quot; &lt;br /&gt;
|         http://opensimulator.org/wiki/Public_Hypergrid_Nodes&lt;br /&gt;
|-                &lt;br /&gt;
|}                &lt;br /&gt;
&lt;br /&gt;
{{Languages}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Help|Formatting]]&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Known_Web_Interfaces_within_OpenSim</id>
		<title>Known Web Interfaces within OpenSim</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Known_Web_Interfaces_within_OpenSim"/>
				<updated>2009-05-08T20:01:59Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: /* RegionPlugin */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OpenMetaverse =&lt;br /&gt;
        CAPS Requested&lt;br /&gt;
            &amp;quot;ChatSessionRequest&amp;quot;&lt;br /&gt;
            &amp;quot;CopyInventoryFromNotecard&amp;quot;&lt;br /&gt;
            &amp;quot;DispatchRegionInfo&amp;quot;&lt;br /&gt;
            &amp;quot;EstateChangeInfo&amp;quot;&lt;br /&gt;
            &amp;quot;EventQueueGet&amp;quot;&lt;br /&gt;
            &amp;quot;FetchInventory&amp;quot;&lt;br /&gt;
            &amp;quot;WebFetchInventoryDescendents&amp;quot;&lt;br /&gt;
            &amp;quot;FetchLib&amp;quot;&lt;br /&gt;
            &amp;quot;FetchLibDescendents&amp;quot;&lt;br /&gt;
            &amp;quot;GroupProposalBallot&amp;quot;&lt;br /&gt;
            &amp;quot;HomeLocation&amp;quot;&lt;br /&gt;
            &amp;quot;MapLayer&amp;quot;&lt;br /&gt;
            &amp;quot;MapLayerGod&amp;quot;&lt;br /&gt;
            &amp;quot;NewFileAgentInventory&amp;quot;&lt;br /&gt;
            &amp;quot;ParcelPropertiesUpdate&amp;quot;&lt;br /&gt;
            &amp;quot;ParcelVoiceInfoRequest&amp;quot;&lt;br /&gt;
            &amp;quot;ProvisionVoiceAccountRequest&amp;quot;&lt;br /&gt;
            &amp;quot;RemoteParcelRequest&amp;quot;&lt;br /&gt;
            &amp;quot;RequestTextureDownload&amp;quot;&lt;br /&gt;
            &amp;quot;SearchStatRequest&amp;quot;&lt;br /&gt;
            &amp;quot;SearchStatTracking&amp;quot;&lt;br /&gt;
            &amp;quot;SendPostcard&amp;quot;&lt;br /&gt;
            &amp;quot;SendUserReport&amp;quot;&lt;br /&gt;
            &amp;quot;SendUserReportWithScreenshot&amp;quot;&lt;br /&gt;
            &amp;quot;ServerReleaseNotes&amp;quot;&lt;br /&gt;
            &amp;quot;StartGroupProposal&amp;quot;&lt;br /&gt;
            &amp;quot;UntrustedSimulatorMessage&amp;quot;&lt;br /&gt;
            &amp;quot;UpdateAgentInformation&amp;quot;&lt;br /&gt;
            &amp;quot;UpdateAgentLanguage&amp;quot;&lt;br /&gt;
            &amp;quot;UpdateGestureAgentInventory&amp;quot;&lt;br /&gt;
            &amp;quot;UpdateNotecardAgentInventory&amp;quot;&lt;br /&gt;
            &amp;quot;UpdateScriptAgent&amp;quot;&lt;br /&gt;
            &amp;quot;UpdateGestureTaskInventory&amp;quot;&lt;br /&gt;
            &amp;quot;UpdateNotecardTaskInventory&amp;quot;&lt;br /&gt;
            &amp;quot;UpdateScriptTask&amp;quot;&lt;br /&gt;
            &amp;quot;UploadBakedTexture&amp;quot;&lt;br /&gt;
            &amp;quot;ViewerStartAuction&amp;quot;&lt;br /&gt;
            &amp;quot;ViewerStats&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= OpenSim =&lt;br /&gt;
== ApplicationPlugin ==&lt;br /&gt;
=== Rest ===&lt;br /&gt;
==== RegionPlugin ====&lt;br /&gt;
                REST&lt;br /&gt;
                    POST &amp;quot;/admin/regions/&amp;quot;&lt;br /&gt;
                    GET &amp;quot;/admin/regions/&amp;quot;&lt;br /&gt;
                    GET &amp;quot;/admin/regions/&amp;lt;region-UUID&amp;gt;&amp;quot;&lt;br /&gt;
                    GET &amp;quot;/admin/regioninfo/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== InventoryServices  ====&lt;br /&gt;
                REST&lt;br /&gt;
                    GET &amp;quot;/admin/inventory/firstname lastname&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== AppearanceServices  ====&lt;br /&gt;
                REST&lt;br /&gt;
==== AssetServices ====&lt;br /&gt;
                REST&lt;br /&gt;
&lt;br /&gt;
== Framework ==&lt;br /&gt;
=== Communications ===&lt;br /&gt;
                CAPS&lt;br /&gt;
                    &amp;quot;SEED&amp;quot; &amp;quot;CAPS/0000/&amp;quot;&lt;br /&gt;
                    &amp;quot;MapLayer&amp;quot; &amp;quot;CAPS/0001/&amp;quot;&lt;br /&gt;
                    &amp;quot;NewFileAgentInventory&amp;quot; &amp;quot;CAPS/0002/&amp;quot;&lt;br /&gt;
                    &amp;quot;RequestTextureDownload&amp;quot; &amp;quot;CAPS/0003/&amp;quot;&lt;br /&gt;
                    &amp;quot;UpdateNotecardAgentInventory&amp;quot; &amp;quot;CAPS/0004/&amp;quot;&lt;br /&gt;
                    &amp;quot;UpdateScriptAgentInventory&amp;quot; &amp;quot;CAPS/0004/&amp;quot;&lt;br /&gt;
                    &amp;quot;UpdateScriptAgent&amp;quot; &amp;quot;CAPS/0004/&amp;quot;&lt;br /&gt;
                    &amp;quot;UpdateScriptTaskInventory&amp;quot; &amp;quot;CAPS/0005/&amp;quot;&lt;br /&gt;
                    &amp;quot;UpdateScriptTask&amp;quot; &amp;quot;CAPS/0005/&amp;quot;&lt;br /&gt;
                    &amp;quot;FetchInventoryDescendents&amp;quot; &amp;quot;CAPS/0006/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Region ==&lt;br /&gt;
=== Communications ===&lt;br /&gt;
==== OGS1 ====&lt;br /&gt;
                XMLRPC&lt;br /&gt;
                    &amp;quot;check&amp;quot;&lt;br /&gt;
                    &amp;quot;land_data&amp;quot;&lt;br /&gt;
==== Hypergrid ====&lt;br /&gt;
                XMLRPC&lt;br /&gt;
                    &amp;quot;logoff_user&amp;quot;&lt;br /&gt;
                    &amp;quot;check&amp;quot;&lt;br /&gt;
                    &amp;quot;land_data&amp;quot;&lt;br /&gt;
                    &amp;quot;link_region&amp;quot;&lt;br /&gt;
                    &amp;quot;expect_hg_user&amp;quot;&lt;br /&gt;
=== CoreModules ===&lt;br /&gt;
==== World ====&lt;br /&gt;
                LLSD&lt;br /&gt;
                    &amp;quot;/MAP/MapItems/&amp;lt;RegionID&amp;gt;&amp;quot;&lt;br /&gt;
==== InterGrid ====&lt;br /&gt;
                LLSD&lt;br /&gt;
                    &amp;quot;/agent&amp;quot;        # agent domain message&lt;br /&gt;
                    &amp;quot;/&amp;quot;             # region domain seed&lt;br /&gt;
                    &amp;quot;/&amp;lt;RegionName&amp;gt;&amp;quot; # region domain seed&lt;br /&gt;
==== Avatar ====&lt;br /&gt;
                REST&lt;br /&gt;
                    POST &amp;quot;CAPS/OA/&amp;lt;ID&amp;gt;&amp;quot; # ObjectAdd&lt;br /&gt;
                XMLRPC&lt;br /&gt;
                    &amp;quot;presence_update_bulk&amp;quot;&lt;br /&gt;
                    &amp;quot;terminate_friend&amp;quot;&lt;br /&gt;
                    &amp;quot;balanceUpdateRequest&amp;quot;&lt;br /&gt;
                    &amp;quot;userAlert&amp;quot;&lt;br /&gt;
                    &amp;quot;getCurrencyQuote&amp;quot;&lt;br /&gt;
                    &amp;quot;buyCurrency&amp;quot;&lt;br /&gt;
                    &amp;quot;preflightBuyLandPrep&amp;quot;&lt;br /&gt;
                    &amp;quot;buyLandPrep&amp;quot;&lt;br /&gt;
==== Scripting ====&lt;br /&gt;
                XMLRPC&lt;br /&gt;
                &amp;quot;llRemoteData&amp;quot;&lt;br /&gt;
==== Framework ====&lt;br /&gt;
                XMLRPC&lt;br /&gt;
                    &amp;quot;simulator_data_request&amp;quot;&lt;br /&gt;
                    &amp;quot;map_block&amp;quot;&lt;br /&gt;
                    &amp;quot;search_for_region_by_name&amp;quot;&lt;br /&gt;
==== Hypergrid ====&lt;br /&gt;
                XMLRPC&lt;br /&gt;
                    &amp;quot;hg_login&amp;quot;&lt;br /&gt;
                    &amp;quot;hg_new_auth_key&amp;quot;&lt;br /&gt;
                    &amp;quot;hg_verify_auth_key&amp;quot;&lt;br /&gt;
                    &amp;quot;check_auth_session&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Grid ==&lt;br /&gt;
=== InventoryServer ===&lt;br /&gt;
                REST&lt;br /&gt;
                    POST &amp;quot;GetInventory/&amp;quot;&lt;br /&gt;
                    POST &amp;quot;UpdateFolder/&amp;quot;&lt;br /&gt;
                    POST &amp;quot;MoveFolder/&amp;quot;&lt;br /&gt;
                    POST &amp;quot;PurgeFolder/&amp;quot;&lt;br /&gt;
                    POST &amp;quot;DeleteItem/&amp;quot;&lt;br /&gt;
                    POST &amp;quot;QueryItem/&amp;quot;&lt;br /&gt;
                    POST &amp;quot;QueryFolder/&amp;quot;&lt;br /&gt;
                    POST &amp;quot;CreateInventory/&amp;quot;&lt;br /&gt;
                    POST &amp;quot;NewFolder/&amp;quot;&lt;br /&gt;
                    POST &amp;quot;NewItem/&amp;quot;&lt;br /&gt;
                    POST &amp;quot;AddNewItem/&amp;quot;&lt;br /&gt;
                    POST &amp;quot;GetItems/&amp;quot;&lt;br /&gt;
                    POST &amp;quot;ActiveGestures/&amp;quot;&lt;br /&gt;
                    POST &amp;quot;RootFolders/&amp;quot;&lt;br /&gt;
=== UserServer.Modules ===&lt;br /&gt;
                REST&lt;br /&gt;
                    GET &amp;quot;/users/&amp;quot;&lt;br /&gt;
                    DELETE &amp;quot;/usersessions/&amp;quot;&lt;br /&gt;
                    GET &amp;quot;/get_grid_info&amp;quot;&lt;br /&gt;
                XMLRPC&lt;br /&gt;
                    &amp;quot;get_grid_info&amp;quot;&lt;br /&gt;
                    &amp;quot;add_new_user_friend&amp;quot;&lt;br /&gt;
                    &amp;quot;remove_user_friend&amp;quot;&lt;br /&gt;
                    &amp;quot;update_user_friend_perms&amp;quot;&lt;br /&gt;
                    &amp;quot;get_user_friend_list&amp;quot;&lt;br /&gt;
                    &amp;quot;hg_login&amp;quot;&lt;br /&gt;
                    &amp;quot;hg_new_auth_key&amp;quot;&lt;br /&gt;
                    &amp;quot;hg_verify_auth_key&amp;quot;&lt;br /&gt;
                    &amp;quot;get_user_by_name&amp;quot;&lt;br /&gt;
                    &amp;quot;get_user_by_uuid&amp;quot;&lt;br /&gt;
                    &amp;quot;get_avatar_picker_avatar&amp;quot;&lt;br /&gt;
                    &amp;quot;update_user_current_region&amp;quot;&lt;br /&gt;
                    &amp;quot;logout_of_simulator&amp;quot;&lt;br /&gt;
                    &amp;quot;get_agent_by_uuid&amp;quot;&lt;br /&gt;
                    &amp;quot;update_user_profile&amp;quot;&lt;br /&gt;
                    &amp;quot;get_avatar_appearance&amp;quot;&lt;br /&gt;
                    &amp;quot;update_avatar_appearance&amp;quot;&lt;br /&gt;
                    &amp;quot;login_to_simulator&amp;quot;&lt;br /&gt;
                    &amp;quot;set_login_params&amp;quot;&lt;br /&gt;
                    &amp;quot;check_auth_session&amp;quot;&lt;br /&gt;
=== GridServier.Modules ===&lt;br /&gt;
            Rest&lt;br /&gt;
                REST&lt;br /&gt;
                    GET &amp;quot;sims/&amp;quot;&lt;br /&gt;
                    POST &amp;quot;sims/&amp;quot;&lt;br /&gt;
                    GET &amp;quot;regions/&amp;quot;&lt;br /&gt;
                    POST &amp;quot;regions/&amp;quot;&lt;br /&gt;
            User&lt;br /&gt;
                XMLRPC&lt;br /&gt;
                    &amp;quot;simulator_login&amp;quot;&lt;br /&gt;
                    &amp;quot;simulator_data_request&amp;quot;&lt;br /&gt;
                    &amp;quot;simulator_after_region_moved&amp;quot;&lt;br /&gt;
                    &amp;quot;map_block&amp;quot;&lt;br /&gt;
                    &amp;quot;search_for_region_by_name&amp;quot;&lt;br /&gt;
                    &amp;quot;register_messageserver&amp;quot;&lt;br /&gt;
                    &amp;quot;deregister_messageserver&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Client ==&lt;br /&gt;
=== Linden ===&lt;br /&gt;
                XMLRPC&lt;br /&gt;
                    &amp;quot;expect_user&amp;quot;&lt;br /&gt;
                    &amp;quot;logoff_user&amp;quot;&lt;br /&gt;
                    &amp;quot;login_to_simulator&amp;quot;&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Known_Web_Interfaces_within_OpenSim</id>
		<title>Known Web Interfaces within OpenSim</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Known_Web_Interfaces_within_OpenSim"/>
				<updated>2009-05-08T19:59:54Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: /* InventoryServices */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OpenMetaverse =&lt;br /&gt;
        CAPS Requested&lt;br /&gt;
            &amp;quot;ChatSessionRequest&amp;quot;&lt;br /&gt;
            &amp;quot;CopyInventoryFromNotecard&amp;quot;&lt;br /&gt;
            &amp;quot;DispatchRegionInfo&amp;quot;&lt;br /&gt;
            &amp;quot;EstateChangeInfo&amp;quot;&lt;br /&gt;
            &amp;quot;EventQueueGet&amp;quot;&lt;br /&gt;
            &amp;quot;FetchInventory&amp;quot;&lt;br /&gt;
            &amp;quot;WebFetchInventoryDescendents&amp;quot;&lt;br /&gt;
            &amp;quot;FetchLib&amp;quot;&lt;br /&gt;
            &amp;quot;FetchLibDescendents&amp;quot;&lt;br /&gt;
            &amp;quot;GroupProposalBallot&amp;quot;&lt;br /&gt;
            &amp;quot;HomeLocation&amp;quot;&lt;br /&gt;
            &amp;quot;MapLayer&amp;quot;&lt;br /&gt;
            &amp;quot;MapLayerGod&amp;quot;&lt;br /&gt;
            &amp;quot;NewFileAgentInventory&amp;quot;&lt;br /&gt;
            &amp;quot;ParcelPropertiesUpdate&amp;quot;&lt;br /&gt;
            &amp;quot;ParcelVoiceInfoRequest&amp;quot;&lt;br /&gt;
            &amp;quot;ProvisionVoiceAccountRequest&amp;quot;&lt;br /&gt;
            &amp;quot;RemoteParcelRequest&amp;quot;&lt;br /&gt;
            &amp;quot;RequestTextureDownload&amp;quot;&lt;br /&gt;
            &amp;quot;SearchStatRequest&amp;quot;&lt;br /&gt;
            &amp;quot;SearchStatTracking&amp;quot;&lt;br /&gt;
            &amp;quot;SendPostcard&amp;quot;&lt;br /&gt;
            &amp;quot;SendUserReport&amp;quot;&lt;br /&gt;
            &amp;quot;SendUserReportWithScreenshot&amp;quot;&lt;br /&gt;
            &amp;quot;ServerReleaseNotes&amp;quot;&lt;br /&gt;
            &amp;quot;StartGroupProposal&amp;quot;&lt;br /&gt;
            &amp;quot;UntrustedSimulatorMessage&amp;quot;&lt;br /&gt;
            &amp;quot;UpdateAgentInformation&amp;quot;&lt;br /&gt;
            &amp;quot;UpdateAgentLanguage&amp;quot;&lt;br /&gt;
            &amp;quot;UpdateGestureAgentInventory&amp;quot;&lt;br /&gt;
            &amp;quot;UpdateNotecardAgentInventory&amp;quot;&lt;br /&gt;
            &amp;quot;UpdateScriptAgent&amp;quot;&lt;br /&gt;
            &amp;quot;UpdateGestureTaskInventory&amp;quot;&lt;br /&gt;
            &amp;quot;UpdateNotecardTaskInventory&amp;quot;&lt;br /&gt;
            &amp;quot;UpdateScriptTask&amp;quot;&lt;br /&gt;
            &amp;quot;UploadBakedTexture&amp;quot;&lt;br /&gt;
            &amp;quot;ViewerStartAuction&amp;quot;&lt;br /&gt;
            &amp;quot;ViewerStats&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= OpenSim =&lt;br /&gt;
== ApplicationPlugin ==&lt;br /&gt;
=== Rest ===&lt;br /&gt;
==== RegionPlugin ====&lt;br /&gt;
                REST&lt;br /&gt;
                    POST &amp;quot;regions/&amp;quot;&lt;br /&gt;
                    GET &amp;quot;regions/&amp;quot;&lt;br /&gt;
                    GET &amp;quot;regionsinfo/&amp;quot;&lt;br /&gt;
==== InventoryServices  ====&lt;br /&gt;
                REST&lt;br /&gt;
                    GET &amp;quot;/admin/inventory/firstname lastname&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== AppearanceServices  ====&lt;br /&gt;
                REST&lt;br /&gt;
==== AssetServices ====&lt;br /&gt;
                REST&lt;br /&gt;
&lt;br /&gt;
== Framework ==&lt;br /&gt;
=== Communications ===&lt;br /&gt;
                CAPS&lt;br /&gt;
                    &amp;quot;SEED&amp;quot; &amp;quot;CAPS/0000/&amp;quot;&lt;br /&gt;
                    &amp;quot;MapLayer&amp;quot; &amp;quot;CAPS/0001/&amp;quot;&lt;br /&gt;
                    &amp;quot;NewFileAgentInventory&amp;quot; &amp;quot;CAPS/0002/&amp;quot;&lt;br /&gt;
                    &amp;quot;RequestTextureDownload&amp;quot; &amp;quot;CAPS/0003/&amp;quot;&lt;br /&gt;
                    &amp;quot;UpdateNotecardAgentInventory&amp;quot; &amp;quot;CAPS/0004/&amp;quot;&lt;br /&gt;
                    &amp;quot;UpdateScriptAgentInventory&amp;quot; &amp;quot;CAPS/0004/&amp;quot;&lt;br /&gt;
                    &amp;quot;UpdateScriptAgent&amp;quot; &amp;quot;CAPS/0004/&amp;quot;&lt;br /&gt;
                    &amp;quot;UpdateScriptTaskInventory&amp;quot; &amp;quot;CAPS/0005/&amp;quot;&lt;br /&gt;
                    &amp;quot;UpdateScriptTask&amp;quot; &amp;quot;CAPS/0005/&amp;quot;&lt;br /&gt;
                    &amp;quot;FetchInventoryDescendents&amp;quot; &amp;quot;CAPS/0006/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Region ==&lt;br /&gt;
=== Communications ===&lt;br /&gt;
==== OGS1 ====&lt;br /&gt;
                XMLRPC&lt;br /&gt;
                    &amp;quot;check&amp;quot;&lt;br /&gt;
                    &amp;quot;land_data&amp;quot;&lt;br /&gt;
==== Hypergrid ====&lt;br /&gt;
                XMLRPC&lt;br /&gt;
                    &amp;quot;logoff_user&amp;quot;&lt;br /&gt;
                    &amp;quot;check&amp;quot;&lt;br /&gt;
                    &amp;quot;land_data&amp;quot;&lt;br /&gt;
                    &amp;quot;link_region&amp;quot;&lt;br /&gt;
                    &amp;quot;expect_hg_user&amp;quot;&lt;br /&gt;
=== CoreModules ===&lt;br /&gt;
==== World ====&lt;br /&gt;
                LLSD&lt;br /&gt;
                    &amp;quot;/MAP/MapItems/&amp;lt;RegionID&amp;gt;&amp;quot;&lt;br /&gt;
==== InterGrid ====&lt;br /&gt;
                LLSD&lt;br /&gt;
                    &amp;quot;/agent&amp;quot;        # agent domain message&lt;br /&gt;
                    &amp;quot;/&amp;quot;             # region domain seed&lt;br /&gt;
                    &amp;quot;/&amp;lt;RegionName&amp;gt;&amp;quot; # region domain seed&lt;br /&gt;
==== Avatar ====&lt;br /&gt;
                REST&lt;br /&gt;
                    POST &amp;quot;CAPS/OA/&amp;lt;ID&amp;gt;&amp;quot; # ObjectAdd&lt;br /&gt;
                XMLRPC&lt;br /&gt;
                    &amp;quot;presence_update_bulk&amp;quot;&lt;br /&gt;
                    &amp;quot;terminate_friend&amp;quot;&lt;br /&gt;
                    &amp;quot;balanceUpdateRequest&amp;quot;&lt;br /&gt;
                    &amp;quot;userAlert&amp;quot;&lt;br /&gt;
                    &amp;quot;getCurrencyQuote&amp;quot;&lt;br /&gt;
                    &amp;quot;buyCurrency&amp;quot;&lt;br /&gt;
                    &amp;quot;preflightBuyLandPrep&amp;quot;&lt;br /&gt;
                    &amp;quot;buyLandPrep&amp;quot;&lt;br /&gt;
==== Scripting ====&lt;br /&gt;
                XMLRPC&lt;br /&gt;
                &amp;quot;llRemoteData&amp;quot;&lt;br /&gt;
==== Framework ====&lt;br /&gt;
                XMLRPC&lt;br /&gt;
                    &amp;quot;simulator_data_request&amp;quot;&lt;br /&gt;
                    &amp;quot;map_block&amp;quot;&lt;br /&gt;
                    &amp;quot;search_for_region_by_name&amp;quot;&lt;br /&gt;
==== Hypergrid ====&lt;br /&gt;
                XMLRPC&lt;br /&gt;
                    &amp;quot;hg_login&amp;quot;&lt;br /&gt;
                    &amp;quot;hg_new_auth_key&amp;quot;&lt;br /&gt;
                    &amp;quot;hg_verify_auth_key&amp;quot;&lt;br /&gt;
                    &amp;quot;check_auth_session&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Grid ==&lt;br /&gt;
=== InventoryServer ===&lt;br /&gt;
                REST&lt;br /&gt;
                    POST &amp;quot;GetInventory/&amp;quot;&lt;br /&gt;
                    POST &amp;quot;UpdateFolder/&amp;quot;&lt;br /&gt;
                    POST &amp;quot;MoveFolder/&amp;quot;&lt;br /&gt;
                    POST &amp;quot;PurgeFolder/&amp;quot;&lt;br /&gt;
                    POST &amp;quot;DeleteItem/&amp;quot;&lt;br /&gt;
                    POST &amp;quot;QueryItem/&amp;quot;&lt;br /&gt;
                    POST &amp;quot;QueryFolder/&amp;quot;&lt;br /&gt;
                    POST &amp;quot;CreateInventory/&amp;quot;&lt;br /&gt;
                    POST &amp;quot;NewFolder/&amp;quot;&lt;br /&gt;
                    POST &amp;quot;NewItem/&amp;quot;&lt;br /&gt;
                    POST &amp;quot;AddNewItem/&amp;quot;&lt;br /&gt;
                    POST &amp;quot;GetItems/&amp;quot;&lt;br /&gt;
                    POST &amp;quot;ActiveGestures/&amp;quot;&lt;br /&gt;
                    POST &amp;quot;RootFolders/&amp;quot;&lt;br /&gt;
=== UserServer.Modules ===&lt;br /&gt;
                REST&lt;br /&gt;
                    GET &amp;quot;/users/&amp;quot;&lt;br /&gt;
                    DELETE &amp;quot;/usersessions/&amp;quot;&lt;br /&gt;
                    GET &amp;quot;/get_grid_info&amp;quot;&lt;br /&gt;
                XMLRPC&lt;br /&gt;
                    &amp;quot;get_grid_info&amp;quot;&lt;br /&gt;
                    &amp;quot;add_new_user_friend&amp;quot;&lt;br /&gt;
                    &amp;quot;remove_user_friend&amp;quot;&lt;br /&gt;
                    &amp;quot;update_user_friend_perms&amp;quot;&lt;br /&gt;
                    &amp;quot;get_user_friend_list&amp;quot;&lt;br /&gt;
                    &amp;quot;hg_login&amp;quot;&lt;br /&gt;
                    &amp;quot;hg_new_auth_key&amp;quot;&lt;br /&gt;
                    &amp;quot;hg_verify_auth_key&amp;quot;&lt;br /&gt;
                    &amp;quot;get_user_by_name&amp;quot;&lt;br /&gt;
                    &amp;quot;get_user_by_uuid&amp;quot;&lt;br /&gt;
                    &amp;quot;get_avatar_picker_avatar&amp;quot;&lt;br /&gt;
                    &amp;quot;update_user_current_region&amp;quot;&lt;br /&gt;
                    &amp;quot;logout_of_simulator&amp;quot;&lt;br /&gt;
                    &amp;quot;get_agent_by_uuid&amp;quot;&lt;br /&gt;
                    &amp;quot;update_user_profile&amp;quot;&lt;br /&gt;
                    &amp;quot;get_avatar_appearance&amp;quot;&lt;br /&gt;
                    &amp;quot;update_avatar_appearance&amp;quot;&lt;br /&gt;
                    &amp;quot;login_to_simulator&amp;quot;&lt;br /&gt;
                    &amp;quot;set_login_params&amp;quot;&lt;br /&gt;
                    &amp;quot;check_auth_session&amp;quot;&lt;br /&gt;
=== GridServier.Modules ===&lt;br /&gt;
            Rest&lt;br /&gt;
                REST&lt;br /&gt;
                    GET &amp;quot;sims/&amp;quot;&lt;br /&gt;
                    POST &amp;quot;sims/&amp;quot;&lt;br /&gt;
                    GET &amp;quot;regions/&amp;quot;&lt;br /&gt;
                    POST &amp;quot;regions/&amp;quot;&lt;br /&gt;
            User&lt;br /&gt;
                XMLRPC&lt;br /&gt;
                    &amp;quot;simulator_login&amp;quot;&lt;br /&gt;
                    &amp;quot;simulator_data_request&amp;quot;&lt;br /&gt;
                    &amp;quot;simulator_after_region_moved&amp;quot;&lt;br /&gt;
                    &amp;quot;map_block&amp;quot;&lt;br /&gt;
                    &amp;quot;search_for_region_by_name&amp;quot;&lt;br /&gt;
                    &amp;quot;register_messageserver&amp;quot;&lt;br /&gt;
                    &amp;quot;deregister_messageserver&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Client ==&lt;br /&gt;
=== Linden ===&lt;br /&gt;
                XMLRPC&lt;br /&gt;
                    &amp;quot;expect_user&amp;quot;&lt;br /&gt;
                    &amp;quot;logoff_user&amp;quot;&lt;br /&gt;
                    &amp;quot;login_to_simulator&amp;quot;&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/User:Thomax</id>
		<title>User:Thomax</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:Thomax"/>
				<updated>2009-05-08T14:39:15Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: Undo revision 12115 by Thomax (Talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Use the XML-RPC RemoteAdmin interface with perl: [[Users:Thomax:perl-xmlrpc | Snippet]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
shortcuts:&lt;br /&gt;
&lt;br /&gt;
* [ http://opensimulator.org/mantis/my_view_page.php mantis ]&lt;br /&gt;
* [ http://opensimulator.org/cgi-bin/viewvc.cgi/ browse source ]&lt;br /&gt;
* [ http://panda.opensimulator.org/ recent builds history ]&lt;br /&gt;
* [ http://forge.opensimulator.org/gf/project/ forge projects ]&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/User:Thomax</id>
		<title>User:Thomax</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:Thomax"/>
				<updated>2009-05-08T14:35:59Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Use the XML-RPC RemoteAdmin interface with perl: [[Users:Thomax:perl-xmlrpc | Snippet]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
shortcuts:&lt;br /&gt;
&lt;br /&gt;
* [[ mantis | http://opensimulator.org/mantis/my_view_page.php ]]&lt;br /&gt;
* [[ browse source | http://opensimulator.org/cgi-bin/viewvc.cgi/ ]]&lt;br /&gt;
* [[ recent builds history | http://panda.opensimulator.org/ ]]&lt;br /&gt;
* [[ forge projects | http://forge.opensimulator.org/gf/project/ ]]&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/User:Thomax</id>
		<title>User:Thomax</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:Thomax"/>
				<updated>2009-05-08T10:28:00Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Use the XML-RPC RemoteAdmin interface with perl: [[Users:Thomax:perl-xmlrpc | Snippet]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
shortcuts:&lt;br /&gt;
&lt;br /&gt;
* [[ http://opensimulator.org/mantis/my_view_page.php | mantis ]]&lt;br /&gt;
* [[ http://opensimulator.org/cgi-bin/viewvc.cgi/ | browse source ]]&lt;br /&gt;
* [[ http://panda.opensimulator.org/ | recent builds history ]]&lt;br /&gt;
* [[ http://forge.opensimulator.org/gf/project/ | forge projects ]]&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/User:Thomax</id>
		<title>User:Thomax</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:Thomax"/>
				<updated>2009-05-08T10:25:21Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Use the XML-RPC RemoteAdmin interface with perl: [[Users:Thomax:perl-xmlrpc | Snippet]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
shortcuts:&lt;br /&gt;
&lt;br /&gt;
* [[ http://opensimulator.org/mantis/my_view_page.php | mantis ]]&lt;br /&gt;
* [[ http://opensimulator.org/cgi-bin/viewvc.cgi/ | browse source ]]&lt;br /&gt;
* [[ http://panda.opensimulator.org/ | recent builds history ]]&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/User:Thomax</id>
		<title>User:Thomax</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:Thomax"/>
				<updated>2009-05-08T10:24:36Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Use the XML-RPC RemoteAdmin interface with perl: [[Users:Thomax:perl-xmlrpc | Snippet]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
shortcuts:&lt;br /&gt;
&lt;br /&gt;
* [[ http://opensimulator.org/cgi-bin/viewvc.cgi/ | browse source ]]&lt;br /&gt;
* [[ http://panda.opensimulator.org/ | recent builds history ]]&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/User:Thomax</id>
		<title>User:Thomax</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:Thomax"/>
				<updated>2009-05-08T10:23:23Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Use the XML-RPC RemoteAdmin interface with perl: [[Users:Thomax:perl-xmlrpc | Snippet]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
shortcuts:&lt;br /&gt;
&lt;br /&gt;
[[ http://opensimulator.org/cgi-bin/viewvc.cgi/ | browse source ]]&lt;br /&gt;
[[ http://panda.opensimulator.org/ || recent builds history ]]&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OSSL</id>
		<title>OSSL</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OSSL"/>
				<updated>2009-05-04T16:50:29Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is currently written up in one of justincc's [http://justincc.wordpress.com/2008/10/24/opensim-scripting-languages-lsl-and-ossl blog posts].  Some of that information should be transferred to here&lt;br /&gt;
&lt;br /&gt;
Read whats [[ OSSL_Implemented | implemented ]].&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/RemoteAdmin</id>
		<title>RemoteAdmin</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/RemoteAdmin"/>
				<updated>2009-05-03T12:03:52Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;background-color:#ffa0a0; padding:15px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Caution ! The RemoteAdmin feature is unsecured at this time. For testing uses only.&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to Setup the Remote Admin ==&lt;br /&gt;
&lt;br /&gt;
=== Setup OpenSim === &lt;br /&gt;
&lt;br /&gt;
First you should enable the remote admin interface to do so just add the following lines to your OpenSim.ini file:&lt;br /&gt;
&lt;br /&gt;
 [RemoteAdmin]&lt;br /&gt;
 enabled = true&lt;br /&gt;
 access_password = secret&lt;br /&gt;
&lt;br /&gt;
=== Example in Python ===&lt;br /&gt;
 # Author  : DrScofield &lt;br /&gt;
 # Source  : http://xyzzyxyzzy.net/2008/01/23/using-pythons-xmlrpclib-with-opensim/&lt;br /&gt;
 # License : BSD License&lt;br /&gt;
 &lt;br /&gt;
 #!/usr/bin/python  &lt;br /&gt;
 import xmlrpclib  &lt;br /&gt;
   &lt;br /&gt;
 # XML-RPC URL (http_listener_port)  &lt;br /&gt;
 gridServerURL = ‘http://127.0.0.1:9000′  &lt;br /&gt;
    &lt;br /&gt;
 # instantiate server object  &lt;br /&gt;
 gridServer = xmlrpclib.Server(gridServerURL)  &lt;br /&gt;
   &lt;br /&gt;
 # invoke admin_alert: requires password and message  &lt;br /&gt;
 gridServer.admin_broadcast({’password’: ’secret’,   ‘message’: ‘the answer is 42′})&lt;br /&gt;
&lt;br /&gt;
=== RemoteAdmin executable for Windows ===&lt;br /&gt;
&lt;br /&gt;
The RemoteAdmin executable for Windows is a command line tool based on the RemoteAdmin PHP Class.&lt;br /&gt;
&lt;br /&gt;
Downloads and documentation on the [http://lab.newworldgrid.com/index.php/RemoteAdmin_Executable RemoteAdmin Executable webpage]&lt;br /&gt;
&lt;br /&gt;
=== Example in PHP ===&lt;br /&gt;
&lt;br /&gt;
This example needs the RemoteAdmin PHP Class file available [http://code.google.com/p/opensimtools/wiki/RemoteAdminPHPClass here].&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
// Author  : Olish Newman&lt;br /&gt;
// Source  : http://code.google.com/p/opensimtools/wiki/RemoteAdminPHPClass&lt;br /&gt;
// Licence : BSD License&lt;br /&gt;
&lt;br /&gt;
// Including the RemoteAdmin PHP class. It can be downloaded from the link above.&lt;br /&gt;
include('RemoteAdmin.php');&lt;br /&gt;
&lt;br /&gt;
// Instantiate the class with parameters identical to the Python example above&lt;br /&gt;
$myRemoteAdmin = new RemoteAdmin('127.0.0.1', 9000, 'secret');&lt;br /&gt;
&lt;br /&gt;
// Invoke admin_broadcast&lt;br /&gt;
$parameters = array('message' =&amp;gt; 'the answer is 42');&lt;br /&gt;
$myRemoteAdmin-&amp;gt;SendCommand('admin_broadcast', $parameters);&lt;br /&gt;
&lt;br /&gt;
// Invoke admin_shutdown (example for use without parameters)&lt;br /&gt;
$myRemoteAdmin-&amp;gt;SendCommand('admin_shutdown');&lt;br /&gt;
&lt;br /&gt;
// Invoke admin_create_user (multiple parameters)&lt;br /&gt;
$parameters = array('user_firstname' =&amp;gt; 'Ruth', 'user_lastname' =&amp;gt; 'OpenSim', 'user_password' =&amp;gt; 'MyPassword', 'start_region_x' =&amp;gt; '1000', 'start_region_y' =&amp;gt; '1000');&lt;br /&gt;
$myRemoteAdmin-&amp;gt;SendCommand('admin_create_user', $parameters);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: This script does not appear to work for create user because it tries to pass the start region x and y as a string when the RemoteAdmin needs a string.  The class needs to be edited to pass it as a number or edit the remoteadmin source to convert the string to a unsigned int.&lt;br /&gt;
&lt;br /&gt;
Another example in PHP5, using CURL.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
//This is the slightly modified RPC-class of the BSD-licensed WiXTD webportal&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class RemotePC {&lt;br /&gt;
&lt;br /&gt;
	function __construct() {&lt;br /&gt;
        $this-&amp;gt;serveruri = &amp;quot;http://myhost&amp;quot;;&lt;br /&gt;
        $this-&amp;gt;serverport =&amp;quot;9000&amp;quot;;&lt;br /&gt;
        $this-&amp;gt;password =&amp;quot;foobar&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	function call($command,$parameters) {&lt;br /&gt;
        $parameters['password'] = $this-&amp;gt;password;&lt;br /&gt;
	$request = xmlrpc_encode_request($command, $parameters);&lt;br /&gt;
	$ch = curl_init();&lt;br /&gt;
	curl_setopt( $ch, CURLOPT_URL, $this-&amp;gt;serveruri);&lt;br /&gt;
	curl_setopt( $ch, CURLOPT_PORT, $this-&amp;gt;serverport]);	&lt;br /&gt;
	curl_setopt($ch, CURLOPT_POST, 1);&lt;br /&gt;
	curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1);&lt;br /&gt;
	curl_setopt ( $ch, CURLOPT_POSTFIELDS, $request);&lt;br /&gt;
	curl_setopt ( $ch, CURLOPT_TIMEOUT, 5);	&lt;br /&gt;
	$result = curl_exec($ch);&lt;br /&gt;
	curl_close($ch); &lt;br /&gt;
	return xmlrpc_decode($result);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example in Perl ===&lt;br /&gt;
&lt;br /&gt;
Because the OpenSim internal web server just accepts HTTP/1.0 requests, it's worth to give a perl example. It's not a daily thing to do HTTP/1.0 within the LWP environment. You can get the '''[[Users:Thomax:perl-xmlrpc | Perl example here]]'''.&lt;br /&gt;
&lt;br /&gt;
== RemoteAdmin Commands ==&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
   &amp;lt;th&amp;gt;Status&amp;lt;/th&amp;gt;&lt;br /&gt;
   &amp;lt;th&amp;gt;Description&amp;lt;/th&amp;gt; &lt;br /&gt;
   &amp;lt;th&amp;gt;Parameters&amp;lt;/th&amp;gt;  &lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;[[remoteadmin:admin_create_region | admin_create_region]]&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;Create a new region&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;region_name, region_master_first, &lt;br /&gt;
region_master_last, region_master_password, listen_ip, external_address&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;[[remoteadmin:admin_delete_region | admin_delete_region]]&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;Delete a region&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_region_query| admin_region_query]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Query the 'health' of a region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_shutdown | admin_shutdown]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Shut down the simulator&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;''No parameter needed''&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_broadcast| admin_broadcast]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Send a general alert&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;message&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_restart| admin_restart]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Restart Region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;regionid&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_load_heightmap| admin_load_heightmap]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Load Height Map&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, regionid&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_create_user| admin_create_user]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Create a new user&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname, user_lastname, user_password, &lt;br /&gt;
start_region_x, start_region_y&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_exists_user| admin_exists_user]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Check whether a certain user account exists&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname, user_lastname&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_update_user| admin_update_user]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Update the password/home of a user account&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname user_lastname user_password start_region_x start_region_y&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_load_xml| admin_load_xml]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Execute the Load XML command&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename region_uuid (or region_name)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_save_xml| admin_save_xml]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Execute the Save XML command&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename region_uuid (or region_name)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_load_oar| admin_load_oar]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Load a saved OAR file into a region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename region_uuid (or region_name)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_region_query| admin_region_query]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Query the 'health' of a region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
Thanks to DrScofield for the Python Script&lt;br /&gt;
Sources : http://xyzzyxyzzy.net/2008/01/23/using-pythons-xmlrpclib-with-opensim/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/User:Thomax:perl-xmlrpc</id>
		<title>User:Thomax:perl-xmlrpc</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:Thomax:perl-xmlrpc"/>
				<updated>2009-05-03T11:53:52Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    # because the opensim http server just accept old HTTP/1.0 protocol!!!&lt;br /&gt;
    $ENV{PERL_LWP_USE_HTTP_10} ||= 1;  # default to http/1.0&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use RPC::XML::Client;&lt;br /&gt;
&lt;br /&gt;
my $client = new RPC::XML::Client('http://localhost:9000');&lt;br /&gt;
my $req = RPC::XML::request-&amp;gt;new(&lt;br /&gt;
            'admin_broadcast',&lt;br /&gt;
            {&lt;br /&gt;
                password =&amp;gt; 'secret',&lt;br /&gt;
                message =&amp;gt; '2 + 3 = 23'&lt;br /&gt;
            }&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
my $res = $client-&amp;gt;send_request($req);&lt;br /&gt;
my %val = %$res;&lt;br /&gt;
my $key;&lt;br /&gt;
&lt;br /&gt;
foreach $key (keys %val) {&lt;br /&gt;
    print &amp;quot;$key --&amp;gt; &amp;quot;. $val{$key}-&amp;gt;as_string .&amp;quot;\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/User:Thomax:perl-xmlrpc</id>
		<title>User:Thomax:perl-xmlrpc</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:Thomax:perl-xmlrpc"/>
				<updated>2009-05-03T11:51:39Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: New page: &amp;lt;code&amp;gt; #!/usr/bin/perl  BEGIN {     # because the opensim http server just accept old HTTP/1.0 protocol!!!     $ENV{PERL_LWP_USE_HTTP_10} ||= 1;  # default to http/1.0 }  use RPC::XML::Cli...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    # because the opensim http server just accept old HTTP/1.0 protocol!!!&lt;br /&gt;
    $ENV{PERL_LWP_USE_HTTP_10} ||= 1;  # default to http/1.0&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use RPC::XML::Client;&lt;br /&gt;
&lt;br /&gt;
my $client = new RPC::XML::Client('http://localhost:9000');&lt;br /&gt;
my $req = RPC::XML::request-&amp;gt;new(&lt;br /&gt;
            'admin_broadcast',&lt;br /&gt;
            {&lt;br /&gt;
                password =&amp;gt; 'secret',&lt;br /&gt;
                message =&amp;gt; '2 + 3 = 23'&lt;br /&gt;
            }&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
my $res = $client-&amp;gt;send_request($req);&lt;br /&gt;
my %val = %$res;&lt;br /&gt;
my $key;&lt;br /&gt;
&lt;br /&gt;
foreach $key (keys %val) {&lt;br /&gt;
    print &amp;quot;$key --&amp;gt; &amp;quot;. $val{$key}-&amp;gt;as_string .&amp;quot;\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/User:Thomax</id>
		<title>User:Thomax</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:Thomax"/>
				<updated>2009-05-03T11:46:35Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Use the XML-RPC RemoteAdmin interface with perl: [[Users:Thomax:perl-xmlrpc | Snippet]]&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/User:Thomax</id>
		<title>User:Thomax</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:Thomax"/>
				<updated>2009-05-03T11:45:16Z</updated>
		
		<summary type="html">&lt;p&gt;Thomax: New page: Use the XML-RPC RemoteAdmin interface with perl: Users:Thomax:perl-xmlrpc&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Use the XML-RPC RemoteAdmin interface with perl: [[Users:Thomax:perl-xmlrpc]]&lt;/div&gt;</summary>
		<author><name>Thomax</name></author>	</entry>

	</feed>