diff --git a/OpenSim/Framework/AgentCircuitData.cs b/OpenSim/Framework/AgentCircuitData.cs
index 353e5bf96d..783a8337a5 100644
--- a/OpenSim/Framework/AgentCircuitData.cs
+++ b/OpenSim/Framework/AgentCircuitData.cs
@@ -107,6 +107,11 @@ namespace OpenSim.Framework
///
public string ServiceSessionID = string.Empty;
+ ///
+ /// Viewer's version string
+ ///
+ public string Viewer;
+
///
/// Position the Agent's Avatar starts in the region
///
@@ -136,6 +141,7 @@ namespace OpenSim.Framework
BaseFolder = new UUID(cAgent.BaseFolder);
CapsPath = cAgent.CapsPath;
ChildrenCapSeeds = cAgent.ChildrenCapSeeds;
+ Viewer = cAgent.Viewer;
}
///
@@ -173,6 +179,7 @@ namespace OpenSim.Framework
args["service_session_id"] = OSD.FromString(ServiceSessionID);
args["start_pos"] = OSD.FromString(startpos.ToString());
args["appearance_serial"] = OSD.FromInteger(Appearance.Serial);
+ args["viewer"] = OSD.FromString(Viewer);
if (Appearance != null)
{
@@ -272,6 +279,8 @@ namespace OpenSim.Framework
SessionID = args["session_id"].AsUUID();
if (args["service_session_id"] != null)
ServiceSessionID = args["service_session_id"].AsString();
+ if (args["viewer"] != null)
+ Viewer = args["viewer"].AsString();
if (args["start_pos"] != null)
Vector3.TryParse(args["start_pos"].AsString(), out startpos);
@@ -339,6 +348,7 @@ namespace OpenSim.Framework
public float startposx;
public float startposy;
public float startposz;
+ public string Viewer;
public sAgentCircuitData()
{
@@ -360,6 +370,7 @@ namespace OpenSim.Framework
BaseFolder = cAgent.BaseFolder.Guid;
CapsPath = cAgent.CapsPath;
ChildrenCapSeeds = cAgent.ChildrenCapSeeds;
+ Viewer = cAgent.Viewer;
}
}
}
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 562232ce99..987180bce8 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -227,6 +227,7 @@ namespace OpenSim.Region.Framework.Scenes
private int m_lastColCount = -1; //KF: Look for Collision chnages
private int m_updateCount = 0; //KF: Update Anims for a while
private static readonly int UPDATE_COUNT = 10; // how many frames to update for
+ private string m_Viewer = String.Empty;
private const int NumMovementsBetweenRayCast = 5;
@@ -664,6 +665,11 @@ namespace OpenSim.Region.Framework.Scenes
set { m_flyDisabled = value; }
}
+ public string Viewer
+ {
+ get { return m_Viewer; }
+ }
+
#endregion
#region Constructor(s)
diff --git a/OpenSim/Server/Handlers/Login/LLLoginHandlers.cs b/OpenSim/Server/Handlers/Login/LLLoginHandlers.cs
index 83b3e317d2..c9bf99619f 100644
--- a/OpenSim/Server/Handlers/Login/LLLoginHandlers.cs
+++ b/OpenSim/Server/Handlers/Login/LLLoginHandlers.cs
@@ -86,7 +86,7 @@ namespace OpenSim.Server.Handlers.Login
m_log.InfoFormat("[LOGIN]: XMLRPC Login Requested for {0} {1}, starting in {2}, using {3}", first, last, startLocation, clientVersion);
LoginResponse reply = null;
- reply = m_LocalService.Login(first, last, passwd, startLocation, scopeID, remoteClient);
+ reply = m_LocalService.Login(first, last, passwd, startLocation, scopeID, clientVersion, remoteClient);
XmlRpcResponse response = new XmlRpcResponse();
response.Value = reply.ToHashtable();
@@ -157,7 +157,7 @@ namespace OpenSim.Server.Handlers.Login
m_log.Info("[LOGIN]: LLSD Login Requested for: '" + map["first"].AsString() + "' '" + map["last"].AsString() + "' / " + startLocation);
LoginResponse reply = null;
- reply = m_LocalService.Login(map["first"].AsString(), map["last"].AsString(), map["passwd"].AsString(), startLocation, scopeID, remoteClient);
+ reply = m_LocalService.Login(map["first"].AsString(), map["last"].AsString(), map["passwd"].AsString(), startLocation, scopeID, String.Empty, remoteClient);
return reply.ToOSDMap();
}
diff --git a/OpenSim/Services/Interfaces/ILoginService.cs b/OpenSim/Services/Interfaces/ILoginService.cs
index 513ab4a4a9..9e573393d7 100644
--- a/OpenSim/Services/Interfaces/ILoginService.cs
+++ b/OpenSim/Services/Interfaces/ILoginService.cs
@@ -47,7 +47,7 @@ namespace OpenSim.Services.Interfaces
public interface ILoginService
{
- LoginResponse Login(string firstName, string lastName, string passwd, string startLocation, UUID scopeID, IPEndPoint clientIP);
+ LoginResponse Login(string firstName, string lastName, string passwd, string startLocation, UUID scopeID, string clientVersion, IPEndPoint clientIP);
Hashtable SetLevel(string firstName, string lastName, string passwd, int level, IPEndPoint clientIP);
}
diff --git a/OpenSim/Services/LLLoginService/LLLoginService.cs b/OpenSim/Services/LLLoginService/LLLoginService.cs
index 5b950e03d9..9efdd11747 100644
--- a/OpenSim/Services/LLLoginService/LLLoginService.cs
+++ b/OpenSim/Services/LLLoginService/LLLoginService.cs
@@ -200,7 +200,7 @@ namespace OpenSim.Services.LLLoginService
return response;
}
- public LoginResponse Login(string firstName, string lastName, string passwd, string startLocation, UUID scopeID, IPEndPoint clientIP)
+ public LoginResponse Login(string firstName, string lastName, string passwd, string startLocation, UUID scopeID, string clientVersion, IPEndPoint clientIP)
{
bool success = false;
UUID session = UUID.Random();
@@ -326,7 +326,7 @@ namespace OpenSim.Services.LLLoginService
// Instantiate/get the simulation interface and launch an agent at the destination
//
string reason = string.Empty;
- AgentCircuitData aCircuit = LaunchAgentAtGrid(gatekeeper, destination, account, avatar, session, secureSession, position, where, out where, out reason);
+ AgentCircuitData aCircuit = LaunchAgentAtGrid(gatekeeper, destination, account, avatar, session, secureSession, position, where, clientVersion, out where, out reason);
if (aCircuit == null)
{
@@ -592,7 +592,7 @@ namespace OpenSim.Services.LLLoginService
}
protected AgentCircuitData LaunchAgentAtGrid(GridRegion gatekeeper, GridRegion destination, UserAccount account, AvatarData avatar,
- UUID session, UUID secureSession, Vector3 position, string currentWhere, out string where, out string reason)
+ UUID session, UUID secureSession, Vector3 position, string currentWhere, string viewer, out string where, out string reason)
{
where = currentWhere;
ISimulationService simConnector = null;
@@ -632,7 +632,7 @@ namespace OpenSim.Services.LLLoginService
if (m_UserAgentService == null && simConnector != null)
{
circuitCode = (uint)Util.RandomClass.Next(); ;
- aCircuit = MakeAgent(destination, account, avatar, session, secureSession, circuitCode, position);
+ aCircuit = MakeAgent(destination, account, avatar, session, secureSession, circuitCode, position, viewer);
success = LaunchAgentDirectly(simConnector, destination, aCircuit, out reason);
if (!success && m_GridService != null)
{
@@ -657,7 +657,7 @@ namespace OpenSim.Services.LLLoginService
if (m_UserAgentService != null)
{
circuitCode = (uint)Util.RandomClass.Next(); ;
- aCircuit = MakeAgent(destination, account, avatar, session, secureSession, circuitCode, position);
+ aCircuit = MakeAgent(destination, account, avatar, session, secureSession, circuitCode, position, viewer);
success = LaunchAgentIndirectly(gatekeeper, destination, aCircuit, out reason);
if (!success && m_GridService != null)
{
@@ -686,7 +686,7 @@ namespace OpenSim.Services.LLLoginService
}
private AgentCircuitData MakeAgent(GridRegion region, UserAccount account,
- AvatarData avatar, UUID session, UUID secureSession, uint circuit, Vector3 position)
+ AvatarData avatar, UUID session, UUID secureSession, uint circuit, Vector3 position, string viewer)
{
AgentCircuitData aCircuit = new AgentCircuitData();
@@ -707,6 +707,7 @@ namespace OpenSim.Services.LLLoginService
aCircuit.SecureSessionID = secureSession;
aCircuit.SessionID = session;
aCircuit.startpos = position;
+ aCircuit.Viewer = viewer;
SetServiceURLs(aCircuit, account);
return aCircuit;