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 named region and location (see data section below for more information on 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$f7583d0d-5b61-4729-91d0-6dd9a8bfc923</string> </value> </member> <member> <name>start</name> <value> <string>uri:test&128&128&0</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>
The parameters are as follows
- first - First name of the user.
- last - Last name of the user.
- passwd - MD5 hash of the user's password with the string "$1$" prepended.
- start - The region in which the user should start upon login. This is one of
- "home" - start in the user's home location.
- "last" - start in the location from which the user last logged out.
- A specific location. This is in the format "uri:<region-name>&<x-coord>&<y-coord>&<z-coord>". For instance, the string "uri:test&128&128&0" above signals that the user should login to the center of the region named test (the avatar is placed on the ground if given a z-coordinate below terrain).
- version - Version number of the viewer/client connecting.
- channel - Name of the viewer/client connecting.
- platform - Probably the platform of the client/viewer. Currently ignored by OpenSimulator. This is probably not particularly important anyway - Singularity 1.8.5.5617, for instance, has this set to "Win" even on the Linux platform.
- mac - MAC address of the network card used by the client/viewer to make the connection.
- id0 - A GUID. Function unknown. Currently unused by OpenSimulator.
- skipoptional - A boolean. Function unknown. Currently unused by OpenSimulator.
- last_exec_event - An integer. Function unknown. Currently unused by OpenSimulator.
- options - A list of strings. Function unknown, though probably used in many cases to control the data sent back by the login service. Currently unused by OpenSimulator which just sends back all data every time.
Here's an example response to the example call above.
<?xml version="1.0" encoding="utf-8"?> <methodResponse> <params> <param> <value> <struct> <member> <name>home</name> <value> <string>{'region_handle':[r256000,r256000], 'position':[r50,r100,r200], 'look_at':[r1,r0,r0]}</string> </value> </member> <member> <name>look_at</name> <value> <string>[r0.171732,r0.9851437,r0]</string> </value> </member> <member> <name>agent_access_max</name> <value> <string>A</string> </value> </member> <member> <name>seed_capability</name> <value> <string>http://192.168.1.2:9000/CAPS/da4b15ea-1d97-4140-afe3-2dd1ce5560710000/</string> </value> </member> <member> <name>region_x</name> <value> <i4>256000</i4> </value> </member> <member> <name>region_y</name> <value> <i4>256000</i4> </value> </member> <member> <name>circuit_code</name> <value> <i4>697482820</i4> </value> </member> <member> <name>inventory-root</name> <value> <array> <data> <value> <struct> <member> <name>folder_id</name> <value> <string>37c4cfe3-ea39-4ef7-bda3-bee73bd46d95</string> </value> </member> </struct> </value> </data> </array> </value> </member> <member> <name>login-flags</name> <value> <array> <data> <value> <struct> <member> <name>stipend_since_login</name> <value> <string>N</string> </value> </member> <member> <name>ever_logged_in</name> <value> <string>Y</string> </value> </member> <member> <name>daylight_savings</name> <value> <string>Y</string> </value> </member> <member> <name>gendered</name> <value> <string>Y</string> </value> </member> </struct> </value> </data> </array> </value> </member> <member> <name>message</name> <value> <string>Welcome, Avatar!</string> </value> </member> <member> <name>inventory-lib-root</name> <value> <array> <data> <value> <struct> <member> <name>folder_id</name> <value> <string>00000112-000f-0000-0000-000100bba000</string> </value> </member> </struct> </value> </data> </array> </value> </member> <member> <name>first_name</name> <value> <string>Justin</string> </value> </member> <member> <name>ui-config</name> <value> <array> <data> <value> <struct> <member> <name>allow_first_life</name> <value> <string>Y</string> </value> </member> </struct> </value> </data> </array> </value> </member> <member> <name>event_categories</name> <value> <array> <data/> </array> </value> </member> <member> <name>classified_categories</name> <value> <array> <data> <value> <struct> <member> <name>category_name</name> <value> <string>Shopping</string> </value> </member> <member> <name>category_id</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>category_name</name> <value> <string>Land Rental</string> </value> </member> <member> <name>category_id</name> <value> <i4>2</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>category_name</name> <value> <string>Property Rental</string> </value> </member> <member> <name>category_id</name> <value> <i4>3</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>category_name</name> <value> <string>Special Attraction</string> </value> </member> <member> <name>category_id</name> <value> <i4>4</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>category_name</name> <value> <string>New Products</string> </value> </member> <member> <name>category_id</name> <value> <i4>5</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>category_name</name> <value> <string>Employment</string> </value> </member> <member> <name>category_id</name> <value> <i4>6</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>category_name</name> <value> <string>Wanted</string> </value> </member> <member> <name>category_id</name> <value> <i4>7</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>category_name</name> <value> <string>Service</string> </value> </member> <member> <name>category_id</name> <value> <i4>8</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>category_name</name> <value> <string>Personal</string> </value> </member> <member> <name>category_id</name> <value> <i4>9</i4> </value> </member> </struct> </value> </data> </array> </value> </member> <member> <name>seconds_since_epoch</name> <value> <i4>1411075065</i4> </value> </member> <member> <name>inventory-skeleton</name> <value> <array> <data> <value> <struct> <member> <name>folder_id</name> <value> <string>004d663b-9980-46ae-8559-bb60e9d67d28</string> </value> </member> <member> <name>parent_id</name> <value> <string>5cb09cb9-5080-4bf4-8ba0-86b6197fcc74</string> </value> </member> <member> <name>name</name> <value> <string>Camera Test</string> </value> </member> <member> <name>type_default</name> <value> <i4>-1</i4> </value> </member> <member> <name>version</name> <value> <i4>2</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>011a8b68-b4d9-47ea-b023-c519b1db8946</string> </value> </member> <member> <name>parent_id</name> <value> <string>82d978e0-8892-4be1-a1f2-10dce0091021</string> </value> </member> <member> <name>name</name> <value> <string>Current Outfit</string> </value> </member> <member> <name>type_default</name> <value> <i4>46</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>046b1797-5552-4375-93d9-50849bca87dd</string> </value> </member> <member> <name>parent_id</name> <value> <string>37c4cfe3-ea39-4ef7-bda3-bee73bd46d95</string> </value> </member> <member> <name>name</name> <value> <string>Animations</string> </value> </member> <member> <name>type_default</name> <value> <i4>20</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>06753608-f89c-c20b-0244-e99fe6c09c5b</string> </value> </member> <member> <name>parent_id</name> <value> <string>25861b47-97db-ed70-86b7-ad4aa5bcc16a</string> </value> </member> <member> <name>name</name> <value> <string>All</string> </value> </member> <member> <name>type_default</name> <value> <i4>2</i4> </value> </member> <member> <name>version</name> <value> <i4>2</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>12a57fa9-d1a1-45eb-accb-5b4861dfaa0d</string> </value> </member> <member> <name>parent_id</name> <value> <string>82d978e0-8892-4be1-a1f2-10dce0091021</string> </value> </member> <member> <name>name</name> <value> <string>Notecards</string> </value> </member> <member> <name>type_default</name> <value> <i4>7</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>21ad8f1f-d6f8-480e-8b58-d5cf4d2b3fc2</string> </value> </member> <member> <name>parent_id</name> <value> <string>37c4cfe3-ea39-4ef7-bda3-bee73bd46d95</string> </value> </member> <member> <name>name</name> <value> <string>Lost And Found</string> </value> </member> <member> <name>type_default</name> <value> <i4>16</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>25861b47-97db-ed70-86b7-ad4aa5bcc16a</string> </value> </member> <member> <name>parent_id</name> <value> <string>f2821449-9d7d-4bc4-adb1-7058dac1c63f</string> </value> </member> <member> <name>name</name> <value> <string>Friends</string> </value> </member> <member> <name>type_default</name> <value> <i4>2</i4> </value> </member> <member> <name>version</name> <value> <i4>2</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>2a0516f8-937f-462d-92c7-6662543ba515</string> </value> </member> <member> <name>parent_id</name> <value> <string>82d978e0-8892-4be1-a1f2-10dce0091021</string> </value> </member> <member> <name>name</name> <value> <string>Textures</string> </value> </member> <member> <name>type_default</name> <value> <i4>0</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>2d186de7-ba32-5087-217e-d0cc39e9938c</string> </value> </member> <member> <name>parent_id</name> <value> <string>37c4cfe3-ea39-4ef7-bda3-bee73bd46d95</string> </value> </member> <member> <name>name</name> <value> <string>Current Outfit</string> </value> </member> <member> <name>type_default</name> <value> <i4>46</i4> </value> </member> <member> <name>version</name> <value> <i4>49</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>2f28be55-5d23-56b3-f098-978c376f4755</string> </value> </member> <member> <name>parent_id</name> <value> <string>fd5bad85-ac24-f5c5-6c52-04dee026faeb</string> </value> </member> <member> <name>name</name> <value> <string>#AO</string> </value> </member> <member> <name>type_default</name> <value> <i4>-1</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>37c4cfe3-ea39-4ef7-bda3-bee73bd46d95</string> </value> </member> <member> <name>parent_id</name> <value> <string>00000000-0000-0000-0000-000000000000</string> </value> </member> <member> <name>name</name> <value> <string>My Inventory</string> </value> </member> <member> <name>type_default</name> <value> <i4>9</i4> </value> </member> <member> <name>version</name> <value> <i4>19</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>3fed208b-122a-42de-b22d-b536c741ce8e</string> </value> </member> <member> <name>parent_id</name> <value> <string>37c4cfe3-ea39-4ef7-bda3-bee73bd46d95</string> </value> </member> <member> <name>name</name> <value> <string>Notecards</string> </value> </member> <member> <name>type_default</name> <value> <i4>7</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>5cb09cb9-5080-4bf4-8ba0-86b6197fcc74</string> </value> </member> <member> <name>parent_id</name> <value> <string>37c4cfe3-ea39-4ef7-bda3-bee73bd46d95</string> </value> </member> <member> <name>name</name> <value> <string>Objects</string> </value> </member> <member> <name>type_default</name> <value> <i4>6</i4> </value> </member> <member> <name>version</name> <value> <i4>47</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>5fefc6a1-406a-401c-b086-b01febd33818</string> </value> </member> <member> <name>parent_id</name> <value> <string>37c4cfe3-ea39-4ef7-bda3-bee73bd46d95</string> </value> </member> <member> <name>name</name> <value> <string>Textures</string> </value> </member> <member> <name>type_default</name> <value> <i4>0</i4> </value> </member> <member> <name>version</name> <value> <i4>2</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>603a7df0-e1b7-4985-9a59-c5ddadbd3843</string> </value> </member> <member> <name>parent_id</name> <value> <string>82d978e0-8892-4be1-a1f2-10dce0091021</string> </value> </member> <member> <name>name</name> <value> <string>Calling Cards</string> </value> </member> <member> <name>type_default</name> <value> <i4>2</i4> </value> </member> <member> <name>version</name> <value> <i4>2</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>64d429e0-1436-45e5-9fcf-8eab3a0c9b79</string> </value> </member> <member> <name>parent_id</name> <value> <string>82d978e0-8892-4be1-a1f2-10dce0091021</string> </value> </member> <member> <name>name</name> <value> <string>Objects</string> </value> </member> <member> <name>type_default</name> <value> <i4>6</i4> </value> </member> <member> <name>version</name> <value> <i4>3</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>66903e66-bb68-4949-8051-887e84161ee9</string> </value> </member> <member> <name>parent_id</name> <value> <string>82d978e0-8892-4be1-a1f2-10dce0091021</string> </value> </member> <member> <name>name</name> <value> <string>Favorites</string> </value> </member> <member> <name>type_default</name> <value> <i4>23</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>784dbfcd-74fa-4985-ae00-260dea2d40bb</string> </value> </member> <member> <name>parent_id</name> <value> <string>37c4cfe3-ea39-4ef7-bda3-bee73bd46d95</string> </value> </member> <member> <name>name</name> <value> <string>Clothing</string> </value> </member> <member> <name>type_default</name> <value> <i4>5</i4> </value> </member> <member> <name>version</name> <value> <i4>3</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>7d044355-fa12-4467-b8d3-5ae1303eb7e6</string> </value> </member> <member> <name>parent_id</name> <value> <string>82d978e0-8892-4be1-a1f2-10dce0091021</string> </value> </member> <member> <name>name</name> <value> <string>Gestures</string> </value> </member> <member> <name>type_default</name> <value> <i4>21</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>7ff30412-fcdd-443d-816c-fab3d3ad30fa</string> </value> </member> <member> <name>parent_id</name> <value> <string>82d978e0-8892-4be1-a1f2-10dce0091021</string> </value> </member> <member> <name>name</name> <value> <string>Lost And Found</string> </value> </member> <member> <name>type_default</name> <value> <i4>16</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>82d978e0-8892-4be1-a1f2-10dce0091021</string> </value> </member> <member> <name>parent_id</name> <value> <string>37c4cfe3-ea39-4ef7-bda3-bee73bd46d95</string> </value> </member> <member> <name>name</name> <value> <string>My Suitcase</string> </value> </member> <member> <name>type_default</name> <value> <i4>8</i4> </value> </member> <member> <name>version</name> <value> <i4>17</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>850fdfee-8a46-db99-578d-644953d4314a</string> </value> </member> <member> <name>parent_id</name> <value> <string>37c4cfe3-ea39-4ef7-bda3-bee73bd46d95</string> </value> </member> <member> <name>name</name> <value> <string>Favorites</string> </value> </member> <member> <name>type_default</name> <value> <i4>23</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>8c4a959f-1eca-41dc-baab-99410f7f882e</string> </value> </member> <member> <name>parent_id</name> <value> <string>37c4cfe3-ea39-4ef7-bda3-bee73bd46d95</string> </value> </member> <member> <name>name</name> <value> <string>Trash</string> </value> </member> <member> <name>type_default</name> <value> <i4>14</i4> </value> </member> <member> <name>version</name> <value> <i4>63</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>97cc95a1-c461-49d4-92b4-697ff6df8ca7</string> </value> </member> <member> <name>parent_id</name> <value> <string>37c4cfe3-ea39-4ef7-bda3-bee73bd46d95</string> </value> </member> <member> <name>name</name> <value> <string>Scripts</string> </value> </member> <member> <name>type_default</name> <value> <i4>10</i4> </value> </member> <member> <name>version</name> <value> <i4>10</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>a37421eb-0fd4-46c0-b563-38e79975fa97</string> </value> </member> <member> <name>parent_id</name> <value> <string>82d978e0-8892-4be1-a1f2-10dce0091021</string> </value> </member> <member> <name>name</name> <value> <string>Landmarks</string> </value> </member> <member> <name>type_default</name> <value> <i4>3</i4> </value> </member> <member> <name>version</name> <value> <i4>4</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>a4fc58a0-5bec-417a-84a8-e192dc20457c</string> </value> </member> <member> <name>parent_id</name> <value> <string>82d978e0-8892-4be1-a1f2-10dce0091021</string> </value> </member> <member> <name>name</name> <value> <string>Trash</string> </value> </member> <member> <name>type_default</name> <value> <i4>14</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>c7084808-79fe-4f74-82c9-8d6cd1f172ab</string> </value> </member> <member> <name>parent_id</name> <value> <string>37c4cfe3-ea39-4ef7-bda3-bee73bd46d95</string> </value> </member> <member> <name>name</name> <value> <string>Body Parts</string> </value> </member> <member> <name>type_default</name> <value> <i4>13</i4> </value> </member> <member> <name>version</name> <value> <i4>33</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>ce71217a-67cf-4f0f-980a-c0ea47b19896</string> </value> </member> <member> <name>parent_id</name> <value> <string>82d978e0-8892-4be1-a1f2-10dce0091021</string> </value> </member> <member> <name>name</name> <value> <string>Body Parts</string> </value> </member> <member> <name>type_default</name> <value> <i4>13</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>cebd40c2-6543-4ff3-b1f8-c478409820dc</string> </value> </member> <member> <name>parent_id</name> <value> <string>37c4cfe3-ea39-4ef7-bda3-bee73bd46d95</string> </value> </member> <member> <name>name</name> <value> <string>Sounds</string> </value> </member> <member> <name>type_default</name> <value> <i4>1</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>cff574b0-e7fb-4f07-81f2-745afb9b2a79</string> </value> </member> <member> <name>parent_id</name> <value> <string>37c4cfe3-ea39-4ef7-bda3-bee73bd46d95</string> </value> </member> <member> <name>name</name> <value> <string>Landmarks</string> </value> </member> <member> <name>type_default</name> <value> <i4>3</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>d97674ab-3acc-4b2c-9cc8-c193332a1167</string> </value> </member> <member> <name>parent_id</name> <value> <string>82d978e0-8892-4be1-a1f2-10dce0091021</string> </value> </member> <member> <name>name</name> <value> <string>Clothing</string> </value> </member> <member> <name>type_default</name> <value> <i4>5</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>dd0d5bda-1a68-48ed-a8e5-fdd59618758c</string> </value> </member> <member> <name>parent_id</name> <value> <string>5cb09cb9-5080-4bf4-8ba0-86b6197fcc74</string> </value> </member> <member> <name>name</name> <value> <string>Alien 1b</string> </value> </member> <member> <name>type_default</name> <value> <i4>-1</i4> </value> </member> <member> <name>version</name> <value> <i4>28</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>de152023-6383-43ae-ba6a-3f736d41f588</string> </value> </member> <member> <name>parent_id</name> <value> <string>37c4cfe3-ea39-4ef7-bda3-bee73bd46d95</string> </value> </member> <member> <name>name</name> <value> <string>Gestures</string> </value> </member> <member> <name>type_default</name> <value> <i4>21</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>df67809c-bd2f-4b1f-aa72-33b7816faae9</string> </value> </member> <member> <name>parent_id</name> <value> <string>82d978e0-8892-4be1-a1f2-10dce0091021</string> </value> </member> <member> <name>name</name> <value> <string>Sounds</string> </value> </member> <member> <name>type_default</name> <value> <i4>1</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>e9850612-0ebc-4b65-97b1-26ea5bc8cde9</string> </value> </member> <member> <name>parent_id</name> <value> <string>5cb09cb9-5080-4bf4-8ba0-86b6197fcc74</string> </value> </member> <member> <name>name</name> <value> <string>OKC Racer Kit v0.186X</string> </value> </member> <member> <name>type_default</name> <value> <i4>-1</i4> </value> </member> <member> <name>version</name> <value> <i4>13</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>ec6ebd81-c62a-4715-ad33-b2db49dc13c4</string> </value> </member> <member> <name>parent_id</name> <value> <string>82d978e0-8892-4be1-a1f2-10dce0091021</string> </value> </member> <member> <name>name</name> <value> <string>Scripts</string> </value> </member> <member> <name>type_default</name> <value> <i4>10</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>ef4a9f8c-7835-4a3c-9ebe-cc313bd263d0</string> </value> </member> <member> <name>parent_id</name> <value> <string>37c4cfe3-ea39-4ef7-bda3-bee73bd46d95</string> </value> </member> <member> <name>name</name> <value> <string>Photo Album</string> </value> </member> <member> <name>type_default</name> <value> <i4>15</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>f2821449-9d7d-4bc4-adb1-7058dac1c63f</string> </value> </member> <member> <name>parent_id</name> <value> <string>37c4cfe3-ea39-4ef7-bda3-bee73bd46d95</string> </value> </member> <member> <name>name</name> <value> <string>Calling Cards</string> </value> </member> <member> <name>type_default</name> <value> <i4>2</i4> </value> </member> <member> <name>version</name> <value> <i4>4</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>f37b1f72-7a9d-4bbd-9532-203c769731e6</string> </value> </member> <member> <name>parent_id</name> <value> <string>82d978e0-8892-4be1-a1f2-10dce0091021</string> </value> </member> <member> <name>name</name> <value> <string>Photo Album</string> </value> </member> <member> <name>type_default</name> <value> <i4>15</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>fd5bad85-ac24-f5c5-6c52-04dee026faeb</string> </value> </member> <member> <name>parent_id</name> <value> <string>37c4cfe3-ea39-4ef7-bda3-bee73bd46d95</string> </value> </member> <member> <name>name</name> <value> <string>#Firestorm</string> </value> </member> <member> <name>type_default</name> <value> <i4>-1</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>feacf8b1-5617-416c-b508-1b9049a6bff3</string> </value> </member> <member> <name>parent_id</name> <value> <string>82d978e0-8892-4be1-a1f2-10dce0091021</string> </value> </member> <member> <name>name</name> <value> <string>Animations</string> </value> </member> <member> <name>type_default</name> <value> <i4>20</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> </data> </array> </value> </member> <member> <name>sim_ip</name> <value> <string>192.168.1.2</string> </value> </member> <member> <name>map-server-url</name> <value> <string>http://192.168.1.2:8002/</string> </value> </member> <member> <name>buddy-list</name> <value> <array> <data> <value> <struct> <member> <name>buddy_id</name> <value> <string>04c259b7-94bc-4822-b099-745191ffc247</string> </value> </member> <member> <name>buddy_rights_given</name> <value> <i4>1</i4> </value> </member> <member> <name>buddy_rights_has</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>buddy_id</name> <value> <string>c87dfbb1-2c7b-4335-9042-9c2a375625fd</string> </value> </member> <member> <name>buddy_rights_given</name> <value> <i4>1</i4> </value> </member> <member> <name>buddy_rights_has</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>buddy_id</name> <value> <string>fb5f2e30-c264-4e9d-99fb-83340b14cc4f</string> </value> </member> <member> <name>buddy_rights_given</name> <value> <i4>1</i4> </value> </member> <member> <name>buddy_rights_has</name> <value> <i4>1</i4> </value> </member> </struct> </value> </data> </array> </value> </member> <member> <name>gestures</name> <value> <array> <data/> </array> </value> </member> <member> <name>http_port</name> <value> <i4>0</i4> </value> </member> <member> <name>sim_port</name> <value> <i4>9000</i4> </value> </member> <member> <name>start_location</name> <value> <string>last</string> </value> </member> <member> <name>inventory-lib-owner</name> <value> <array> <data> <value> <struct> <member> <name>agent_id</name> <value> <string>11111111-1111-0000-0000-000100bba000</string> </value> </member> </struct> </value> </data> </array> </value> </member> <member> <name>initial-outfit</name> <value> <array> <data> <value> <struct> <member> <name>folder_name</name> <value> <string>Nightclub Female</string> </value> </member> <member> <name>gender</name> <value> <string>female</string> </value> </member> </struct> </value> </data> </array> </value> </member> <member> <name>inventory-skel-lib</name> <value> <array> <data> <value> <struct> <member> <name>folder_id</name> <value> <string>00000112-000f-0000-0000-000100bba000</string> </value> </member> <member> <name>parent_id</name> <value> <string>00000000-0000-0000-0000-000000000000</string> </value> </member> <member> <name>name</name> <value> <string>OpenSim Library</string> </value> </member> <member> <name>type_default</name> <value> <i4>8</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>f0908f10-b9bf-11dc-95ff-0800200c9a66</string> </value> </member> <member> <name>parent_id</name> <value> <string>00000112-000f-0000-0000-000100bba000</string> </value> </member> <member> <name>name</name> <value> <string>Animations Library</string> </value> </member> <member> <name>type_default</name> <value> <i4>20</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>d499e5e0-b9bf-11dc-95ff-0800200c9a66</string> </value> </member> <member> <name>parent_id</name> <value> <string>00000112-000f-0000-0000-000100bba000</string> </value> </member> <member> <name>name</name> <value> <string>BodyParts Library</string> </value> </member> <member> <name>type_default</name> <value> <i4>13</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>b75056e0-b9bf-11dc-95ff-0800200c9a66</string> </value> </member> <member> <name>parent_id</name> <value> <string>00000112-000f-0000-0000-000100bba000</string> </value> </member> <member> <name>name</name> <value> <string>Clothing Library</string> </value> </member> <member> <name>type_default</name> <value> <i4>5</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>8e1e3a30-b9bf-11dc-95ff-0800200c9a66</string> </value> </member> <member> <name>parent_id</name> <value> <string>00000112-000f-0000-0000-000100bba000</string> </value> </member> <member> <name>name</name> <value> <string>Gestures Library</string> </value> </member> <member> <name>type_default</name> <value> <i4>21</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>6bcd48e0-b9bf-11dc-95ff-0800200c9a66</string> </value> </member> <member> <name>parent_id</name> <value> <string>00000112-000f-0000-0000-000100bba000</string> </value> </member> <member> <name>name</name> <value> <string>Landmarks Library</string> </value> </member> <member> <name>type_default</name> <value> <i4>3</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>33cbd240-b9bf-11dc-95ff-0800200c9a66</string> </value> </member> <member> <name>parent_id</name> <value> <string>00000112-000f-0000-0000-000100bba000</string> </value> </member> <member> <name>name</name> <value> <string>Notecards Library</string> </value> </member> <member> <name>type_default</name> <value> <i4>7</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>1576c6b0-b9bf-11dc-95ff-0800200c9a66</string> </value> </member> <member> <name>parent_id</name> <value> <string>00000112-000f-0000-0000-000100bba000</string> </value> </member> <member> <name>name</name> <value> <string>Objects Library</string> </value> </member> <member> <name>type_default</name> <value> <i4>6</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>cf7e2db0-b9be-11dc-95ff-0800200c9a66</string> </value> </member> <member> <name>parent_id</name> <value> <string>00000112-000f-0000-0000-000100bba000</string> </value> </member> <member> <name>name</name> <value> <string>Photos Library</string> </value> </member> <member> <name>type_default</name> <value> <i4>15</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>30000112-000f-0000-0000-000100bba002</string> </value> </member> <member> <name>parent_id</name> <value> <string>00000112-000f-0000-0000-000100bba000</string> </value> </member> <member> <name>name</name> <value> <string>Scripts Library</string> </value> </member> <member> <name>type_default</name> <value> <i4>10</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>c1284980-b9be-11dc-95ff-0800200c9a66</string> </value> </member> <member> <name>parent_id</name> <value> <string>00000112-000f-0000-0000-000100bba000</string> </value> </member> <member> <name>name</name> <value> <string>Sounds Library</string> </value> </member> <member> <name>type_default</name> <value> <i4>1</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>00000112-000f-0000-0000-000100bba001</string> </value> </member> <member> <name>parent_id</name> <value> <string>00000112-000f-0000-0000-000100bba000</string> </value> </member> <member> <name>name</name> <value> <string>Texture Library</string> </value> </member> <member> <name>type_default</name> <value> <i4>0</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>30000112-000f-0000-0000-000100bba003</string> </value> </member> <member> <name>parent_id</name> <value> <string>30000112-000f-0000-0000-000100bba002</string> </value> </member> <member> <name>name</name> <value> <string>A</string> </value> </member> <member> <name>type_default</name> <value> <i4>10</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>30000112-000f-0000-0000-000100bba004</string> </value> </member> <member> <name>parent_id</name> <value> <string>30000112-000f-0000-0000-000100bba002</string> </value> </member> <member> <name>name</name> <value> <string>B</string> </value> </member> <member> <name>type_default</name> <value> <i4>10</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>30000112-000f-0000-0000-000100bba017</string> </value> </member> <member> <name>parent_id</name> <value> <string>30000112-000f-0000-0000-000100bba002</string> </value> </member> <member> <name>name</name> <value> <string>R</string> </value> </member> <member> <name>type_default</name> <value> <i4>10</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>30000112-000f-0000-0000-000100bba018</string> </value> </member> <member> <name>parent_id</name> <value> <string>30000112-000f-0000-0000-000100bba002</string> </value> </member> <member> <name>name</name> <value> <string>S</string> </value> </member> <member> <name>type_default</name> <value> <i4>10</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>284858c8-9391-6bf1-ddf5-b936f73de853</string> </value> </member> <member> <name>parent_id</name> <value> <string>30000112-000f-0000-0000-000100bba002</string> </value> </member> <member> <name>name</name> <value> <string>OpenSim Specific Scripts</string> </value> </member> <member> <name>type_default</name> <value> <i4>10</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>30000112-000f-0000-0000-000100bba024</string> </value> </member> <member> <name>parent_id</name> <value> <string>30000112-000f-0000-0000-000100bba002</string> </value> </member> <member> <name>name</name> <value> <string>.Kan-ED Scripts</string> </value> </member> <member> <name>type_default</name> <value> <i4>10</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> <value> <struct> <member> <name>folder_id</name> <value> <string>30000112-000f-0000-0000-000100bba025</string> </value> </member> <member> <name>parent_id</name> <value> <string>30000112-000f-0000-0000-000100bba002</string> </value> </member> <member> <name>name</name> <value> <string>.Other testing scripts</string> </value> </member> <member> <name>type_default</name> <value> <i4>10</i4> </value> </member> <member> <name>version</name> <value> <i4>1</i4> </value> </member> </struct> </value> </data> </array> </value> </member> <member> <name>session_id</name> <value> <string>6ac2e761-f490-4122-bf6c-7ad8fbb17002</string> </value> </member> <member> <name>region_size_x</name> <value> <i4>256</i4> </value> </member> <member> <name>region_size_y</name> <value> <i4>256</i4> </value> </member> <member> <name>agent_id</name> <value> <string>f2f493c0-27d3-4cf2-be97-b44dfdad13b6</string> </value> </member> <member> <name>event_notifications</name> <value> <array> <data/> </array> </value> </member> <member> <name>global-textures</name> <value> <array> <data> <value> <struct> <member> <name>cloud_texture_id</name> <value> <string>dc4b9f0b-d008-45c6-96a4-01dd947ac621</string> </value> </member> <member> <name>sun_texture_id</name> <value> <string>cce0f112-878f-4586-a2e2-a8f104bba271</string> </value> </member> <member> <name>moon_texture_id</name> <value> <string>ec4b9f0b-d008-45c6-96a4-01dd947ac621</string> </value> </member> </struct> </value> </data> </array> </value> </member> <member> <name>login</name> <value> <string>true</string> </value> </member> <member> <name>agent_access</name> <value> <string>M</string> </value> </member> <member> <name>secure_session_id</name> <value> <string>fe210274-9056-467a-aff7-d95f60bacccc</string> </value> </member> <member> <name>last_name</name> <value> <string>Clark-Casey</string> </value> </member> </struct> </value> </param> </params> </methodResponse>
The parameters are as follows:
- home - The home location of the user. This is in the format "{'region_handle':[r<x-grid-coord>,r<y-grid-coord>], 'position':[r<x-region-coord>,r<y-region-coord>,r<z-region-coord>], 'look_at':[r<x-coord>,r<y-coord>,r<z-coord>]}. For example "{'region_handle':[r256000,r256000], 'position':[r50,r100,r200], 'look_at':[r1,r0,r0]}".
- region_handle gives the grid-coordinates in meters. So for a region located that the 1000,1000 co-ordinate on the map, this is 256000, 256000.
- position is the position in the region.
- look_at is the direction the avatar should be facing. This is a unit vector so (0, 1, 0) is facing straight north, (1, 0, 0) is east, (0,-1, 0) is south and (-1, 0, 0) is west.
- look_at - The direction in which the avatar should be facing upon login. This is a unit vector so (0, 1, 0) is facing straight north, (1, 0, 0) is east, (0,-1, 0) is south and (-1, 0, 0) is west.
- agent_access_max - The maximum level of region that user can access. OpenSimulator currently always sets this to "A" (probably adult).
- seed_capability - The URL that the viewer should use to request further capabilities.
- first_name - First name of the logged in user.
- sim_ip - IP to use to connect to the initial simulator.
- region_x - The x grid coordinate of the region in meters. So a region at map co-ordinate 1000 will have a grid co-ordinate of 256000.
- region_y - The y grid coordinate of the region in meters.
- circuit_code - The session ID.
- inventory-root - The ID of the user's root folder (which appears as the "My Inventory" folder in most viewers).
- inventory-skeleton - Details about the child folders of the root folder. Each entry has the following parameters.
- folder_id - The ID of the folder.
- parent_id - The ID of the containing folder.
- name - The name of the folder.
- type_default - The type of the folder. These values correspond to the InventoryType class in libopenmetaverse, where -1 is an ordinary untyped folder.
- version - The version number of the folder. This is increment on operations that change the folder's contents. A viewer can cache these version numbers and other inventory information so that it can reduce the amount of inventory data that it has to request.
- inventory-lib-root - The ID of the library root folder (which appears as the "OpenSim Library" folder in most viewers).
- inventory-skeleton - Details about the child folders of the library root folder. Has the same format as inventory-skeleton above.
- map-server-url - URL from which to request map tiles.
- buddy-list - The user's friend list. This contains an entry for each friend (buddy). These entries have the following parameters.
- buddy_id - The UUID of the friend.
- buddy_rights_given - The rights granted to this friend. The values correspond the FriendsRights enum in libopenmetaverse.
- login-flags - Some extra information about login. Of these
- stipend_since_login - probably shows whether a user received stipend money since their last login. OpenSimulator always sets this to "N".
- ever_logged_in - indicates whether the account has ever logged in. Currently, OpenSimulator always sets this to "Y" even if the user has never logged in before.
- seconds_since_epoch - server time in Unix seconds since epoch format (i.e. seconds since 1970).
- daylight_savings - whether daylight savings is considered to be in effect for the grid time. OpenSimulator can set this to "Y" or "N".
- gendered - Function unknown, possibly relating to avatars. OpenSimulator always sets this to "Y".
- message - Message that can be displayed to the user when logging in.
- ui-config - Function unknown. OpenSimulator only has one setting here.
- allow_first_life - always set to "Y" by OpenSimulator. Could possibly control whether the First Life tab is shown for user profiles (now obsolete in some circumstances).
- event_categories - Function unknown, probably relates to events. OpenSimulator does not currently set this.
- classified_categories - Classified categories. OpenSimulator currently always adds the categories
AddClassifiedCategory((Int32) 1, "Shopping"); AddClassifiedCategory((Int32) 2, "Land Rental"); AddClassifiedCategory((Int32) 3, "Property Rental"); AddClassifiedCategory((Int32) 4, "Special Attraction"); AddClassifiedCategory((Int32) 5, "New Products"); AddClassifiedCategory((Int32) 6, "Employment"); AddClassifiedCategory((Int32) 7, "Wanted"); AddClassifiedCategory((Int32) 8, "Service"); AddClassifiedCategory((Int32) 9, "Personal");
but usefulness is unknown.
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.