Name Binding

=Background Information= A Second Life/OpenSimulator needs to resolve user UUIDs to names (e.g. 25bf6e60-91c0-4d28-8349-ba254cd4388e -> Jane Doe). It does this by issuing a UUIDNameRequest UDP message, to which the simulator responds with a UUIDNameReply UDP message containing the binding.

The viewer uses this binding to display names in some contexts, such as local chat and friends lists. For unknown reasons (possibly code evolution), it does not use this mechanism for displaying names in avatar name bubbles. Therefore, it's possible for these to be correct whilst local chat names may be wrong.

Once a viewer has received a binding. it stores this in a local cache and never requests it again.

On the server side, these bindings are stored in an in-memory dictionary. This dictionary is built up by a combination of an initial scan of objects in the region on simulator startup, by later addition of entries into the dictionary, such as when a previously unknown Hypergrid avatar enters a region and on demand when a UUID is actually requested by inspection of user account and grid user data.

Name binding in OpenSimulator is fairly complex due to the requirement to bind the names of users visiting via the [Hypergrid] as well as the more straightforward binding of local users to UUIDs.

If a user binding could not be found, the viewer may receive a binding to "Unknown user" in various forms.

=Server commands= In OpenSimulator 0.7.5 onwards, there is a simulator console command called "show names". This will show all the current in-memory bindings.

In current OpenSimulator dev code (post 0.7.5), there is also a command called "show name " which will show a binding for a given uuid.

=Message exchange= In Linden Lab viewer 3.3.4, for an object in a region where the creator of the object is not present and the viewer does not have the creator's UUID bound to a name in cache, as UUIDNameRequest may only be issued when the user requests the properties of an object.

A UUIDNameRequest will always be sent to the simulator occupied by the avatar even if it requests the properties of an object on a neighbouring simulator.

Even if the viewer does not receive a UUIDNameReply for this request after 10 minutes, it will not retry if the object is subsequently selected.

If an avatar without a bound name enters the same region as the viewer and chats, the viewer will issue a UUIDNameRequest even if an outstanding one for object properties for the same UUID is not satisfied.

If the viewer does not receive a reply for this UUIDNameRequest, it will display the user name correctly (presumably from other sources) in the temporary on-screen chat box but will not display any name in the persistent chat box if that is open instead.

=Name Shown Above the Avatar=

In the viewers, the avatar name and title (if any) are shown floating above the avatar. The name that is shown there is sent to the viewer in ObjectUpdate packets for the ScenePresence. This is a completely separate mechanism from the mechanisms described above.

Viewers have a bug (as of April 2014): if the avatar name changes (as sent in ObjectUpdate packets) then they don't always show the update. They only do so if some other things have changed: the Group Title, Away state, Busy state, etc.

This bug is noticeable when teleporting between grids using the Hypergrid, because the avatar's name in their home grid ("First Last") is different from their name in other grids ("First.Last @grid.example.com").

OpenSim 0.8.0 has a workaround for this bug: when an avatar arrives from a different grid, the simulator temporarily changes the group title (to "(Loading)"), and then returns it to its former value. This causes the viewer to show the new avatar name, too.