<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://opensimulator.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://opensimulator.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lulurun</id>
		<title>OpenSimulator - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://opensimulator.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lulurun"/>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Special:Contributions/Lulurun"/>
		<updated>2026-06-13T09:03:14Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.19.9</generator>

	<entry>
		<id>http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service</id>
		<title>Security vulnerability brought by non-check inventory service</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service"/>
				<updated>2008-08-12T06:47:46Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* RegionServer side */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Problem ==&lt;br /&gt;
&lt;br /&gt;
With the following conditions, one can simply take over the full control(CRUD) of other user's inventory.&lt;br /&gt;
# InventoryServer is exposed to the public.&lt;br /&gt;
# user's UUID is given&lt;br /&gt;
&lt;br /&gt;
Simply describe in the following figure:&lt;br /&gt;
*InventoryServer is a normal http server, the normal way to use it is:&lt;br /&gt;
**user get the authentication from UserServer&lt;br /&gt;
**user control its inventory through RegionServer&lt;br /&gt;
*But since the InventoryServer accepts any request without check if the user is authenticated, or, even it does not check if the request is from a RegionServer.&lt;br /&gt;
*So, if you know other users' UUID, you can send CRUD http requests directly to the InventoryServer without login.&lt;br /&gt;
&lt;br /&gt;
[[Image:secure_inventory_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
And [[Avatar_portability_version_2|AvatarPortability]] needs a public inventory server,&lt;br /&gt;
so we have to make a secure one.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
&lt;br /&gt;
* every inventory operation packet contains a &amp;quot;session_id&amp;quot; field, but it is never used.&lt;br /&gt;
* so, a secure inventory service could be like this&lt;br /&gt;
[[Image:secure_inventory_2.PNG]]&lt;br /&gt;
* &amp;quot;session_id&amp;quot; is a important information, that is(should be) only transfered in a login session.&lt;br /&gt;
**&amp;quot;expect_user&amp;quot; transfer &amp;quot;session_id&amp;quot; from UserServer to RegionServer only when the authentication is OK, so &amp;quot;expect_user&amp;quot; is safe.&lt;br /&gt;
**method, such like &amp;quot;get_agent_by_uuid&amp;quot; is very dangerous.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== RegionServer side ===&lt;br /&gt;
* in OpenSim.ini, [Network] section,&lt;br /&gt;
 inventory_server_url = http://127.0.0.1:8004&lt;br /&gt;
 '''secure_inventory_server''' = true / false&lt;br /&gt;
* if the inventory server specified by &amp;quot;inventory_server_url&amp;quot; is a &amp;quot;secure&amp;quot; inventory server,set &amp;quot;secure_inventory_server = true&amp;quot;, then inventory request from the regionserver will be attached a session_id&lt;br /&gt;
* else, set secure_inventory_server = false, in this case, session_id is not attached with every inventory request.&lt;br /&gt;
** This option is only useful when you want your regionserver to connect to a '''old inventoryserver''' - an inventory server do not expect a session_id.&lt;br /&gt;
&lt;br /&gt;
=== InventoryServer side ===&lt;br /&gt;
* in InventoryServer_Config.xml,&lt;br /&gt;
 '''session_lookup''' = true / false&lt;br /&gt;
 (* for the session_lookup please also refer the above picture.)&lt;br /&gt;
* if you want inventory server to validate the incoming session_id, set session_lookup = true&lt;br /&gt;
* else, set session_lookup = false&lt;br /&gt;
** this makes inventory server accept any request, just like before.&lt;br /&gt;
&lt;br /&gt;
=== *NOTE* ===&lt;br /&gt;
* no matter '''session_lookup''' is true or false, '''new inventoryserver''' requires session_id in every inventory request. if you want your regionserver to connect to a '''new inventoryserver''', you should always set '''secure_inventory_server = true''' in OpenSim.ini.&lt;br /&gt;
* here '''new inventoryserver''' means inventoryserver after svn revision 5600.&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service</id>
		<title>Security vulnerability brought by non-check inventory service</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service"/>
				<updated>2008-08-12T06:44:04Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Problem ==&lt;br /&gt;
&lt;br /&gt;
With the following conditions, one can simply take over the full control(CRUD) of other user's inventory.&lt;br /&gt;
# InventoryServer is exposed to the public.&lt;br /&gt;
# user's UUID is given&lt;br /&gt;
&lt;br /&gt;
Simply describe in the following figure:&lt;br /&gt;
*InventoryServer is a normal http server, the normal way to use it is:&lt;br /&gt;
**user get the authentication from UserServer&lt;br /&gt;
**user control its inventory through RegionServer&lt;br /&gt;
*But since the InventoryServer accepts any request without check if the user is authenticated, or, even it does not check if the request is from a RegionServer.&lt;br /&gt;
*So, if you know other users' UUID, you can send CRUD http requests directly to the InventoryServer without login.&lt;br /&gt;
&lt;br /&gt;
[[Image:secure_inventory_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
And [[Avatar_portability_version_2|AvatarPortability]] needs a public inventory server,&lt;br /&gt;
so we have to make a secure one.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
&lt;br /&gt;
* every inventory operation packet contains a &amp;quot;session_id&amp;quot; field, but it is never used.&lt;br /&gt;
* so, a secure inventory service could be like this&lt;br /&gt;
[[Image:secure_inventory_2.PNG]]&lt;br /&gt;
* &amp;quot;session_id&amp;quot; is a important information, that is(should be) only transfered in a login session.&lt;br /&gt;
**&amp;quot;expect_user&amp;quot; transfer &amp;quot;session_id&amp;quot; from UserServer to RegionServer only when the authentication is OK, so &amp;quot;expect_user&amp;quot; is safe.&lt;br /&gt;
**method, such like &amp;quot;get_agent_by_uuid&amp;quot; is very dangerous.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== RegionServer side ===&lt;br /&gt;
* in OpenSim.ini, [Network] section,&lt;br /&gt;
 inventory_server_url = http://127.0.0.1:8004&lt;br /&gt;
 '''secure_inventory_server''' = true / false&lt;br /&gt;
* if the inventory server specified by &amp;quot;inventory_server_url&amp;quot; is a &amp;quot;secure&amp;quot; inventory server,set &amp;quot;secure_inventory_server = true&amp;quot;, then inventory request from the regionserver will not be attached a session_id&lt;br /&gt;
* else, set secure_inventory_server = false, in this case, session_id is attached with every inventory request.&lt;br /&gt;
** This option is only useful when you want your regionserver to connect to a '''old inventoryserver''' - an inventory server do not expect a session_id.&lt;br /&gt;
&lt;br /&gt;
=== InventoryServer side ===&lt;br /&gt;
* in InventoryServer_Config.xml,&lt;br /&gt;
 '''session_lookup''' = true / false&lt;br /&gt;
 (* for the session_lookup please also refer the above picture.)&lt;br /&gt;
* if you want inventory server to validate the incoming session_id, set session_lookup = true&lt;br /&gt;
* else, set session_lookup = false&lt;br /&gt;
** this makes inventory server accept any request, just like before.&lt;br /&gt;
&lt;br /&gt;
=== *NOTE* ===&lt;br /&gt;
* no matter '''session_lookup''' is true or false, '''new inventoryserver''' requires session_id in every inventory request. if you want your regionserver to connect to a '''new inventoryserver''', you should always set '''secure_inventory_server = true''' in OpenSim.ini.&lt;br /&gt;
* here '''new inventoryserver''' means inventoryserver after svn revision 5600.&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service</id>
		<title>Security vulnerability brought by non-check inventory service</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service"/>
				<updated>2008-08-12T06:42:26Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* RegionServer side */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# (If a foreign user can login)[[Avatar_portability_version_2|How to get a foreign user's belongings]](including appearance, inventory)&lt;br /&gt;
# '''Security'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented the 2nd and the 3rd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
&lt;br /&gt;
With the following conditions, one can simply take over the full control(CRUD) of other user's inventory.&lt;br /&gt;
# InventoryServer is exposed to the public.&lt;br /&gt;
# user's UUID is given&lt;br /&gt;
&lt;br /&gt;
Simply describe in the following figure:&lt;br /&gt;
*InventoryServer is a normal http server, the normal way to use it is:&lt;br /&gt;
**user get the authentication from UserServer&lt;br /&gt;
**user control its inventory through RegionServer&lt;br /&gt;
*But since the InventoryServer accepts any request without check if the user is authenticated, or, even it does not check if the request is from a RegionServer.&lt;br /&gt;
*So, if you know other users' UUID, you can send CRUD http requests directly to the InventoryServer without login.&lt;br /&gt;
&lt;br /&gt;
[[Image:secure_inventory_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
And [[Avatar_portability_version_2|AvatarPortability]] needs a public inventory server,&lt;br /&gt;
so we have to make a secure one.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
&lt;br /&gt;
* every inventory operation packet contains a &amp;quot;session_id&amp;quot; field, but it is never used.&lt;br /&gt;
* so, a secure inventory service could be like this&lt;br /&gt;
[[Image:secure_inventory_2.PNG]]&lt;br /&gt;
* &amp;quot;session_id&amp;quot; is a important information, that is(should be) only transfered in a login session.&lt;br /&gt;
**&amp;quot;expect_user&amp;quot; transfer &amp;quot;session_id&amp;quot; from UserServer to RegionServer only when the authentication is OK, so &amp;quot;expect_user&amp;quot; is safe.&lt;br /&gt;
**method, such like &amp;quot;get_agent_by_uuid&amp;quot; is very dangerous.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== RegionServer side ===&lt;br /&gt;
* in OpenSim.ini, [Network] section,&lt;br /&gt;
 inventory_server_url = http://127.0.0.1:8004&lt;br /&gt;
 '''secure_inventory_server''' = true / false&lt;br /&gt;
* if the inventory server specified by &amp;quot;inventory_server_url&amp;quot; is a &amp;quot;secure&amp;quot; inventory server,set &amp;quot;secure_inventory_server = true&amp;quot;, then inventory request from the regionserver will not be attached a session_id&lt;br /&gt;
* else, set secure_inventory_server = false, in this case, session_id is attached with every inventory request.&lt;br /&gt;
** This option is only useful when you want your regionserver to connect to a '''old inventoryserver''' - an inventory server do not expect a session_id.&lt;br /&gt;
&lt;br /&gt;
=== InventoryServer side ===&lt;br /&gt;
* in InventoryServer_Config.xml,&lt;br /&gt;
 '''session_lookup''' = true / false&lt;br /&gt;
 (* for the session_lookup please also refer the above picture.)&lt;br /&gt;
* if you want inventory server to validate the incoming session_id, set session_lookup = true&lt;br /&gt;
* else, set session_lookup = false&lt;br /&gt;
** this makes inventory server accept any request, just like before.&lt;br /&gt;
&lt;br /&gt;
=== *NOTE* ===&lt;br /&gt;
* no matter '''session_lookup''' is true or false, '''new inventoryserver''' requires session_id in every inventory request. if you want your regionserver to connect to a '''new inventoryserver''', you should always set '''secure_inventory_server = true''' in OpenSim.ini.&lt;br /&gt;
* here '''new inventoryserver''' means inventoryserver after svn revision 5600.&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service</id>
		<title>Security vulnerability brought by non-check inventory service</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service"/>
				<updated>2008-08-12T06:41:53Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* NOTE */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# (If a foreign user can login)[[Avatar_portability_version_2|How to get a foreign user's belongings]](including appearance, inventory)&lt;br /&gt;
# '''Security'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented the 2nd and the 3rd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
&lt;br /&gt;
With the following conditions, one can simply take over the full control(CRUD) of other user's inventory.&lt;br /&gt;
# InventoryServer is exposed to the public.&lt;br /&gt;
# user's UUID is given&lt;br /&gt;
&lt;br /&gt;
Simply describe in the following figure:&lt;br /&gt;
*InventoryServer is a normal http server, the normal way to use it is:&lt;br /&gt;
**user get the authentication from UserServer&lt;br /&gt;
**user control its inventory through RegionServer&lt;br /&gt;
*But since the InventoryServer accepts any request without check if the user is authenticated, or, even it does not check if the request is from a RegionServer.&lt;br /&gt;
*So, if you know other users' UUID, you can send CRUD http requests directly to the InventoryServer without login.&lt;br /&gt;
&lt;br /&gt;
[[Image:secure_inventory_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
And [[Avatar_portability_version_2|AvatarPortability]] needs a public inventory server,&lt;br /&gt;
so we have to make a secure one.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
&lt;br /&gt;
* every inventory operation packet contains a &amp;quot;session_id&amp;quot; field, but it is never used.&lt;br /&gt;
* so, a secure inventory service could be like this&lt;br /&gt;
[[Image:secure_inventory_2.PNG]]&lt;br /&gt;
* &amp;quot;session_id&amp;quot; is a important information, that is(should be) only transfered in a login session.&lt;br /&gt;
**&amp;quot;expect_user&amp;quot; transfer &amp;quot;session_id&amp;quot; from UserServer to RegionServer only when the authentication is OK, so &amp;quot;expect_user&amp;quot; is safe.&lt;br /&gt;
**method, such like &amp;quot;get_agent_by_uuid&amp;quot; is very dangerous.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== RegionServer side ===&lt;br /&gt;
* in OpenSim.ini, [Network] section,&lt;br /&gt;
 inventory_server_url = http://127.0.0.1:8004&lt;br /&gt;
 '''secure_inventory_server''' = true / false&lt;br /&gt;
* if the inventory server specified by &amp;quot;inventory_server_url&amp;quot; is a &amp;quot;secure&amp;quot; inventory server,&lt;br /&gt;
set &amp;quot;secure_inventory_server = true&amp;quot;, then inventory request from the regionserver will not be&lt;br /&gt;
attached a session_id&lt;br /&gt;
* else, set secure_inventory_server = false, in this case, session_id is attached with every inventory request.&lt;br /&gt;
** This option is only useful when you want your regionserver to connect to a '''old inventoryserver''' - an inventory server do not expect a session_id.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== InventoryServer side ===&lt;br /&gt;
* in InventoryServer_Config.xml,&lt;br /&gt;
 '''session_lookup''' = true / false&lt;br /&gt;
 (* for the session_lookup please also refer the above picture.)&lt;br /&gt;
* if you want inventory server to validate the incoming session_id, set session_lookup = true&lt;br /&gt;
* else, set session_lookup = false&lt;br /&gt;
** this makes inventory server accept any request, just like before.&lt;br /&gt;
&lt;br /&gt;
=== *NOTE* ===&lt;br /&gt;
* no matter '''session_lookup''' is true or false, '''new inventoryserver''' requires session_id in every inventory request. if you want your regionserver to connect to a '''new inventoryserver''', you should always set '''secure_inventory_server = true''' in OpenSim.ini.&lt;br /&gt;
* here '''new inventoryserver''' means inventoryserver after svn revision 5600.&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service</id>
		<title>Security vulnerability brought by non-check inventory service</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service"/>
				<updated>2008-08-12T06:41:34Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* InventoryServer side */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# (If a foreign user can login)[[Avatar_portability_version_2|How to get a foreign user's belongings]](including appearance, inventory)&lt;br /&gt;
# '''Security'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented the 2nd and the 3rd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
&lt;br /&gt;
With the following conditions, one can simply take over the full control(CRUD) of other user's inventory.&lt;br /&gt;
# InventoryServer is exposed to the public.&lt;br /&gt;
# user's UUID is given&lt;br /&gt;
&lt;br /&gt;
Simply describe in the following figure:&lt;br /&gt;
*InventoryServer is a normal http server, the normal way to use it is:&lt;br /&gt;
**user get the authentication from UserServer&lt;br /&gt;
**user control its inventory through RegionServer&lt;br /&gt;
*But since the InventoryServer accepts any request without check if the user is authenticated, or, even it does not check if the request is from a RegionServer.&lt;br /&gt;
*So, if you know other users' UUID, you can send CRUD http requests directly to the InventoryServer without login.&lt;br /&gt;
&lt;br /&gt;
[[Image:secure_inventory_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
And [[Avatar_portability_version_2|AvatarPortability]] needs a public inventory server,&lt;br /&gt;
so we have to make a secure one.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
&lt;br /&gt;
* every inventory operation packet contains a &amp;quot;session_id&amp;quot; field, but it is never used.&lt;br /&gt;
* so, a secure inventory service could be like this&lt;br /&gt;
[[Image:secure_inventory_2.PNG]]&lt;br /&gt;
* &amp;quot;session_id&amp;quot; is a important information, that is(should be) only transfered in a login session.&lt;br /&gt;
**&amp;quot;expect_user&amp;quot; transfer &amp;quot;session_id&amp;quot; from UserServer to RegionServer only when the authentication is OK, so &amp;quot;expect_user&amp;quot; is safe.&lt;br /&gt;
**method, such like &amp;quot;get_agent_by_uuid&amp;quot; is very dangerous.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== RegionServer side ===&lt;br /&gt;
* in OpenSim.ini, [Network] section,&lt;br /&gt;
 inventory_server_url = http://127.0.0.1:8004&lt;br /&gt;
 '''secure_inventory_server''' = true / false&lt;br /&gt;
* if the inventory server specified by &amp;quot;inventory_server_url&amp;quot; is a &amp;quot;secure&amp;quot; inventory server,&lt;br /&gt;
set &amp;quot;secure_inventory_server = true&amp;quot;, then inventory request from the regionserver will not be&lt;br /&gt;
attached a session_id&lt;br /&gt;
* else, set secure_inventory_server = false, in this case, session_id is attached with every inventory request.&lt;br /&gt;
** This option is only useful when you want your regionserver to connect to a '''old inventoryserver''' - an inventory server do not expect a session_id.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== InventoryServer side ===&lt;br /&gt;
* in InventoryServer_Config.xml,&lt;br /&gt;
 '''session_lookup''' = true / false&lt;br /&gt;
 (* for the session_lookup please also refer the above picture.)&lt;br /&gt;
* if you want inventory server to validate the incoming session_id, set session_lookup = true&lt;br /&gt;
* else, set session_lookup = false&lt;br /&gt;
** this makes inventory server accept any request, just like before.&lt;br /&gt;
&lt;br /&gt;
=== NOTE ===&lt;br /&gt;
* no matter '''session_lookup''' is true or false, '''new inventoryserver''' requires session_id in every inventory request. if you want your regionserver to connect to a '''new inventoryserver''', you should always set '''secure_inventory_server = true''' in OpenSim.ini.&lt;br /&gt;
* here '''new inventoryserver''' means inventoryserver after svn revision 5600.&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service</id>
		<title>Security vulnerability brought by non-check inventory service</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service"/>
				<updated>2008-08-12T06:41:08Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# (If a foreign user can login)[[Avatar_portability_version_2|How to get a foreign user's belongings]](including appearance, inventory)&lt;br /&gt;
# '''Security'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented the 2nd and the 3rd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
&lt;br /&gt;
With the following conditions, one can simply take over the full control(CRUD) of other user's inventory.&lt;br /&gt;
# InventoryServer is exposed to the public.&lt;br /&gt;
# user's UUID is given&lt;br /&gt;
&lt;br /&gt;
Simply describe in the following figure:&lt;br /&gt;
*InventoryServer is a normal http server, the normal way to use it is:&lt;br /&gt;
**user get the authentication from UserServer&lt;br /&gt;
**user control its inventory through RegionServer&lt;br /&gt;
*But since the InventoryServer accepts any request without check if the user is authenticated, or, even it does not check if the request is from a RegionServer.&lt;br /&gt;
*So, if you know other users' UUID, you can send CRUD http requests directly to the InventoryServer without login.&lt;br /&gt;
&lt;br /&gt;
[[Image:secure_inventory_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
And [[Avatar_portability_version_2|AvatarPortability]] needs a public inventory server,&lt;br /&gt;
so we have to make a secure one.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
&lt;br /&gt;
* every inventory operation packet contains a &amp;quot;session_id&amp;quot; field, but it is never used.&lt;br /&gt;
* so, a secure inventory service could be like this&lt;br /&gt;
[[Image:secure_inventory_2.PNG]]&lt;br /&gt;
* &amp;quot;session_id&amp;quot; is a important information, that is(should be) only transfered in a login session.&lt;br /&gt;
**&amp;quot;expect_user&amp;quot; transfer &amp;quot;session_id&amp;quot; from UserServer to RegionServer only when the authentication is OK, so &amp;quot;expect_user&amp;quot; is safe.&lt;br /&gt;
**method, such like &amp;quot;get_agent_by_uuid&amp;quot; is very dangerous.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== RegionServer side ===&lt;br /&gt;
* in OpenSim.ini, [Network] section,&lt;br /&gt;
 inventory_server_url = http://127.0.0.1:8004&lt;br /&gt;
 '''secure_inventory_server''' = true / false&lt;br /&gt;
* if the inventory server specified by &amp;quot;inventory_server_url&amp;quot; is a &amp;quot;secure&amp;quot; inventory server,&lt;br /&gt;
set &amp;quot;secure_inventory_server = true&amp;quot;, then inventory request from the regionserver will not be&lt;br /&gt;
attached a session_id&lt;br /&gt;
* else, set secure_inventory_server = false, in this case, session_id is attached with every inventory request.&lt;br /&gt;
** This option is only useful when you want your regionserver to connect to a '''old inventoryserver''' - an inventory server do not expect a session_id.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== InventoryServer side ===&lt;br /&gt;
* in InventoryServer_Config.xml,&lt;br /&gt;
 '''session_lookup''' = true / false&lt;br /&gt;
 (* for the session_lookup please also refer the above picture.)&lt;br /&gt;
* if you want inventory server to validate the incoming session_id, set session_lookup = true&lt;br /&gt;
* else, set session_lookup = false&lt;br /&gt;
** this makes inventory server accept any request, just like before.&lt;br /&gt;
&lt;br /&gt;
* NOTE: no matter '''session_lookup''' is true or false, '''new inventoryserver''' requires session_id in every inventory request. if you want your regionserver to connect to a '''new inventoryserver''', you should always set '''secure_inventory_server = true''' in OpenSim.ini.&lt;br /&gt;
* here '''new inventoryserver''' means inventoryserver after svn revision 5600.&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service</id>
		<title>Security vulnerability brought by non-check inventory service</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service"/>
				<updated>2008-08-12T06:39:35Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# (If a foreign user can login)[[Avatar_portability_version_2|How to get a foreign user's belongings]](including appearance, inventory)&lt;br /&gt;
# '''Security'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented the 2nd and the 3rd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
&lt;br /&gt;
With the following conditions, one can simply take over the full control(CRUD) of other user's inventory.&lt;br /&gt;
# InventoryServer is exposed to the public.&lt;br /&gt;
# user's UUID is given&lt;br /&gt;
&lt;br /&gt;
Simply describe in the following figure:&lt;br /&gt;
*InventoryServer is a normal http server, the normal way to use it is:&lt;br /&gt;
**user get the authentication from UserServer&lt;br /&gt;
**user control its inventory through RegionServer&lt;br /&gt;
*But since the InventoryServer accepts any request without check if the user is authenticated, or, even it does not check if the request is from a RegionServer.&lt;br /&gt;
*So, if you know other users' UUID, you can send CRUD http requests directly to the InventoryServer without login.&lt;br /&gt;
&lt;br /&gt;
[[Image:secure_inventory_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
And [[Avatar_portability_version_2|AvatarPortability]] needs a public inventory server,&lt;br /&gt;
so we have to make a secure one.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
&lt;br /&gt;
* every inventory operation packet contains a &amp;quot;session_id&amp;quot; field, but it is never used.&lt;br /&gt;
* so, a secure inventory service could be like this&lt;br /&gt;
[[Image:secure_inventory_2.PNG]]&lt;br /&gt;
* &amp;quot;session_id&amp;quot; is a important information, that is(should be) only transfered in a login session.&lt;br /&gt;
**&amp;quot;expect_user&amp;quot; transfer &amp;quot;session_id&amp;quot; from UserServer to RegionServer only when the authentication is OK, so &amp;quot;expect_user&amp;quot; is safe.&lt;br /&gt;
**method, such like &amp;quot;get_agent_by_uuid&amp;quot; is very dangerous.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
* RegionServer side&lt;br /&gt;
** in OpenSim.ini, [Network] section,&lt;br /&gt;
 inventory_server_url = http://127.0.0.1:8004&lt;br /&gt;
 '''secure_inventory_server''' = true / false&lt;br /&gt;
** if the inventory server specified by &amp;quot;inventory_server_url&amp;quot; is a &amp;quot;secure&amp;quot; inventory server,&lt;br /&gt;
set &amp;quot;secure_inventory_server = true&amp;quot;, then inventory request from the regionserver will not be&lt;br /&gt;
attached a session_id&lt;br /&gt;
** else, set secure_inventory_server = false, in this case, session_id is attached with every inventory request.&lt;br /&gt;
** This option is only useful when you want your regionserver to connect to a '''old inventoryserver''' - an inventory server do not expect a session_id.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* InventoryServer side&lt;br /&gt;
** in InventoryServer_Config.xml,&lt;br /&gt;
 '''session_lookup''' = true / false&lt;br /&gt;
 (* for the session_lookup please also refer the above picture.)&lt;br /&gt;
=* if you want inventory server to validate the incoming session_id, set session_lookup = true&lt;br /&gt;
-* else, set session_lookup = false&lt;br /&gt;
--* this makes inventory server accept any request, just like before.&lt;br /&gt;
&lt;br /&gt;
* NOTE: no matter '''session_lookup''' is true or false, '''new inventoryserver''' requires session_id in every inventory request. if you want your regionserver to connect to a '''new inventoryserver''', you should always set '''secure_inventory_server = true''' in OpenSim.ini.&lt;br /&gt;
* here '''new inventoryserver''' means inventoryserver after svn revision 5600.&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service</id>
		<title>Security vulnerability brought by non-check inventory service</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service"/>
				<updated>2008-08-12T06:39:11Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# (If a foreign user can login)[[Avatar_portability_version_2|How to get a foreign user's belongings]](including appearance, inventory)&lt;br /&gt;
# '''Security'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented the 2nd and the 3rd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
&lt;br /&gt;
With the following conditions, one can simply take over the full control(CRUD) of other user's inventory.&lt;br /&gt;
# InventoryServer is exposed to the public.&lt;br /&gt;
# user's UUID is given&lt;br /&gt;
&lt;br /&gt;
Simply describe in the following figure:&lt;br /&gt;
*InventoryServer is a normal http server, the normal way to use it is:&lt;br /&gt;
**user get the authentication from UserServer&lt;br /&gt;
**user control its inventory through RegionServer&lt;br /&gt;
*But since the InventoryServer accepts any request without check if the user is authenticated, or, even it does not check if the request is from a RegionServer.&lt;br /&gt;
*So, if you know other users' UUID, you can send CRUD http requests directly to the InventoryServer without login.&lt;br /&gt;
&lt;br /&gt;
[[Image:secure_inventory_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
And [[Avatar_portability_version_2|AvatarPortability]] needs a public inventory server,&lt;br /&gt;
so we have to make a secure one.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
&lt;br /&gt;
* every inventory operation packet contains a &amp;quot;session_id&amp;quot; field, but it is never used.&lt;br /&gt;
* so, a secure inventory service could be like this&lt;br /&gt;
[[Image:secure_inventory_2.PNG]]&lt;br /&gt;
* &amp;quot;session_id&amp;quot; is a important information, that is(should be) only transfered in a login session.&lt;br /&gt;
**&amp;quot;expect_user&amp;quot; transfer &amp;quot;session_id&amp;quot; from UserServer to RegionServer only when the authentication is OK, so &amp;quot;expect_user&amp;quot; is safe.&lt;br /&gt;
**method, such like &amp;quot;get_agent_by_uuid&amp;quot; is very dangerous.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
* RegionServer side&lt;br /&gt;
** in OpenSim.ini, [Network] section,&lt;br /&gt;
 inventory_server_url = http://127.0.0.1:8004&lt;br /&gt;
 '''secure_inventory_server''' = true / false&lt;br /&gt;
** if the inventory server specified by &amp;quot;inventory_server_url&amp;quot; is a &amp;quot;secure&amp;quot; inventory server,&lt;br /&gt;
set &amp;quot;secure_inventory_server = true&amp;quot;, then inventory request from the regionserver will not be&lt;br /&gt;
attached a session_id&lt;br /&gt;
** else, set secure_inventory_server = false, in this case, session_id is attached with every inventory request.&lt;br /&gt;
** This option is only useful when you want your regionserver to connect to a '''old inventoryserver''' - an inventory server do not expect a session_id.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* InventoryServer side&lt;br /&gt;
** in InventoryServer_Config.xml,&lt;br /&gt;
 '''session_lookup''' = true / false&lt;br /&gt;
 (* for the session_lookup please also refer the above picture.)&lt;br /&gt;
-* if you want inventory server to validate the incoming session_id, set session_lookup = true&lt;br /&gt;
-* else, set session_lookup = false&lt;br /&gt;
--* this makes inventory server accept any request, just like before.&lt;br /&gt;
&lt;br /&gt;
* NOTE: no matter '''session_lookup''' is true or false, '''new inventoryserver''' requires session_id in every inventory request. if you want your regionserver to connect to a '''new inventoryserver''', you should always set '''secure_inventory_server = true''' in OpenSim.ini.&lt;br /&gt;
* here '''new inventoryserver''' means inventoryserver after svn revision 5600.&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service</id>
		<title>Security vulnerability brought by non-check inventory service</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service"/>
				<updated>2008-08-12T06:38:09Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# (If a foreign user can login)[[Avatar_portability_version_2|How to get a foreign user's belongings]](including appearance, inventory)&lt;br /&gt;
# '''Security'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented the 2nd and the 3rd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
&lt;br /&gt;
With the following conditions, one can simply take over the full control(CRUD) of other user's inventory.&lt;br /&gt;
# InventoryServer is exposed to the public.&lt;br /&gt;
# user's UUID is given&lt;br /&gt;
&lt;br /&gt;
Simply describe in the following figure:&lt;br /&gt;
*InventoryServer is a normal http server, the normal way to use it is:&lt;br /&gt;
**user get the authentication from UserServer&lt;br /&gt;
**user control its inventory through RegionServer&lt;br /&gt;
*But since the InventoryServer accepts any request without check if the user is authenticated, or, even it does not check if the request is from a RegionServer.&lt;br /&gt;
*So, if you know other users' UUID, you can send CRUD http requests directly to the InventoryServer without login.&lt;br /&gt;
&lt;br /&gt;
[[Image:secure_inventory_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
And [[Avatar_portability_version_2|AvatarPortability]] needs a public inventory server,&lt;br /&gt;
so we have to make a secure one.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
&lt;br /&gt;
* every inventory operation packet contains a &amp;quot;session_id&amp;quot; field, but it is never used.&lt;br /&gt;
* so, a secure inventory service could be like this&lt;br /&gt;
[[Image:secure_inventory_2.PNG]]&lt;br /&gt;
* &amp;quot;session_id&amp;quot; is a important information, that is(should be) only transfered in a login session.&lt;br /&gt;
**&amp;quot;expect_user&amp;quot; transfer &amp;quot;session_id&amp;quot; from UserServer to RegionServer only when the authentication is OK, so &amp;quot;expect_user&amp;quot; is safe.&lt;br /&gt;
**method, such like &amp;quot;get_agent_by_uuid&amp;quot; is very dangerous.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
* RegionServer side&lt;br /&gt;
** in OpenSim.ini, [Network] section,&lt;br /&gt;
 inventory_server_url = http://127.0.0.1:8004&lt;br /&gt;
 '''secure_inventory_server''' = true / false&lt;br /&gt;
** if the inventory server specified by &amp;quot;inventory_server_url&amp;quot; is a &amp;quot;secure&amp;quot; inventory server,&lt;br /&gt;
set &amp;quot;secure_inventory_server = true&amp;quot;, then inventory request from the regionserver will not be&lt;br /&gt;
attached a session_id&lt;br /&gt;
** else, set secure_inventory_server = false, in this case, session_id is attached with every inventory request.&lt;br /&gt;
** This option is only useful when you want your regionserver to connect to a '''old inventoryserver''' - an inventory server do not expect a session_id.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* InventoryServer side&lt;br /&gt;
** in InventoryServer_Config.xml,&lt;br /&gt;
 '''session_lookup''' = true / false&lt;br /&gt;
 (* for the session_lookup please also refer the above picture.)&lt;br /&gt;
** if you want inventory server to validate the incoming session_id, set session_lookup = true&lt;br /&gt;
** else, set session_lookup = false&lt;br /&gt;
*** this makes inventory server accept any request, just like before.&lt;br /&gt;
&lt;br /&gt;
* NOTE: no matter '''session_lookup''' is true or false, '''new inventoryserver''' requires session_id in every inventory request. if you want your regionserver to connect to a '''new inventoryserver''', you should always set '''secure_inventory_server = true''' in OpenSim.ini.&lt;br /&gt;
* here '''new inventoryserver''' means inventoryserver after svn revision 5600.&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service</id>
		<title>Security vulnerability brought by non-check inventory service</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service"/>
				<updated>2008-08-12T06:07:12Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# (If a foreign user can login)[[Avatar_portability_version_2|How to get a foreign user's belongings]](including appearance, inventory)&lt;br /&gt;
# '''Security'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented the 2nd and the 3rd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
&lt;br /&gt;
With the following conditions, one can simply take over the full control(CRUD) of other user's inventory.&lt;br /&gt;
# InventoryServer is exposed to the public.&lt;br /&gt;
# user's UUID is given&lt;br /&gt;
&lt;br /&gt;
Simply describe in the following figure:&lt;br /&gt;
*InventoryServer is a normal http server, the normal way to use it is:&lt;br /&gt;
**user get the authentication from UserServer&lt;br /&gt;
**user control its inventory through RegionServer&lt;br /&gt;
*But since the InventoryServer accepts any request without check if the user is authenticated, or, even it does not check if the request is from a RegionServer.&lt;br /&gt;
*So, if you know other users' UUID, you can send CRUD http requests directly to the InventoryServer without login.&lt;br /&gt;
&lt;br /&gt;
[[Image:secure_inventory_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
And [[Avatar_portability_version_2|AvatarPortability]] needs a public inventory server,&lt;br /&gt;
so we have to make a secure one.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
&lt;br /&gt;
* every inventory operation packet contains a &amp;quot;session_id&amp;quot; field, but it is never used.&lt;br /&gt;
* so, a secure inventory service could be like this&lt;br /&gt;
[[Image:secure_inventory_2.PNG]]&lt;br /&gt;
* &amp;quot;session_id&amp;quot; is a important information, that is(should be) only transfered in a login session.&lt;br /&gt;
**&amp;quot;expect_user&amp;quot; transfer &amp;quot;session_id&amp;quot; from UserServer to RegionServer only when the authentication is OK, so &amp;quot;expect_user&amp;quot; is safe.&lt;br /&gt;
**method, such like &amp;quot;get_agent_by_uuid&amp;quot; is very dangerous.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
# RegionServer side&lt;br /&gt;
** OpenSim.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# InventoryServer side&lt;br /&gt;
** InventoryServer_Config.xml&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service</id>
		<title>Security vulnerability brought by non-check inventory service</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service"/>
				<updated>2008-08-12T06:06:53Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# (If a foreign user can login)[[Avatar_portability_version_2|How to get a foreign user's belongings]](including appearance, inventory)&lt;br /&gt;
# '''Security'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented the 2nd and the 3rd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
&lt;br /&gt;
With the following conditions, one can simply take over the full control(CRUD) of other user's inventory.&lt;br /&gt;
# InventoryServer is exposed to the public.&lt;br /&gt;
# user's UUID is given&lt;br /&gt;
&lt;br /&gt;
Simply describe in the following figure:&lt;br /&gt;
*InventoryServer is a normal http server, the normal way to use it is:&lt;br /&gt;
**user get the authentication from UserServer&lt;br /&gt;
**user control its inventory through RegionServer&lt;br /&gt;
*But since the InventoryServer accepts any request without check if the user is authenticated, or, even it does not check if the request is from a RegionServer.&lt;br /&gt;
*So, if you know other users' UUID, you can send CRUD http requests directly to the InventoryServer without login.&lt;br /&gt;
&lt;br /&gt;
[[Image:secure_inventory_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
And [[Avatar_portability_version_2|AvatarPortability]] needs a public inventory server,&lt;br /&gt;
so we have to make a secure one.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
&lt;br /&gt;
* every inventory operation packet contains a &amp;quot;session_id&amp;quot; field, but it is never used.&lt;br /&gt;
* so, a secure inventory service could be like this&lt;br /&gt;
[[Image:secure_inventory_2.PNG]]&lt;br /&gt;
* &amp;quot;session_id&amp;quot; is a important information, that is(should be) only transfered in a login session.&lt;br /&gt;
**&amp;quot;expect_user&amp;quot; transfer &amp;quot;session_id&amp;quot; from UserServer to RegionServer only when the authentication is OK, so &amp;quot;expect_user&amp;quot; is safe.&lt;br /&gt;
**method, such like &amp;quot;get_agent_by_uuid&amp;quot; is very dangerous.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
# RegionServer side&lt;br /&gt;
OpenSim.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# InventoryServer side&lt;br /&gt;
InventoryServer_Config.xml&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service</id>
		<title>Security vulnerability brought by non-check inventory service</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service"/>
				<updated>2008-07-23T06:47:38Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# (If a foreign user can login)[[Avatar_portability_version_2|How to get a foreign user's belongings]](including appearance, inventory)&lt;br /&gt;
# '''Security'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented the 2nd and the 3rd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
&lt;br /&gt;
With the following conditions, one can simply take over the full control(CRUD) of other user's inventory.&lt;br /&gt;
# InventoryServer is exposed to the public.&lt;br /&gt;
# user's UUID is given&lt;br /&gt;
&lt;br /&gt;
Simply describe in the following figure:&lt;br /&gt;
*InventoryServer is a normal http server, the normal way to use it is:&lt;br /&gt;
**user get the authentication from UserServer&lt;br /&gt;
**user control its inventory through RegionServer&lt;br /&gt;
*But since the InventoryServer accepts any request without check if the user is authenticated, or, even it does not check if the request is from a RegionServer.&lt;br /&gt;
*So, if you know other users' UUID, you can send CRUD http requests directly to the InventoryServer without login.&lt;br /&gt;
&lt;br /&gt;
[[Image:secure_inventory_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
And [[Avatar_portability_version_2|AvatarPortability]] needs a public inventory server,&lt;br /&gt;
so we have to make a secure one.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
&lt;br /&gt;
* every inventory operation packet contains a &amp;quot;session_id&amp;quot; field, but it is never used.&lt;br /&gt;
* so, a secure inventory service could be like this&lt;br /&gt;
[[Image:secure_inventory_2.PNG]]&lt;br /&gt;
* &amp;quot;session_id&amp;quot; is a important information, that is(should be) only transfered in a login session.&lt;br /&gt;
**&amp;quot;expect_user&amp;quot; transfer &amp;quot;session_id&amp;quot; from UserServer to RegionServer only when the authentication is OK, so &amp;quot;expect_user&amp;quot; is safe.&lt;br /&gt;
**method, such like &amp;quot;get_agent_by_uuid&amp;quot; is very dangerous.&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
A patch is under preparing&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service</id>
		<title>Security vulnerability brought by non-check inventory service</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service"/>
				<updated>2008-07-22T16:36:21Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Solution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# (If a foreign user can login)[[Avatar_portability_version_2|How to get a foreign user's belongings]](including appearance, inventory)&lt;br /&gt;
# '''Security'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented the 2nd and the 3rd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
&lt;br /&gt;
With the following conditions, one can simply take over the full control(CRUD) of other user's inventory.&lt;br /&gt;
# InventoryServer is exposed to the public.&lt;br /&gt;
# user's UUID is given&lt;br /&gt;
&lt;br /&gt;
Simply describe in the following figure:&lt;br /&gt;
*InventoryServer is a normal http server, the normal way to use it is:&lt;br /&gt;
**user get the authentication from UserServer&lt;br /&gt;
**user control its inventory through RegionServer&lt;br /&gt;
*But since the InventoryServer accepts any request without check if the user is authenticated, or, even it does not check if the request is from a RegionServer.&lt;br /&gt;
*So, if you know other users' UUID, you can send CRUD http requests directly to the InventoryServer without login.&lt;br /&gt;
&lt;br /&gt;
[[Image:secure_inventory_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
And [[Avatar_portability_version_2|AvatarPortability]] needs a public inventory server,&lt;br /&gt;
so we have to make a secure one.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
&lt;br /&gt;
* every inventory operation packet contains a &amp;quot;session_id&amp;quot; field, but it is never used.&lt;br /&gt;
* so, a secure inventory service could be like this&lt;br /&gt;
[[Image:secure_inventory_2.PNG]]&lt;br /&gt;
* &amp;quot;session_id&amp;quot; is a important information, that is(should be) only transfered in a login session.&lt;br /&gt;
**&amp;quot;expect_user&amp;quot; transfer &amp;quot;session_id&amp;quot; from UserServer to RegionServer only when the authentication is OK, so &amp;quot;expect_user&amp;quot; is safe.&lt;br /&gt;
**method, such like &amp;quot;get_agent_by_uuid&amp;quot; is very dangerous.&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service</id>
		<title>Security vulnerability brought by non-check inventory service</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service"/>
				<updated>2008-07-22T16:36:02Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Solution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# (If a foreign user can login)[[Avatar_portability_version_2|How to get a foreign user's belongings]](including appearance, inventory)&lt;br /&gt;
# '''Security'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented the 2nd and the 3rd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
&lt;br /&gt;
With the following conditions, one can simply take over the full control(CRUD) of other user's inventory.&lt;br /&gt;
# InventoryServer is exposed to the public.&lt;br /&gt;
# user's UUID is given&lt;br /&gt;
&lt;br /&gt;
Simply describe in the following figure:&lt;br /&gt;
*InventoryServer is a normal http server, the normal way to use it is:&lt;br /&gt;
**user get the authentication from UserServer&lt;br /&gt;
**user control its inventory through RegionServer&lt;br /&gt;
*But since the InventoryServer accepts any request without check if the user is authenticated, or, even it does not check if the request is from a RegionServer.&lt;br /&gt;
*So, if you know other users' UUID, you can send CRUD http requests directly to the InventoryServer without login.&lt;br /&gt;
&lt;br /&gt;
[[Image:secure_inventory_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
And [[Avatar_portability_version_2|AvatarPortability]] needs a public inventory server,&lt;br /&gt;
so we have to make a secure one.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
&lt;br /&gt;
* every inventory operation packet contains a &amp;quot;session_id&amp;quot; field, but it is never used.&lt;br /&gt;
* so, a secure inventory service could be like this&lt;br /&gt;
[[Image:secure_inventory_2.PNG]]&lt;br /&gt;
* &amp;quot;session_id&amp;quot; is a important information, that is(should be) only transfered in a login session.&lt;br /&gt;
**expect_user transfer &amp;quot;session_id&amp;quot; from UserServer to RegionServer only when the authentication is OK, so &amp;quot;expect_user&amp;quot; is safe.&lt;br /&gt;
**method, such like &amp;quot;get_agent_by_uuid&amp;quot; is very dangerous.&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service</id>
		<title>Security vulnerability brought by non-check inventory service</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service"/>
				<updated>2008-07-22T16:34:28Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Solution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# (If a foreign user can login)[[Avatar_portability_version_2|How to get a foreign user's belongings]](including appearance, inventory)&lt;br /&gt;
# '''Security'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented the 2nd and the 3rd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
&lt;br /&gt;
With the following conditions, one can simply take over the full control(CRUD) of other user's inventory.&lt;br /&gt;
# InventoryServer is exposed to the public.&lt;br /&gt;
# user's UUID is given&lt;br /&gt;
&lt;br /&gt;
Simply describe in the following figure:&lt;br /&gt;
*InventoryServer is a normal http server, the normal way to use it is:&lt;br /&gt;
**user get the authentication from UserServer&lt;br /&gt;
**user control its inventory through RegionServer&lt;br /&gt;
*But since the InventoryServer accepts any request without check if the user is authenticated, or, even it does not check if the request is from a RegionServer.&lt;br /&gt;
*So, if you know other users' UUID, you can send CRUD http requests directly to the InventoryServer without login.&lt;br /&gt;
&lt;br /&gt;
[[Image:secure_inventory_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
And [[Avatar_portability_version_2|AvatarPortability]] needs a public inventory server,&lt;br /&gt;
so we have to make a secure one.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
&lt;br /&gt;
* every inventory operation packet contains a &amp;quot;session_id&amp;quot; field, but it is never used.&lt;br /&gt;
* so, a secure inventory service could be like this&lt;br /&gt;
[[Image:secure_inventory_2.PNG]]&lt;br /&gt;
* &amp;quot;session_id&amp;quot; is a important information, that is(should be) only transfered in a login session.&lt;br /&gt;
**method, such like &amp;quot;get_agent_by_uuid&amp;quot; is very dangerous.&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/File:Secure_inventory_2.PNG</id>
		<title>File:Secure inventory 2.PNG</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/File:Secure_inventory_2.PNG"/>
				<updated>2008-07-22T16:24:46Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service</id>
		<title>Security vulnerability brought by non-check inventory service</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service"/>
				<updated>2008-07-22T16:24:23Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Solution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# (If a foreign user can login)[[Avatar_portability_version_2|How to get a foreign user's belongings]](including appearance, inventory)&lt;br /&gt;
# '''Security'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented the 2nd and the 3rd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
&lt;br /&gt;
With the following conditions, one can simply take over the full control(CRUD) of other user's inventory.&lt;br /&gt;
# InventoryServer is exposed to the public.&lt;br /&gt;
# user's UUID is given&lt;br /&gt;
&lt;br /&gt;
Simply describe in the following figure:&lt;br /&gt;
*InventoryServer is a normal http server, the normal way to use it is:&lt;br /&gt;
**user get the authentication from UserServer&lt;br /&gt;
**user control its inventory through RegionServer&lt;br /&gt;
*But since the InventoryServer accepts any request without check if the user is authenticated, or, even it does not check if the request is from a RegionServer.&lt;br /&gt;
*So, if you know other users' UUID, you can send CRUD http requests directly to the InventoryServer without login.&lt;br /&gt;
&lt;br /&gt;
[[Image:secure_inventory_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
And [[Avatar_portability_version_2|AvatarPortability]] needs a public inventory server,&lt;br /&gt;
so we have to make a secure one.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
&lt;br /&gt;
[[Image:secure_inventory_2.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/File:Secure_inventory_1.PNG</id>
		<title>File:Secure inventory 1.PNG</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/File:Secure_inventory_1.PNG"/>
				<updated>2008-07-22T16:12:00Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service</id>
		<title>Security vulnerability brought by non-check inventory service</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service"/>
				<updated>2008-07-22T16:11:47Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Problem */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# (If a foreign user can login)[[Avatar_portability_version_2|How to get a foreign user's belongings]](including appearance, inventory)&lt;br /&gt;
# '''Security'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented the 2nd and the 3rd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
&lt;br /&gt;
With the following conditions, one can simply take over the full control(CRUD) of other user's inventory.&lt;br /&gt;
# InventoryServer is exposed to the public.&lt;br /&gt;
# user's UUID is given&lt;br /&gt;
&lt;br /&gt;
Simply describe in the following figure:&lt;br /&gt;
*InventoryServer is a normal http server, the normal way to use it is:&lt;br /&gt;
**user get the authentication from UserServer&lt;br /&gt;
**user control its inventory through RegionServer&lt;br /&gt;
*But since the InventoryServer accepts any request without check if the user is authenticated, or, even it does not check if the request is from a RegionServer.&lt;br /&gt;
*So, if you know other users' UUID, you can send CRUD http requests directly to the InventoryServer without login.&lt;br /&gt;
&lt;br /&gt;
[[Image:secure_inventory_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
And [[Avatar_portability_version_2|AvatarPortability]] needs a public inventory server,&lt;br /&gt;
so we have to make a secure one.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service</id>
		<title>Security vulnerability brought by non-check inventory service</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service"/>
				<updated>2008-07-22T16:09:43Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Problem */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# (If a foreign user can login)[[Avatar_portability_version_2|How to get a foreign user's belongings]](including appearance, inventory)&lt;br /&gt;
# '''Security'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented the 2nd and the 3rd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
&lt;br /&gt;
With the following conditions, one can simply take over the full control(CRUD) of other user's inventory.&lt;br /&gt;
# InventoryServer is exposed to the public.&lt;br /&gt;
# user's UUID is given&lt;br /&gt;
&lt;br /&gt;
Simply describe in the following figure:&lt;br /&gt;
*InventoryServer is a normal http server, the normal way to use it is:&lt;br /&gt;
**user get the authentication from UserServer&lt;br /&gt;
**user control its inventory through RegionServer&lt;br /&gt;
*But since the InventoryServer accepts any request without check if the user is authenticated, or, even it does not check if the request is from a RegionServer.&lt;br /&gt;
*So, if you know other users' UUID, you can send CRUD http requests directly to the InventoryServer without login.&lt;br /&gt;
&lt;br /&gt;
And [[Avatar_portability_version_2|AvatarPortability]] needs a public inventory server,&lt;br /&gt;
so we have to make a secure one.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service</id>
		<title>Security vulnerability brought by non-check inventory service</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service"/>
				<updated>2008-07-22T16:09:22Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Problem */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# (If a foreign user can login)[[Avatar_portability_version_2|How to get a foreign user's belongings]](including appearance, inventory)&lt;br /&gt;
# '''Security'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented the 2nd and the 3rd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
&lt;br /&gt;
With the following conditions, one can simply take over the full control(CRUD) of other user's inventory.&lt;br /&gt;
# InventoryServer is exposed to the public.&lt;br /&gt;
# user's UUID is given&lt;br /&gt;
&lt;br /&gt;
Simply describe in the following figure:&lt;br /&gt;
*InventoryServer is a normal http server, the normal way to use it is:&lt;br /&gt;
**user get the authentication from UserServer&lt;br /&gt;
**user control its inventory through RegionServer&lt;br /&gt;
*But since the InventoryServer accepts any request without check if the user is authenticated, or, even it does not check if the request is from a RegionServer.&lt;br /&gt;
*So, if you know other users' UUID, you can send CRUD http requests directly to the InventoryServer without login.&lt;br /&gt;
&lt;br /&gt;
And [[Avatar_portability_version_2|AvatarPortability]] needs a public inventory server,&lt;br /&gt;
so we have to make a secure inventory sevice.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service</id>
		<title>Security vulnerability brought by non-check inventory service</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service"/>
				<updated>2008-07-22T16:08:12Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Problem */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# (If a foreign user can login)[[Avatar_portability_version_2|How to get a foreign user's belongings]](including appearance, inventory)&lt;br /&gt;
# '''Security'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented the 2nd and the 3rd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
&lt;br /&gt;
Simply describe in the following figure:&lt;br /&gt;
*InventoryServer is a normal http server, the normal way to use it is:&lt;br /&gt;
**user get the authentication from UserServer&lt;br /&gt;
**user control its inventory through RegionServer&lt;br /&gt;
*But since the inventoryserver accepts any request without check if the user is authenticated, or, even it does not check if the request is from a regionserver.&lt;br /&gt;
*So, if you know other users' UUID, you can send CRUD http requests directly to the inventoryserver without login.&lt;br /&gt;
&lt;br /&gt;
With the following conditions, one can simply take over the full control(CRUD) of other user's inventory.&lt;br /&gt;
# InventoryServer is exposed to the public.&lt;br /&gt;
# user's UUID is given&lt;br /&gt;
&lt;br /&gt;
And [[Avatar_portability_version_2|AvatarPortability]] needs a public inventory server,&lt;br /&gt;
so we have to make a secure inventory sevice.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service</id>
		<title>Security vulnerability brought by non-check inventory service</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service"/>
				<updated>2008-07-22T16:03:01Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Problem */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# (If a foreign user can login)[[Avatar_portability_version_2|How to get a foreign user's belongings]](including appearance, inventory)&lt;br /&gt;
# '''Security'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented the 2nd and the 3rd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
&lt;br /&gt;
With the following conditions, one can simply take over the full control(CRUD) of other user's inventory.&lt;br /&gt;
# InventoryServer is exposed to the public.&lt;br /&gt;
# user's UUID is given&lt;br /&gt;
&lt;br /&gt;
And [[Avatar_portability_version_2|AvatarPortability]] needs a public inventory server,&lt;br /&gt;
so we have to make a secure inventory sevice.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Avatar_portability_version_2</id>
		<title>Avatar portability version 2</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Avatar_portability_version_2"/>
				<updated>2008-07-22T15:40:41Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# '''(If a foreign user can login)How to get a foreign user's belongings(including appearance, inventory)'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
# [[security vulnerability brought by non-check inventory service|Security]]&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented the 2nd and the 3rd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Basic Idea ==&lt;br /&gt;
&lt;br /&gt;
=== definition ===&lt;br /&gt;
*User U1 resgitered at GridService G1&lt;br /&gt;
** U1's inventory information is stored in InventoryServer I1&lt;br /&gt;
** U1's assets are stored in AssetServer As1&lt;br /&gt;
** U1's appearance information is served by AvatarService Av1&lt;br /&gt;
&lt;br /&gt;
*RegionServer R2 serves a sim at GridService G2&lt;br /&gt;
** R2 fetches assets from Assetserver As2 by default. &lt;br /&gt;
** R2 gets inventory information from InventoryServer I2 by default.&lt;br /&gt;
[[Image:avatar_portability_v2_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== avatar portability ===&lt;br /&gt;
&lt;br /&gt;
AvatarPortability (or called &amp;quot;grid interoperability&amp;quot;) is&lt;br /&gt;
*U1 login to R2&lt;br /&gt;
**U1's appearance at G1 can be seen from any other client which is connecting to R2.&lt;br /&gt;
**U1 can CRUD(Create/Read/Update/Delete) its inventory/appearance through R2.&lt;br /&gt;
&lt;br /&gt;
This means, (in the fig. 2) R2 should have the ability to connect not only its default&lt;br /&gt;
UGAI server, but also external Inventory, Asset, Avatar service.&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_v2_2.PNG]]&lt;br /&gt;
&lt;br /&gt;
'''Then &amp;quot;AvatarPortability&amp;quot; can be subdivided into 2 goals:'''&lt;br /&gt;
# '''How to''' let R2 know where are U1's storage services(Inventory,Asset,Avatar,...) ?&lt;br /&gt;
# '''How to''' enable R2 to interact with mutilple Inventory/Asset/Avatar services ?&lt;br /&gt;
&lt;br /&gt;
==== Answer to the 1st How to - XRDS ====&lt;br /&gt;
&lt;br /&gt;
more information can be found at:&lt;br /&gt;
*http://en.wikipedia.org/wiki/Yadis&lt;br /&gt;
*http://en.wikipedia.org/wiki/XRDS&lt;br /&gt;
&lt;br /&gt;
A sample XRDS for U1 can be like:&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;xrds:XRDS xmlns:xrds=&amp;quot;xri://$xrds&amp;quot; xmlns=&amp;quot;xri://$xrd*($v*2.0)&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;XRD&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/profileservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8002/GetUserProfile/12345678-1234-1234-1234-12345678abcd&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/authservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8002/session/12345678-1234-1234-1234-12345678abcd&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/assetservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8003&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/inventoryservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8004&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/avatarservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8005&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
   &amp;lt;/XRD&amp;gt;&lt;br /&gt;
  &amp;lt;/xrds:XRDS&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*There are more than one way can be considered to pass U1's XRDS file to R2&lt;br /&gt;
**[[OpenID for data portability in virtual world]]&lt;br /&gt;
&lt;br /&gt;
REASONS for proposing XRDS&lt;br /&gt;
# There are &amp;quot;UserAssetUrl&amp;quot; and &amp;quot;UserInventoryUrl&amp;quot; in &amp;quot;Users&amp;quot; table, they are cab be used to specify users' storage services, but it's '''lack of scalability''', to think we may have &amp;quot;friend service&amp;quot;, &amp;quot;currency service&amp;quot;, ... we can not simply add a column for each service.&lt;br /&gt;
# XRDS is widly used, many languages has libs for discovering/parsing it. To use XRDS can '''increase the compatibility　with existing(web) service'''&lt;br /&gt;
# '''XRDS is just a proposal''', still, we have many other choices.&lt;br /&gt;
&lt;br /&gt;
==== Answer to the 2nd How to - ForeignAssetHashTable ====&lt;br /&gt;
&lt;br /&gt;
Why it is a problem ? The asset download process is described below:&lt;br /&gt;
*RegionServer sends user/prims' Texture UUID to the client.&lt;br /&gt;
*Client extract the UUIDs, and sends a &amp;quot;RequestImagePacket&amp;quot; to request the actual asset data.&lt;br /&gt;
*RegionServer receives the AssetUUID and passes it to AssetServer to get the asset.&lt;br /&gt;
[[Image:avatar_portability_v2_3-1.PNG]]&lt;br /&gt;
*Considering only 1 GridService, there is no problem, but if RegionServer knows more than 1 asset server, RegionServer has to determine which assetserver should be used.&lt;br /&gt;
*Here '''ForeignAssetHashTable''' is used to solve this problem. (The detailed implementation is shown in following section.)&lt;br /&gt;
*#when U1 login to R2, R2 register U1's owned asset UUIDs to &amp;quot;ForeignAssetHashTable&amp;quot;.&lt;br /&gt;
*#Client sends a RequestImagePacket&lt;br /&gt;
*#R2 looks up into &amp;quot;ForeignAssetHashTable&amp;quot; to find the AssetServerUrl,(if not found, returns the default url)&lt;br /&gt;
*#R2 use the returned AssetServerUrl to get asset data.&lt;br /&gt;
[[Image:avatar_portability_v2_3.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
*All the implementation described here are already finished&lt;br /&gt;
**The testing environment will be made public after solving the &amp;quot;[[security vulnerability brought by non-check inventory service|security]]&amp;quot; issues.&lt;br /&gt;
*Just for appearance portability, asseturl and inventoryurl are enough, so temporarily just use the 2 existing properties.&lt;br /&gt;
*XRDS is not implemented&lt;br /&gt;
&lt;br /&gt;
=== 1 Implementation - ForeginAssetHashTable.Add ===&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-1.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== 2 Implementation - ForeginAssetHashTable.Get ===&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-2.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== 3 Implementation - ForeginAssetHashTable.Remove ===&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-3.PNG]]&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service</id>
		<title>Security vulnerability brought by non-check inventory service</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service"/>
				<updated>2008-07-22T15:31:31Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Problem */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# (If a foreign user can login)[[Avatar_portability_version_2|How to get a foreign user's belongings]](including appearance, inventory)&lt;br /&gt;
# '''Security'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented the 2nd and the 3rd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
&lt;br /&gt;
With the following conditions, by using this security hole, I can simply take over the full control(CRUD) of other user's inventory.&lt;br /&gt;
# InventoryServer is exposed to the public.&lt;br /&gt;
# I know the user's firstname, lastname&lt;br /&gt;
(OSGrid.org satisfies the conditions)&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service</id>
		<title>Security vulnerability brought by non-check inventory service</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service"/>
				<updated>2008-07-22T15:27:24Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# (If a foreign user can login)[[Avatar_portability_version_2|How to get a foreign user's belongings]](including appearance, inventory)&lt;br /&gt;
# '''Security'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented the 2nd and the 3rd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service</id>
		<title>Security vulnerability brought by non-check inventory service</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service"/>
				<updated>2008-07-22T15:27:13Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* solution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# (If a foreign user can login)[[Avatar_portability_version_2|How to get a foreign user's belongings]](including appearance, inventory)&lt;br /&gt;
# '''Security'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented the 2nd and the 3rd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
&lt;br /&gt;
== implementation ==&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service</id>
		<title>Security vulnerability brought by non-check inventory service</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service"/>
				<updated>2008-07-22T15:26:15Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# (If a foreign user can login)[[Avatar_portability_version_2|How to get a foreign user's belongings]](including appearance, inventory)&lt;br /&gt;
# '''Security'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented the 2nd and the 3rd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
&lt;br /&gt;
== solution ==&lt;br /&gt;
&lt;br /&gt;
== implementation ==&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OpenID_for_data_portability_in_virtual_world</id>
		<title>OpenID for data portability in virtual world</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OpenID_for_data_portability_in_virtual_world"/>
				<updated>2008-07-22T15:24:47Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# '''How to enable foreign user login - Authentication'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
# (If a foreign user can login)[[Avatar_portability_version_2|How to get a foreign user's belongings]](including appearance, inventory)&lt;br /&gt;
# [[Security vulnerability brought by non-check inventory service|Security]]&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented the 2nd and the 3rd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== What is OpenID ==&lt;br /&gt;
For OpenID related knowledge:&lt;br /&gt;
http://en.wikipedia.org/wiki/OpenID&lt;br /&gt;
&lt;br /&gt;
== Foreign user login ==&lt;br /&gt;
&lt;br /&gt;
In virtual world,&lt;br /&gt;
To enable a foreign user authentication, What I can imagine is that there are 3 ways can be used.&lt;br /&gt;
*Import account from one GridService to another&lt;br /&gt;
*Use a central OpenID provider&lt;br /&gt;
*UserServer(OpenSim) acts as both RP and OP - this is the '''final goal'''&lt;br /&gt;
Detailed explanations are following:&lt;br /&gt;
&lt;br /&gt;
=== Import (copy an account information from one to another) ===&lt;br /&gt;
&lt;br /&gt;
This is the most simple way, just copy an account from its original Gridservice to another.&lt;br /&gt;
&lt;br /&gt;
this can be done through webpages, and current OpenSim's Userserver already has a similar XMLRPC method (GetUserProfile) to do such thind, even though some security holes need to be filled.&lt;br /&gt;
&lt;br /&gt;
*Advantages:&lt;br /&gt;
*# Quick, direct solution, easy to develop / use.&lt;br /&gt;
&lt;br /&gt;
*Disadvantage:&lt;br /&gt;
*# The same user profile copied many times, can not manage them(in the case you change your profile in 1 gridservice, it does not affect other grids)&lt;br /&gt;
*# User have to remember too many password(even though you can always use the same)&lt;br /&gt;
*# If your name has been taken, you have to change to another - no name portability&lt;br /&gt;
*# other bad points ...&lt;br /&gt;
&lt;br /&gt;
=== Use a central OpenID provider ===&lt;br /&gt;
&lt;br /&gt;
Just like in the web world, there are already lots of website enabled both legacy login and openid login,&lt;br /&gt;
*Example: https://sourceforge.net/account/login.php&lt;br /&gt;
&lt;br /&gt;
UserServer can also support OpenID login, in this case, authentication can be delegated to OpenID providers.&lt;br /&gt;
&lt;br /&gt;
* Advantages:&lt;br /&gt;
*# User auth information is stored only in 1 place.&lt;br /&gt;
*# no worry about your favorite name has been take.&lt;br /&gt;
*# ... some other OpenID advantages&lt;br /&gt;
&lt;br /&gt;
* '''Disadvantages''':&lt;br /&gt;
*# Current client need to be changed.(ver 1-18-6 is OK)&lt;br /&gt;
*# In data portability theory [Avatar portability], not only the auth information, but also others (UUID, inventoryurl, asseturl) are needed.&lt;br /&gt;
***OpenID has 2 extensions:&lt;br /&gt;
***# ax: http://openid.net/specs/openid-attribute-exchange-1_0.html&lt;br /&gt;
***# sreg: http://openid.net/specs/openid-simple-registration-extension-1_1-01.html&lt;br /&gt;
***These 2 extensions supports OpenID user to store its additional information, but there are only a few OpenID providers enabled these functions. as far as I searched,&lt;br /&gt;
***# only myopenid.com: https://www.myopenid.com/ enabled both extensions.&lt;br /&gt;
***# yahoo.com does not support any of the 2 extensions.&lt;br /&gt;
&lt;br /&gt;
=== UserServer acts as both RP(Relying Party) and OP(OpenID Provider) ===&lt;br /&gt;
&lt;br /&gt;
UserServer can not only delegate an authentication to another UserServer, but also&lt;br /&gt;
accept an incoming authtication request from another UserServer.&lt;br /&gt;
&lt;br /&gt;
That means,&lt;br /&gt;
*If a local user login to an UserServer, the UserServer use legacy way(password checking) to confirm the user's identity, &lt;br /&gt;
*If a foregin user login to an UserServer, UserServer delegates the authtication.&lt;br /&gt;
**user input its OpenID url(probably its Grid's UserServer url), then follow the OpenID authentication protocol -&amp;gt; [[Yadis for UGAI services discovery]]&lt;br /&gt;
*When an authtication request comes, UserServer checks the user's identity, if OK, UserServer returns the user profile(include name, uuid, inventoryurl, asseturl).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Advantages&lt;br /&gt;
*#User auth information is stored only in 1 place. &lt;br /&gt;
*#no worry about your favorite name has been take.&lt;br /&gt;
*#... some other OpenID advantages&lt;br /&gt;
*#UserServer supports &amp;quot;UserAssetUrl&amp;quot;, &amp;quot;UserInventoryUrl&amp;quot;, &amp;quot;UUID&amp;quot; by standard&lt;br /&gt;
*#Help the OpenID expansion, minor&lt;br /&gt;
&lt;br /&gt;
*Disadvantages&lt;br /&gt;
*#More changes needed&lt;br /&gt;
*#Current OpenSim's httpserver is not fully functional(environment variable supports, module supports, compared with apache)&lt;br /&gt;
***you can choose '''OpenUGAI''':http://openugai.sourceforge.net/, that is born for this purpose.&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service</id>
		<title>Security vulnerability brought by non-check inventory service</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service"/>
				<updated>2008-07-22T15:23:11Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# (If a foreign user can login)[[Avatar_portability_version_2|How to get a foreign user's belongings]](including appearance, inventory)&lt;br /&gt;
# '''Security'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented the 2nd and the 3rd, and would like to explan my idea:&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Avatar_portability_version_2</id>
		<title>Avatar portability version 2</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Avatar_portability_version_2"/>
				<updated>2008-07-22T15:22:39Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Agenda */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# '''(If a foreign user can login)How to get a foreign user's belongings(including appearance, inventory)'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
# [[security vulnerability brought by non-check inventory service|Security]]&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented the 2nd and the 3rd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Basic Idea ==&lt;br /&gt;
&lt;br /&gt;
=== definition ===&lt;br /&gt;
*User U1 resgitered at GridService G1&lt;br /&gt;
** U1's inventory information is stored in InventoryServer I1&lt;br /&gt;
** U1's assets are stored in AssetServer As1&lt;br /&gt;
** U1's appearance information is served by AvatarService Av1&lt;br /&gt;
&lt;br /&gt;
*RegionServer R2 serves a sim at GridService G2&lt;br /&gt;
** R2 fetches assets from Assetserver As2 by default. &lt;br /&gt;
** R2 gets inventory information from InventoryServer I2 by default.&lt;br /&gt;
[[Image:avatar_portability_v2_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== avatar portability ===&lt;br /&gt;
&lt;br /&gt;
AvatarPortability (or called &amp;quot;grid interoperability&amp;quot;) is&lt;br /&gt;
*U1 login to R2&lt;br /&gt;
**U1's appearance at G1 can be seen from any other client which is connecting to R2.&lt;br /&gt;
**U1 can CRUD(Create/Read/Update/Delete) its inventory/appearance through R2.&lt;br /&gt;
&lt;br /&gt;
This means, (in the fig. 2) R2 should have the ability to connect not only its default&lt;br /&gt;
UGAI server, but also external Inventory, Asset, Avatar service.&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_v2_2.PNG]]&lt;br /&gt;
&lt;br /&gt;
'''Then &amp;quot;AvatarPortability&amp;quot; can be subdivided into 2 goals:'''&lt;br /&gt;
# '''How to''' let R2 know where are U1's storage services(Inventory,Asset,Avatar,...) ?&lt;br /&gt;
# '''How to''' enable R2 to interact with mutilple Inventory/Asset/Avatar services ?&lt;br /&gt;
&lt;br /&gt;
==== Answer to the 1st How to - XRDS ====&lt;br /&gt;
&lt;br /&gt;
more information can be found at:&lt;br /&gt;
*http://en.wikipedia.org/wiki/Yadis&lt;br /&gt;
*http://en.wikipedia.org/wiki/XRDS&lt;br /&gt;
&lt;br /&gt;
A sample XRDS for U1 can be like:&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;xrds:XRDS xmlns:xrds=&amp;quot;xri://$xrds&amp;quot; xmlns=&amp;quot;xri://$xrd*($v*2.0)&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;XRD&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/profileservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8002/GetUserProfile/12345678-1234-1234-1234-12345678abcd&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/authservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8002/session/12345678-1234-1234-1234-12345678abcd&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/assetservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8003&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/inventoryservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8004&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/avatarservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8005&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
   &amp;lt;/XRD&amp;gt;&lt;br /&gt;
  &amp;lt;/xrds:XRDS&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*There are more than one way can be considered to pass U1's XRDS file to R2&lt;br /&gt;
**[[OpenID for data portability in virtual world]]&lt;br /&gt;
&lt;br /&gt;
REASONS for proposing XRDS&lt;br /&gt;
# There are &amp;quot;UserAssetUrl&amp;quot; and &amp;quot;UserInventoryUrl&amp;quot; in &amp;quot;Users&amp;quot; table, they are cab be used to specify users' storage services, but it's '''lack of scalability''', to think we may have &amp;quot;friend service&amp;quot;, &amp;quot;currency service&amp;quot;, ... we can not simply add a column for each service.&lt;br /&gt;
# XRDS is widly used, many languages has libs for discovering/parsing it. To use XRDS can '''increase the compatibility　with existing(web) service'''&lt;br /&gt;
# '''XRDS is just a proposal''', still, we have many other choices.&lt;br /&gt;
&lt;br /&gt;
==== Answer to the 2nd How to - ForeignAssetHashTable ====&lt;br /&gt;
&lt;br /&gt;
Why it is a problem ? The asset download process is described below:&lt;br /&gt;
*RegionServer sends user/prims' Texture UUID to the client.&lt;br /&gt;
*Client extract the UUIDs, and sends a &amp;quot;RequestImagePacket&amp;quot; to request the actual asset data.&lt;br /&gt;
*RegionServer receives the AssetUUID and passes it to AssetServer to get the asset.&lt;br /&gt;
[[Image:avatar_portability_v2_3-1.PNG]]&lt;br /&gt;
*Considering only 1 GridService, there is no problem, but if RegionServer knows more than 1 asset server, RegionServer has to determine which assetserver should be used.&lt;br /&gt;
*Here '''ForeignAssetHashTable''' is used to solve this problem. (The detailed implementation is shown in following section.)&lt;br /&gt;
*#when U1 login to R2, R2 register U1's owned asset UUIDs to &amp;quot;ForeignAssetHashTable&amp;quot;.&lt;br /&gt;
*#Client sends a RequestImagePacket&lt;br /&gt;
*#R2 looks up into &amp;quot;ForeignAssetHashTable&amp;quot; to find the AssetServerUrl,(if not found, returns the default url)&lt;br /&gt;
*#R2 use the returned AssetServerUrl to get asset data.&lt;br /&gt;
[[Image:avatar_portability_v2_3.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
*All the implementation described here are already finished&lt;br /&gt;
**The testing environment will be made public after solving the &amp;quot;[[security vulnerability brought by non-check inventory service|security]]&amp;quot; issues.&lt;br /&gt;
*Just for appearance portability, asseturl and inventoryurl are enough, so currently just use the 2 existing properties.&lt;br /&gt;
*XRDS is not implemented&lt;br /&gt;
&lt;br /&gt;
=== 1 Implementation - ForeginAssetHashTable.Add ===&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-1.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== 2 Implementation - ForeginAssetHashTable.Get ===&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-2.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== 3 Implementation - ForeginAssetHashTable.Remove ===&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-3.PNG]]&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service</id>
		<title>Security vulnerability brought by non-check inventory service</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service"/>
				<updated>2008-07-22T15:22:09Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Agenda */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# (If a foreign user can login)[[Avatar_portability_version_2|How to get a foreign user's belongings]](including appearance, inventory)&lt;br /&gt;
# '''Security'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented the 2nd and the 3rd, and would like to explan my idea:&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service</id>
		<title>Security vulnerability brought by non-check inventory service</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service"/>
				<updated>2008-07-22T15:21:45Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Agenda */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# (If a foreign user can login)[[Avatar_portability_version_2|How to get a foreign user's belongings]](including appearance, inventory)&lt;br /&gt;
# '''Security'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented the 2nd and the 3rd, and would like to explan my idea:&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service</id>
		<title>Security vulnerability brought by non-check inventory service</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service"/>
				<updated>2008-07-22T15:21:08Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Agenda */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# (If a foreign user can login)[[Avatar_portability_version_2|How to get a foreign user's belongings]](including appearance, inventory)&lt;br /&gt;
# '''Security'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented 2nd, and would like to explan my idea:&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service</id>
		<title>Security vulnerability brought by non-check inventory service</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Security_vulnerability_brought_by_non-check_inventory_service"/>
				<updated>2008-07-22T15:19:54Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: New page: == Agenda ==  To enable user avatar travel from a grid service to another grid service, There are 3 problems to be considered: # How to enable foreign user login - [[OpenID for data portab...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# (If a foreign user can login)How to get a foreign user's belongings(including appearance, inventory)&lt;br /&gt;
# '''[[security vulnerability brought by non-check inventory service|Security]]'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented 2nd, and would like to explan my idea:&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Avatar_portability_version_2</id>
		<title>Avatar portability version 2</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Avatar_portability_version_2"/>
				<updated>2008-07-22T15:17:18Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# '''(If a foreign user can login)How to get a foreign user's belongings(including appearance, inventory)'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
# [[security vulnerability brought by non-check inventory service|Security]]&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented 2nd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Basic Idea ==&lt;br /&gt;
&lt;br /&gt;
=== definition ===&lt;br /&gt;
*User U1 resgitered at GridService G1&lt;br /&gt;
** U1's inventory information is stored in InventoryServer I1&lt;br /&gt;
** U1's assets are stored in AssetServer As1&lt;br /&gt;
** U1's appearance information is served by AvatarService Av1&lt;br /&gt;
&lt;br /&gt;
*RegionServer R2 serves a sim at GridService G2&lt;br /&gt;
** R2 fetches assets from Assetserver As2 by default. &lt;br /&gt;
** R2 gets inventory information from InventoryServer I2 by default.&lt;br /&gt;
[[Image:avatar_portability_v2_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== avatar portability ===&lt;br /&gt;
&lt;br /&gt;
AvatarPortability (or called &amp;quot;grid interoperability&amp;quot;) is&lt;br /&gt;
*U1 login to R2&lt;br /&gt;
**U1's appearance at G1 can be seen from any other client which is connecting to R2.&lt;br /&gt;
**U1 can CRUD(Create/Read/Update/Delete) its inventory/appearance through R2.&lt;br /&gt;
&lt;br /&gt;
This means, (in the fig. 2) R2 should have the ability to connect not only its default&lt;br /&gt;
UGAI server, but also external Inventory, Asset, Avatar service.&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_v2_2.PNG]]&lt;br /&gt;
&lt;br /&gt;
'''Then &amp;quot;AvatarPortability&amp;quot; can be subdivided into 2 goals:'''&lt;br /&gt;
# '''How to''' let R2 know where are U1's storage services(Inventory,Asset,Avatar,...) ?&lt;br /&gt;
# '''How to''' enable R2 to interact with mutilple Inventory/Asset/Avatar services ?&lt;br /&gt;
&lt;br /&gt;
==== Answer to the 1st How to - XRDS ====&lt;br /&gt;
&lt;br /&gt;
more information can be found at:&lt;br /&gt;
*http://en.wikipedia.org/wiki/Yadis&lt;br /&gt;
*http://en.wikipedia.org/wiki/XRDS&lt;br /&gt;
&lt;br /&gt;
A sample XRDS for U1 can be like:&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;xrds:XRDS xmlns:xrds=&amp;quot;xri://$xrds&amp;quot; xmlns=&amp;quot;xri://$xrd*($v*2.0)&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;XRD&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/profileservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8002/GetUserProfile/12345678-1234-1234-1234-12345678abcd&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/authservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8002/session/12345678-1234-1234-1234-12345678abcd&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/assetservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8003&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/inventoryservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8004&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/avatarservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8005&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
   &amp;lt;/XRD&amp;gt;&lt;br /&gt;
  &amp;lt;/xrds:XRDS&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*There are more than one way can be considered to pass U1's XRDS file to R2&lt;br /&gt;
**[[OpenID for data portability in virtual world]]&lt;br /&gt;
&lt;br /&gt;
REASONS for proposing XRDS&lt;br /&gt;
# There are &amp;quot;UserAssetUrl&amp;quot; and &amp;quot;UserInventoryUrl&amp;quot; in &amp;quot;Users&amp;quot; table, they are cab be used to specify users' storage services, but it's '''lack of scalability''', to think we may have &amp;quot;friend service&amp;quot;, &amp;quot;currency service&amp;quot;, ... we can not simply add a column for each service.&lt;br /&gt;
# XRDS is widly used, many languages has libs for discovering/parsing it. To use XRDS can '''increase the compatibility　with existing(web) service'''&lt;br /&gt;
# '''XRDS is just a proposal''', still, we have many other choices.&lt;br /&gt;
&lt;br /&gt;
==== Answer to the 2nd How to - ForeignAssetHashTable ====&lt;br /&gt;
&lt;br /&gt;
Why it is a problem ? The asset download process is described below:&lt;br /&gt;
*RegionServer sends user/prims' Texture UUID to the client.&lt;br /&gt;
*Client extract the UUIDs, and sends a &amp;quot;RequestImagePacket&amp;quot; to request the actual asset data.&lt;br /&gt;
*RegionServer receives the AssetUUID and passes it to AssetServer to get the asset.&lt;br /&gt;
[[Image:avatar_portability_v2_3-1.PNG]]&lt;br /&gt;
*Considering only 1 GridService, there is no problem, but if RegionServer knows more than 1 asset server, RegionServer has to determine which assetserver should be used.&lt;br /&gt;
*Here '''ForeignAssetHashTable''' is used to solve this problem. (The detailed implementation is shown in following section.)&lt;br /&gt;
*#when U1 login to R2, R2 register U1's owned asset UUIDs to &amp;quot;ForeignAssetHashTable&amp;quot;.&lt;br /&gt;
*#Client sends a RequestImagePacket&lt;br /&gt;
*#R2 looks up into &amp;quot;ForeignAssetHashTable&amp;quot; to find the AssetServerUrl,(if not found, returns the default url)&lt;br /&gt;
*#R2 use the returned AssetServerUrl to get asset data.&lt;br /&gt;
[[Image:avatar_portability_v2_3.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
*All the implementation described here are already finished&lt;br /&gt;
**The testing environment will be made public after solving the &amp;quot;[[security vulnerability brought by non-check inventory service|security]]&amp;quot; issues.&lt;br /&gt;
*Just for appearance portability, asseturl and inventoryurl are enough, so currently just use the 2 existing properties.&lt;br /&gt;
*XRDS is not implemented&lt;br /&gt;
&lt;br /&gt;
=== 1 Implementation - ForeginAssetHashTable.Add ===&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-1.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== 2 Implementation - ForeginAssetHashTable.Get ===&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-2.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== 3 Implementation - ForeginAssetHashTable.Remove ===&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-3.PNG]]&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Avatar_portability_version_2</id>
		<title>Avatar portability version 2</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Avatar_portability_version_2"/>
				<updated>2008-07-22T15:15:47Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# '''(If a foreign user can login)How to get a foreign user's belongings(including appearance, inventory)'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
# [[security vulnerability brought by non-check inventory service|Security]]&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented 2nd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Basic Idea ==&lt;br /&gt;
&lt;br /&gt;
=== definition ===&lt;br /&gt;
*User U1 resgitered at GridService G1&lt;br /&gt;
** U1's inventory information is stored in InventoryServer I1&lt;br /&gt;
** U1's assets are stored in AssetServer As1&lt;br /&gt;
** U1's appearance information is served by AvatarService Av1&lt;br /&gt;
&lt;br /&gt;
*RegionServer R2 serves a sim at GridService G2&lt;br /&gt;
** R2 fetches assets from Assetserver As2 by default. &lt;br /&gt;
** R2 gets inventory information from InventoryServer I2 by default.&lt;br /&gt;
[[Image:avatar_portability_v2_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== avatar portability ===&lt;br /&gt;
&lt;br /&gt;
AvatarPortability (or called &amp;quot;grid interoperability&amp;quot;) is&lt;br /&gt;
*U1 login to R2&lt;br /&gt;
**U1's appearance at G1 can be seen from any other client which is connecting to R2.&lt;br /&gt;
**U1 can CRUD(Create/Read/Update/Delete) its inventory/appearance through R2.&lt;br /&gt;
&lt;br /&gt;
This means, (in the fig. 2) R2 should have the ability to connect not only its default&lt;br /&gt;
UGAI server, but also external Inventory, Asset, Avatar service.&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_v2_2.PNG]]&lt;br /&gt;
&lt;br /&gt;
'''Then &amp;quot;AvatarPortability&amp;quot; can be subdivided into 2 goals:'''&lt;br /&gt;
# '''How to''' let R2 know where are U1's storage services(Inventory,Asset,Avatar,...) ?&lt;br /&gt;
# '''How to''' enable R2 to interact with mutilple Inventory/Asset/Avatar services ?&lt;br /&gt;
&lt;br /&gt;
==== Answer to the 1st How to - XRDS ====&lt;br /&gt;
&lt;br /&gt;
more information can be found at:&lt;br /&gt;
*http://en.wikipedia.org/wiki/Yadis&lt;br /&gt;
*http://en.wikipedia.org/wiki/XRDS&lt;br /&gt;
&lt;br /&gt;
A sample XRDS for U1 can be like:&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;xrds:XRDS xmlns:xrds=&amp;quot;xri://$xrds&amp;quot; xmlns=&amp;quot;xri://$xrd*($v*2.0)&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;XRD&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/profileservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8002/GetUserProfile/12345678-1234-1234-1234-12345678abcd&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/authservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8002/session/12345678-1234-1234-1234-12345678abcd&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/assetservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8003&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/inventoryservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8004&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/avatarservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8005&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
   &amp;lt;/XRD&amp;gt;&lt;br /&gt;
  &amp;lt;/xrds:XRDS&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*There are more than one way can be considered to pass U1's XRDS file to R2&lt;br /&gt;
**[[OpenID for data portability in virtual world]]&lt;br /&gt;
&lt;br /&gt;
REASONS for proposing XRDS&lt;br /&gt;
# There are &amp;quot;UserAssetUrl&amp;quot; and &amp;quot;UserInventoryUrl&amp;quot; in &amp;quot;Users&amp;quot; table, they are cab be used to specify users' storage services, but it's '''lack of scalability''', to think we may have &amp;quot;friend service&amp;quot;, &amp;quot;currency service&amp;quot;, ... we can not simply add a column for each service.&lt;br /&gt;
# XRDS is widly used, many languages has libs for discovering/parsing it. To use XRDS can '''increase the compatibility　with existing(web) service'''&lt;br /&gt;
# '''XRDS is just a proposal''', still, we have many other choices.&lt;br /&gt;
&lt;br /&gt;
==== Answer to the 2nd How to - ForeignAssetHashTable ====&lt;br /&gt;
&lt;br /&gt;
Why it is a problem ? The asset download process is described below:&lt;br /&gt;
*RegionServer sends user/prims' Texture UUID to the client.&lt;br /&gt;
*Client extract the UUIDs, and sends a &amp;quot;RequestImagePacket&amp;quot; to request the actual asset data.&lt;br /&gt;
*RegionServer receives the AssetUUID and passes it to AssetServer to get the asset.&lt;br /&gt;
[[Image:avatar_portability_v2_3-1.PNG]]&lt;br /&gt;
*Considering only 1 GridService, there is no problem, but if RegionServer knows more than 1 asset server, RegionServer has to determine which assetserver should be used.&lt;br /&gt;
*Here '''ForeignAssetHashTable''' is used to solve this problem. (The detailed implementation is shown in following section.)&lt;br /&gt;
*#when U1 login to R2, R2 register U1's owned asset UUIDs to &amp;quot;ForeignAssetHashTable&amp;quot;.&lt;br /&gt;
*#Client sends a RequestImagePacket&lt;br /&gt;
*#R2 looks up into &amp;quot;ForeignAssetHashTable&amp;quot; to find the AssetServerUrl,(if not found, returns the default url)&lt;br /&gt;
*#R2 use the returned AssetServerUrl to get asset data.&lt;br /&gt;
[[Image:avatar_portability_v2_3.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
*All the implementation described here are already finished&lt;br /&gt;
**The testing environment will be made public after solving the &amp;quot;security&amp;quot; issues.&lt;br /&gt;
*Just for appearance portability, asseturl and inventoryurl are enough, so currently just use the 2 existing properties.&lt;br /&gt;
*XRDS is not implemented&lt;br /&gt;
&lt;br /&gt;
=== 1 Implementation - ForeginAssetHashTable.Add ===&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-1.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== 2 Implementation - ForeginAssetHashTable.Get ===&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-2.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== 3 Implementation - ForeginAssetHashTable.Remove ===&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-3.PNG]]&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Avatar_portability_version_2</id>
		<title>Avatar portability version 2</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Avatar_portability_version_2"/>
				<updated>2008-07-22T15:15:39Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Agenda */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# '''(If a foreign user can login)How to get a foreign user's belongings(including appearance, inventory)'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
# [[security vulnerability brought by non-check inventory service|Security]]&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented 2nd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Basic Idea ==&lt;br /&gt;
&lt;br /&gt;
=== definition ===&lt;br /&gt;
*User U1 resgitered at GridService G1&lt;br /&gt;
** U1's inventory information is stored in InventoryServer I1&lt;br /&gt;
** U1's assets are stored in AssetServer As1&lt;br /&gt;
** U1's appearance information is served by AvatarService Av1&lt;br /&gt;
&lt;br /&gt;
*RegionServer R2 serves a sim at GridService G2&lt;br /&gt;
** R2 fetches assets from Assetserver As2 by default. &lt;br /&gt;
** R2 gets inventory information from InventoryServer I2 by default.&lt;br /&gt;
[[Image:avatar_portability_v2_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== avatar portability ===&lt;br /&gt;
&lt;br /&gt;
AvatarPortability (or called &amp;quot;grid interoperability&amp;quot;) is&lt;br /&gt;
*U1 login to R2&lt;br /&gt;
**U1's appearance at G1 can be seen from any other client which is connecting to R2.&lt;br /&gt;
**U1 can CRUD(Create/Read/Update/Delete) its inventory/appearance through R2.&lt;br /&gt;
&lt;br /&gt;
This means, (in the fig. 2) R2 should have the ability to connect not only its default&lt;br /&gt;
UGAI server, but also external Inventory, Asset, Avatar service.&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_v2_2.PNG]]&lt;br /&gt;
&lt;br /&gt;
'''Then &amp;quot;AvatarPortability&amp;quot; can be subdivided into 2 goals:'''&lt;br /&gt;
# '''How to''' let R2 know where are U1's storage services(Inventory,Asset,Avatar,...) ?&lt;br /&gt;
# '''How to''' enable R2 to interact with mutilple Inventory/Asset/Avatar services ?&lt;br /&gt;
&lt;br /&gt;
==== Answer to the 1st How to - XRDS ====&lt;br /&gt;
&lt;br /&gt;
more information can be found at:&lt;br /&gt;
*http://en.wikipedia.org/wiki/Yadis&lt;br /&gt;
*http://en.wikipedia.org/wiki/XRDS&lt;br /&gt;
&lt;br /&gt;
A sample XRDS for U1 can be like:&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;xrds:XRDS xmlns:xrds=&amp;quot;xri://$xrds&amp;quot; xmlns=&amp;quot;xri://$xrd*($v*2.0)&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;XRD&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/profileservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8002/GetUserProfile/12345678-1234-1234-1234-12345678abcd&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/authservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8002/session/12345678-1234-1234-1234-12345678abcd&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/assetservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8003&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/inventoryservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8004&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/avatarservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8005&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
   &amp;lt;/XRD&amp;gt;&lt;br /&gt;
  &amp;lt;/xrds:XRDS&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*There are more than one way can be considered to pass U1's XRDS file to R2&lt;br /&gt;
**[[OpenID for data portability in virtual world]]&lt;br /&gt;
&lt;br /&gt;
REASONS for proposing XRDS&lt;br /&gt;
# There are &amp;quot;UserAssetUrl&amp;quot; and &amp;quot;UserInventoryUrl&amp;quot; in &amp;quot;Users&amp;quot; table, they are cab be used to specify users' storage services, but it's '''lack of scalability''', to think we may have &amp;quot;friend service&amp;quot;, &amp;quot;currency service&amp;quot;, ... we can not simply add a column for each service.&lt;br /&gt;
# XRDS is widly used, many languages has libs for discovering/parsing it. To use XRDS can '''increase the compatibility　with existing(web) service'''&lt;br /&gt;
# '''XRDS is just a proposal''', still, we have many other choices.&lt;br /&gt;
&lt;br /&gt;
==== Answer to the 2nd How to - ForeignAssetHashTable ====&lt;br /&gt;
&lt;br /&gt;
Why it is a problem ? The asset download process is described below:&lt;br /&gt;
*RegionServer sends user/prims' Texture UUID to the client.&lt;br /&gt;
*Client extract the UUIDs, and sends a &amp;quot;RequestImagePacket&amp;quot; to request the actual asset data.&lt;br /&gt;
*RegionServer receives the AssetUUID and passes it to AssetServer to get the asset.&lt;br /&gt;
[[Image:avatar_portability_v2_3-1.PNG]]&lt;br /&gt;
*Considering only 1 GridService, there is no problem, but if RegionServer knows more than 1 asset server, RegionServer has to determine which assetserver should be used.&lt;br /&gt;
*Here '''ForeignAssetHashTable''' is used to solve this problem. (The detailed implementation is shown in following section.)&lt;br /&gt;
*#when U1 login to R2, R2 register U1's owned asset UUIDs to &amp;quot;ForeignAssetHashTable&amp;quot;.&lt;br /&gt;
*#Client sends a RequestImagePacket&lt;br /&gt;
*#R2 looks up into &amp;quot;ForeignAssetHashTable&amp;quot; to find the AssetServerUrl,(if not found, returns the default url)&lt;br /&gt;
*#R2 use the returned AssetServerUrl to get asset data.&lt;br /&gt;
[[Image:avatar_portability_v2_3.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
*All the implementation described here are already finished&lt;br /&gt;
*Just for appearance portability, asseturl and inventoryurl are enough, so currently just use the 2 existing properties.&lt;br /&gt;
*XRDS is not implemented&lt;br /&gt;
&lt;br /&gt;
=== 1 Implementation - ForeginAssetHashTable.Add ===&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-1.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== 2 Implementation - ForeginAssetHashTable.Get ===&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-2.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== 3 Implementation - ForeginAssetHashTable.Remove ===&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-3.PNG]]&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Avatar_portability_version_2</id>
		<title>Avatar portability version 2</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Avatar_portability_version_2"/>
				<updated>2008-07-22T15:09:19Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# '''(If a foreign user can login)How to get a foreign user's belongings(including appearance, inventory)'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
# [[AvatarPortability - Security]]&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented 2nd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Basic Idea ==&lt;br /&gt;
&lt;br /&gt;
=== definition ===&lt;br /&gt;
*User U1 resgitered at GridService G1&lt;br /&gt;
** U1's inventory information is stored in InventoryServer I1&lt;br /&gt;
** U1's assets are stored in AssetServer As1&lt;br /&gt;
** U1's appearance information is served by AvatarService Av1&lt;br /&gt;
&lt;br /&gt;
*RegionServer R2 serves a sim at GridService G2&lt;br /&gt;
** R2 fetches assets from Assetserver As2 by default. &lt;br /&gt;
** R2 gets inventory information from InventoryServer I2 by default.&lt;br /&gt;
[[Image:avatar_portability_v2_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== avatar portability ===&lt;br /&gt;
&lt;br /&gt;
AvatarPortability (or called &amp;quot;grid interoperability&amp;quot;) is&lt;br /&gt;
*U1 login to R2&lt;br /&gt;
**U1's appearance at G1 can be seen from any other client which is connecting to R2.&lt;br /&gt;
**U1 can CRUD(Create/Read/Update/Delete) its inventory/appearance through R2.&lt;br /&gt;
&lt;br /&gt;
This means, (in the fig. 2) R2 should have the ability to connect not only its default&lt;br /&gt;
UGAI server, but also external Inventory, Asset, Avatar service.&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_v2_2.PNG]]&lt;br /&gt;
&lt;br /&gt;
'''Then &amp;quot;AvatarPortability&amp;quot; can be subdivided into 2 goals:'''&lt;br /&gt;
# '''How to''' let R2 know where are U1's storage services(Inventory,Asset,Avatar,...) ?&lt;br /&gt;
# '''How to''' enable R2 to interact with mutilple Inventory/Asset/Avatar services ?&lt;br /&gt;
&lt;br /&gt;
==== Answer to the 1st How to - XRDS ====&lt;br /&gt;
&lt;br /&gt;
more information can be found at:&lt;br /&gt;
*http://en.wikipedia.org/wiki/Yadis&lt;br /&gt;
*http://en.wikipedia.org/wiki/XRDS&lt;br /&gt;
&lt;br /&gt;
A sample XRDS for U1 can be like:&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;xrds:XRDS xmlns:xrds=&amp;quot;xri://$xrds&amp;quot; xmlns=&amp;quot;xri://$xrd*($v*2.0)&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;XRD&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/profileservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8002/GetUserProfile/12345678-1234-1234-1234-12345678abcd&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/authservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8002/session/12345678-1234-1234-1234-12345678abcd&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/assetservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8003&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/inventoryservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8004&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/avatarservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8005&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
   &amp;lt;/XRD&amp;gt;&lt;br /&gt;
  &amp;lt;/xrds:XRDS&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*There are more than one way can be considered to pass U1's XRDS file to R2&lt;br /&gt;
**[[OpenID for data portability in virtual world]]&lt;br /&gt;
&lt;br /&gt;
REASONS for proposing XRDS&lt;br /&gt;
# There are &amp;quot;UserAssetUrl&amp;quot; and &amp;quot;UserInventoryUrl&amp;quot; in &amp;quot;Users&amp;quot; table, they are cab be used to specify users' storage services, but it's '''lack of scalability''', to think we may have &amp;quot;friend service&amp;quot;, &amp;quot;currency service&amp;quot;, ... we can not simply add a column for each service.&lt;br /&gt;
# XRDS is widly used, many languages has libs for discovering/parsing it. To use XRDS can '''increase the compatibility　with existing(web) service'''&lt;br /&gt;
# '''XRDS is just a proposal''', still, we have many other choices.&lt;br /&gt;
&lt;br /&gt;
==== Answer to the 2nd How to - ForeignAssetHashTable ====&lt;br /&gt;
&lt;br /&gt;
Why it is a problem ? The asset download process is described below:&lt;br /&gt;
*RegionServer sends user/prims' Texture UUID to the client.&lt;br /&gt;
*Client extract the UUIDs, and sends a &amp;quot;RequestImagePacket&amp;quot; to request the actual asset data.&lt;br /&gt;
*RegionServer receives the AssetUUID and passes it to AssetServer to get the asset.&lt;br /&gt;
[[Image:avatar_portability_v2_3-1.PNG]]&lt;br /&gt;
*Considering only 1 GridService, there is no problem, but if RegionServer knows more than 1 asset server, RegionServer has to determine which assetserver should be used.&lt;br /&gt;
*Here '''ForeignAssetHashTable''' is used to solve this problem. (The detailed implementation is shown in following section.)&lt;br /&gt;
*#when U1 login to R2, R2 register U1's owned asset UUIDs to &amp;quot;ForeignAssetHashTable&amp;quot;.&lt;br /&gt;
*#Client sends a RequestImagePacket&lt;br /&gt;
*#R2 looks up into &amp;quot;ForeignAssetHashTable&amp;quot; to find the AssetServerUrl,(if not found, returns the default url)&lt;br /&gt;
*#R2 use the returned AssetServerUrl to get asset data.&lt;br /&gt;
[[Image:avatar_portability_v2_3.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
*All the implementation described here are already finished&lt;br /&gt;
*Just for appearance portability, asseturl and inventoryurl are enough, so currently just use the 2 existing properties.&lt;br /&gt;
*XRDS is not implemented&lt;br /&gt;
&lt;br /&gt;
=== 1 Implementation - ForeginAssetHashTable.Add ===&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-1.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== 2 Implementation - ForeginAssetHashTable.Get ===&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-2.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== 3 Implementation - ForeginAssetHashTable.Remove ===&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-3.PNG]]&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Avatar_portability_version_2</id>
		<title>Avatar portability version 2</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Avatar_portability_version_2"/>
				<updated>2008-07-22T15:04:57Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# '''(If a foreign user can login)How to get a foreign user's belongings(including appearance, inventory)'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
# [[AvatarPortability - Security]]&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented 2nd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Basic Idea ==&lt;br /&gt;
&lt;br /&gt;
=== definition ===&lt;br /&gt;
*User U1 resgitered at GridService G1&lt;br /&gt;
** U1's inventory information is stored in InventoryServer I1&lt;br /&gt;
** U1's assets are stored in AssetServer As1&lt;br /&gt;
** U1's appearance information is served by AvatarService Av1&lt;br /&gt;
&lt;br /&gt;
*RegionServer R2 serves a sim at GridService G2&lt;br /&gt;
** R2 fetches assets from Assetserver As2 by default. &lt;br /&gt;
** R2 gets inventory information from InventoryServer I2 by default.&lt;br /&gt;
[[Image:avatar_portability_v2_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== avatar portability ===&lt;br /&gt;
&lt;br /&gt;
AvatarPortability (or called &amp;quot;grid interoperability&amp;quot;) is&lt;br /&gt;
*U1 login to R2&lt;br /&gt;
**U1's appearance at G1 can be seen from any other client which is connecting to R2.&lt;br /&gt;
**U1 can CRUD(Create/Read/Update/Delete) its inventory/appearance through R2.&lt;br /&gt;
&lt;br /&gt;
This means, (in the fig. 2) R2 should have the ability to connect not only its default&lt;br /&gt;
UGAI server, but also external Inventory, Asset, Avatar service.&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_v2_2.PNG]]&lt;br /&gt;
&lt;br /&gt;
'''Then &amp;quot;AvatarPortability&amp;quot; can be subdivided into 2 goals:'''&lt;br /&gt;
# '''How to''' let R2 know where are U1's storage services(Inventory,Asset,Avatar,...) ?&lt;br /&gt;
# '''How to''' enable R2 to interact with mutilple Inventory/Asset/Avatar services ?&lt;br /&gt;
&lt;br /&gt;
==== Answer to the 1st How to - XRDS ====&lt;br /&gt;
&lt;br /&gt;
more information can be found at:&lt;br /&gt;
*http://en.wikipedia.org/wiki/Yadis&lt;br /&gt;
*http://en.wikipedia.org/wiki/XRDS&lt;br /&gt;
&lt;br /&gt;
A sample XRDS for U1 can be like:&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;xrds:XRDS xmlns:xrds=&amp;quot;xri://$xrds&amp;quot; xmlns=&amp;quot;xri://$xrd*($v*2.0)&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;XRD&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/profileservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8002/GetUserProfile/12345678-1234-1234-1234-12345678abcd&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/authservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8002/session/12345678-1234-1234-1234-12345678abcd&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/assetservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8003&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/inventoryservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8004&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/avatarservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8005&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
   &amp;lt;/XRD&amp;gt;&lt;br /&gt;
  &amp;lt;/xrds:XRDS&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*There are more than one way can be considered to pass U1's XRDS file to R2&lt;br /&gt;
**[[OpenID for data portability in virtual world]]&lt;br /&gt;
&lt;br /&gt;
REASONS for proposing XRDS&lt;br /&gt;
# There are &amp;quot;UserAssetUrl&amp;quot; and &amp;quot;UserInventoryUrl&amp;quot; in &amp;quot;Users&amp;quot; table, they are cab be used to specify users' storage services, but it's '''lack of scalability''', to think we may have &amp;quot;friend service&amp;quot;, &amp;quot;currency service&amp;quot;, ... we can not simply add a column for each service.&lt;br /&gt;
# XRDS is widly used, many languages has libs for discovering/parsing it. To use XRDS can '''increase the compatibility　with existing(web) service'''&lt;br /&gt;
# '''XRDS is just a proposal''', still, we have many other choices.&lt;br /&gt;
&lt;br /&gt;
==== Answer to the 2nd How to - ForeignAssetHashTable ====&lt;br /&gt;
&lt;br /&gt;
Why it is a problem ? The asset download process is described below:&lt;br /&gt;
*RegionServer sends user/prims' Texture UUID to the client.&lt;br /&gt;
*Client extract the UUIDs, and sends a &amp;quot;RequestImagePacket&amp;quot; to request the actual asset data.&lt;br /&gt;
*RegionServer receives the AssetUUID and passes it to AssetServer to get the asset.&lt;br /&gt;
[[Image:avatar_portability_v2_3-1.PNG]]&lt;br /&gt;
*Considering only 1 GridService, there is no problem, but if RegionServer knows more than 1 asset server, RegionServer has to determine which assetserver should be used.&lt;br /&gt;
*Here '''ForeignAssetHashTable''' is used to solve this problem. (The detailed implementation is shown in following section.)&lt;br /&gt;
*#when U1 login to R2, R2 register U1's owned asset UUIDs to &amp;quot;ForeignAssetHashTable&amp;quot;.&lt;br /&gt;
*#Client sends a RequestImagePacket&lt;br /&gt;
*#R2 looks up into &amp;quot;ForeignAssetHashTable&amp;quot; to find the AssetServerUrl,(if not found, returns the default url)&lt;br /&gt;
*#R2 use the returned AssetServerUrl to get asset data.&lt;br /&gt;
[[Image:avatar_portability_v2_3.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
=== 1 Implementation - ForeginAssetHashTable.Add ===&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-1.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== 2 Implementation - ForeginAssetHashTable.Get ===&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-2.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== 3 Implementation - ForeginAssetHashTable.Remove ===&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-3.PNG]]&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Avatar_portability_version_2</id>
		<title>Avatar portability version 2</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Avatar_portability_version_2"/>
				<updated>2008-07-22T15:04:26Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Answer to the 2nd How - ForeignAssetHashTable */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# '''(If a foreign user can login)How to get a foreign user's belongings(including appearance, inventory)'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
# [[AvatarPortability - Security]]&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented 2nd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Basic Idea ==&lt;br /&gt;
&lt;br /&gt;
=== definition ===&lt;br /&gt;
*User U1 resgitered at GridService G1&lt;br /&gt;
** U1's inventory information is stored in InventoryServer I1&lt;br /&gt;
** U1's assets are stored in AssetServer As1&lt;br /&gt;
** U1's appearance information is served by AvatarService Av1&lt;br /&gt;
&lt;br /&gt;
*RegionServer R2 serves a sim at GridService G2&lt;br /&gt;
** R2 fetches assets from Assetserver As2 by default. &lt;br /&gt;
** R2 gets inventory information from InventoryServer I2 by default.&lt;br /&gt;
[[Image:avatar_portability_v2_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== avatar portability ===&lt;br /&gt;
&lt;br /&gt;
AvatarPortability (or called &amp;quot;grid interoperability&amp;quot;) is&lt;br /&gt;
*U1 login to R2&lt;br /&gt;
**U1's appearance at G1 can be seen from any other client which is connecting to R2.&lt;br /&gt;
**U1 can CRUD(Create/Read/Update/Delete) its inventory/appearance through R2.&lt;br /&gt;
&lt;br /&gt;
This means, (in the fig. 2) R2 should have the ability to connect not only its default&lt;br /&gt;
UGAI server, but also external Inventory, Asset, Avatar service.&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_v2_2.PNG]]&lt;br /&gt;
&lt;br /&gt;
'''Then &amp;quot;AvatarPortability&amp;quot; can be subdivided into 2 goals:'''&lt;br /&gt;
# '''How to''' let R2 know where are U1's storage services(Inventory,Asset,Avatar,...) ?&lt;br /&gt;
# '''How to''' enable R2 to interact with mutilple Inventory/Asset/Avatar services ?&lt;br /&gt;
&lt;br /&gt;
==== Answer to the 1st How to - XRDS ====&lt;br /&gt;
&lt;br /&gt;
more information can be found at:&lt;br /&gt;
*http://en.wikipedia.org/wiki/Yadis&lt;br /&gt;
*http://en.wikipedia.org/wiki/XRDS&lt;br /&gt;
&lt;br /&gt;
A sample XRDS for U1 can be like:&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;xrds:XRDS xmlns:xrds=&amp;quot;xri://$xrds&amp;quot; xmlns=&amp;quot;xri://$xrd*($v*2.0)&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;XRD&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/profileservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8002/GetUserProfile/12345678-1234-1234-1234-12345678abcd&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/authservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8002/session/12345678-1234-1234-1234-12345678abcd&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/assetservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8003&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/inventoryservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8004&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/avatarservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8005&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
   &amp;lt;/XRD&amp;gt;&lt;br /&gt;
  &amp;lt;/xrds:XRDS&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*There are more than one way can be considered to pass U1's XRDS file to R2&lt;br /&gt;
**[[OpenID for data portability in virtual world]]&lt;br /&gt;
&lt;br /&gt;
REASONS for proposing XRDS&lt;br /&gt;
# There are &amp;quot;UserAssetUrl&amp;quot; and &amp;quot;UserInventoryUrl&amp;quot; in &amp;quot;Users&amp;quot; table, they are cab be used to specify users' storage services, but it's '''lack of scalability''', to think we may have &amp;quot;friend service&amp;quot;, &amp;quot;currency service&amp;quot;, ... we can not simply add a column for each service.&lt;br /&gt;
# XRDS is widly used, many languages has libs for discovering/parsing it. To use XRDS can '''increase the compatibility　with existing(web) service'''&lt;br /&gt;
# '''XRDS is just a proposal''', still, we have many other choices.&lt;br /&gt;
&lt;br /&gt;
==== Answer to the 2nd How to - ForeignAssetHashTable ====&lt;br /&gt;
&lt;br /&gt;
Why it is a problem ? The asset download process is described below:&lt;br /&gt;
*RegionServer sends user/prims' Texture UUID to the client.&lt;br /&gt;
*Client extract the UUIDs, and sends a &amp;quot;RequestImagePacket&amp;quot; to request the actual asset data.&lt;br /&gt;
*RegionServer receives the AssetUUID and passes it to AssetServer to get the asset.&lt;br /&gt;
[[Image:avatar_portability_v2_3-1.PNG]]&lt;br /&gt;
*Considering only 1 GridService, there is no problem, but if RegionServer knows more than 1 asset server, RegionServer has to determine which assetserver should be used.&lt;br /&gt;
*Here '''ForeignAssetHashTable''' is used to solve this problem. (The detailed implementation is shown in following section.)&lt;br /&gt;
*#when U1 login to R2, R2 register U1's owned asset UUIDs to &amp;quot;ForeignAssetHashTable&amp;quot;.&lt;br /&gt;
*#Client sends a RequestImagePacket&lt;br /&gt;
*#R2 looks up into &amp;quot;ForeignAssetHashTable&amp;quot; to find the AssetServerUrl,(if not found, returns the default url)&lt;br /&gt;
*#R2 use the returned AssetServerUrl to get asset data.&lt;br /&gt;
[[Image:avatar_portability_v2_3.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
&lt;br /&gt;
[[not prepared yet]]&lt;br /&gt;
&lt;br /&gt;
=== Avatar Portability ===&lt;br /&gt;
&lt;br /&gt;
==== 1 Implementation - ForeginAssetHashTable.Add ====&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-1.PNG]]&lt;br /&gt;
&lt;br /&gt;
==== 2 Implementation - ForeginAssetHashTable.Get ====&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-2.PNG]]&lt;br /&gt;
&lt;br /&gt;
==== 3 Implementation - ForeginAssetHashTable.Remove ====&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-3.PNG]]&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Avatar_portability_version_2</id>
		<title>Avatar portability version 2</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Avatar_portability_version_2"/>
				<updated>2008-07-22T15:04:14Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Answer to the 1st How - XRDS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# '''(If a foreign user can login)How to get a foreign user's belongings(including appearance, inventory)'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
# [[AvatarPortability - Security]]&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented 2nd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Basic Idea ==&lt;br /&gt;
&lt;br /&gt;
=== definition ===&lt;br /&gt;
*User U1 resgitered at GridService G1&lt;br /&gt;
** U1's inventory information is stored in InventoryServer I1&lt;br /&gt;
** U1's assets are stored in AssetServer As1&lt;br /&gt;
** U1's appearance information is served by AvatarService Av1&lt;br /&gt;
&lt;br /&gt;
*RegionServer R2 serves a sim at GridService G2&lt;br /&gt;
** R2 fetches assets from Assetserver As2 by default. &lt;br /&gt;
** R2 gets inventory information from InventoryServer I2 by default.&lt;br /&gt;
[[Image:avatar_portability_v2_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== avatar portability ===&lt;br /&gt;
&lt;br /&gt;
AvatarPortability (or called &amp;quot;grid interoperability&amp;quot;) is&lt;br /&gt;
*U1 login to R2&lt;br /&gt;
**U1's appearance at G1 can be seen from any other client which is connecting to R2.&lt;br /&gt;
**U1 can CRUD(Create/Read/Update/Delete) its inventory/appearance through R2.&lt;br /&gt;
&lt;br /&gt;
This means, (in the fig. 2) R2 should have the ability to connect not only its default&lt;br /&gt;
UGAI server, but also external Inventory, Asset, Avatar service.&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_v2_2.PNG]]&lt;br /&gt;
&lt;br /&gt;
'''Then &amp;quot;AvatarPortability&amp;quot; can be subdivided into 2 goals:'''&lt;br /&gt;
# '''How to''' let R2 know where are U1's storage services(Inventory,Asset,Avatar,...) ?&lt;br /&gt;
# '''How to''' enable R2 to interact with mutilple Inventory/Asset/Avatar services ?&lt;br /&gt;
&lt;br /&gt;
==== Answer to the 1st How to - XRDS ====&lt;br /&gt;
&lt;br /&gt;
more information can be found at:&lt;br /&gt;
*http://en.wikipedia.org/wiki/Yadis&lt;br /&gt;
*http://en.wikipedia.org/wiki/XRDS&lt;br /&gt;
&lt;br /&gt;
A sample XRDS for U1 can be like:&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;xrds:XRDS xmlns:xrds=&amp;quot;xri://$xrds&amp;quot; xmlns=&amp;quot;xri://$xrd*($v*2.0)&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;XRD&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/profileservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8002/GetUserProfile/12345678-1234-1234-1234-12345678abcd&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/authservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8002/session/12345678-1234-1234-1234-12345678abcd&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/assetservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8003&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/inventoryservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8004&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/avatarservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8005&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
   &amp;lt;/XRD&amp;gt;&lt;br /&gt;
  &amp;lt;/xrds:XRDS&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*There are more than one way can be considered to pass U1's XRDS file to R2&lt;br /&gt;
**[[OpenID for data portability in virtual world]]&lt;br /&gt;
&lt;br /&gt;
REASONS for proposing XRDS&lt;br /&gt;
# There are &amp;quot;UserAssetUrl&amp;quot; and &amp;quot;UserInventoryUrl&amp;quot; in &amp;quot;Users&amp;quot; table, they are cab be used to specify users' storage services, but it's '''lack of scalability''', to think we may have &amp;quot;friend service&amp;quot;, &amp;quot;currency service&amp;quot;, ... we can not simply add a column for each service.&lt;br /&gt;
# XRDS is widly used, many languages has libs for discovering/parsing it. To use XRDS can '''increase the compatibility　with existing(web) service'''&lt;br /&gt;
# '''XRDS is just a proposal''', still, we have many other choices.&lt;br /&gt;
&lt;br /&gt;
==== Answer to the 2nd How - ForeignAssetHashTable ====&lt;br /&gt;
&lt;br /&gt;
Why it is a problem ? The asset download process is described below:&lt;br /&gt;
*RegionServer sends user/prims' Texture UUID to the client.&lt;br /&gt;
*Client extract the UUIDs, and sends a &amp;quot;RequestImagePacket&amp;quot; to request the actual asset data.&lt;br /&gt;
*RegionServer receives the AssetUUID and passes it to AssetServer to get the asset.&lt;br /&gt;
[[Image:avatar_portability_v2_3-1.PNG]]&lt;br /&gt;
*Considering only 1 GridService, there is no problem, but if RegionServer knows more than 1 asset server, RegionServer has to determine which assetserver should be used.&lt;br /&gt;
*Here '''ForeignAssetHashTable''' is used to solve this problem. (The detailed implementation is shown in following section.)&lt;br /&gt;
*#when U1 login to R2, R2 register U1's owned asset UUIDs to &amp;quot;ForeignAssetHashTable&amp;quot;.&lt;br /&gt;
*#Client sends a RequestImagePacket&lt;br /&gt;
*#R2 looks up into &amp;quot;ForeignAssetHashTable&amp;quot; to find the AssetServerUrl,(if not found, returns the default url)&lt;br /&gt;
*#R2 use the returned AssetServerUrl to get asset data.&lt;br /&gt;
[[Image:avatar_portability_v2_3.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
&lt;br /&gt;
[[not prepared yet]]&lt;br /&gt;
&lt;br /&gt;
=== Avatar Portability ===&lt;br /&gt;
&lt;br /&gt;
==== 1 Implementation - ForeginAssetHashTable.Add ====&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-1.PNG]]&lt;br /&gt;
&lt;br /&gt;
==== 2 Implementation - ForeginAssetHashTable.Get ====&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-2.PNG]]&lt;br /&gt;
&lt;br /&gt;
==== 3 Implementation - ForeginAssetHashTable.Remove ====&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-3.PNG]]&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Avatar_portability_version_2</id>
		<title>Avatar portability version 2</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Avatar_portability_version_2"/>
				<updated>2008-07-22T15:03:32Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* avatar portability */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# '''(If a foreign user can login)How to get a foreign user's belongings(including appearance, inventory)'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
# [[AvatarPortability - Security]]&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented 2nd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Basic Idea ==&lt;br /&gt;
&lt;br /&gt;
=== definition ===&lt;br /&gt;
*User U1 resgitered at GridService G1&lt;br /&gt;
** U1's inventory information is stored in InventoryServer I1&lt;br /&gt;
** U1's assets are stored in AssetServer As1&lt;br /&gt;
** U1's appearance information is served by AvatarService Av1&lt;br /&gt;
&lt;br /&gt;
*RegionServer R2 serves a sim at GridService G2&lt;br /&gt;
** R2 fetches assets from Assetserver As2 by default. &lt;br /&gt;
** R2 gets inventory information from InventoryServer I2 by default.&lt;br /&gt;
[[Image:avatar_portability_v2_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== avatar portability ===&lt;br /&gt;
&lt;br /&gt;
AvatarPortability (or called &amp;quot;grid interoperability&amp;quot;) is&lt;br /&gt;
*U1 login to R2&lt;br /&gt;
**U1's appearance at G1 can be seen from any other client which is connecting to R2.&lt;br /&gt;
**U1 can CRUD(Create/Read/Update/Delete) its inventory/appearance through R2.&lt;br /&gt;
&lt;br /&gt;
This means, (in the fig. 2) R2 should have the ability to connect not only its default&lt;br /&gt;
UGAI server, but also external Inventory, Asset, Avatar service.&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_v2_2.PNG]]&lt;br /&gt;
&lt;br /&gt;
'''Then &amp;quot;AvatarPortability&amp;quot; can be subdivided into 2 goals:'''&lt;br /&gt;
# '''How to''' let R2 know where are U1's storage services(Inventory,Asset,Avatar,...) ?&lt;br /&gt;
# '''How to''' enable R2 to interact with mutilple Inventory/Asset/Avatar services ?&lt;br /&gt;
&lt;br /&gt;
==== Answer to the 1st How - XRDS ====&lt;br /&gt;
&lt;br /&gt;
more information can be found at:&lt;br /&gt;
*http://en.wikipedia.org/wiki/Yadis&lt;br /&gt;
*http://en.wikipedia.org/wiki/XRDS&lt;br /&gt;
&lt;br /&gt;
A sample XRDS for U1 can be like:&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;xrds:XRDS xmlns:xrds=&amp;quot;xri://$xrds&amp;quot; xmlns=&amp;quot;xri://$xrd*($v*2.0)&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;XRD&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/profileservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8002/GetUserProfile/12345678-1234-1234-1234-12345678abcd&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/authservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8002/session/12345678-1234-1234-1234-12345678abcd&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/assetservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8003&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/inventoryservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8004&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/avatarservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8005&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
   &amp;lt;/XRD&amp;gt;&lt;br /&gt;
  &amp;lt;/xrds:XRDS&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*There are more than one way can be considered to pass U1's XRDS file to R2&lt;br /&gt;
**[[OpenID for data portability in virtual world]]&lt;br /&gt;
&lt;br /&gt;
REASONS for proposing XRDS&lt;br /&gt;
# There are &amp;quot;UserAssetUrl&amp;quot; and &amp;quot;UserInventoryUrl&amp;quot; in &amp;quot;Users&amp;quot; table, they are cab be used to specify users' storage services, but it's '''lack of scalability''', to think we may have &amp;quot;friend service&amp;quot;, &amp;quot;currency service&amp;quot;, ... we can not simply add a column for each service.&lt;br /&gt;
# XRDS is widly used, many languages has libs for discovering/parsing it. To use XRDS can '''increase the compatibility　with existing(web) service'''&lt;br /&gt;
# '''XRDS is just a proposal''', still, we have many other choices.&lt;br /&gt;
&lt;br /&gt;
==== Answer to the 2nd How - ForeignAssetHashTable ====&lt;br /&gt;
&lt;br /&gt;
Why it is a problem ? The asset download process is described below:&lt;br /&gt;
*RegionServer sends user/prims' Texture UUID to the client.&lt;br /&gt;
*Client extract the UUIDs, and sends a &amp;quot;RequestImagePacket&amp;quot; to request the actual asset data.&lt;br /&gt;
*RegionServer receives the AssetUUID and passes it to AssetServer to get the asset.&lt;br /&gt;
[[Image:avatar_portability_v2_3-1.PNG]]&lt;br /&gt;
*Considering only 1 GridService, there is no problem, but if RegionServer knows more than 1 asset server, RegionServer has to determine which assetserver should be used.&lt;br /&gt;
*Here '''ForeignAssetHashTable''' is used to solve this problem. (The detailed implementation is shown in following section.)&lt;br /&gt;
*#when U1 login to R2, R2 register U1's owned asset UUIDs to &amp;quot;ForeignAssetHashTable&amp;quot;.&lt;br /&gt;
*#Client sends a RequestImagePacket&lt;br /&gt;
*#R2 looks up into &amp;quot;ForeignAssetHashTable&amp;quot; to find the AssetServerUrl,(if not found, returns the default url)&lt;br /&gt;
*#R2 use the returned AssetServerUrl to get asset data.&lt;br /&gt;
[[Image:avatar_portability_v2_3.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
&lt;br /&gt;
[[not prepared yet]]&lt;br /&gt;
&lt;br /&gt;
=== Avatar Portability ===&lt;br /&gt;
&lt;br /&gt;
==== 1 Implementation - ForeginAssetHashTable.Add ====&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-1.PNG]]&lt;br /&gt;
&lt;br /&gt;
==== 2 Implementation - ForeginAssetHashTable.Get ====&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-2.PNG]]&lt;br /&gt;
&lt;br /&gt;
==== 3 Implementation - ForeginAssetHashTable.Remove ====&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-3.PNG]]&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Avatar_portability_version_2</id>
		<title>Avatar portability version 2</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Avatar_portability_version_2"/>
				<updated>2008-07-22T15:02:28Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Agenda */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# '''(If a foreign user can login)How to get a foreign user's belongings(including appearance, inventory)'''&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
# [[AvatarPortability - Security]]&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented 2nd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Basic Idea ==&lt;br /&gt;
&lt;br /&gt;
=== definition ===&lt;br /&gt;
*User U1 resgitered at GridService G1&lt;br /&gt;
** U1's inventory information is stored in InventoryServer I1&lt;br /&gt;
** U1's assets are stored in AssetServer As1&lt;br /&gt;
** U1's appearance information is served by AvatarService Av1&lt;br /&gt;
&lt;br /&gt;
*RegionServer R2 serves a sim at GridService G2&lt;br /&gt;
** R2 fetches assets from Assetserver As2 by default. &lt;br /&gt;
** R2 gets inventory information from InventoryServer I2 by default.&lt;br /&gt;
[[Image:avatar_portability_v2_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== avatar portability ===&lt;br /&gt;
&lt;br /&gt;
AvatarPortability (or called &amp;quot;grid interoperability&amp;quot;) is&lt;br /&gt;
*U1 login to R2&lt;br /&gt;
**U1's appearance at G1 can be seen from any other client which is connecting to R2.&lt;br /&gt;
**U1 can CRUD(Create/Read/Update/Delete) its inventory/appearance through R2.&lt;br /&gt;
&lt;br /&gt;
This means, (in the fig. 2) R2 should have the ability to connect not only its default&lt;br /&gt;
UGAI server, but also external Inventory, Asset, Avatar service.&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_v2_2.PNG]]&lt;br /&gt;
&lt;br /&gt;
Then &amp;quot;AvatarPortability&amp;quot; can be subdivided into 2 goals&lt;br /&gt;
# How to let R2 know where are U1's storage services(Inventory,Asset,Avatar,...) ?&lt;br /&gt;
# How to enable R2 to interact with mutilple Inventory/Asset/Avatar services ?&lt;br /&gt;
&lt;br /&gt;
==== Answer to the 1st How - XRDS ====&lt;br /&gt;
&lt;br /&gt;
more information can be found at:&lt;br /&gt;
*http://en.wikipedia.org/wiki/Yadis&lt;br /&gt;
*http://en.wikipedia.org/wiki/XRDS&lt;br /&gt;
&lt;br /&gt;
A sample XRDS for U1 can be like:&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;xrds:XRDS xmlns:xrds=&amp;quot;xri://$xrds&amp;quot; xmlns=&amp;quot;xri://$xrd*($v*2.0)&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;XRD&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/profileservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8002/GetUserProfile/12345678-1234-1234-1234-12345678abcd&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/authservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8002/session/12345678-1234-1234-1234-12345678abcd&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/assetservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8003&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/inventoryservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8004&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/avatarservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8005&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
   &amp;lt;/XRD&amp;gt;&lt;br /&gt;
  &amp;lt;/xrds:XRDS&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*There are more than one way can be considered to pass U1's XRDS file to R2&lt;br /&gt;
**[[OpenID for data portability in virtual world]]&lt;br /&gt;
&lt;br /&gt;
REASONS for proposing XRDS&lt;br /&gt;
# There are &amp;quot;UserAssetUrl&amp;quot; and &amp;quot;UserInventoryUrl&amp;quot; in &amp;quot;Users&amp;quot; table, they are cab be used to specify users' storage services, but it's '''lack of scalability''', to think we may have &amp;quot;friend service&amp;quot;, &amp;quot;currency service&amp;quot;, ... we can not simply add a column for each service.&lt;br /&gt;
# XRDS is widly used, many languages has libs for discovering/parsing it. To use XRDS can '''increase the compatibility　with existing(web) service'''&lt;br /&gt;
# '''XRDS is just a proposal''', still, we have many other choices.&lt;br /&gt;
&lt;br /&gt;
==== Answer to the 2nd How - ForeignAssetHashTable ====&lt;br /&gt;
&lt;br /&gt;
Why it is a problem ? The asset download process is described below:&lt;br /&gt;
*RegionServer sends user/prims' Texture UUID to the client.&lt;br /&gt;
*Client extract the UUIDs, and sends a &amp;quot;RequestImagePacket&amp;quot; to request the actual asset data.&lt;br /&gt;
*RegionServer receives the AssetUUID and passes it to AssetServer to get the asset.&lt;br /&gt;
[[Image:avatar_portability_v2_3-1.PNG]]&lt;br /&gt;
*Considering only 1 GridService, there is no problem, but if RegionServer knows more than 1 asset server, RegionServer has to determine which assetserver should be used.&lt;br /&gt;
*Here '''ForeignAssetHashTable''' is used to solve this problem. (The detailed implementation is shown in following section.)&lt;br /&gt;
*#when U1 login to R2, R2 register U1's owned asset UUIDs to &amp;quot;ForeignAssetHashTable&amp;quot;.&lt;br /&gt;
*#Client sends a RequestImagePacket&lt;br /&gt;
*#R2 looks up into &amp;quot;ForeignAssetHashTable&amp;quot; to find the AssetServerUrl,(if not found, returns the default url)&lt;br /&gt;
*#R2 use the returned AssetServerUrl to get asset data.&lt;br /&gt;
[[Image:avatar_portability_v2_3.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
&lt;br /&gt;
[[not prepared yet]]&lt;br /&gt;
&lt;br /&gt;
=== Avatar Portability ===&lt;br /&gt;
&lt;br /&gt;
==== 1 Implementation - ForeginAssetHashTable.Add ====&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-1.PNG]]&lt;br /&gt;
&lt;br /&gt;
==== 2 Implementation - ForeginAssetHashTable.Get ====&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-2.PNG]]&lt;br /&gt;
&lt;br /&gt;
==== 3 Implementation - ForeginAssetHashTable.Remove ====&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-3.PNG]]&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Avatar_portability_version_2</id>
		<title>Avatar portability version 2</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Avatar_portability_version_2"/>
				<updated>2008-07-22T15:02:07Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Basic Idea */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# (If a foreign user can login)How to get a foreign user's belongings(including appearance, inventory)&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
# [[AvatarPortability - Security]]&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented 2nd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Basic Idea ==&lt;br /&gt;
&lt;br /&gt;
=== definition ===&lt;br /&gt;
*User U1 resgitered at GridService G1&lt;br /&gt;
** U1's inventory information is stored in InventoryServer I1&lt;br /&gt;
** U1's assets are stored in AssetServer As1&lt;br /&gt;
** U1's appearance information is served by AvatarService Av1&lt;br /&gt;
&lt;br /&gt;
*RegionServer R2 serves a sim at GridService G2&lt;br /&gt;
** R2 fetches assets from Assetserver As2 by default. &lt;br /&gt;
** R2 gets inventory information from InventoryServer I2 by default.&lt;br /&gt;
[[Image:avatar_portability_v2_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== avatar portability ===&lt;br /&gt;
&lt;br /&gt;
AvatarPortability (or called &amp;quot;grid interoperability&amp;quot;) is&lt;br /&gt;
*U1 login to R2&lt;br /&gt;
**U1's appearance at G1 can be seen from any other client which is connecting to R2.&lt;br /&gt;
**U1 can CRUD(Create/Read/Update/Delete) its inventory/appearance through R2.&lt;br /&gt;
&lt;br /&gt;
This means, (in the fig. 2) R2 should have the ability to connect not only its default&lt;br /&gt;
UGAI server, but also external Inventory, Asset, Avatar service.&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_v2_2.PNG]]&lt;br /&gt;
&lt;br /&gt;
Then &amp;quot;AvatarPortability&amp;quot; can be subdivided into 2 goals&lt;br /&gt;
# How to let R2 know where are U1's storage services(Inventory,Asset,Avatar,...) ?&lt;br /&gt;
# How to enable R2 to interact with mutilple Inventory/Asset/Avatar services ?&lt;br /&gt;
&lt;br /&gt;
==== Answer to the 1st How - XRDS ====&lt;br /&gt;
&lt;br /&gt;
more information can be found at:&lt;br /&gt;
*http://en.wikipedia.org/wiki/Yadis&lt;br /&gt;
*http://en.wikipedia.org/wiki/XRDS&lt;br /&gt;
&lt;br /&gt;
A sample XRDS for U1 can be like:&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;xrds:XRDS xmlns:xrds=&amp;quot;xri://$xrds&amp;quot; xmlns=&amp;quot;xri://$xrd*($v*2.0)&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;XRD&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/profileservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8002/GetUserProfile/12345678-1234-1234-1234-12345678abcd&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/authservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8002/session/12345678-1234-1234-1234-12345678abcd&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/assetservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8003&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/inventoryservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8004&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/avatarservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8005&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
   &amp;lt;/XRD&amp;gt;&lt;br /&gt;
  &amp;lt;/xrds:XRDS&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*There are more than one way can be considered to pass U1's XRDS file to R2&lt;br /&gt;
**[[OpenID for data portability in virtual world]]&lt;br /&gt;
&lt;br /&gt;
REASONS for proposing XRDS&lt;br /&gt;
# There are &amp;quot;UserAssetUrl&amp;quot; and &amp;quot;UserInventoryUrl&amp;quot; in &amp;quot;Users&amp;quot; table, they are cab be used to specify users' storage services, but it's '''lack of scalability''', to think we may have &amp;quot;friend service&amp;quot;, &amp;quot;currency service&amp;quot;, ... we can not simply add a column for each service.&lt;br /&gt;
# XRDS is widly used, many languages has libs for discovering/parsing it. To use XRDS can '''increase the compatibility　with existing(web) service'''&lt;br /&gt;
# '''XRDS is just a proposal''', still, we have many other choices.&lt;br /&gt;
&lt;br /&gt;
==== Answer to the 2nd How - ForeignAssetHashTable ====&lt;br /&gt;
&lt;br /&gt;
Why it is a problem ? The asset download process is described below:&lt;br /&gt;
*RegionServer sends user/prims' Texture UUID to the client.&lt;br /&gt;
*Client extract the UUIDs, and sends a &amp;quot;RequestImagePacket&amp;quot; to request the actual asset data.&lt;br /&gt;
*RegionServer receives the AssetUUID and passes it to AssetServer to get the asset.&lt;br /&gt;
[[Image:avatar_portability_v2_3-1.PNG]]&lt;br /&gt;
*Considering only 1 GridService, there is no problem, but if RegionServer knows more than 1 asset server, RegionServer has to determine which assetserver should be used.&lt;br /&gt;
*Here '''ForeignAssetHashTable''' is used to solve this problem. (The detailed implementation is shown in following section.)&lt;br /&gt;
*#when U1 login to R2, R2 register U1's owned asset UUIDs to &amp;quot;ForeignAssetHashTable&amp;quot;.&lt;br /&gt;
*#Client sends a RequestImagePacket&lt;br /&gt;
*#R2 looks up into &amp;quot;ForeignAssetHashTable&amp;quot; to find the AssetServerUrl,(if not found, returns the default url)&lt;br /&gt;
*#R2 use the returned AssetServerUrl to get asset data.&lt;br /&gt;
[[Image:avatar_portability_v2_3.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
&lt;br /&gt;
[[not prepared yet]]&lt;br /&gt;
&lt;br /&gt;
=== Avatar Portability ===&lt;br /&gt;
&lt;br /&gt;
==== 1 Implementation - ForeginAssetHashTable.Add ====&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-1.PNG]]&lt;br /&gt;
&lt;br /&gt;
==== 2 Implementation - ForeginAssetHashTable.Get ====&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-2.PNG]]&lt;br /&gt;
&lt;br /&gt;
==== 3 Implementation - ForeginAssetHashTable.Remove ====&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-3.PNG]]&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Avatar_portability_version_2</id>
		<title>Avatar portability version 2</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Avatar_portability_version_2"/>
				<updated>2008-07-22T15:01:34Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Avatar Portability */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# (If a foreign user can login)How to get a foreign user's belongings(including appearance, inventory)&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
# [[AvatarPortability - Security]]&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented 2nd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Basic Idea ==&lt;br /&gt;
&lt;br /&gt;
=== definition ===&lt;br /&gt;
*User U1 resgitered at GridService G1&lt;br /&gt;
** U1's inventory information is stored in InventoryServer I1&lt;br /&gt;
** U1's assets are stored in AssetServer As1&lt;br /&gt;
** U1's appearance information is served by AvatarService Av1&lt;br /&gt;
&lt;br /&gt;
*RegionServer R2 serves a sim at GridService G2&lt;br /&gt;
** R2 fetches assets from Assetserver As2 by default. &lt;br /&gt;
** R2 gets inventory information from InventoryServer I2 by default.&lt;br /&gt;
[[Image:avatar_portability_v2_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== avatar portability ===&lt;br /&gt;
&lt;br /&gt;
AvatarPortability (or called &amp;quot;grid interoperability&amp;quot;) is&lt;br /&gt;
*U1 login to R2&lt;br /&gt;
**U1's appearance at G1 can be seen from any other client which is connecting to R2.&lt;br /&gt;
**U1 can CRUD(Create/Read/Update/Delete) its inventory/appearance through R2.&lt;br /&gt;
&lt;br /&gt;
This means, (in the fig. 2) R2 should have the ability to connect not only its default&lt;br /&gt;
UGAI server, but also external Inventory, Asset, Avatar service.&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_v2_2.PNG]]&lt;br /&gt;
&lt;br /&gt;
Then &amp;quot;AvatarPortability&amp;quot; can be subdivided into 2 goals&lt;br /&gt;
# How to let R2 know where are U1's storage services(Inventory,Asset,Avatar,...) ?&lt;br /&gt;
# How to enable R2 to interact with mutilple Inventory/Asset/Avatar services ?&lt;br /&gt;
&lt;br /&gt;
==== Answer to the 1st How - XRDS ====&lt;br /&gt;
&lt;br /&gt;
more information can be found at:&lt;br /&gt;
*http://en.wikipedia.org/wiki/Yadis&lt;br /&gt;
*http://en.wikipedia.org/wiki/XRDS&lt;br /&gt;
&lt;br /&gt;
A sample XRDS for U1 can be like:&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;xrds:XRDS xmlns:xrds=&amp;quot;xri://$xrds&amp;quot; xmlns=&amp;quot;xri://$xrd*($v*2.0)&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;XRD&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/profileservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8002/GetUserProfile/12345678-1234-1234-1234-12345678abcd&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/authservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8002/session/12345678-1234-1234-1234-12345678abcd&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/assetservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8003&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/inventoryservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8004&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/avatarservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8005&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
   &amp;lt;/XRD&amp;gt;&lt;br /&gt;
  &amp;lt;/xrds:XRDS&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*There are more than one way can be considered to pass U1's XRDS file to R2&lt;br /&gt;
**[[OpenID for data portability in virtual world]]&lt;br /&gt;
&lt;br /&gt;
REASONS for proposing XRDS&lt;br /&gt;
# There are &amp;quot;UserAssetUrl&amp;quot; and &amp;quot;UserInventoryUrl&amp;quot; in &amp;quot;Users&amp;quot; table, they are cab be used to specify users' storage services, but it's '''lack of scalability''', to think we may have &amp;quot;friend service&amp;quot;, &amp;quot;currency service&amp;quot;, ... we can not simply add a column for each service.&lt;br /&gt;
# XRDS is widly used, many languages has libs for discovering/parsing it. To use XRDS can '''increase the compatibility　with existing(web) service'''&lt;br /&gt;
# '''XRDS is just a proposal''', still, we have many other choices.&lt;br /&gt;
&lt;br /&gt;
==== Answer to the 2nd How - ForeignAssetHashTable ====&lt;br /&gt;
&lt;br /&gt;
Why it is a problem ? The asset download process is described below:&lt;br /&gt;
*RegionServer sends user/prims' Texture UUID to the client.&lt;br /&gt;
*Client extract the UUIDs, and sends a &amp;quot;RequestImagePacket&amp;quot; to request the actual asset data.&lt;br /&gt;
*RegionServer receives the AssetUUID and passes it to AssetServer to get the asset.&lt;br /&gt;
[[Image:avatar_portability_v2_3-1.PNG]]&lt;br /&gt;
*Considering only 1 GridService, there is no problem, but if RegionServer knows more than 1 asset server, RegionServer has to determine which assetserver should be used.&lt;br /&gt;
*Here '''ForeignAssetHashTable''' is used to solve this problem. (The detailed implementation is shown in following section.)&lt;br /&gt;
*#when U1 login to R2, R2 register U1's owned asset UUIDs to &amp;quot;ForeignAssetHashTable&amp;quot;.&lt;br /&gt;
*#Client sends a RequestImagePacket&lt;br /&gt;
*#R2 looks up into &amp;quot;ForeignAssetHashTable&amp;quot; to find the AssetServerUrl,(if not found, returns the default url)&lt;br /&gt;
*#R2 use the returned AssetServerUrl to get asset data.&lt;br /&gt;
[[Image:avatar_portability_v2_3.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== implemetation ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
&lt;br /&gt;
[[not prepared yet]]&lt;br /&gt;
&lt;br /&gt;
=== Avatar Portability ===&lt;br /&gt;
&lt;br /&gt;
==== 1 Implementation - ForeginAssetHashTable.Add ====&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-1.PNG]]&lt;br /&gt;
&lt;br /&gt;
==== 2 Implementation - ForeginAssetHashTable.Get ====&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-2.PNG]]&lt;br /&gt;
&lt;br /&gt;
==== 3 Implementation - ForeginAssetHashTable.Remove ====&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-3.PNG]]&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Avatar_portability_version_2</id>
		<title>Avatar portability version 2</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Avatar_portability_version_2"/>
				<updated>2008-07-22T15:00:32Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Answer to the 2nd How - ForeignAssetHashTable */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# (If a foreign user can login)How to get a foreign user's belongings(including appearance, inventory)&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
# [[AvatarPortability - Security]]&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented 2nd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Basic Idea ==&lt;br /&gt;
&lt;br /&gt;
=== definition ===&lt;br /&gt;
*User U1 resgitered at GridService G1&lt;br /&gt;
** U1's inventory information is stored in InventoryServer I1&lt;br /&gt;
** U1's assets are stored in AssetServer As1&lt;br /&gt;
** U1's appearance information is served by AvatarService Av1&lt;br /&gt;
&lt;br /&gt;
*RegionServer R2 serves a sim at GridService G2&lt;br /&gt;
** R2 fetches assets from Assetserver As2 by default. &lt;br /&gt;
** R2 gets inventory information from InventoryServer I2 by default.&lt;br /&gt;
[[Image:avatar_portability_v2_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== avatar portability ===&lt;br /&gt;
&lt;br /&gt;
AvatarPortability (or called &amp;quot;grid interoperability&amp;quot;) is&lt;br /&gt;
*U1 login to R2&lt;br /&gt;
**U1's appearance at G1 can be seen from any other client which is connecting to R2.&lt;br /&gt;
**U1 can CRUD(Create/Read/Update/Delete) its inventory/appearance through R2.&lt;br /&gt;
&lt;br /&gt;
This means, (in the fig. 2) R2 should have the ability to connect not only its default&lt;br /&gt;
UGAI server, but also external Inventory, Asset, Avatar service.&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_v2_2.PNG]]&lt;br /&gt;
&lt;br /&gt;
Then &amp;quot;AvatarPortability&amp;quot; can be subdivided into 2 goals&lt;br /&gt;
# How to let R2 know where are U1's storage services(Inventory,Asset,Avatar,...) ?&lt;br /&gt;
# How to enable R2 to interact with mutilple Inventory/Asset/Avatar services ?&lt;br /&gt;
&lt;br /&gt;
==== Answer to the 1st How - XRDS ====&lt;br /&gt;
&lt;br /&gt;
more information can be found at:&lt;br /&gt;
*http://en.wikipedia.org/wiki/Yadis&lt;br /&gt;
*http://en.wikipedia.org/wiki/XRDS&lt;br /&gt;
&lt;br /&gt;
A sample XRDS for U1 can be like:&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;xrds:XRDS xmlns:xrds=&amp;quot;xri://$xrds&amp;quot; xmlns=&amp;quot;xri://$xrd*($v*2.0)&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;XRD&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/profileservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8002/GetUserProfile/12345678-1234-1234-1234-12345678abcd&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/authservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8002/session/12345678-1234-1234-1234-12345678abcd&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/assetservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8003&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/inventoryservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8004&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/avatarservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8005&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
   &amp;lt;/XRD&amp;gt;&lt;br /&gt;
  &amp;lt;/xrds:XRDS&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*There are more than one way can be considered to pass U1's XRDS file to R2&lt;br /&gt;
**[[OpenID for data portability in virtual world]]&lt;br /&gt;
&lt;br /&gt;
REASONS for proposing XRDS&lt;br /&gt;
# There are &amp;quot;UserAssetUrl&amp;quot; and &amp;quot;UserInventoryUrl&amp;quot; in &amp;quot;Users&amp;quot; table, they are cab be used to specify users' storage services, but it's '''lack of scalability''', to think we may have &amp;quot;friend service&amp;quot;, &amp;quot;currency service&amp;quot;, ... we can not simply add a column for each service.&lt;br /&gt;
# XRDS is widly used, many languages has libs for discovering/parsing it. To use XRDS can '''increase the compatibility　with existing(web) service'''&lt;br /&gt;
# '''XRDS is just a proposal''', still, we have many other choices.&lt;br /&gt;
&lt;br /&gt;
==== Answer to the 2nd How - ForeignAssetHashTable ====&lt;br /&gt;
&lt;br /&gt;
Why it is a problem ? The asset download process is described below:&lt;br /&gt;
*RegionServer sends user/prims' Texture UUID to the client.&lt;br /&gt;
*Client extract the UUIDs, and sends a &amp;quot;RequestImagePacket&amp;quot; to request the actual asset data.&lt;br /&gt;
*RegionServer receives the AssetUUID and passes it to AssetServer to get the asset.&lt;br /&gt;
[[Image:avatar_portability_v2_3-1.PNG]]&lt;br /&gt;
*Considering only 1 GridService, there is no problem, but if RegionServer knows more than 1 asset server, RegionServer has to determine which assetserver should be used.&lt;br /&gt;
*Here '''ForeignAssetHashTable''' is used to solve this problem. (The detailed implementation is shown in following section.)&lt;br /&gt;
*#when U1 login to R2, R2 register U1's owned asset UUIDs to &amp;quot;ForeignAssetHashTable&amp;quot;.&lt;br /&gt;
*#Client sends a RequestImagePacket&lt;br /&gt;
*#R2 looks up into &amp;quot;ForeignAssetHashTable&amp;quot; to find the AssetServerUrl,(if not found, returns the default url)&lt;br /&gt;
*#R2 use the returned AssetServerUrl to get asset data.&lt;br /&gt;
[[Image:avatar_portability_v2_3.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== implemetation ===&lt;br /&gt;
&lt;br /&gt;
== Avatar Portability ==&lt;br /&gt;
&lt;br /&gt;
In &amp;quot;users&amp;quot; table, &amp;quot;UserInventoryURL&amp;quot; and &amp;quot;UserAssetURL&amp;quot; have been there for a long time, and they are not used yet. My idea starts from the 2 properties;&lt;br /&gt;
&lt;br /&gt;
=== 1 UserInventoryUrl UserAssetUrl ===&lt;br /&gt;
[[Image:avatar_portability_1.PNG]]&lt;br /&gt;
*U1 is an user of GridService G1, so probably, U1's &amp;quot;UserInventoryURL&amp;quot; and &amp;quot;UserAssetURL&amp;quot; are pointing to G1's default Inventory/Asset server.&lt;br /&gt;
*R2 is a regionserver in GridService G2, so R2 fetches assets from G2's Asset server by default.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 2 Fetch data from multiple Inventory/Asset Data ===&lt;br /&gt;
[[Image:avatar_portability_2.PNG]]&lt;br /&gt;
*U1 login to R2, If U1 want to also bring in its apearance, R2 should have the ability that can '''get U1's appearance from U1's &amp;quot;UserInventoryUrl&amp;quot; and get U1's assets(textures) from &amp;quot;UserAssetUrl&amp;quot;'''.&lt;br /&gt;
*So, in this case, because an asset request(&amp;quot;RequestImagePacket&amp;quot;) only sends asset UUID to R2, R2 has to '''determine which asset server provides the reuqested UUID'''.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 3 ForeginAssetHashTable ===&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_3.PNG]]&lt;br /&gt;
&lt;br /&gt;
&amp;gt;R1 has to determine which asset server provides the reuqested UUID&lt;br /&gt;
*At the right-bottom of this picture, &amp;quot;ForeginAssetHashTable&amp;quot; is used to solve this.&lt;br /&gt;
*When an user login,&lt;br /&gt;
*#region gets its &amp;quot;inventoryurl&amp;quot;, &amp;quot;asseturl&amp;quot; from its &amp;quot;profile&amp;quot; &lt;br /&gt;
*#region gets its appearance(UUIDs) from its &amp;quot;inventoryurl&amp;quot;, and add the UUIDs into &amp;quot;ForeginAssetHashTable&amp;quot;&lt;br /&gt;
*#Then when client send a &amp;quot;RequestImage(UUID)&amp;quot;, RegionServer can look up into &amp;quot;ForeginAssetHashTable&amp;quot; to get the proper &amp;quot;AssetUrl&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
&lt;br /&gt;
[[not prepared yet]]&lt;br /&gt;
&lt;br /&gt;
=== Avatar Portability ===&lt;br /&gt;
&lt;br /&gt;
==== 1 Implementation - ForeginAssetHashTable.Add ====&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-1.PNG]]&lt;br /&gt;
&lt;br /&gt;
==== 2 Implementation - ForeginAssetHashTable.Get ====&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-2.PNG]]&lt;br /&gt;
&lt;br /&gt;
==== 3 Implementation - ForeginAssetHashTable.Remove ====&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-3.PNG]]&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Avatar_portability_version_2</id>
		<title>Avatar portability version 2</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Avatar_portability_version_2"/>
				<updated>2008-07-22T14:59:52Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Answer to the 2nd How - ForeignAssetHashTable */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# (If a foreign user can login)How to get a foreign user's belongings(including appearance, inventory)&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
# [[AvatarPortability - Security]]&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented 2nd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Basic Idea ==&lt;br /&gt;
&lt;br /&gt;
=== definition ===&lt;br /&gt;
*User U1 resgitered at GridService G1&lt;br /&gt;
** U1's inventory information is stored in InventoryServer I1&lt;br /&gt;
** U1's assets are stored in AssetServer As1&lt;br /&gt;
** U1's appearance information is served by AvatarService Av1&lt;br /&gt;
&lt;br /&gt;
*RegionServer R2 serves a sim at GridService G2&lt;br /&gt;
** R2 fetches assets from Assetserver As2 by default. &lt;br /&gt;
** R2 gets inventory information from InventoryServer I2 by default.&lt;br /&gt;
[[Image:avatar_portability_v2_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== avatar portability ===&lt;br /&gt;
&lt;br /&gt;
AvatarPortability (or called &amp;quot;grid interoperability&amp;quot;) is&lt;br /&gt;
*U1 login to R2&lt;br /&gt;
**U1's appearance at G1 can be seen from any other client which is connecting to R2.&lt;br /&gt;
**U1 can CRUD(Create/Read/Update/Delete) its inventory/appearance through R2.&lt;br /&gt;
&lt;br /&gt;
This means, (in the fig. 2) R2 should have the ability to connect not only its default&lt;br /&gt;
UGAI server, but also external Inventory, Asset, Avatar service.&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_v2_2.PNG]]&lt;br /&gt;
&lt;br /&gt;
Then &amp;quot;AvatarPortability&amp;quot; can be subdivided into 2 goals&lt;br /&gt;
# How to let R2 know where are U1's storage services(Inventory,Asset,Avatar,...) ?&lt;br /&gt;
# How to enable R2 to interact with mutilple Inventory/Asset/Avatar services ?&lt;br /&gt;
&lt;br /&gt;
==== Answer to the 1st How - XRDS ====&lt;br /&gt;
&lt;br /&gt;
more information can be found at:&lt;br /&gt;
*http://en.wikipedia.org/wiki/Yadis&lt;br /&gt;
*http://en.wikipedia.org/wiki/XRDS&lt;br /&gt;
&lt;br /&gt;
A sample XRDS for U1 can be like:&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;xrds:XRDS xmlns:xrds=&amp;quot;xri://$xrds&amp;quot; xmlns=&amp;quot;xri://$xrd*($v*2.0)&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;XRD&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/profileservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8002/GetUserProfile/12345678-1234-1234-1234-12345678abcd&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/authservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8002/session/12345678-1234-1234-1234-12345678abcd&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/assetservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8003&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/inventoryservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8004&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/avatarservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8005&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
   &amp;lt;/XRD&amp;gt;&lt;br /&gt;
  &amp;lt;/xrds:XRDS&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*There are more than one way can be considered to pass U1's XRDS file to R2&lt;br /&gt;
**[[OpenID for data portability in virtual world]]&lt;br /&gt;
&lt;br /&gt;
REASONS for proposing XRDS&lt;br /&gt;
# There are &amp;quot;UserAssetUrl&amp;quot; and &amp;quot;UserInventoryUrl&amp;quot; in &amp;quot;Users&amp;quot; table, they are cab be used to specify users' storage services, but it's '''lack of scalability''', to think we may have &amp;quot;friend service&amp;quot;, &amp;quot;currency service&amp;quot;, ... we can not simply add a column for each service.&lt;br /&gt;
# XRDS is widly used, many languages has libs for discovering/parsing it. To use XRDS can '''increase the compatibility　with existing(web) service'''&lt;br /&gt;
# '''XRDS is just a proposal''', still, we have many other choices.&lt;br /&gt;
&lt;br /&gt;
==== Answer to the 2nd How - ForeignAssetHashTable ====&lt;br /&gt;
&lt;br /&gt;
Why it is a problem ? The asset download process is described below:&lt;br /&gt;
*RegionServer sends user/prims' Texture UUID to the client.&lt;br /&gt;
*Client extract the UUIDs, and sends a &amp;quot;RequestImagePacket&amp;quot; to request the actual asset data.&lt;br /&gt;
*RegionServer receives the AssetUUID and passes it to AssetServer to get the asset.&lt;br /&gt;
[[Image:avatar_portability_v2_3-1.PNG]]&lt;br /&gt;
*Considering only 1 GridService, there is no problem, but if RegionServer knows more than 1 asset server, RegionServer has to determine which assetserver should be used.&lt;br /&gt;
*Here '''ForeignAssetHashTable''' is used to solve this problem.&lt;br /&gt;
*#when U1 login to R2, R2 register U1's owned asset UUIDs to &amp;quot;ForeignAssetHashTable&amp;quot;.&lt;br /&gt;
*#Client sends a RequestImagePacket&lt;br /&gt;
*#R2 looks up into &amp;quot;ForeignAssetHashTable&amp;quot; to find the AssetServerUrl,(if not found, returns the default url)&lt;br /&gt;
*#R2 use the returned AssetServerUrl to get asset data.&lt;br /&gt;
[[Image:avatar_portability_v2_3.PNG]]&lt;br /&gt;
&lt;br /&gt;
*The detailed implementation is shown in following section.&lt;br /&gt;
&lt;br /&gt;
=== implemetation ===&lt;br /&gt;
&lt;br /&gt;
== Avatar Portability ==&lt;br /&gt;
&lt;br /&gt;
In &amp;quot;users&amp;quot; table, &amp;quot;UserInventoryURL&amp;quot; and &amp;quot;UserAssetURL&amp;quot; have been there for a long time, and they are not used yet. My idea starts from the 2 properties;&lt;br /&gt;
&lt;br /&gt;
=== 1 UserInventoryUrl UserAssetUrl ===&lt;br /&gt;
[[Image:avatar_portability_1.PNG]]&lt;br /&gt;
*U1 is an user of GridService G1, so probably, U1's &amp;quot;UserInventoryURL&amp;quot; and &amp;quot;UserAssetURL&amp;quot; are pointing to G1's default Inventory/Asset server.&lt;br /&gt;
*R2 is a regionserver in GridService G2, so R2 fetches assets from G2's Asset server by default.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 2 Fetch data from multiple Inventory/Asset Data ===&lt;br /&gt;
[[Image:avatar_portability_2.PNG]]&lt;br /&gt;
*U1 login to R2, If U1 want to also bring in its apearance, R2 should have the ability that can '''get U1's appearance from U1's &amp;quot;UserInventoryUrl&amp;quot; and get U1's assets(textures) from &amp;quot;UserAssetUrl&amp;quot;'''.&lt;br /&gt;
*So, in this case, because an asset request(&amp;quot;RequestImagePacket&amp;quot;) only sends asset UUID to R2, R2 has to '''determine which asset server provides the reuqested UUID'''.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 3 ForeginAssetHashTable ===&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_3.PNG]]&lt;br /&gt;
&lt;br /&gt;
&amp;gt;R1 has to determine which asset server provides the reuqested UUID&lt;br /&gt;
*At the right-bottom of this picture, &amp;quot;ForeginAssetHashTable&amp;quot; is used to solve this.&lt;br /&gt;
*When an user login,&lt;br /&gt;
*#region gets its &amp;quot;inventoryurl&amp;quot;, &amp;quot;asseturl&amp;quot; from its &amp;quot;profile&amp;quot; &lt;br /&gt;
*#region gets its appearance(UUIDs) from its &amp;quot;inventoryurl&amp;quot;, and add the UUIDs into &amp;quot;ForeginAssetHashTable&amp;quot;&lt;br /&gt;
*#Then when client send a &amp;quot;RequestImage(UUID)&amp;quot;, RegionServer can look up into &amp;quot;ForeginAssetHashTable&amp;quot; to get the proper &amp;quot;AssetUrl&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
&lt;br /&gt;
[[not prepared yet]]&lt;br /&gt;
&lt;br /&gt;
=== Avatar Portability ===&lt;br /&gt;
&lt;br /&gt;
==== 1 Implementation - ForeginAssetHashTable.Add ====&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-1.PNG]]&lt;br /&gt;
&lt;br /&gt;
==== 2 Implementation - ForeginAssetHashTable.Get ====&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-2.PNG]]&lt;br /&gt;
&lt;br /&gt;
==== 3 Implementation - ForeginAssetHashTable.Remove ====&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-3.PNG]]&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Avatar_portability_version_2</id>
		<title>Avatar portability version 2</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Avatar_portability_version_2"/>
				<updated>2008-07-22T14:58:31Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Answer to the 2nd How - ForeignAssetHashTable */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# (If a foreign user can login)How to get a foreign user's belongings(including appearance, inventory)&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
# [[AvatarPortability - Security]]&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented 2nd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Basic Idea ==&lt;br /&gt;
&lt;br /&gt;
=== definition ===&lt;br /&gt;
*User U1 resgitered at GridService G1&lt;br /&gt;
** U1's inventory information is stored in InventoryServer I1&lt;br /&gt;
** U1's assets are stored in AssetServer As1&lt;br /&gt;
** U1's appearance information is served by AvatarService Av1&lt;br /&gt;
&lt;br /&gt;
*RegionServer R2 serves a sim at GridService G2&lt;br /&gt;
** R2 fetches assets from Assetserver As2 by default. &lt;br /&gt;
** R2 gets inventory information from InventoryServer I2 by default.&lt;br /&gt;
[[Image:avatar_portability_v2_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== avatar portability ===&lt;br /&gt;
&lt;br /&gt;
AvatarPortability (or called &amp;quot;grid interoperability&amp;quot;) is&lt;br /&gt;
*U1 login to R2&lt;br /&gt;
**U1's appearance at G1 can be seen from any other client which is connecting to R2.&lt;br /&gt;
**U1 can CRUD(Create/Read/Update/Delete) its inventory/appearance through R2.&lt;br /&gt;
&lt;br /&gt;
This means, (in the fig. 2) R2 should have the ability to connect not only its default&lt;br /&gt;
UGAI server, but also external Inventory, Asset, Avatar service.&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_v2_2.PNG]]&lt;br /&gt;
&lt;br /&gt;
Then &amp;quot;AvatarPortability&amp;quot; can be subdivided into 2 goals&lt;br /&gt;
# How to let R2 know where are U1's storage services(Inventory,Asset,Avatar,...) ?&lt;br /&gt;
# How to enable R2 to interact with mutilple Inventory/Asset/Avatar services ?&lt;br /&gt;
&lt;br /&gt;
==== Answer to the 1st How - XRDS ====&lt;br /&gt;
&lt;br /&gt;
more information can be found at:&lt;br /&gt;
*http://en.wikipedia.org/wiki/Yadis&lt;br /&gt;
*http://en.wikipedia.org/wiki/XRDS&lt;br /&gt;
&lt;br /&gt;
A sample XRDS for U1 can be like:&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;xrds:XRDS xmlns:xrds=&amp;quot;xri://$xrds&amp;quot; xmlns=&amp;quot;xri://$xrd*($v*2.0)&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;XRD&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/profileservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8002/GetUserProfile/12345678-1234-1234-1234-12345678abcd&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/authservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8002/session/12345678-1234-1234-1234-12345678abcd&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/assetservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8003&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/inventoryservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8004&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/avatarservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8005&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
   &amp;lt;/XRD&amp;gt;&lt;br /&gt;
  &amp;lt;/xrds:XRDS&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*There are more than one way can be considered to pass U1's XRDS file to R2&lt;br /&gt;
**[[OpenID for data portability in virtual world]]&lt;br /&gt;
&lt;br /&gt;
REASONS for proposing XRDS&lt;br /&gt;
# There are &amp;quot;UserAssetUrl&amp;quot; and &amp;quot;UserInventoryUrl&amp;quot; in &amp;quot;Users&amp;quot; table, they are cab be used to specify users' storage services, but it's '''lack of scalability''', to think we may have &amp;quot;friend service&amp;quot;, &amp;quot;currency service&amp;quot;, ... we can not simply add a column for each service.&lt;br /&gt;
# XRDS is widly used, many languages has libs for discovering/parsing it. To use XRDS can '''increase the compatibility　with existing(web) service'''&lt;br /&gt;
# '''XRDS is just a proposal''', still, we have many other choices.&lt;br /&gt;
&lt;br /&gt;
==== Answer to the 2nd How - ForeignAssetHashTable ====&lt;br /&gt;
&lt;br /&gt;
Why it is a problem ? The asset download process is described below:&lt;br /&gt;
*RegionServer sends user/prims' Texture UUID to the client.&lt;br /&gt;
*Client extract the UUIDs, and sends a &amp;quot;RequestImagePacket&amp;quot; to request the actual asset data.&lt;br /&gt;
*RegionServer receives the AssetUUID and passes it to AssetServer to get the asset.&lt;br /&gt;
[[Image:avatar_portability_v2_3-1.PNG]]&lt;br /&gt;
*Considering only 1 GridService, there is no problem, but if RegionServer knows more than 1 asset server, RegionServer has to determine which assetserver should be used.&lt;br /&gt;
*Here '''ForeignAssetHashTable''' is used to solve this problem.&lt;br /&gt;
*#when U1 login to R2, R2 register U1's owned asset UUIDs to &amp;quot;ForeignAssetHashTable&amp;quot;.&lt;br /&gt;
*#Client sends a RequestImagePacket&lt;br /&gt;
*#R2 looks up into &amp;quot;ForeignAssetHashTable&amp;quot; to find the AssetServerUrl,(if not found, returns the default url)&lt;br /&gt;
*#R2 use the returned AssetServerUrl to get asset data.&lt;br /&gt;
[[Image:avatar_portability_v2_3.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== implemetation ===&lt;br /&gt;
&lt;br /&gt;
== Avatar Portability ==&lt;br /&gt;
&lt;br /&gt;
In &amp;quot;users&amp;quot; table, &amp;quot;UserInventoryURL&amp;quot; and &amp;quot;UserAssetURL&amp;quot; have been there for a long time, and they are not used yet. My idea starts from the 2 properties;&lt;br /&gt;
&lt;br /&gt;
=== 1 UserInventoryUrl UserAssetUrl ===&lt;br /&gt;
[[Image:avatar_portability_1.PNG]]&lt;br /&gt;
*U1 is an user of GridService G1, so probably, U1's &amp;quot;UserInventoryURL&amp;quot; and &amp;quot;UserAssetURL&amp;quot; are pointing to G1's default Inventory/Asset server.&lt;br /&gt;
*R2 is a regionserver in GridService G2, so R2 fetches assets from G2's Asset server by default.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 2 Fetch data from multiple Inventory/Asset Data ===&lt;br /&gt;
[[Image:avatar_portability_2.PNG]]&lt;br /&gt;
*U1 login to R2, If U1 want to also bring in its apearance, R2 should have the ability that can '''get U1's appearance from U1's &amp;quot;UserInventoryUrl&amp;quot; and get U1's assets(textures) from &amp;quot;UserAssetUrl&amp;quot;'''.&lt;br /&gt;
*So, in this case, because an asset request(&amp;quot;RequestImagePacket&amp;quot;) only sends asset UUID to R2, R2 has to '''determine which asset server provides the reuqested UUID'''.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 3 ForeginAssetHashTable ===&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_3.PNG]]&lt;br /&gt;
&lt;br /&gt;
&amp;gt;R1 has to determine which asset server provides the reuqested UUID&lt;br /&gt;
*At the right-bottom of this picture, &amp;quot;ForeginAssetHashTable&amp;quot; is used to solve this.&lt;br /&gt;
*When an user login,&lt;br /&gt;
*#region gets its &amp;quot;inventoryurl&amp;quot;, &amp;quot;asseturl&amp;quot; from its &amp;quot;profile&amp;quot; &lt;br /&gt;
*#region gets its appearance(UUIDs) from its &amp;quot;inventoryurl&amp;quot;, and add the UUIDs into &amp;quot;ForeginAssetHashTable&amp;quot;&lt;br /&gt;
*#Then when client send a &amp;quot;RequestImage(UUID)&amp;quot;, RegionServer can look up into &amp;quot;ForeginAssetHashTable&amp;quot; to get the proper &amp;quot;AssetUrl&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
&lt;br /&gt;
[[not prepared yet]]&lt;br /&gt;
&lt;br /&gt;
=== Avatar Portability ===&lt;br /&gt;
&lt;br /&gt;
==== 1 Implementation - ForeginAssetHashTable.Add ====&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-1.PNG]]&lt;br /&gt;
&lt;br /&gt;
==== 2 Implementation - ForeginAssetHashTable.Get ====&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-2.PNG]]&lt;br /&gt;
&lt;br /&gt;
==== 3 Implementation - ForeginAssetHashTable.Remove ====&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-3.PNG]]&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Avatar_portability_version_2</id>
		<title>Avatar portability version 2</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Avatar_portability_version_2"/>
				<updated>2008-07-22T14:53:20Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: /* Answer to the 2nd How - ForeignAssetHashTable */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Lulurun]]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
To enable user avatar travel from a grid service to another grid service,&lt;br /&gt;
There are 3 problems to be considered:&lt;br /&gt;
# How to enable foreign user login - [[OpenID for data portability in virtual world|Authentication]]&lt;br /&gt;
# (If a foreign user can login)How to get a foreign user's belongings(including appearance, inventory)&lt;br /&gt;
#* '''This is discussed in this page'''&lt;br /&gt;
# [[AvatarPortability - Security]]&lt;br /&gt;
&lt;br /&gt;
To achieve the 1st, client side changes are needed. SO, so far, I have&lt;br /&gt;
only implemented 2nd, and would like to explan my idea:&lt;br /&gt;
&lt;br /&gt;
== Basic Idea ==&lt;br /&gt;
&lt;br /&gt;
=== definition ===&lt;br /&gt;
*User U1 resgitered at GridService G1&lt;br /&gt;
** U1's inventory information is stored in InventoryServer I1&lt;br /&gt;
** U1's assets are stored in AssetServer As1&lt;br /&gt;
** U1's appearance information is served by AvatarService Av1&lt;br /&gt;
&lt;br /&gt;
*RegionServer R2 serves a sim at GridService G2&lt;br /&gt;
** R2 fetches assets from Assetserver As2 by default. &lt;br /&gt;
** R2 gets inventory information from InventoryServer I2 by default.&lt;br /&gt;
[[Image:avatar_portability_v2_1.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== avatar portability ===&lt;br /&gt;
&lt;br /&gt;
AvatarPortability (or called &amp;quot;grid interoperability&amp;quot;) is&lt;br /&gt;
*U1 login to R2&lt;br /&gt;
**U1's appearance at G1 can be seen from any other client which is connecting to R2.&lt;br /&gt;
**U1 can CRUD(Create/Read/Update/Delete) its inventory/appearance through R2.&lt;br /&gt;
&lt;br /&gt;
This means, (in the fig. 2) R2 should have the ability to connect not only its default&lt;br /&gt;
UGAI server, but also external Inventory, Asset, Avatar service.&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_v2_2.PNG]]&lt;br /&gt;
&lt;br /&gt;
Then &amp;quot;AvatarPortability&amp;quot; can be subdivided into 2 goals&lt;br /&gt;
# How to let R2 know where are U1's storage services(Inventory,Asset,Avatar,...) ?&lt;br /&gt;
# How to enable R2 to interact with mutilple Inventory/Asset/Avatar services ?&lt;br /&gt;
&lt;br /&gt;
==== Answer to the 1st How - XRDS ====&lt;br /&gt;
&lt;br /&gt;
more information can be found at:&lt;br /&gt;
*http://en.wikipedia.org/wiki/Yadis&lt;br /&gt;
*http://en.wikipedia.org/wiki/XRDS&lt;br /&gt;
&lt;br /&gt;
A sample XRDS for U1 can be like:&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;xrds:XRDS xmlns:xrds=&amp;quot;xri://$xrds&amp;quot; xmlns=&amp;quot;xri://$xrd*($v*2.0)&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;XRD&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/profileservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8002/GetUserProfile/12345678-1234-1234-1234-12345678abcd&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/authservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8002/session/12345678-1234-1234-1234-12345678abcd&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/assetservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8003&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/inventoryservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8004&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
     &amp;lt;Service priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;Type&amp;gt;http://opensim.org/avatarservice/1.0&amp;lt;/Type&amp;gt;&lt;br /&gt;
       &amp;lt;URI&amp;gt;http://osgrid.org:8005&amp;lt;/URI&amp;gt;&lt;br /&gt;
     &amp;lt;/Service&amp;gt;&lt;br /&gt;
   &amp;lt;/XRD&amp;gt;&lt;br /&gt;
  &amp;lt;/xrds:XRDS&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*There are more than one way can be considered to pass U1's XRDS file to R2&lt;br /&gt;
**[[OpenID for data portability in virtual world]]&lt;br /&gt;
&lt;br /&gt;
REASONS for proposing XRDS&lt;br /&gt;
# There are &amp;quot;UserAssetUrl&amp;quot; and &amp;quot;UserInventoryUrl&amp;quot; in &amp;quot;Users&amp;quot; table, they are cab be used to specify users' storage services, but it's '''lack of scalability''', to think we may have &amp;quot;friend service&amp;quot;, &amp;quot;currency service&amp;quot;, ... we can not simply add a column for each service.&lt;br /&gt;
# XRDS is widly used, many languages has libs for discovering/parsing it. To use XRDS can '''increase the compatibility　with existing(web) service'''&lt;br /&gt;
# '''XRDS is just a proposal''', still, we have many other choices.&lt;br /&gt;
&lt;br /&gt;
==== Answer to the 2nd How - ForeignAssetHashTable ====&lt;br /&gt;
&lt;br /&gt;
Why it is a problem ? The asset download process is described below:&lt;br /&gt;
*RegionServer sends user/prims' Texture UUID to the client.&lt;br /&gt;
*Client extract the UUIDs, and sends a &amp;quot;RequestImagePacket&amp;quot; to request the actual asset data.&lt;br /&gt;
*RegionServer receives the AssetUUID and passes it to AssetServer to get the asset.&lt;br /&gt;
[[Image:avatar_portability_v2_3-1.PNG]]&lt;br /&gt;
*Considering only 1 GridService, there is no problem, but if RegionServer knows more than 1 asset server, RegionServer has to determine which assetserver should be used.&lt;br /&gt;
[[Image:avatar_portability_v2_3.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== implemetation ===&lt;br /&gt;
&lt;br /&gt;
== Avatar Portability ==&lt;br /&gt;
&lt;br /&gt;
In &amp;quot;users&amp;quot; table, &amp;quot;UserInventoryURL&amp;quot; and &amp;quot;UserAssetURL&amp;quot; have been there for a long time, and they are not used yet. My idea starts from the 2 properties;&lt;br /&gt;
&lt;br /&gt;
=== 1 UserInventoryUrl UserAssetUrl ===&lt;br /&gt;
[[Image:avatar_portability_1.PNG]]&lt;br /&gt;
*U1 is an user of GridService G1, so probably, U1's &amp;quot;UserInventoryURL&amp;quot; and &amp;quot;UserAssetURL&amp;quot; are pointing to G1's default Inventory/Asset server.&lt;br /&gt;
*R2 is a regionserver in GridService G2, so R2 fetches assets from G2's Asset server by default.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 2 Fetch data from multiple Inventory/Asset Data ===&lt;br /&gt;
[[Image:avatar_portability_2.PNG]]&lt;br /&gt;
*U1 login to R2, If U1 want to also bring in its apearance, R2 should have the ability that can '''get U1's appearance from U1's &amp;quot;UserInventoryUrl&amp;quot; and get U1's assets(textures) from &amp;quot;UserAssetUrl&amp;quot;'''.&lt;br /&gt;
*So, in this case, because an asset request(&amp;quot;RequestImagePacket&amp;quot;) only sends asset UUID to R2, R2 has to '''determine which asset server provides the reuqested UUID'''.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 3 ForeginAssetHashTable ===&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_3.PNG]]&lt;br /&gt;
&lt;br /&gt;
&amp;gt;R1 has to determine which asset server provides the reuqested UUID&lt;br /&gt;
*At the right-bottom of this picture, &amp;quot;ForeginAssetHashTable&amp;quot; is used to solve this.&lt;br /&gt;
*When an user login,&lt;br /&gt;
*#region gets its &amp;quot;inventoryurl&amp;quot;, &amp;quot;asseturl&amp;quot; from its &amp;quot;profile&amp;quot; &lt;br /&gt;
*#region gets its appearance(UUIDs) from its &amp;quot;inventoryurl&amp;quot;, and add the UUIDs into &amp;quot;ForeginAssetHashTable&amp;quot;&lt;br /&gt;
*#Then when client send a &amp;quot;RequestImage(UUID)&amp;quot;, RegionServer can look up into &amp;quot;ForeginAssetHashTable&amp;quot; to get the proper &amp;quot;AssetUrl&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
&lt;br /&gt;
[[not prepared yet]]&lt;br /&gt;
&lt;br /&gt;
=== Avatar Portability ===&lt;br /&gt;
&lt;br /&gt;
==== 1 Implementation - ForeginAssetHashTable.Add ====&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-1.PNG]]&lt;br /&gt;
&lt;br /&gt;
==== 2 Implementation - ForeginAssetHashTable.Get ====&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-2.PNG]]&lt;br /&gt;
&lt;br /&gt;
==== 3 Implementation - ForeginAssetHashTable.Remove ====&lt;br /&gt;
&lt;br /&gt;
[[Image:avatar_portability_4-3.PNG]]&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/File:Avatar_portability_v2_3-1.PNG</id>
		<title>File:Avatar portability v2 3-1.PNG</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/File:Avatar_portability_v2_3-1.PNG"/>
				<updated>2008-07-22T14:52:29Z</updated>
		
		<summary type="html">&lt;p&gt;Lulurun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Lulurun</name></author>	</entry>

	</feed>