Table of ContentsMain Types and Data Structures PLEASE NOTE: this is a work in progress. Some of the elements described here may still change as other people implement this independently, and as we strengthen the security of the Hypergrid. Last update: Dec. 7, 2011 Copyright by Crista V. Lopes. All rights reserved. Specifically,
please do not serve this document, or derivative works, from other servers
while it is a work in progress. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
The Hypergrid is a federation architecture and protocol for Second Life and OpenSimulator virtual worlds that supports the seamless transfer of user agents and assets between them. This Reference Guide explains the Hypergrid for implementers. One core design principle of the Hypergrid is that it is entirely a server-side-to-server-side federation. Clients are assumed to be relatively passive elements that interact only with the server side authority that the user is currently visiting. All interactions between a client and another virtual world are proxied by the virtual world that the client is currently connected to. This is opposed to other architectures where clients play a more active role in maintaining connections to several server-sides. This design decision comes as a pragmatic necessity given the clients that the Hypergrid is designed for - the Linden Lab Second life viewers and Web browsers.
The Hypergrid consists of a number of services that can be added to a virtual world, each one establishing a federation for that particular kind of service. In the Hypergrid, interoperation between virtual worlds is triggered by the use of Universal Unique Identifiers which include a domain of origin. These UUIs are given to the virtual worlds either explicitly by direct input from users or implicitly as user agents move from one virtual world to another. User agents carry with them "bags of references" to entities that may be outside the virtual world that they are currently visiting. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(click to enlarge) Hypergrid Teleport: Hypergrid Friends: Hypergrid IM: |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Purpose: this is a
protocol discovery service. In principle, this is the only service whose
network API must be agreed upon throughout the Hypergrid;
all other services' network APIs can, in principle, be different for the same
types of services. This gives a lot of flexibility to each virtual world
implementer and the Federation itself, as there is no need to establish
network-level standards, only abstract service interface standards.
Authorities invoke this service upon needing to interact with a new authority
for the first time in order to discover the mechanism by which the
interaction can take place. The Helo service plays
a similar role to that of Web Services Description Languages (WSDL), but it
is a much more concise, and consequently less flexible, mechanism than WSDL. Relevant OpenSimulator
Elements
Reference Network API: HeloServiceConnector (requester), HeloServiceInConnector
(provider) Detailed Description
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Purpose:
this service is the single entry point of hyperlinks and user agents into a
grid. It can be thought of as a grid-login service. When grids run the Hypergrid, all hyperlink requests as well as all user
agents launched at the grid's regions MUST go through the Gatekeeper first.
Specifically, for users coming from foreign worlds, the gatekeeper is the
service that posts the user's session into the local presence service -- a
piece of data that is then verified by the simulators, and without which the
simulators refuse service. With the Gatekeeper service in place, virtual
worlds have one single point of control for user agents
entry; policies for access control based on a variety of criteria become
possible. Relevant OpenSimulator
Elements
Interface: IGatekeeperService Reference
Service Implementation: GatekeeperService Reference
Network API: GatekeeperServiceConnector (requester), HypergridHandlers (provider), GatekeeperAgentHandler
(provider) Detailed Description
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Purpose: this service controls the launching of user agents into grids, working closely with an identification service bundle (UserAccounts and Authentication). When enabled, all user agent transfers among independent, possibly untrusted, domains MUST be realized by the user's User Agents service. Its main goal is to provide a means for grids to verify identity of user agents launched at them from other grids. In its current incarnation, the most important information it keeps in order to verify identity is the user's IP address. Relevant OpenSimulator
Elements
Interface: IUserAgentService Reference
Service Implementation: UserAgentService Reference
Network API: UserAgentServiceConnector (requester), UserAgentServerConnector (provider), HomeAgentHandler
(provider) Detailed Description
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Purpose: this service controls the access to a
user's inventory from another virtual world. Its main goal is to give minimum
access to inventory items while protecting the user's inventory from abusive
behavior on the part of untrusted authorities. Relevant OpenSimulator
Elements
Interface: IInventoryService Reference
Service Implementation: HGInventoryService Reference
Network API: XInventoryConnector, XInventoryInConnector Detailed Description
All other inventory operations are served as normal, as they include folder and item UUIDs provided by the user. However, this is not mandatory. More restrictive Hypergrid inventory services may chose not to serve additional inventory operations. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Purpose: this service provides access to an asset storage. Its main goal is to serve get/post asset requests while protecting the integrity of the assets from abusive behavior on the part of untrusted authorities. Hypergrid asset services may perform content-type-based access control and content transformation on the assets. This specification does not mandate any particular access control or content transformation. The reference Hypergrid asset service in OpenSimulator transforms all user UUIDs into UUIs, as assets are sent outside the virtual worlds. Relevant OpenSimulator
Elements
Interface: IAssetService Reference
Service Implementation: HGAssetService Reference
Network API: HGAssetServiceConnector (requester), AssetServerConnector
(provider), AssetServerGetHandler (provider), AssetServerPostHandler (provider), AssetServerDeleteHandler
(provider) Detailed Description
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Purpose: this service provides the means for establishing and deleting friendships between users in different domains. Relevant OpenSimulator
Elements
Reference Network API: HGFriendsServiceConnector (requester), HGFriendsServerConnector (provider), HGFriendsServerPostHandler
(provider) Detailed Description
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Purpose: this service provides IM peering. Relevant OpenSimulator
Elements
Reference Service
Implementation: HGInstantMessageService Reference
Network API: InstantMessageServiceConnector (requester), InstantMessageServerConnector (provider) Detailed Description
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Here are some examples of the main identifiers and data structures exchanged during Hypergrid interactions. NOTE: the '.' in the beginning of each line denote indentation. Purpose: generated by User Agent Service for every grid that the user interacts with. Syntactic Form: <TargetGatekeeperURI>;<random token> Example: http://divacanto.dyndns.org:9000/;c87d7e92-55d2-4360-9bfd-c955dac4fb8b Universal User Identifier (UUI) Purpose: identifies a user in the entire federation. Used, for example, to represent foreign friends. Syntactic form: <UUID>[;HomeURI[;name[;secret]]] Example: 76ee17d4-1d71-490f-95dc-5594eaf42863;http://ucigrid03.nacs.uci.edu:9000;Test User;5bb79d57 {"agent_id":"5745cd8c-33df-403f-8d3d-da489ea1022b", ."destination_x":"256000", ."destination_y":"256000", ."destination_name":"Kali Test 9", ."destination_uuid":"4468513f-d06a-4df6-b91c-252f5a8f4489", ."teleport_flags":"128" ."base_folder":"00000000-0000-0000-0000-000000000000", ."caps_path":"f9063cbd-d46c-46bb-86b0-21695c4086cf", ."child":false, ."circuit_code":"30135740", ."first_name":"Test", . "last_name":"User", ."inventory_folder":"00000000-0000-0000-0000-000000000000", ."secure_session_id":"e4e1d7b1-1ba1-48a5-b9dd-5f5572e6ec16", ."session_id":"b98a6f87-25b5-4fe7-b72f-ab6ffe44a8e5", ."service_session_id":"http://divacanto.dyndns.org:9000/;3a215745-7791-4248-a267-a621d96f78d1", ."start_pos":"<128.116, 128.5049, 22.5>", ."client_ip":"192.168.1.64", ."viewer":"Second Life Release 1.23.5.136262", ."channel":"Second Life Release", ."mac":"b3030425213724e88f6bdc231caa337d", ."id0":"587eb48351713620ff2d9ec06b32f116", ."appearance_serial":1, ."packed_appearance":{ ..."serial":1, ..."height":1.69099903106689, ..."wearables":[ .....[{"item":"6d813df9-530f-42ad-b908-9e6d1b4fbe6a","asset":"d1cee383-90d5-85be-515c-b52e89043002"}], .....[{"item":"f2333861-d598-4244-9d91-4ef03e943c3e","asset":"b6739e6c-4969-4696-8085-3e20f97a6689"}], .....[{"item":"44d4e931-0faa-4a4a-be6f-5421225873c5","asset":"e024c8bf-21c4-4c63-b767-089b75ae8720"}], .....[{"item":"7a6d71e1-9a48-414d-8694-d961a29556a1","asset":"c985e848-4ad3-4f16-cac2-94123729c8e1"}], .....[{"item":"02f80857-3791-40c8-8d46-8370492c9e82","asset":"269b94c8-8f02-5edb-84e8-42000d6c3f5b"}], .....[{"item":"8edb92c8-9ca3-4a11-bdf9-7bba43dbd24a","asset":"1d6d2c60-20ac-80ed-f799-56f395371d74"}], .....[{"item":"58fb1276-3065-48e6-bf39-c79115a3b00d","asset":"f4fd2015-5463-e53a-1f76-4e5eea576a87"}], .....[], .....[{"item":"55f43dd7-5343-4d1c-97fe-f53bfd57cd9a","asset":"4351e4cc-b9a8-4c1c-9320-801dc4ea1de8"}], .....[],[],[],[],[],[]], ..."textures":["c228d1cf-4b5d-4ba8-84f4-899a0796aa97","c228d1cf-4b5d-4ba8-84f4-899a0796aa97", ....."c228d1cf-4b5d-4ba8-84f4-899a0796aa97","c228d1cf-4b5d-4ba8-84f4-899a0796aa97", ....."c228d1cf-4b5d-4ba8-84f4-899a0796aa97","c228d1cf-4b5d-4ba8-84f4-899a0796aa97", ....."c228d1cf-4b5d-4ba8-84f4-899a0796aa97","c228d1cf-4b5d-4ba8-84f4-899a0796aa97", ....."c228d1cf-4b5d-4ba8-84f4-899a0796aa97","c228d1cf-4b5d-4ba8-84f4-899a0796aa97", ....."c228d1cf-4b5d-4ba8-84f4-899a0796aa97","c228d1cf-4b5d-4ba8-84f4-899a0796aa97", ....."c228d1cf-4b5d-4ba8-84f4-899a0796aa97","c228d1cf-4b5d-4ba8-84f4-899a0796aa97", ....."c228d1cf-4b5d-4ba8-84f4-899a0796aa97","c228d1cf-4b5d-4ba8-84f4-899a0796aa97", ....."c228d1cf-4b5d-4ba8-84f4-899a0796aa97","c228d1cf-4b5d-4ba8-84f4-899a0796aa97", ....."c228d1cf-4b5d-4ba8-84f4-899a0796aa97","c228d1cf-4b5d-4ba8-84f4-899a0796aa97", ....."c228d1cf-4b5d-4ba8-84f4-899a0796aa97"], ..."visualparams":[33,61,85,...], ..."attachments":[{"point":2, ....."item":"e26286b7-08f1-4d12-9d7d-8b945b72700d","asset":"00000000-0000-0000-0000-000000000000"}] .}, ."serviceurls":{"HomeURI":"http://divacanto.dyndns.org:9000/", ..."GatekeeperURI":" http://divacanto.dyndns.org:9000/", ..."InventoryServerURI":"http://divacanto.dyndns.org:9000/", ..."AssetServerURI":"http://divacanto.dyndns.org:9000/", ..."FriendsServerURI":"http://divacanto.dyndns.org:9000/", ..."ProfileServerURI":"http://divacanto.dyndns.org:9000/profiles/", ..."IMServerURI":"http://divacanto.dyndns.org:9000/"} } {"agent_id":"5745cd8c-33df-403f-8d3d-da489ea1022b", ."gatekeeper_serveruri":"http://ucigrid01.nacs.uci.edu:9001/", ."gatekeeper_host":"ucigrid01.nacs.uci.edu", ."gatekeeper_port":"9001", ."destination_x":"275456", ."destination_y":"275456", ."destination_name":"Diva's Office 1", ."destination_uuid":"5e6d615b-c7b0-40b4-9868-87924d533d62", ."destination_serveruri":"http://ucigrid01.nacs.uci.edu:9001/", ."base_folder":"00000000-0000-0000-0000-000000000000", ...rest is the same as in CreateForeignAgentData... } |