Difference between revisions of "SLGOGP Teleport Strawman"

From Second Life Wiki
Jump to navigation Jump to search
Line 17: Line 17:
== Logout ==
== Logout ==
[[Image:Open Grid Logout.png]]
[[Image:Open Grid Logout.png]]
= place_avatar =
* Once the viewer acquires the cap for place_avatar, it requests it from the agent domain
* The viewer can also invoke place_avatar for teleport
== Request: viewer -> agentd ==
{
    'region_url': <r_url>
    'position':  [x, y, z]
}
== Response ==
{
  'seed_capability': uri string
  'look_at' : [f32, f32, f32]
  'sim_ip': ip string
  'sim_port': int
  'region_x': int
  'region_y': int
  'region_id' : uuid
  'sim_access' : <PG/Mature>
  'connect': bool
  'position': [f32, f32, f32]
// The above are the same as response to rez_avatar
// The following are only returned on login, not over teleport
    'session_id':<uuid>
    'secure_session_id':<uuid>
    'circuit_code':<int>
// Extra stuff
    'connect': <bool>
}


= RezAvatar =
* Once the viewer acquires the cap for rezAvatar, it requests it from the agent domain
viewer -> agentd


{'region_url': <r_url>, 'position':  [x, y, z]}


* The agent domain then invokes rezAvatar on the simulator at the given region_url
= request_rez_avatar =
agentd -> simulator
== Request: agentd -> simulator ==
 
  {
  {  
    'age_verified' : <boolean>,
    'agent_access' : <boolean>,
     'agent_id' : <uuid>,
     'agent_id' : <uuid>,
    'allow_redirect: <boolean>,
    'circuit': <int>,
     'first_name': <string>,
     'first_name': <string>,
    'last_name': <string>,
    'age_verified' : <boolean>,
    'agent_access' : <boolean>,
    'allow_redirect: <boolean>, // delete, moved to rez_avatar
     'god_level':  <int>,
     'god_level':  <int>,
    'identified':  <bool>,
    'transacted': <bool>,
    'limited_to_estate': <int>
    'sim_access' : <PG/Mature>
}
== Example: (hard coded) ==
{
  'agent_id' : <uuid>,
  'first_name': <string>,
  'last_name': <string>,
  'age_verified' : false,
  'agent_access' : false,
  'allow_redirect: 1,
  'god_level':  0,
  'identified':  false,
  'transacted': false,
  'limited_to_estate': 1
  'sim_access' : 'PG'
  'inventory_host':  <uri string>,
}
== Response to request_rez_avatar ==
{
    'rez_avatar':<cap>
    'sim_ip': ip string
    'sim_port': int
    'region_x': int
    'region_y': int
    'region_id' : uuid
    'sim_access' : <PG/Mature>
    'seed_capability': uri string
    'buddy_ids': []
    'group_data': {}
    'group_id': <uuid>
    'group_title': <string>
    'granters': []
    'voice_password': <string>
}
= rez_avatar =
== Request: agentd -> simulator OR simulator a -> simulator b via derez_avatar ==
* For login, the agent domain then invokes rez_avatar on the simulator at the given region_url
* For teleport, the agent domain invokes derez_avatar on simulator a, which invokes rez_avatar on simulator b
{
    'circuit': <int>,
     'god_overide':  <bool>,
     'god_overide':  <bool>,
    'identified':  <bool>,
    'inventory_host':  <uri string>,
    'last_name': <string>,
    'limited_to_estate': <int>,
     'position': [x, y, z],
     'position': [x, y, z],
     'secure_session_id':  <uuid>,
     'secure_session_id':  <uuid>,
     'session_id':  <uuid>,
     'session_id':  <uuid>,
     'start':  <string>,
     'inventory_host':  <uri string>, // not really here!
     'transacted': <bool>,
     'allow_redirect: <boolean>,
}
    'attachment_data': [ {'attachment_point':<int>, 'item_id':<uuid>, 'asset_id':<uuid> | 'asset_data':<binary>}...]
    'baked_texture_data': [ {'texture_id':<uuid>, 'asset_host_name':<host?????>}...]
    'texture_data': [ <uuid>...]
    'animations':[{'state':<uuid>, 'source':<uuid>, 'sequence':<int>}...]


// Below are the hard coded values used for the a proof of concept implementation on two Linden dev grids
    // The following are only sent from simulator a -> simulator b via derez_avatar
{
     'attachment_data': [ {'attachment_point':<int>, 'item_id':<uuid>, 'asset_id':<uuid> | 'asset_data':<binary>}...]
     'age_verified' : false,
     'baked_texture_data': [ {'texture_id':<uuid>, 'asset_host_name':<host?????>}...]
    'agent_access' : false,
     'texture_data': [ <uuid>...]
    'agent_id' : <uuid>,
     'animations':[{'state':<uuid>, 'source':<uuid>, 'sequence':<int>}...]
    'allow_redirect: 1,
    'circuit': <int>
    'first_name': <string>
     'god_level': 0
    'god_overide':   bool
    'identified': false
     'inventory_host': inv4.mysql.agni.lindenlab.com
     'last_name string':
    'limited_to_estate': 1
    'position [x, y, z]': <int, int, int>
    'secure_session_id': <uuid>
    'session_id': <uuid>
    'start':  'safe'
    'transacted': false
  }
  }
 
== Response: simulator -> agentd ==
* The simulator then returns the actual region (in case it might be different from requested) and the seed cap.
* The simulator then returns the actual region (in case it might be different from requested) and the seed cap.
simulator -> agentd
  {
  {
'region_x': int
    'look_at' : [f32, f32, f32]
'region_y': int
    'position': [f32, f32, f32]
'seed_capability': uri string
  // Extra stuff
'region' : uuid
    'connect': <bool>
'look_at' : [f32, f32, f32]
'sim_access' : char
'connect': bool
'sim_port': int
'position': [f32, f32, f32]
  'm_ip': ip string
  }
  }


* Finally the agent domain returns the details to the client
agentd -> viewer


= derez_avatar =
== Request: agentd -> simulator a ==
  {
  {
'session_id': uuid
    'region_url': <r_url>
'secure_session_id': uuid
    'position':  [x, y, z]
  'seed_capability': uri string
'look_at' : [f32, f32, f32]
'sim_ip': ip string
'sim_port': int
  }
  }
 
Response: simulator a -> agentd
// idiosyncratic things sent back to our viewer
== Response: simulator -> agentd ==
  {
  {
'sim_access' : char
    'look_at' : [f32, f32, f32]
'connect': bool
    'position': [f32, f32, f32]
'sim_port': int
  // Extra stuff
'position': [f32, f32, f32]
    'connect': <bool>
  'agent_id': uuid
  }
'region_x': int
'region_y': int
  }  
 
 
 
 
= DeRezAvatar =
In progress

Revision as of 15:25, 28 May 2008

This strawman represents a possible open teleport protocol. The sequencing is described first, which also introduces the major players: Client, Agent Domain, Simulator/Region Domain A, Simulator/Region Domain B. For perspective, the current Second Life Grid teleport flow is also included. Following that are the draft specifications for the two main pieces, called rezAvatar and derezAvatar on the agent domain. The simulator side portions of this protocol have been tentatively dubbed "teleport_avatar" and "give_up_av_to_pipe".


Teleport Flow

Here is the basic flow for current SL teleports: Old teleport.png

Fine tuning the proposed protocol and cap names after discussion with AWG groupies resulted in a unified approach for Login, Teleport, and Logout, diagrammed below:

Login

Open grid login.png

Teleport

Open Grid Teleport.png

Logout

Open Grid Logout.png

place_avatar

  • Once the viewer acquires the cap for place_avatar, it requests it from the agent domain
  • The viewer can also invoke place_avatar for teleport

Request: viewer -> agentd

{
    'region_url': <r_url>
    'position':  [x, y, z]
}

Response

{
  'seed_capability': uri string
  'look_at' : [f32, f32, f32]
  'sim_ip': ip string
  'sim_port': int
  'region_x': int
  'region_y': int
  'region_id' : uuid
  'sim_access' : <PG/Mature>
  'connect': bool
  'position': [f32, f32, f32]
// The above are the same as response to rez_avatar
// The following are only returned on login, not over teleport
   'session_id':<uuid>
   'secure_session_id':<uuid>
   'circuit_code':<int>
// Extra stuff
   'connect': <bool>
}


request_rez_avatar

Request: agentd -> simulator

{
   'agent_id' : <uuid>,
   'first_name': <string>,
   'last_name': <string>,
   'age_verified' : <boolean>,
   'agent_access' : <boolean>,
   'allow_redirect: <boolean>, // delete, moved to rez_avatar
   'god_level':  <int>,
   'identified':  <bool>,
   'transacted': <bool>,
   'limited_to_estate': <int>
    'sim_access' : <PG/Mature>
}

Example: (hard coded)

{
  'agent_id' : <uuid>,
  'first_name': <string>,
  'last_name': <string>,
  'age_verified' : false, 
  'agent_access' : false,
  'allow_redirect: 1,
  'god_level':  0,
  'identified':  false,
  'transacted': false,
  'limited_to_estate': 1
  'sim_access' : 'PG'
  'inventory_host':  <uri string>,
}

Response to request_rez_avatar

{
   'rez_avatar':<cap>
   'sim_ip': ip string
   'sim_port': int
   'region_x': int
   'region_y': int
   'region_id' : uuid
   'sim_access' : <PG/Mature>
   'seed_capability': uri string
   'buddy_ids': []
   'group_data': {}
   'group_id': <uuid>
   'group_title': <string>
   'granters': []
   'voice_password': <string>
}


rez_avatar

Request: agentd -> simulator OR simulator a -> simulator b via derez_avatar

  • For login, the agent domain then invokes rez_avatar on the simulator at the given region_url
  • For teleport, the agent domain invokes derez_avatar on simulator a, which invokes rez_avatar on simulator b
{
   'circuit': <int>,
   'god_overide':   <bool>,
   'position': [x, y, z],
   'secure_session_id':  <uuid>,
   'session_id':  <uuid>,
   'inventory_host':  <uri string>, // not really here!
   'allow_redirect: <boolean>,
   'attachment_data': [ {'attachment_point':<int>, 'item_id':<uuid>, 'asset_id':<uuid> | 'asset_data':<binary>}...]
   'baked_texture_data': [ {'texture_id':<uuid>, 'asset_host_name':<host?????>}...]
   'texture_data': [ <uuid>...]
   'animations':[{'state':<uuid>, 'source':<uuid>, 'sequence':<int>}...]
   // The following are only sent from simulator a -> simulator b via derez_avatar
   'attachment_data': [ {'attachment_point':<int>, 'item_id':<uuid>, 'asset_id':<uuid> | 'asset_data':<binary>}...]
   'baked_texture_data': [ {'texture_id':<uuid>, 'asset_host_name':<host?????>}...]
   'texture_data': [ <uuid>...]
   'animations':[{'state':<uuid>, 'source':<uuid>, 'sequence':<int>}...]
}

Response: simulator -> agentd

  • The simulator then returns the actual region (in case it might be different from requested) and the seed cap.
{
   'look_at' : [f32, f32, f32]
   'position': [f32, f32, f32]
// Extra stuff
   'connect': <bool>
}


derez_avatar

Request: agentd -> simulator a

{
    'region_url': <r_url>
    'position':  [x, y, z]
}

Response: simulator a -> agentd

Response: simulator -> agentd

{
   'look_at' : [f32, f32, f32]
   'position': [f32, f32, f32]
// Extra stuff
   'connect': <bool>
}