Merge branch 'master' of git://opensimulator.org/git/opensim
commit
8f1acb890a
|
@ -108,10 +108,30 @@ namespace OpenSim.Framework
|
|||
public string ServiceSessionID = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Viewer's version string
|
||||
/// The client's IP address, as captured by the login service
|
||||
/// </summary>
|
||||
public string IPAddress;
|
||||
|
||||
/// <summary>
|
||||
/// Viewer's version string as reported by the viewer at login
|
||||
/// </summary>
|
||||
public string Viewer;
|
||||
|
||||
/// <summary>
|
||||
/// The channel strinf sent by the viewer at login
|
||||
/// </summary>
|
||||
public string Channel;
|
||||
|
||||
/// <summary>
|
||||
/// The Mac address as reported by the viewer at login
|
||||
/// </summary>
|
||||
public string Mac;
|
||||
|
||||
/// <summary>
|
||||
/// The id0 as reported by the viewer at login
|
||||
/// </summary>
|
||||
public string Id0;
|
||||
|
||||
/// <summary>
|
||||
/// Position the Agent's Avatar starts in the region
|
||||
/// </summary>
|
||||
|
@ -179,7 +199,11 @@ 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["client_ip"] = OSD.FromString(IPAddress);
|
||||
args["viewer"] = OSD.FromString(Viewer);
|
||||
args["channel"] = OSD.FromString(Channel);
|
||||
args["mac"] = OSD.FromString(Mac);
|
||||
args["id0"] = OSD.FromString(Id0);
|
||||
|
||||
if (Appearance != null)
|
||||
{
|
||||
|
@ -279,8 +303,16 @@ namespace OpenSim.Framework
|
|||
SessionID = args["session_id"].AsUUID();
|
||||
if (args["service_session_id"] != null)
|
||||
ServiceSessionID = args["service_session_id"].AsString();
|
||||
if (args["client_ip"] != null)
|
||||
IPAddress = args["client_ip"].AsString();
|
||||
if (args["viewer"] != null)
|
||||
Viewer = args["viewer"].AsString();
|
||||
if (args["channel"] != null)
|
||||
Channel = args["channel"].AsString();
|
||||
if (args["mac"] != null)
|
||||
Mac = args["mac"].AsString();
|
||||
if (args["id0"] != null)
|
||||
Id0 = args["id0"].AsString();
|
||||
|
||||
if (args["start_pos"] != null)
|
||||
Vector3.TryParse(args["start_pos"].AsString(), out startpos);
|
||||
|
@ -349,6 +381,9 @@ namespace OpenSim.Framework
|
|||
public float startposy;
|
||||
public float startposz;
|
||||
public string Viewer;
|
||||
public string Channel;
|
||||
public string Mac;
|
||||
public string Id0;
|
||||
|
||||
public sAgentCircuitData()
|
||||
{
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/*
|
||||
/*
|
||||
* Copyright (c) Contributors, http://opensimulator.org/
|
||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||
*
|
||||
|
@ -139,28 +139,43 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
private void ProcessQueues()
|
||||
{
|
||||
// Process all the pending adds
|
||||
|
||||
OutgoingPacket pendingAdd;
|
||||
while (m_pendingAdds.Dequeue(out pendingAdd))
|
||||
m_packets[pendingAdd.SequenceNumber] = pendingAdd;
|
||||
if (m_pendingAdds != null)
|
||||
{
|
||||
while (m_pendingAdds.TryDequeue(out pendingAdd))
|
||||
{
|
||||
if (pendingAdd != null && m_packets != null)
|
||||
{
|
||||
m_packets[pendingAdd.SequenceNumber] = pendingAdd;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Process all the pending removes, including updating statistics and round-trip times
|
||||
PendingAck pendingRemove;
|
||||
OutgoingPacket ackedPacket;
|
||||
while (m_pendingRemoves.Dequeue(out pendingRemove))
|
||||
if (m_pendingRemoves != null)
|
||||
{
|
||||
if (m_packets.TryGetValue(pendingRemove.SequenceNumber, out ackedPacket))
|
||||
while (m_pendingRemoves.TryDequeue(out pendingRemove))
|
||||
{
|
||||
m_packets.Remove(pendingRemove.SequenceNumber);
|
||||
|
||||
// Update stats
|
||||
System.Threading.Interlocked.Add(ref ackedPacket.Client.UnackedBytes, -ackedPacket.Buffer.DataLength);
|
||||
|
||||
if (!pendingRemove.FromResend)
|
||||
if (m_pendingRemoves != null && m_packets != null)
|
||||
{
|
||||
// Calculate the round-trip time for this packet and its ACK
|
||||
int rtt = pendingRemove.RemoveTime - ackedPacket.TickCount;
|
||||
if (rtt > 0)
|
||||
ackedPacket.Client.UpdateRoundTrip(rtt);
|
||||
if (m_packets.TryGetValue(pendingRemove.SequenceNumber, out ackedPacket))
|
||||
{
|
||||
m_packets.Remove(pendingRemove.SequenceNumber);
|
||||
|
||||
// Update stats
|
||||
System.Threading.Interlocked.Add(ref ackedPacket.Client.UnackedBytes, -ackedPacket.Buffer.DataLength);
|
||||
|
||||
if (!pendingRemove.FromResend)
|
||||
{
|
||||
// Calculate the round-trip time for this packet and its ACK
|
||||
int rtt = pendingRemove.RemoveTime - ackedPacket.TickCount;
|
||||
if (rtt > 0)
|
||||
ackedPacket.Client.UpdateRoundTrip(rtt);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -252,7 +252,7 @@ namespace Flotsam.RegionModules.AssetCache
|
|||
}
|
||||
else
|
||||
{
|
||||
m_MemoryCache.AddOrUpdate(key, asset, DateTime.MaxValue);
|
||||
m_MemoryCache.AddOrUpdate(key, asset, Double.MaxValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -318,12 +318,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
|
|||
|
||||
UserAccount account = m_Scenes[0].UserAccountService.GetUserAccount(client.Scene.RegionInfo.ScopeID, fromAgentID);
|
||||
|
||||
PresenceInfo presence = null;
|
||||
PresenceInfo[] presences = PresenceService.GetAgents(new string[] { fid });
|
||||
if (presences != null && presences.Length > 0)
|
||||
presence = presences[0];
|
||||
if (presence != null)
|
||||
im.offline = 0;
|
||||
PresenceInfo presence = null;
|
||||
PresenceInfo[] presences = PresenceService.GetAgents(new string[] { fid });
|
||||
if (presences != null && presences.Length > 0)
|
||||
presence = presences[0];
|
||||
if (presence != null)
|
||||
im.offline = 0;
|
||||
|
||||
im.fromAgentID = fromAgentID.Guid;
|
||||
im.fromAgentName = account.FirstName + " " + account.LastName;
|
||||
|
|
|
@ -301,7 +301,11 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
if (currentAgentCircuit != null)
|
||||
{
|
||||
agentCircuit.ServiceURLs = currentAgentCircuit.ServiceURLs;
|
||||
agentCircuit.IPAddress = currentAgentCircuit.IPAddress;
|
||||
agentCircuit.Viewer = currentAgentCircuit.Viewer;
|
||||
agentCircuit.Channel = currentAgentCircuit.Channel;
|
||||
agentCircuit.Mac = currentAgentCircuit.Mac;
|
||||
agentCircuit.Id0 = currentAgentCircuit.Id0;
|
||||
}
|
||||
|
||||
if (NeedsNewAgent(oldRegionX, newRegionX, oldRegionY, newRegionY))
|
||||
|
@ -943,16 +947,16 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
agent.CapsPath = CapsUtil.GetRandomCapsObjectPath();
|
||||
|
||||
agent.ChildrenCapSeeds = new Dictionary<ulong, string>(sp.Scene.CapsModule.GetChildrenSeeds(sp.UUID));
|
||||
m_log.DebugFormat("[XXX] Seeds 1 {0}", agent.ChildrenCapSeeds.Count);
|
||||
//m_log.DebugFormat("[XXX] Seeds 1 {0}", agent.ChildrenCapSeeds.Count);
|
||||
|
||||
if (!agent.ChildrenCapSeeds.ContainsKey(sp.Scene.RegionInfo.RegionHandle))
|
||||
agent.ChildrenCapSeeds.Add(sp.Scene.RegionInfo.RegionHandle, sp.ControllingClient.RequestClientInfo().CapsPath);
|
||||
m_log.DebugFormat("[XXX] Seeds 2 {0}", agent.ChildrenCapSeeds.Count);
|
||||
//m_log.DebugFormat("[XXX] Seeds 2 {0}", agent.ChildrenCapSeeds.Count);
|
||||
|
||||
sp.AddNeighbourRegion(region.RegionHandle, agent.CapsPath);
|
||||
foreach (ulong h in agent.ChildrenCapSeeds.Keys)
|
||||
m_log.DebugFormat("[XXX] --> {0}", h);
|
||||
m_log.DebugFormat("[XXX] Adding {0}", region.RegionHandle);
|
||||
//foreach (ulong h in agent.ChildrenCapSeeds.Keys)
|
||||
// m_log.DebugFormat("[XXX] --> {0}", h);
|
||||
//m_log.DebugFormat("[XXX] Adding {0}", region.RegionHandle);
|
||||
agent.ChildrenCapSeeds.Add(region.RegionHandle, agent.CapsPath);
|
||||
|
||||
if (sp.Scene.CapsModule != null)
|
||||
|
@ -963,7 +967,11 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
if (currentAgentCircuit != null)
|
||||
{
|
||||
agent.ServiceURLs = currentAgentCircuit.ServiceURLs;
|
||||
agent.IPAddress = currentAgentCircuit.IPAddress;
|
||||
agent.Viewer = currentAgentCircuit.Viewer;
|
||||
agent.Channel = currentAgentCircuit.Channel;
|
||||
agent.Mac = currentAgentCircuit.Mac;
|
||||
agent.Id0 = currentAgentCircuit.Id0;
|
||||
}
|
||||
|
||||
InformClientOfNeighbourDelegate d = InformClientOfNeighbourAsync;
|
||||
|
@ -1052,7 +1060,11 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
if (currentAgentCircuit != null)
|
||||
{
|
||||
agent.ServiceURLs = currentAgentCircuit.ServiceURLs;
|
||||
agent.IPAddress = currentAgentCircuit.IPAddress;
|
||||
agent.Viewer = currentAgentCircuit.Viewer;
|
||||
agent.Channel = currentAgentCircuit.Channel;
|
||||
agent.Mac = currentAgentCircuit.Mac;
|
||||
agent.Id0 = currentAgentCircuit.Id0;
|
||||
}
|
||||
|
||||
if (newRegions.Contains(neighbour.RegionHandle))
|
||||
|
|
|
@ -91,6 +91,7 @@ namespace OpenSim.Region.CoreModules.World.LightShare
|
|||
m_scene.EventManager.OnMakeRootAgent += EventManager_OnMakeRootAgent;
|
||||
m_scene.EventManager.OnSaveNewWindlightProfile += EventManager_OnSaveNewWindlightProfile;
|
||||
m_scene.EventManager.OnSendNewWindlightProfileTargeted += EventManager_OnSendNewWindlightProfileTargeted;
|
||||
m_scene.LoadWindlightProfile();
|
||||
}
|
||||
|
||||
InstallCommands();
|
||||
|
|
|
@ -53,9 +53,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.UserAccounts
|
|||
public void Cache(UUID userID, UserAccount account)
|
||||
{
|
||||
// Cache even null accounts
|
||||
m_UUIDCache.AddOrUpdate(userID, account, DateTime.Now + TimeSpan.FromSeconds(CACHE_EXPIRATION_SECONDS));
|
||||
m_UUIDCache.AddOrUpdate(userID, account, CACHE_EXPIRATION_SECONDS);
|
||||
if (account != null)
|
||||
m_NameCache.AddOrUpdate(account.Name, account.PrincipalID, DateTime.Now + TimeSpan.FromSeconds(CACHE_EXPIRATION_SECONDS));
|
||||
m_NameCache.AddOrUpdate(account.Name, account.PrincipalID, CACHE_EXPIRATION_SECONDS);
|
||||
|
||||
m_log.DebugFormat("[USER CACHE]: cached user {0}", userID);
|
||||
}
|
||||
|
|
|
@ -352,6 +352,12 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
|||
Face face = renderMesh.Faces[i];
|
||||
string meshName = primID + "-Face-" + i.ToString();
|
||||
|
||||
// Avoid adding duplicate meshes to the scene
|
||||
if (renderer.Scene.objectData.ContainsKey(meshName))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
warp_Object faceObj = new warp_Object(face.Vertices.Count, face.Indices.Count / 3);
|
||||
|
||||
for (int j = 0; j < face.Vertices.Count; j++)
|
||||
|
|
|
@ -1073,7 +1073,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
catch (Exception e)
|
||||
{
|
||||
// Catch it and move on. This includes situations where splist has inconsistent info
|
||||
m_log.WarnFormat("[SCENE]: Problem processing action in ForEachSOG: ", e.Message);
|
||||
m_log.WarnFormat("[SCENE]: Problem processing action in ForEachSOG: ", e.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1114,7 +1114,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
catch (Exception e)
|
||||
{
|
||||
m_log.Info("[BUG] in " + m_parentScene.RegionInfo.RegionName + ": " + e.ToString());
|
||||
m_log.Info("[BUG] Stack Trace: " + e.StackTrace);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2763,7 +2763,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
UUID = UUID.Random();
|
||||
LinkNum = linkNum;
|
||||
LocalId = 0;
|
||||
Inventory.ResetInventoryIDs();
|
||||
Inventory.ResetInventoryIDs();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -176,7 +176,7 @@ namespace OpenSim.Server.Base
|
|||
OpenSimAppender consoleAppender = null;
|
||||
FileAppender fileAppender = null;
|
||||
|
||||
if ( logConfig != null )
|
||||
if (logConfig != null)
|
||||
{
|
||||
FileInfo cfg = new FileInfo(logConfig);
|
||||
XmlConfigurator.Configure(cfg);
|
||||
|
|
|
@ -54,9 +54,10 @@ namespace OpenSim.Server.Handlers.Hypergrid
|
|||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
private IGatekeeperService m_GatekeeperService;
|
||||
|
||||
public GatekeeperAgentHandler(IGatekeeperService gatekeeper)
|
||||
public GatekeeperAgentHandler(IGatekeeperService gatekeeper, bool proxy)
|
||||
{
|
||||
m_GatekeeperService = gatekeeper;
|
||||
m_Proxy = proxy;
|
||||
}
|
||||
|
||||
protected override bool CreateAgent(GridRegion destination, AgentCircuitData aCircuit, uint teleportFlags, out string reason)
|
||||
|
|
|
@ -51,6 +51,8 @@ namespace OpenSim.Server.Handlers.Hypergrid
|
|||
get { return m_GatekeeperService; }
|
||||
}
|
||||
|
||||
bool m_Proxy = false;
|
||||
|
||||
public GatekeeperServiceInConnector(IConfigSource config, IHttpServer server, ISimulationService simService) :
|
||||
base(config, server, String.Empty)
|
||||
{
|
||||
|
@ -65,11 +67,13 @@ namespace OpenSim.Server.Handlers.Hypergrid
|
|||
if (m_GatekeeperService == null)
|
||||
throw new Exception("Gatekeeper server connector cannot proceed because of missing service");
|
||||
|
||||
m_Proxy = gridConfig.GetBoolean("HasProxy", false);
|
||||
|
||||
HypergridHandlers hghandlers = new HypergridHandlers(m_GatekeeperService);
|
||||
server.AddXmlRPCHandler("link_region", hghandlers.LinkRegionRequest, false);
|
||||
server.AddXmlRPCHandler("get_region", hghandlers.GetRegion, false);
|
||||
|
||||
server.AddHTTPHandler("/foreignagent/", new GatekeeperAgentHandler(m_GatekeeperService).Handler);
|
||||
server.AddHTTPHandler("/foreignagent/", new GatekeeperAgentHandler(m_GatekeeperService, m_Proxy).Handler);
|
||||
}
|
||||
|
||||
public GatekeeperServiceInConnector(IConfigSource config, IHttpServer server)
|
||||
|
|
|
@ -55,11 +55,13 @@ namespace OpenSim.Server.Handlers.Hypergrid
|
|||
private IUserAgentService m_UserAgentService;
|
||||
|
||||
private string m_LoginServerIP;
|
||||
private bool m_Proxy = false;
|
||||
|
||||
public HomeAgentHandler(IUserAgentService userAgentService, string loginServerIP)
|
||||
public HomeAgentHandler(IUserAgentService userAgentService, string loginServerIP, bool proxy)
|
||||
{
|
||||
m_UserAgentService = userAgentService;
|
||||
m_LoginServerIP = loginServerIP;
|
||||
m_Proxy = proxy;
|
||||
}
|
||||
|
||||
public Hashtable Handler(Hashtable request)
|
||||
|
@ -153,11 +155,11 @@ namespace OpenSim.Server.Handlers.Hypergrid
|
|||
string ip_str = args["client_ip"].ToString();
|
||||
try
|
||||
{
|
||||
string callerIP = Util.GetCallerIP(request);
|
||||
string callerIP = GetCallerIP(request);
|
||||
// Verify if this caller has authority to send the client IP
|
||||
if (callerIP == m_LoginServerIP)
|
||||
client_ipaddress = new IPEndPoint(IPAddress.Parse(ip_str), 0);
|
||||
else
|
||||
else // leaving this for now, but this warning should be removed
|
||||
m_log.WarnFormat("[HOME AGENT HANDLER]: Unauthorized machine {0} tried to set client ip to {1}", callerIP, ip_str);
|
||||
}
|
||||
catch
|
||||
|
@ -198,6 +200,23 @@ namespace OpenSim.Server.Handlers.Hypergrid
|
|||
responsedata["str_response_string"] = OSDParser.SerializeJsonString(resp);
|
||||
}
|
||||
|
||||
private string GetCallerIP(Hashtable request)
|
||||
{
|
||||
if (!m_Proxy)
|
||||
return Util.GetCallerIP(request);
|
||||
|
||||
// We're behind a proxy
|
||||
Hashtable headers = (Hashtable)request["headers"];
|
||||
if (headers.ContainsKey("X-Forwarded-For") && headers["X-Forwarded-For"] != null)
|
||||
{
|
||||
IPEndPoint ep = Util.GetClientIPFromXFF((string)headers["X-Forwarded-For"]);
|
||||
if (ep != null)
|
||||
return ep.Address.ToString();
|
||||
}
|
||||
|
||||
// Oops
|
||||
return Util.GetCallerIP(request);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -67,6 +67,7 @@ namespace OpenSim.Server.Handlers.Hypergrid
|
|||
throw new Exception("UserAgent server connector cannot proceed because of missing service");
|
||||
|
||||
string loginServerIP = gridConfig.GetString("LoginServerIP", "127.0.0.1");
|
||||
bool proxy = gridConfig.GetBoolean("HasProxy", false);
|
||||
|
||||
server.AddXmlRPCHandler("agent_is_coming_home", AgentIsComingHome, false);
|
||||
server.AddXmlRPCHandler("get_home_region", GetHomeRegion, false);
|
||||
|
@ -74,7 +75,7 @@ namespace OpenSim.Server.Handlers.Hypergrid
|
|||
server.AddXmlRPCHandler("verify_client", VerifyClient, false);
|
||||
server.AddXmlRPCHandler("logout_agent", LogoutAgent, false);
|
||||
|
||||
server.AddHTTPHandler("/homeagent/", new HomeAgentHandler(m_HomeUsersService, loginServerIP).Handler);
|
||||
server.AddHTTPHandler("/homeagent/", new HomeAgentHandler(m_HomeUsersService, loginServerIP, proxy).Handler);
|
||||
}
|
||||
|
||||
public XmlRpcResponse GetHomeRegion(XmlRpcRequest request, IPEndPoint remoteClient)
|
||||
|
|
|
@ -88,14 +88,26 @@ namespace OpenSim.Server.Handlers.Login
|
|||
startLocation = requestData["start"].ToString();
|
||||
|
||||
string clientVersion = "Unknown";
|
||||
if (requestData.Contains("version"))
|
||||
if (requestData.Contains("version") && requestData["version"] != null)
|
||||
clientVersion = requestData["version"].ToString();
|
||||
// We should do something interesting with the client version...
|
||||
|
||||
string channel = "Unknown";
|
||||
if (requestData.Contains("channel") && requestData["channel"] != null)
|
||||
channel = requestData["channel"].ToString();
|
||||
|
||||
string mac = "Unknown";
|
||||
if (requestData.Contains("mac") && requestData["mac"] != null)
|
||||
mac = requestData["mac"].ToString();
|
||||
|
||||
string id0 = "Unknown";
|
||||
if (requestData.Contains("id0") && requestData["id0"] != null)
|
||||
id0 = requestData["id0"].ToString();
|
||||
|
||||
//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, clientVersion, remoteClient);
|
||||
reply = m_LocalService.Login(first, last, passwd, startLocation, scopeID, clientVersion, channel, mac, id0, remoteClient);
|
||||
|
||||
XmlRpcResponse response = new XmlRpcResponse();
|
||||
response.Value = reply.ToHashtable();
|
||||
|
@ -166,7 +178,8 @@ 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, String.Empty, remoteClient);
|
||||
reply = m_LocalService.Login(map["first"].AsString(), map["last"].AsString(), map["passwd"].AsString(), startLocation, scopeID,
|
||||
map["version"].AsString(), map["channel"].AsString(), map["mac"].AsString(), map["id0"].AsString(), remoteClient);
|
||||
return reply.ToOSDMap();
|
||||
|
||||
}
|
||||
|
|
|
@ -52,6 +52,8 @@ namespace OpenSim.Server.Handlers.Simulation
|
|||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
private ISimulationService m_SimulationService;
|
||||
|
||||
protected bool m_Proxy = false;
|
||||
|
||||
public AgentHandler() { }
|
||||
|
||||
public AgentHandler(ISimulationService sim)
|
||||
|
@ -179,13 +181,31 @@ namespace OpenSim.Server.Handlers.Simulation
|
|||
resp["reason"] = OSD.FromString(reason);
|
||||
resp["success"] = OSD.FromBoolean(result);
|
||||
// Let's also send out the IP address of the caller back to the caller (HG 1.5)
|
||||
resp["your_ip"] = OSD.FromString(Util.GetCallerIP(request));
|
||||
resp["your_ip"] = OSD.FromString(GetCallerIP(request));
|
||||
|
||||
// TODO: add reason if not String.Empty?
|
||||
responsedata["int_response_code"] = HttpStatusCode.OK;
|
||||
responsedata["str_response_string"] = OSDParser.SerializeJsonString(resp);
|
||||
}
|
||||
|
||||
private string GetCallerIP(Hashtable request)
|
||||
{
|
||||
if (!m_Proxy)
|
||||
return Util.GetCallerIP(request);
|
||||
|
||||
// We're behind a proxy
|
||||
Hashtable headers = (Hashtable)request["headers"];
|
||||
if (headers.ContainsKey("X-Forwarded-For") && headers["X-Forwarded-For"] != null)
|
||||
{
|
||||
IPEndPoint ep = Util.GetClientIPFromXFF((string)headers["X-Forwarded-For"]);
|
||||
if (ep != null)
|
||||
return ep.Address.ToString();
|
||||
}
|
||||
|
||||
// Oops
|
||||
return Util.GetCallerIP(request);
|
||||
}
|
||||
|
||||
// subclasses can override this
|
||||
protected virtual bool CreateAgent(GridRegion destination, AgentCircuitData aCircuit, uint teleportFlags, out string reason)
|
||||
{
|
||||
|
|
|
@ -238,8 +238,12 @@ namespace OpenSim.Services.Connectors.Hypergrid
|
|||
args["destination_y"] = OSD.FromString(destination.RegionLocY.ToString());
|
||||
args["destination_name"] = OSD.FromString(destination.RegionName);
|
||||
args["destination_uuid"] = OSD.FromString(destination.RegionID.ToString());
|
||||
if (ipaddress != null)
|
||||
args["client_ip"] = OSD.FromString(ipaddress.Address.ToString());
|
||||
|
||||
// 10/3/2010
|
||||
// I added the client_ip up to the regular AgentCircuitData, so this doesn't need to be here.
|
||||
// This need cleaning elsewhere...
|
||||
//if (ipaddress != null)
|
||||
// args["client_ip"] = OSD.FromString(ipaddress.Address.ToString());
|
||||
|
||||
return args;
|
||||
}
|
||||
|
|
|
@ -147,7 +147,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
|
|||
if (account == null)
|
||||
{
|
||||
// Store null responses too, to avoid repeated lookups for missing accounts
|
||||
m_accountCache.AddOrUpdate(userID, null, DateTime.Now + TimeSpan.FromSeconds(CACHE_EXPIRATION_SECONDS));
|
||||
m_accountCache.AddOrUpdate(userID, null, CACHE_EXPIRATION_SECONDS);
|
||||
}
|
||||
|
||||
return account;
|
||||
|
@ -225,7 +225,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
|
|||
if (success)
|
||||
{
|
||||
// Cache the user account info
|
||||
m_accountCache.AddOrUpdate(data.PrincipalID, data, DateTime.Now + TimeSpan.FromSeconds(CACHE_EXPIRATION_SECONDS));
|
||||
m_accountCache.AddOrUpdate(data.PrincipalID, data, CACHE_EXPIRATION_SECONDS);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -290,7 +290,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
|
|||
GetFirstLastName(response["Name"].AsString(), out account.FirstName, out account.LastName);
|
||||
|
||||
// Cache the user account info
|
||||
m_accountCache.AddOrUpdate(account.PrincipalID, account, DateTime.Now + TimeSpan.FromSeconds(CACHE_EXPIRATION_SECONDS));
|
||||
m_accountCache.AddOrUpdate(account.PrincipalID, account, CACHE_EXPIRATION_SECONDS);
|
||||
|
||||
return account;
|
||||
}
|
||||
|
|
|
@ -148,7 +148,6 @@ namespace OpenSim.Services.HypergridService
|
|||
agentCircuit.ServiceSessionID = region.ServerURI + ";" + UUID.Random();
|
||||
TravelingAgentInfo old = UpdateTravelInfo(agentCircuit, region);
|
||||
|
||||
//bool success = m_GatekeeperConnector.CreateAgent(region, agentCircuit, (uint)Constants.TeleportFlags.ViaLogin, out reason);
|
||||
bool success = false;
|
||||
string myExternalIP = string.Empty;
|
||||
string gridName = gatekeeper.ServerURI;
|
||||
|
@ -200,6 +199,11 @@ namespace OpenSim.Services.HypergridService
|
|||
{
|
||||
if (m_TravelingAgents.ContainsKey(agentCircuit.SessionID))
|
||||
{
|
||||
// Very important! Override whatever this agent comes with.
|
||||
// UserAgentService always sets the IP for every new agent
|
||||
// with the original IP address.
|
||||
agentCircuit.IPAddress = m_TravelingAgents[agentCircuit.SessionID].ClientIPAddress;
|
||||
|
||||
old = m_TravelingAgents[agentCircuit.SessionID];
|
||||
}
|
||||
|
||||
|
|
|
@ -47,7 +47,8 @@ namespace OpenSim.Services.Interfaces
|
|||
|
||||
public interface ILoginService
|
||||
{
|
||||
LoginResponse Login(string firstName, string lastName, string passwd, string startLocation, UUID scopeID, string clientVersion, IPEndPoint clientIP);
|
||||
LoginResponse Login(string firstName, string lastName, string passwd, string startLocation, UUID scopeID,
|
||||
string clientVersion, string channel, string mac, string id0, IPEndPoint clientIP);
|
||||
Hashtable SetLevel(string firstName, string lastName, string passwd, int level, IPEndPoint clientIP);
|
||||
}
|
||||
|
||||
|
|
|
@ -208,7 +208,8 @@ namespace OpenSim.Services.LLLoginService
|
|||
return response;
|
||||
}
|
||||
|
||||
public LoginResponse Login(string firstName, string lastName, string passwd, string startLocation, UUID scopeID, string clientVersion, IPEndPoint clientIP)
|
||||
public LoginResponse Login(string firstName, string lastName, string passwd, string startLocation, UUID scopeID,
|
||||
string clientVersion, string channel, string mac, string id0, IPEndPoint clientIP)
|
||||
{
|
||||
bool success = false;
|
||||
UUID session = UUID.Random();
|
||||
|
@ -340,7 +341,8 @@ namespace OpenSim.Services.LLLoginService
|
|||
//
|
||||
string reason = string.Empty;
|
||||
GridRegion dest;
|
||||
AgentCircuitData aCircuit = LaunchAgentAtGrid(gatekeeper, destination, account, avatar, session, secureSession, position, where, clientVersion, clientIP, out where, out reason, out dest);
|
||||
AgentCircuitData aCircuit = LaunchAgentAtGrid(gatekeeper, destination, account, avatar, session, secureSession, position, where,
|
||||
clientVersion, channel, mac, id0, clientIP, out where, out reason, out dest);
|
||||
destination = dest;
|
||||
if (aCircuit == null)
|
||||
{
|
||||
|
@ -600,7 +602,8 @@ namespace OpenSim.Services.LLLoginService
|
|||
}
|
||||
|
||||
protected AgentCircuitData LaunchAgentAtGrid(GridRegion gatekeeper, GridRegion destination, UserAccount account, AvatarData avatar,
|
||||
UUID session, UUID secureSession, Vector3 position, string currentWhere, string viewer, IPEndPoint clientIP, out string where, out string reason, out GridRegion dest)
|
||||
UUID session, UUID secureSession, Vector3 position, string currentWhere, string viewer, string channel, string mac, string id0,
|
||||
IPEndPoint clientIP, out string where, out string reason, out GridRegion dest)
|
||||
{
|
||||
where = currentWhere;
|
||||
ISimulationService simConnector = null;
|
||||
|
@ -640,7 +643,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, viewer);
|
||||
aCircuit = MakeAgent(destination, account, avatar, session, secureSession, circuitCode, position, clientIP.Address.ToString(), viewer, channel, mac, id0);
|
||||
success = LaunchAgentDirectly(simConnector, destination, aCircuit, out reason);
|
||||
if (!success && m_GridService != null)
|
||||
{
|
||||
|
@ -665,7 +668,7 @@ namespace OpenSim.Services.LLLoginService
|
|||
if (m_UserAgentService != null)
|
||||
{
|
||||
circuitCode = (uint)Util.RandomClass.Next(); ;
|
||||
aCircuit = MakeAgent(destination, account, avatar, session, secureSession, circuitCode, position, viewer);
|
||||
aCircuit = MakeAgent(destination, account, avatar, session, secureSession, circuitCode, position, clientIP.Address.ToString(), viewer, channel, mac, id0);
|
||||
success = LaunchAgentIndirectly(gatekeeper, destination, aCircuit, clientIP, out reason);
|
||||
if (!success && m_GridService != null)
|
||||
{
|
||||
|
@ -694,7 +697,8 @@ namespace OpenSim.Services.LLLoginService
|
|||
}
|
||||
|
||||
private AgentCircuitData MakeAgent(GridRegion region, UserAccount account,
|
||||
AvatarData avatar, UUID session, UUID secureSession, uint circuit, Vector3 position, string viewer)
|
||||
AvatarData avatar, UUID session, UUID secureSession, uint circuit, Vector3 position,
|
||||
string ipaddress, string viewer, string channel, string mac, string id0)
|
||||
{
|
||||
AgentCircuitData aCircuit = new AgentCircuitData();
|
||||
|
||||
|
@ -715,7 +719,11 @@ namespace OpenSim.Services.LLLoginService
|
|||
aCircuit.SecureSessionID = secureSession;
|
||||
aCircuit.SessionID = session;
|
||||
aCircuit.startpos = position;
|
||||
aCircuit.IPAddress = ipaddress;
|
||||
aCircuit.Viewer = viewer;
|
||||
aCircuit.Channel = channel;
|
||||
aCircuit.Mac = mac;
|
||||
aCircuit.Id0 = id0;
|
||||
SetServiceURLs(aCircuit, account);
|
||||
|
||||
return aCircuit;
|
||||
|
|
Binary file not shown.
|
@ -15,6 +15,63 @@
|
|||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:OpenMetaverse.StructuredData.OSDParser.DeserializeLLSDXml(System.Byte[])">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="xmlData"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:OpenMetaverse.StructuredData.OSDParser.DeserializeLLSDXml(System.String)">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="xmlData"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:OpenMetaverse.StructuredData.OSDParser.DeserializeLLSDXml(System.Xml.XmlTextReader)">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="xmlData"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:OpenMetaverse.StructuredData.OSDParser.SerializeLLSDXmlBytes(OpenMetaverse.StructuredData.OSD)">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="data"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:OpenMetaverse.StructuredData.OSDParser.SerializeLLSDXmlString(OpenMetaverse.StructuredData.OSD)">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="data"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:OpenMetaverse.StructuredData.OSDParser.SerializeLLSDXmlElement(System.Xml.XmlTextWriter,OpenMetaverse.StructuredData.OSD)">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="writer"></param>
|
||||
<param name="data"></param>
|
||||
</member>
|
||||
<member name="M:OpenMetaverse.StructuredData.OSDParser.TryValidateLLSDXml(System.Xml.XmlTextReader,System.String@)">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="xmlData"></param>
|
||||
<param name="error"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:OpenMetaverse.StructuredData.OSDParser.ParseLLSDXmlElement(System.Xml.XmlTextReader)">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="reader"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:OpenMetaverse.StructuredData.OSDParser.DeserializeLLSDNotationElement(System.IO.StringReader)">
|
||||
<summary>
|
||||
|
||||
|
@ -155,63 +212,6 @@
|
|||
<param name="intHostEnd"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:OpenMetaverse.StructuredData.OSDParser.DeserializeLLSDXml(System.Byte[])">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="xmlData"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:OpenMetaverse.StructuredData.OSDParser.DeserializeLLSDXml(System.String)">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="xmlData"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:OpenMetaverse.StructuredData.OSDParser.DeserializeLLSDXml(System.Xml.XmlTextReader)">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="xmlData"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:OpenMetaverse.StructuredData.OSDParser.SerializeLLSDXmlBytes(OpenMetaverse.StructuredData.OSD)">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="data"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:OpenMetaverse.StructuredData.OSDParser.SerializeLLSDXmlString(OpenMetaverse.StructuredData.OSD)">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="data"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:OpenMetaverse.StructuredData.OSDParser.SerializeLLSDXmlElement(System.Xml.XmlTextWriter,OpenMetaverse.StructuredData.OSD)">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="writer"></param>
|
||||
<param name="data"></param>
|
||||
</member>
|
||||
<member name="M:OpenMetaverse.StructuredData.OSDParser.TryValidateLLSDXml(System.Xml.XmlTextReader,System.String@)">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="xmlData"></param>
|
||||
<param name="error"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:OpenMetaverse.StructuredData.OSDParser.ParseLLSDXmlElement(System.Xml.XmlTextReader)">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="reader"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:OpenMetaverse.StructuredData.OSDType">
|
||||
<summary>
|
||||
|
||||
|
|
Binary file not shown.
24355
bin/OpenMetaverse.XML
24355
bin/OpenMetaverse.XML
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
|
@ -213,6 +213,10 @@ ServiceConnectors = "8003/OpenSim.Server.Handlers.dll:AssetServiceConnector,8003
|
|||
; If false, HG TPs happen only to the Default regions specified in [GridService] section
|
||||
AllowTeleportsToAnyRegion = true
|
||||
|
||||
; If you run this gatekeeper server behind a proxy, set this to true
|
||||
; HasProxy = true
|
||||
|
||||
|
||||
[UserAgentService]
|
||||
LocalServiceModule = "OpenSim.Services.HypergridService.dll:UserAgentService"
|
||||
;; for the service
|
||||
|
@ -220,6 +224,9 @@ ServiceConnectors = "8003/OpenSim.Server.Handlers.dll:AssetServiceConnector,8003
|
|||
GridService = "OpenSim.Services.GridService.dll:GridService"
|
||||
GatekeeperService = "OpenSim.Services.HypergridService.dll:GatekeeperService"
|
||||
|
||||
; If you run this user agent server behind a proxy, set this to true
|
||||
; HasProxy = true
|
||||
|
||||
;; If you separate the UserAgentService from the LoginService, set this to
|
||||
;; the IP address of the machine where your LoginService is
|
||||
;LoginServerIP = "127.0.0.1"
|
||||
|
|
|
@ -141,6 +141,8 @@ ServiceConnectors = "8003/OpenSim.Server.Handlers.dll:AssetServiceConnector,8003
|
|||
; For snowglobe's web map
|
||||
; MapTileURL = "";
|
||||
|
||||
; If you run this login server behind a proxy, set this to true
|
||||
; HasProxy = true
|
||||
|
||||
[GridInfoService]
|
||||
; These settings are used to return information on a get_grid_info call.
|
||||
|
|
|
@ -51,9 +51,9 @@
|
|||
; Warning level for cache directory size
|
||||
;CacheWarnAt = 30000
|
||||
|
||||
; Perform a deep scan of all assets within all regions, looking for all assets
|
||||
; present or referenced. Mark all assets found that are already present in the
|
||||
; cache, and request all assets that are found that are not already cached (this
|
||||
; will cause those assets to be cached)
|
||||
;
|
||||
; DeepScanBeforePurge = false
|
||||
; Perform a deep scan of all assets within all regions, looking for all assets
|
||||
; present or referenced. Mark all assets found that are already present in the
|
||||
; cache, and request all assets that are found that are not already cached (this
|
||||
; will cause those assets to be cached)
|
||||
;
|
||||
; DeepScanBeforePurge = false
|
||||
|
|
|
@ -95,4 +95,4 @@
|
|||
;Setup_LLProxyLoginModule = "9090/"
|
||||
|
||||
;; Authorization is not on by default, as it depends on external php
|
||||
;AuthorizationServices = "RemoteAuthorizationServicesConnector"
|
||||
;AuthorizationServices = "RemoteAuthorizationServicesConnector"
|
||||
|
|
|
@ -18,9 +18,9 @@
|
|||
EntityTransferModule = "BasicEntityTransferModule"
|
||||
InventoryAccessModule = "BasicInventoryAccessModule"
|
||||
|
||||
LibraryModule = true
|
||||
LLLoginServiceInConnector = true
|
||||
GridInfoServiceInConnector = true
|
||||
LibraryModule = true
|
||||
LLLoginServiceInConnector = true
|
||||
GridInfoServiceInConnector = true
|
||||
|
||||
[SimulationDataStore]
|
||||
LocalServiceModule = "OpenSim.Services.Connectors.dll:SimulationDataService"
|
||||
|
@ -35,9 +35,9 @@
|
|||
LocalServiceModule = "OpenSim.Services.InventoryService.dll:XInventoryService"
|
||||
|
||||
[LibraryService]
|
||||
LocalServiceModule = "OpenSim.Services.InventoryService.dll:LibraryService"
|
||||
LibraryName = "OpenSim Library"
|
||||
DefaultLibrary = "./inventory/Libraries.xml"
|
||||
LocalServiceModule = "OpenSim.Services.InventoryService.dll:LibraryService"
|
||||
LibraryName = "OpenSim Library"
|
||||
DefaultLibrary = "./inventory/Libraries.xml"
|
||||
|
||||
[AvatarService]
|
||||
LocalServiceModule = "OpenSim.Services.AvatarService.dll:AvatarService"
|
||||
|
@ -78,7 +78,7 @@
|
|||
[LoginService]
|
||||
LocalServiceModule = "OpenSim.Services.LLLoginService.dll:LLLoginService"
|
||||
UserAccountService = "OpenSim.Services.UserAccountService.dll:UserAccountService"
|
||||
GridUserService = "OpenSim.Services.UserAccountService.dll:GridUserService"
|
||||
GridUserService = "OpenSim.Services.UserAccountService.dll:GridUserService"
|
||||
AuthenticationService = "OpenSim.Services.AuthenticationService.dll:PasswordAuthenticationService"
|
||||
InventoryService = "OpenSim.Services.InventoryService.dll:XInventoryService"
|
||||
PresenceService = "OpenSim.Services.PresenceService.dll:PresenceService"
|
||||
|
@ -88,7 +88,6 @@
|
|||
|
||||
WelcomeMessage = "Welcome, Avatar!"
|
||||
|
||||
|
||||
;; This should always be the very last thing on this file
|
||||
[Includes]
|
||||
Include-Common = "config-include/StandaloneCommon.ini"
|
||||
|
|
|
@ -41,7 +41,7 @@
|
|||
;FreeswitchServiceInConnector = True
|
||||
|
||||
;; Authorization is not on by default, as it depends on external php
|
||||
;AuthorizationServices = "LocalAuthorizationServicesConnector"
|
||||
;AuthorizationServices = "LocalAuthorizationServicesConnector"
|
||||
|
||||
[FreeswitchService]
|
||||
;; Configuration for the freeswitch service goes here
|
||||
|
@ -49,11 +49,11 @@
|
|||
|
||||
[GridService]
|
||||
;; For in-memory region storage (default)
|
||||
StorageProvider = "OpenSim.Data.Null.dll:NullRegionData"
|
||||
StorageProvider = "OpenSim.Data.Null.dll:NullRegionData"
|
||||
;;--- For MySql region storage (alternative)
|
||||
;StorageProvider = "OpenSim.Data.MySQL.dll:MySqlRegionData"
|
||||
;StorageProvider = "OpenSim.Data.MySQL.dll:MySqlRegionData"
|
||||
|
||||
; If HG, do you want this check on the distance to be performed?
|
||||
; If HG, do you want this check on the distance to be performed?
|
||||
; Check4096 = "False"
|
||||
|
||||
;; Next, we can specify properties of regions, including default and fallback regions
|
||||
|
@ -77,9 +77,9 @@
|
|||
[GatekeeperService]
|
||||
ExternalName = "http://127.0.0.1:9000"
|
||||
|
||||
; Does this grid allow incoming links to any region in it?
|
||||
; If false, HG TPs happen only to the Default regions specified in [GridService] section
|
||||
AllowTeleportsToAnyRegion = true
|
||||
; Does this grid allow incoming links to any region in it?
|
||||
; If false, HG TPs happen only to the Default regions specified in [GridService] section
|
||||
AllowTeleportsToAnyRegion = true
|
||||
|
||||
[GridInfoService]
|
||||
; These settings are used to return information on a get_grid_info call.
|
||||
|
|
Loading…
Reference in New Issue