<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://osimdev.org/wiki/index.php?action=history&amp;feed=atom&amp;title=OpenSimulator_Internals%2FConnector_Architecture%2FAvatar_Connector</id>
	<title>OpenSimulator Internals/Connector Architecture/Avatar Connector - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://osimdev.org/wiki/index.php?action=history&amp;feed=atom&amp;title=OpenSimulator_Internals%2FConnector_Architecture%2FAvatar_Connector"/>
	<link rel="alternate" type="text/html" href="http://osimdev.org/wiki/index.php?title=OpenSimulator_Internals/Connector_Architecture/Avatar_Connector&amp;action=history"/>
	<updated>2026-08-04T16:05:52Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>http://osimdev.org/wiki/index.php?title=OpenSimulator_Internals/Connector_Architecture/Avatar_Connector&amp;diff=75&amp;oldid=prev</id>
		<title>Jwbshaw: first</title>
		<link rel="alternate" type="text/html" href="http://osimdev.org/wiki/index.php?title=OpenSimulator_Internals/Connector_Architecture/Avatar_Connector&amp;diff=75&amp;oldid=prev"/>
		<updated>2026-07-07T12:20:47Z</updated>

		<summary type="html">&lt;p&gt;first&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= OpenSimulator Internals/Connector Architecture/Avatar Connector =&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
AvatarServicesConnector is the simulator-side remote connector for IAvatarService. It translates IAvatarService calls into HTTP POST requests to the ROBUST Avatar handler at /avatar.&lt;br /&gt;
&lt;br /&gt;
Source file:&lt;br /&gt;
&lt;br /&gt;
 OpenSim/Services/Connectors/Avatar/AvatarServicesConnector.cs&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Initialisation ===&lt;br /&gt;
&lt;br /&gt;
Config section: [AvatarService]&lt;br /&gt;
&lt;br /&gt;
Required key:&lt;br /&gt;
* AvatarServerURI -- URL of the ROBUST avatar endpoint; throws if missing&lt;br /&gt;
&lt;br /&gt;
Base class BaseServiceConnector.Initialise() called for auth setup.&lt;br /&gt;
&lt;br /&gt;
Three constructors:&lt;br /&gt;
* Default (no args) -- URI must be set externally&lt;br /&gt;
* String URI -- used by callers that pass the URI directly&lt;br /&gt;
* IConfigSource -- calls Initialise(), normal grid mode&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Transport ===&lt;br /&gt;
&lt;br /&gt;
All methods POST to m_ServerURI + &amp;quot;/avatar&amp;quot; using SynchronousRestFormsRequester.&lt;br /&gt;
&lt;br /&gt;
All requests include:&lt;br /&gt;
* VERSIONMIN / VERSIONMAX -- protocol version negotiation&lt;br /&gt;
* METHOD -- identifies the operation&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Method !! METHOD field !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| GetAvatar(userID) || &amp;quot;getavatar&amp;quot; || Returns AvatarData constructed from result dictionary; null on empty reply or missing result&lt;br /&gt;
|-&lt;br /&gt;
| GetAppearance(userID) || (none) || Calls GetAvatar(), then avatar.ToAvatarAppearance()&lt;br /&gt;
|-&lt;br /&gt;
| SetAvatar(userID, avatar) || &amp;quot;setavatar&amp;quot; || Serializes avatar via ToKeyValuePairs(); returns bool from result field&lt;br /&gt;
|-&lt;br /&gt;
| SetAppearance(userID, appearance) || (none) || Constructs AvatarData from AvatarAppearance, calls SetAvatar()&lt;br /&gt;
|-&lt;br /&gt;
| ResetAvatar(userID) || &amp;quot;resetavatar&amp;quot; || Returns bool from result field&lt;br /&gt;
|-&lt;br /&gt;
| SetItems(userID, names[], values[]) || &amp;quot;setitems&amp;quot; || Sends Names and Values as parallel List&amp;lt;string&amp;gt;; returns bool&lt;br /&gt;
|-&lt;br /&gt;
| RemoveItems(userID, names[]) || &amp;quot;removeitems&amp;quot; || Sends Names as List&amp;lt;string&amp;gt;; returns bool&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All write methods (SetAvatar, ResetAvatar, SetItems, RemoveItems) check replyData[&amp;quot;result&amp;quot;].ToLower() == &amp;quot;success&amp;quot; and return false on empty reply, missing result field, or exception.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Notes ===&lt;br /&gt;
&lt;br /&gt;
* The log message in ResetAvatar() says &amp;quot;SetItems reply&amp;quot; in both the missing-result and empty-reply branches -- copy-paste error from SetItems(). The method itself is correct; only the log text is wrong.&lt;br /&gt;
* ScopeID fields are present in the code but commented out throughout.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[OpenSimulator Internals/Connector Architecture]]&lt;br /&gt;
* [[OpenSimulator Internals/Code Map/ROBUST/AvatarService]]&lt;br /&gt;
* [[OpenSimulator Internals/Code Map/Shared]]&lt;/div&gt;</summary>
		<author><name>Jwbshaw</name></author>
	</entry>
</feed>