mirror of
https://github.com/opensim/opensim.git
synced 2026-08-12 12:25:42 +08:00
* First draft resolution of mantis 777, 734, 389 - scripts do not save in non-home regions
* Should work in multi-region standalone and grid modes * This should also solve other non-home region caps issues (map requests, RC client inventory requests, etc) * We now pass CAPS information on to the destination region on region crossing, and set up a CAPS object when an agent becomes a master * Current limitation is that this will only work if your http_listener_port is 9000 * This is a very early code cut (lots of bad practice, hard coding and inefficiency). However, I wanted to get this out there for feedback and my own sanity. Next few patches will clean up the mess.
This commit is contained in:
@@ -1649,53 +1649,11 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
{
|
||||
if (regionHandle == m_regInfo.RegionHandle)
|
||||
{
|
||||
if (agent.CapsPath != String.Empty)
|
||||
{
|
||||
m_log.DebugFormat(
|
||||
"[CONNECTION DEBUGGING]: Setting up CAPS handler for avatar {0} at {1} in {2}",
|
||||
agent.AgentID, agent.CapsPath, RegionInfo.RegionName);
|
||||
capsPaths[agent.AgentID] = agent.CapsPath;
|
||||
|
||||
Caps cap =
|
||||
new Caps(AssetCache, m_httpListener, m_regInfo.ExternalHostName, m_httpListener.Port,
|
||||
agent.CapsPath, agent.AgentID, m_dumpAssetsToFile);
|
||||
|
||||
Util.SetCapsURL(agent.AgentID,
|
||||
"http://" + m_regInfo.ExternalHostName + ":" + m_httpListener.Port.ToString() +
|
||||
"/CAPS/" + agent.CapsPath + "0000/");
|
||||
cap.RegisterHandlers();
|
||||
if (agent.child)
|
||||
{
|
||||
|
||||
}
|
||||
cap.AddNewInventoryItem = AddInventoryItem;
|
||||
cap.ItemUpdatedCall = CapsUpdateInventoryItemAsset;
|
||||
cap.TaskScriptUpdatedCall = CapsUpdateTaskInventoryScriptAsset;
|
||||
cap.CAPSFetchInventoryDescendents = CommsManager.UserProfileCacheService.HandleFetchInventoryDescendentsCAPS;
|
||||
|
||||
if (m_capsHandlers.ContainsKey(agent.AgentID))
|
||||
{
|
||||
m_log.DebugFormat(
|
||||
"[CONNECTION DEBUGGING]: Caps path already in use for avatar {0} in region {1}",
|
||||
agent.AgentID, RegionInfo.RegionName);
|
||||
|
||||
try
|
||||
{
|
||||
m_capsHandlers[agent.AgentID] = cap;
|
||||
}
|
||||
catch (KeyNotFoundException)
|
||||
{
|
||||
m_log.DebugFormat(
|
||||
"[CONNECTION DEBUGGING]: Caught exception adding handler for avatar {0} at {1}",
|
||||
agent.AgentID, RegionInfo.RegionName);
|
||||
|
||||
// Fix for a potential race condition.
|
||||
m_capsHandlers.Add(agent.AgentID, cap);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_capsHandlers.Add(agent.AgentID, cap);
|
||||
}
|
||||
if (!agent.child)
|
||||
{
|
||||
AddCapsHandler(agent.AgentID);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1716,6 +1674,56 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
"[CONNECTION DEBUGGING]: Skipping this region for welcoming avatar {0} [{1}] at {2}",
|
||||
agent.AgentID, regionHandle, RegionInfo.RegionName);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Add a caps handler for the given agent.
|
||||
/// </summary>
|
||||
/// <param name="agentId"></param>
|
||||
/// <param name="capsObjectPath"></param>
|
||||
public void AddCapsHandler(LLUUID agentId)
|
||||
{
|
||||
String capsObjectPath = GetCapsPath(agentId);
|
||||
|
||||
m_log.DebugFormat(
|
||||
"[CONNECTION DEBUGGING]: Setting up CAPS handler for avatar {0} at {1} in {2}",
|
||||
agentId, capsObjectPath, RegionInfo.RegionName);
|
||||
|
||||
Caps cap =
|
||||
new Caps(AssetCache, m_httpListener, m_regInfo.ExternalHostName, m_httpListener.Port,
|
||||
capsObjectPath, agentId, m_dumpAssetsToFile);
|
||||
|
||||
cap.RegisterHandlers();
|
||||
|
||||
cap.AddNewInventoryItem = AddInventoryItem;
|
||||
cap.ItemUpdatedCall = CapsUpdateInventoryItemAsset;
|
||||
cap.TaskScriptUpdatedCall = CapsUpdateTaskInventoryScriptAsset;
|
||||
cap.CAPSFetchInventoryDescendents = CommsManager.UserProfileCacheService.HandleFetchInventoryDescendentsCAPS;
|
||||
|
||||
if (m_capsHandlers.ContainsKey(agentId))
|
||||
{
|
||||
m_log.DebugFormat(
|
||||
"[CONNECTION DEBUGGING]: Caps path already in use for avatar {0} in region {1}",
|
||||
agentId, RegionInfo.RegionName);
|
||||
|
||||
try
|
||||
{
|
||||
m_capsHandlers[agentId] = cap;
|
||||
}
|
||||
catch (KeyNotFoundException)
|
||||
{
|
||||
m_log.DebugFormat(
|
||||
"[CONNECTION DEBUGGING]: Caught exception adding handler for avatar {0} at {1}",
|
||||
agentId, RegionInfo.RegionName);
|
||||
|
||||
// Fix for a potential race condition.
|
||||
m_capsHandlers.Add(agentId, cap);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_capsHandlers.Add(agentId, cap);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
Reference in New Issue
Block a user