SimulatorLoginProtocol
From OpenSimulator
(This page is a work in progress)
Contents |
Process
There are 4 basic steps to the viewer login process.
Step 1
The viewer contacts the grid login service. On a viewer, this can be specified by the -loginuri command line switch or by picking a grid in the grid manager of a viewer that provides this.
The viewer sends an XMLRPC login_to_simulator message to the loginuri. This provides
- "first" - User first name
- "last" - User last name
- "passwd" - Hashed password
- "version" - Viewer version
- "start" - Start location. If "home" then the user's home location, "last" is the user's location on previous logout. Start can also be a SLURL (todo: document the format of this).
Step 2
If the user is authenticated, the simulator at which they want to start is contacted and told that they are coming. It is passed a circuit code for that viewer.
Step 3
If the simulator will accept the user, then the user is passed the details of this simulator (chiefly the URI to use, as well as the circuit code).
Step 4
The viewer connects directly to the simulator and is authenticated using the circuit code.
Details
The simulator exposes an XML-RPC method called login_to_simulator at the loginuri URL. This takes a number of parameters from the viewer. Here's an example call.
<?xml version="1.0"?> <methodCall> <methodName>login_to_simulator</methodName> <params> <param> <value> <struct> <member> <name>first</name> <value> <string>Justin</string> </value> </member> <member> <name>last</name> <value> <string>Clark-Casey</string> </value> </member> <member> <name>passwd</name> <value> <string>$1$7c53d3d3f9d6f353a0f78cd5c2bfd772</string> </value> </member> <member> <name>start</name> <value> <string>last</string> </value> </member> <member> <name>version</name> <value> <string>1.8.5.5617</string> </value> </member> <member> <name>channel</name> <value> <string>Singularity Release 64</string> </value> </member> <member> <name>platform</name> <value> <string>Win</string> </value> </member> <member> <name>mac</name> <value> <string>fcec27eea5713b37d492bfa1c54d0fdf</string> </value> </member> <member> <name>id0</name> <value> <string>dda45b4a650be300c0c9746c6d70e57a</string> </value> </member> <member> <name>skipoptional</name> <value> <string>true</string> </value> </member> <member> <name>last_exec_event</name> <value> <int>0</int> </value> </member> <member> <name>options</name> <value> <array> <data> <value> <string>inventory-root</string> </value> <value> <string>inventory-skeleton</string> </value> <value> <string>inventory-lib-root</string> </value> <value> <string>inventory-lib-owner</string> </value> <value> <string>inventory-skel-lib</string> </value> <value> <string>initial-outfit</string> </value> <value> <string>gestures</string> </value> <value> <string>event_categories</string> </value> <value> <string>event_notifications</string> </value> <value> <string>classified_categories</string> </value> <value> <string>adult_compliant</string> </value> <value> <string>buddy-list</string> </value> <value> <string>ui-config</string> </value> <value> <string>max_groups</string> </value> <value> <string>max-agent-groups</string> </value> <value> <string>map-server-url</string> </value> <value> <string>tutorial_setting</string> </value> <value> <string>login-flags</string> </value> <value> <string>global-textures</string> </value> </data> </array> </value> </member> </struct> </value> </param> </params> </methodCall>
Code
The parts of OpenSimulator that handle steps 1 and 2 can be found in OpenSim.Services.LLLoginService package.
References
http://justincc.org/blog/2011/05/26/opensimulators-login-process-and-common-login-problems/ provides some diagrams that illustrate the login process.