SimulatorLoginProtocol
From OpenSimulator
(→Details) |
(→Details) |
||
Line 56: | Line 56: | ||
<name>passwd</name> | <name>passwd</name> | ||
<value> | <value> | ||
− | <string>$1$ | + | <string>$1$f7583d0d-5b61-4729-91d0-6dd9a8bfc923</string> |
</value> | </value> | ||
</member> | </member> | ||
Line 2,830: | Line 2,830: | ||
</methodResponse> | </methodResponse> | ||
</source> | </source> | ||
+ | |||
+ | 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]]. | ||
== Code == | == Code == |
Revision as of 14:06, 18 September 2014
(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.
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.