Merge branch 'careminster-presence-refactor' of ssh://3dhosting.de/var/git/careminster into careminster-presence-refactor

avinationmerge
meta7 2010-08-18 02:53:27 -07:00
commit ca8b1e488c
69 changed files with 1125 additions and 599 deletions

View File

@ -91,6 +91,11 @@
the assembly here as an exec, and you add the fail clause later. the assembly here as an exec, and you add the fail clause later.
This lets all the unit tests run and tells you if they fail at the This lets all the unit tests run and tells you if they fail at the
end, instead of stopping short --> end, instead of stopping short -->
<exec program="${nunitcmd}" failonerror="true" resultproperty="testresult.opensim.tests">
<arg value="./bin/OpenSim.Tests.dll" />
</exec>
<fail message="Failures reported in unit tests." unless="${int::parse(testresult.opensim.tests)==0}" />
<exec program="${nunitcmd}" failonerror="true" resultproperty="testresult.opensim.framework.tests"> <exec program="${nunitcmd}" failonerror="true" resultproperty="testresult.opensim.framework.tests">
<arg value="./bin/OpenSim.Framework.Tests.dll" /> <arg value="./bin/OpenSim.Framework.Tests.dll" />
</exec> </exec>
@ -256,6 +261,11 @@
<mkdir dir="test-results" failonerror="false" /> <mkdir dir="test-results" failonerror="false" />
<!-- Unit Test Assembly --> <!-- Unit Test Assembly -->
<exec program="${nunitcmd}" failonerror="false" resultproperty="testresult.opensim.tests">
<arg value="./bin/OpenSim.Tests.dll" />
<arg value="-xml=test-results/OpenSim.Tests.dll-Results.xml" />
</exec>
<exec program="${nunitcmd}" failonerror="false" resultproperty="testresult.opensim.framework.tests"> <exec program="${nunitcmd}" failonerror="false" resultproperty="testresult.opensim.framework.tests">
<arg value="./bin/OpenSim.Framework.Tests.dll" /> <arg value="./bin/OpenSim.Framework.Tests.dll" />
<arg value="-xml=test-results/OpenSim.Framework.Tests.dll-Results.xml" /> <arg value="-xml=test-results/OpenSim.Framework.Tests.dll-Results.xml" />
@ -298,6 +308,7 @@
<arg value="-xml=test-results/OpenSim.Data.Tests.dll-Results.xml" /> <arg value="-xml=test-results/OpenSim.Data.Tests.dll-Results.xml" />
</exec> </exec>
<fail message="Failures reported in unit tests." unless="${int::parse(testresult.opensim.tests)==0}" />
<fail message="Failures reported in unit tests." unless="${int::parse(testresult.opensim.framework.tests)==0}" /> <fail message="Failures reported in unit tests." unless="${int::parse(testresult.opensim.framework.tests)==0}" />
<fail message="Failures reported in unit tests." unless="${int::parse(testresult.opensim.framework.servers.tests)==0}" /> <fail message="Failures reported in unit tests." unless="${int::parse(testresult.opensim.framework.servers.tests)==0}" />
<!-- <fail message="Failures reported in unit tests." unless="${int::parse(testresult.opensim.region.clientstack.lindenudp.tests)==0}" /> --> <!-- <fail message="Failures reported in unit tests." unless="${int::parse(testresult.opensim.region.clientstack.lindenudp.tests)==0}" /> -->

View File

@ -122,7 +122,9 @@ namespace OpenSim.ApplicationPlugins.LoadRegions
m_log.Debug("[LOADREGIONS]: Creating Region: " + regionsToLoad[i].RegionName + " (ThreadID: " + m_log.Debug("[LOADREGIONS]: Creating Region: " + regionsToLoad[i].RegionName + " (ThreadID: " +
Thread.CurrentThread.ManagedThreadId.ToString() + Thread.CurrentThread.ManagedThreadId.ToString() +
")"); ")");
m_openSim.PopulateRegionEstateInfo(regionsToLoad[i]);
m_openSim.CreateRegion(regionsToLoad[i], true, out scene); m_openSim.CreateRegion(regionsToLoad[i], true, out scene);
regionsToLoad[i].EstateSettings.Save();
if (scene != null) if (scene != null)
{ {
m_newRegionCreatedHandler = OnNewRegionCreated; m_newRegionCreatedHandler = OnNewRegionCreated;

View File

@ -562,12 +562,14 @@ namespace OpenSim.ApplicationPlugins.RemoteController
/// <description>desired region X coordinate (integer)</description></item> /// <description>desired region X coordinate (integer)</description></item>
/// <item><term>region_y</term> /// <item><term>region_y</term>
/// <description>desired region Y coordinate (integer)</description></item> /// <description>desired region Y coordinate (integer)</description></item>
/// <item><term>region_master_first</term> /// <item><term>estate_owner_first</term>
/// <description>firstname of region master</description></item> /// <description>firstname of estate owner (formerly region master)
/// <item><term>region_master_last</term> /// (required if new estate is being created, optional otherwise)</description></item>
/// <description>lastname of region master</description></item> /// <item><term>estate_owner_last</term>
/// <item><term>region_master_uuid</term> /// <description>lastname of estate owner (formerly region master)
/// <description>explicit UUID to use for master avatar (optional)</description></item> /// (required if new estate is being created, optional otherwise)</description></item>
/// <item><term>estate_owner_uuid</term>
/// <description>explicit UUID to use for estate owner (optional)</description></item>
/// <item><term>listen_ip</term> /// <item><term>listen_ip</term>
/// <description>internal IP address (dotted quad)</description></item> /// <description>internal IP address (dotted quad)</description></item>
/// <item><term>listen_port</term> /// <item><term>listen_port</term>
@ -583,6 +585,9 @@ namespace OpenSim.ApplicationPlugins.RemoteController
/// <item><term>enable_voice</term> /// <item><term>enable_voice</term>
/// <description>if true, enable voice on all parcels, /// <description>if true, enable voice on all parcels,
/// ('true' or 'false') (optional, default: false)</description></item> /// ('true' or 'false') (optional, default: false)</description></item>
/// <item><term>estate_name</term>
/// <description>the name of the estate to join (or to create if it doesn't
/// already exist)</description></item>
/// </list> /// </list>
/// ///
/// XmlRpcCreateRegionMethod returns /// XmlRpcCreateRegionMethod returns
@ -621,9 +626,8 @@ namespace OpenSim.ApplicationPlugins.RemoteController
{ {
"password", "password",
"region_name", "region_name",
"region_master_first", "region_master_last", "listen_ip", "external_address",
"region_master_password", "estate_name"
"listen_ip", "external_address"
}); });
CheckIntegerParams(request, new string[] {"region_x", "region_y", "listen_port"}); CheckIntegerParams(request, new string[] {"region_x", "region_y", "listen_port"});
@ -694,18 +698,6 @@ namespace OpenSim.ApplicationPlugins.RemoteController
region.ExternalHostName = (string) requestData["external_address"]; region.ExternalHostName = (string) requestData["external_address"];
string masterFirst = (string) requestData["region_master_first"];
string masterLast = (string) requestData["region_master_last"];
string masterPassword = (string) requestData["region_master_password"];
UUID userID = UUID.Zero;
if (requestData.ContainsKey("region_master_uuid"))
{
// ok, client wants us to use an explicit UUID
// regardless of what the avatar name provided
userID = new UUID((string) requestData["estate_owner_uuid"]);
}
bool persist = Convert.ToBoolean((string) requestData["persist"]); bool persist = Convert.ToBoolean((string) requestData["persist"]);
if (persist) if (persist)
{ {
@ -740,7 +732,55 @@ namespace OpenSim.ApplicationPlugins.RemoteController
{ {
region.Persistent = false; region.Persistent = false;
} }
// Set the estate
// Check for an existing estate
List<int> estateIDs = m_application.StorageManager.EstateDataStore.GetEstates((string) requestData["estate_name"]);
if (estateIDs.Count < 1)
{
UUID userID = UUID.Zero;
if (requestData.ContainsKey("estate_owner_uuid"))
{
// ok, client wants us to use an explicit UUID
// regardless of what the avatar name provided
userID = new UUID((string) requestData["estate_owner_uuid"]);
}
else if (requestData.ContainsKey("estate_owner_first") & requestData.ContainsKey("estate_owner_last"))
{
// We need to look up the UUID for the avatar with the provided name.
string ownerFirst = (string) requestData["estate_owner_first"];
string ownerLast = (string) requestData["estate_owner_last"];
Scene currentOrFirst = m_application.SceneManager.CurrentOrFirstScene;
IUserAccountService accountService = currentOrFirst.UserAccountService;
UserAccount user = accountService.GetUserAccount(currentOrFirst.RegionInfo.ScopeID,
ownerFirst, ownerLast);
userID = user.PrincipalID;
}
else
{
throw new Exception("Estate owner details not provided.");
}
// Create a new estate with the name provided
region.EstateSettings = m_application.StorageManager.EstateDataStore.LoadEstateSettings(region.RegionID, true);
region.EstateSettings.EstateName = (string) requestData["estate_name"];
region.EstateSettings.EstateOwner = userID;
// Persistence does not seem to effect the need to save a new estate
region.EstateSettings.Save();
}
else
{
int estateID = estateIDs[0];
region.EstateSettings = m_application.StorageManager.EstateDataStore.LoadEstateSettings(estateID);
if (!m_application.StorageManager.EstateDataStore.LinkRegion(region.RegionID, estateID))
throw new Exception("Failed to join estate.");
}
// Create the region and perform any initial initialization // Create the region and perform any initial initialization
IScene newScene; IScene newScene;
@ -749,9 +789,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
// If an access specification was provided, use it. // If an access specification was provided, use it.
// Otherwise accept the default. // Otherwise accept the default.
newScene.RegionInfo.EstateSettings.PublicAccess = GetBoolean(requestData, "public", m_publicAccess); newScene.RegionInfo.EstateSettings.PublicAccess = GetBoolean(requestData, "public", m_publicAccess);
newScene.RegionInfo.EstateSettings.EstateOwner = userID; newScene.RegionInfo.EstateSettings.Save();
if (persist)
newScene.RegionInfo.EstateSettings.Save();
// enable voice on newly created region if // enable voice on newly created region if
// requested by either the XmlRpc request or the // requested by either the XmlRpc request or the
@ -1615,7 +1653,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
if (destinationFolder.Type != (short)AssetType.Clothing) if (destinationFolder.Type != (short)AssetType.Clothing)
{ {
destinationFolder = new InventoryFolderBase(); destinationFolder = new InventoryFolderBase();
destinationFolder.ID = UUID.Random(); destinationFolder.ID = UUID.Random();
destinationFolder.Name = "Clothing"; destinationFolder.Name = "Clothing";
destinationFolder.Owner = destination; destinationFolder.Owner = destination;
@ -3100,7 +3138,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
/// <param name="password"></param> /// <param name="password"></param>
private bool ChangeUserPassword(string firstName, string lastName, string password) private bool ChangeUserPassword(string firstName, string lastName, string password)
{ {
Scene scene = m_application.SceneManager.CurrentOrFirstScene; Scene scene = m_application.SceneManager.CurrentOrFirstScene;
IUserAccountService userAccountService = scene.UserAccountService; IUserAccountService userAccountService = scene.UserAccountService;
IAuthenticationService authenticationService = scene.AuthenticationService; IAuthenticationService authenticationService = scene.AuthenticationService;

View File

@ -1028,11 +1028,15 @@ namespace OpenSim.Client.MXP.ClientStack
// Need to translate to MXP somehow // Need to translate to MXP somehow
} }
public void SendTeleportLocationStart() public void SendTeleportStart(uint flags)
{ {
// Need to translate to MXP somehow // Need to translate to MXP somehow
} }
public void SendTeleportProgress(uint flags, string message)
{
}
public void SendMoneyBalance(UUID transaction, bool success, byte[] description, int balance) public void SendMoneyBalance(UUID transaction, bool success, byte[] description, int balance)
{ {
// Need to translate to MXP somehow // Need to translate to MXP somehow

View File

@ -583,7 +583,12 @@ namespace OpenSim.Client.Sirikata.ClientStack
throw new System.NotImplementedException(); throw new System.NotImplementedException();
} }
public void SendTeleportLocationStart() public void SendTeleportStart(uint flags)
{
throw new System.NotImplementedException();
}
public void SendTeleportProgress(uint flags, string message)
{ {
throw new System.NotImplementedException(); throw new System.NotImplementedException();
} }

View File

@ -589,7 +589,12 @@ namespace OpenSim.Client.VWoHTTP.ClientStack
throw new System.NotImplementedException(); throw new System.NotImplementedException();
} }
public void SendTeleportLocationStart() public void SendTeleportStart(uint flags)
{
throw new System.NotImplementedException();
}
public void SendTeleportProgress(uint flags, string message)
{ {
throw new System.NotImplementedException(); throw new System.NotImplementedException();
} }

View File

@ -1017,7 +1017,7 @@ VALUES
prim.SitName = (string)primRow["SitName"]; prim.SitName = (string)primRow["SitName"];
prim.TouchName = (string)primRow["TouchName"]; prim.TouchName = (string)primRow["TouchName"];
// permissions // permissions
prim.ObjectFlags = Convert.ToUInt32(primRow["ObjectFlags"]); prim.Flags = (PrimFlags)Convert.ToUInt32(primRow["ObjectFlags"]);
prim.CreatorID = new UUID((Guid)primRow["CreatorID"]); prim.CreatorID = new UUID((Guid)primRow["CreatorID"]);
prim.OwnerID = new UUID((Guid)primRow["OwnerID"]); prim.OwnerID = new UUID((Guid)primRow["OwnerID"]);
prim.GroupID = new UUID((Guid)primRow["GroupID"]); prim.GroupID = new UUID((Guid)primRow["GroupID"]);
@ -1408,7 +1408,7 @@ VALUES
parameters.Add(_Database.CreateParameter("SitName", prim.SitName)); parameters.Add(_Database.CreateParameter("SitName", prim.SitName));
parameters.Add(_Database.CreateParameter("TouchName", prim.TouchName)); parameters.Add(_Database.CreateParameter("TouchName", prim.TouchName));
// permissions // permissions
parameters.Add(_Database.CreateParameter("ObjectFlags", prim.ObjectFlags)); parameters.Add(_Database.CreateParameter("ObjectFlags", (uint)prim.Flags));
parameters.Add(_Database.CreateParameter("CreatorID", prim.CreatorID)); parameters.Add(_Database.CreateParameter("CreatorID", prim.CreatorID));
parameters.Add(_Database.CreateParameter("OwnerID", prim.OwnerID)); parameters.Add(_Database.CreateParameter("OwnerID", prim.OwnerID));
parameters.Add(_Database.CreateParameter("GroupID", prim.GroupID)); parameters.Add(_Database.CreateParameter("GroupID", prim.GroupID));

View File

@ -1081,7 +1081,7 @@ namespace OpenSim.Data.MySQL
prim.SitName = (string)row["SitName"]; prim.SitName = (string)row["SitName"];
prim.TouchName = (string)row["TouchName"]; prim.TouchName = (string)row["TouchName"];
// Permissions // Permissions
prim.ObjectFlags = (uint)(int)row["ObjectFlags"]; prim.Flags = (PrimFlags)(int)row["ObjectFlags"];
prim.OwnerMask = (uint)(int)row["OwnerMask"]; prim.OwnerMask = (uint)(int)row["OwnerMask"];
prim.NextOwnerMask = (uint)(int)row["NextOwnerMask"]; prim.NextOwnerMask = (uint)(int)row["NextOwnerMask"];
prim.GroupMask = (uint)(int)row["GroupMask"]; prim.GroupMask = (uint)(int)row["GroupMask"];
@ -1414,7 +1414,7 @@ namespace OpenSim.Data.MySQL
cmd.Parameters.AddWithValue("SitName", prim.SitName); cmd.Parameters.AddWithValue("SitName", prim.SitName);
cmd.Parameters.AddWithValue("TouchName", prim.TouchName); cmd.Parameters.AddWithValue("TouchName", prim.TouchName);
// permissions // permissions
cmd.Parameters.AddWithValue("ObjectFlags", prim.ObjectFlags); cmd.Parameters.AddWithValue("ObjectFlags", (uint)prim.Flags);
cmd.Parameters.AddWithValue("CreatorID", prim.CreatorID.ToString()); cmd.Parameters.AddWithValue("CreatorID", prim.CreatorID.ToString());
cmd.Parameters.AddWithValue("OwnerID", prim.OwnerID.ToString()); cmd.Parameters.AddWithValue("OwnerID", prim.OwnerID.ToString());
cmd.Parameters.AddWithValue("GroupID", prim.GroupID.ToString()); cmd.Parameters.AddWithValue("GroupID", prim.GroupID.ToString());

View File

@ -66,7 +66,7 @@ namespace OpenSim.Data.SQLite
if (words.Length == 1) if (words.Length == 1)
{ {
cmd.CommandText = String.Format("select * from {0} where ScopeID='{1}' or ScopeID='00000000-0000-0000-0000-000000000000') and (FirstName like '{2}%' or LastName like '{2}%')", cmd.CommandText = String.Format("select * from {0} where (ScopeID='{1}' or ScopeID='00000000-0000-0000-0000-000000000000') and (FirstName like '{2}%' or LastName like '{2}%')",
m_Realm, scopeID.ToString(), words[0]); m_Realm, scopeID.ToString(), words[0]);
} }
else else

View File

@ -1187,7 +1187,7 @@ namespace OpenSim.Data.SQLiteLegacy
prim.SitName = (String) row["SitName"]; prim.SitName = (String) row["SitName"];
prim.TouchName = (String) row["TouchName"]; prim.TouchName = (String) row["TouchName"];
// permissions // permissions
prim.ObjectFlags = Convert.ToUInt32(row["ObjectFlags"]); prim.Flags = (PrimFlags)Convert.ToUInt32(row["ObjectFlags"]);
prim.CreatorID = new UUID((String) row["CreatorID"]); prim.CreatorID = new UUID((String) row["CreatorID"]);
prim.OwnerID = new UUID((String) row["OwnerID"]); prim.OwnerID = new UUID((String) row["OwnerID"]);
prim.GroupID = new UUID((String) row["GroupID"]); prim.GroupID = new UUID((String) row["GroupID"]);
@ -1521,7 +1521,7 @@ namespace OpenSim.Data.SQLiteLegacy
row["SitName"] = prim.SitName; row["SitName"] = prim.SitName;
row["TouchName"] = prim.TouchName; row["TouchName"] = prim.TouchName;
// permissions // permissions
row["ObjectFlags"] = prim.ObjectFlags; row["ObjectFlags"] = (uint)prim.Flags;
row["CreatorID"] = prim.CreatorID.ToString(); row["CreatorID"] = prim.CreatorID.ToString();
row["OwnerID"] = prim.OwnerID.ToString(); row["OwnerID"] = prim.OwnerID.ToString();
row["GroupID"] = prim.GroupID.ToString(); row["GroupID"] = prim.GroupID.ToString();

View File

@ -317,7 +317,7 @@ namespace OpenSim.Data.Tests
sop.CreatorID = creator; sop.CreatorID = creator;
sop.InventorySerial = iserial; sop.InventorySerial = iserial;
sop.TaskInventory = dic; sop.TaskInventory = dic;
sop.ObjectFlags = objf; sop.Flags = (PrimFlags)objf;
sop.Name = name; sop.Name = name;
sop.Material = material; sop.Material = material;
sop.ScriptAccessPin = pin; sop.ScriptAccessPin = pin;
@ -350,7 +350,7 @@ namespace OpenSim.Data.Tests
// Modified in-class // Modified in-class
// Assert.That(iserial,Is.EqualTo(sop.InventorySerial), "Assert.That(iserial,Is.EqualTo(sop.InventorySerial))"); // Assert.That(iserial,Is.EqualTo(sop.InventorySerial), "Assert.That(iserial,Is.EqualTo(sop.InventorySerial))");
Assert.That(dic,Is.EqualTo(sop.TaskInventory), "Assert.That(dic,Is.EqualTo(sop.TaskInventory))"); Assert.That(dic,Is.EqualTo(sop.TaskInventory), "Assert.That(dic,Is.EqualTo(sop.TaskInventory))");
Assert.That(objf,Is.EqualTo(sop.ObjectFlags), "Assert.That(objf,Is.EqualTo(sop.ObjectFlags))"); Assert.That(objf, Is.EqualTo((uint)sop.Flags), "Assert.That(objf,Is.EqualTo(sop.Flags))");
Assert.That(name,Is.EqualTo(sop.Name), "Assert.That(name,Is.EqualTo(sop.Name))"); Assert.That(name,Is.EqualTo(sop.Name), "Assert.That(name,Is.EqualTo(sop.Name))");
Assert.That(material,Is.EqualTo(sop.Material), "Assert.That(material,Is.EqualTo(sop.Material))"); Assert.That(material,Is.EqualTo(sop.Material), "Assert.That(material,Is.EqualTo(sop.Material))");
Assert.That(pin,Is.EqualTo(sop.ScriptAccessPin), "Assert.That(pin,Is.EqualTo(sop.ScriptAccessPin))"); Assert.That(pin,Is.EqualTo(sop.ScriptAccessPin), "Assert.That(pin,Is.EqualTo(sop.ScriptAccessPin))");
@ -373,7 +373,7 @@ namespace OpenSim.Data.Tests
Assert.That(updatef,Is.EqualTo(sop.UpdateFlag), "Assert.That(updatef,Is.EqualTo(sop.UpdateFlag))"); Assert.That(updatef,Is.EqualTo(sop.UpdateFlag), "Assert.That(updatef,Is.EqualTo(sop.UpdateFlag))");
// This is necessary or object will not be inserted in DB // This is necessary or object will not be inserted in DB
sop.ObjectFlags = 0; sop.Flags = PrimFlags.None;
SceneObjectGroup sog = new SceneObjectGroup(sop); SceneObjectGroup sog = new SceneObjectGroup(sop);
@ -398,7 +398,7 @@ namespace OpenSim.Data.Tests
Assert.That(creator,Is.EqualTo(p.CreatorID), "Assert.That(creator,Is.EqualTo(p.CreatorID))"); Assert.That(creator,Is.EqualTo(p.CreatorID), "Assert.That(creator,Is.EqualTo(p.CreatorID))");
//Assert.That(iserial,Is.EqualTo(p.InventorySerial), "Assert.That(iserial,Is.EqualTo(p.InventorySerial))"); //Assert.That(iserial,Is.EqualTo(p.InventorySerial), "Assert.That(iserial,Is.EqualTo(p.InventorySerial))");
Assert.That(dic,Is.EqualTo(p.TaskInventory), "Assert.That(dic,Is.EqualTo(p.TaskInventory))"); Assert.That(dic,Is.EqualTo(p.TaskInventory), "Assert.That(dic,Is.EqualTo(p.TaskInventory))");
//Assert.That(objf,Is.EqualTo(p.ObjectFlags), "Assert.That(objf,Is.EqualTo(p.ObjectFlags))"); //Assert.That(objf, Is.EqualTo((uint)p.Flags), "Assert.That(objf,Is.EqualTo(p.Flags))");
Assert.That(name,Is.EqualTo(p.Name), "Assert.That(name,Is.EqualTo(p.Name))"); Assert.That(name,Is.EqualTo(p.Name), "Assert.That(name,Is.EqualTo(p.Name))");
Assert.That(material,Is.EqualTo(p.Material), "Assert.That(material,Is.EqualTo(p.Material))"); Assert.That(material,Is.EqualTo(p.Material), "Assert.That(material,Is.EqualTo(p.Material))");
Assert.That(pin,Is.EqualTo(p.ScriptAccessPin), "Assert.That(pin,Is.EqualTo(p.ScriptAccessPin))"); Assert.That(pin,Is.EqualTo(p.ScriptAccessPin), "Assert.That(pin,Is.EqualTo(p.ScriptAccessPin))");

View File

@ -34,8 +34,23 @@ namespace OpenSim.Framework
{ {
public class AvatarWearable public class AvatarWearable
{ {
public UUID AssetID = new UUID("00000000-0000-0000-0000-000000000000"); public static readonly UUID DEFAULT_BODY_ITEM = new UUID("66c41e39-38f9-f75a-024e-585989bfaba9");
public UUID ItemID = new UUID("00000000-0000-0000-0000-000000000000"); public static readonly UUID DEFAULT_BODY_ASSET = new UUID("66c41e39-38f9-f75a-024e-585989bfab73");
public static readonly UUID DEFAULT_HAIR_ITEM = new UUID("d342e6c1-b9d2-11dc-95ff-0800200c9a66");
public static readonly UUID DEFAULT_HAIR_ASSET = new UUID("d342e6c0-b9d2-11dc-95ff-0800200c9a66");
public static readonly UUID DEFAULT_SKIN_ITEM = new UUID("77c41e39-38f9-f75a-024e-585989bfabc9");
public static readonly UUID DEFAULT_SKIN_ASSET = new UUID("77c41e39-38f9-f75a-024e-585989bbabbb");
public static readonly UUID DEFAULT_SHIRT_ITEM = new UUID("77c41e39-38f9-f75a-0000-585989bf0000");
public static readonly UUID DEFAULT_SHIRT_ASSET = new UUID("00000000-38f9-1111-024e-222222111110");
public static readonly UUID DEFAULT_PANTS_ITEM = new UUID("77c41e39-38f9-f75a-0000-5859892f1111");
public static readonly UUID DEFAULT_PANTS_ASSET = new UUID("00000000-38f9-1111-024e-222222111120");
public UUID AssetID;
public UUID ItemID;
public AvatarWearable() public AvatarWearable()
{ {
@ -58,24 +73,24 @@ namespace OpenSim.Framework
} }
// Body // Body
defaultWearables[0].ItemID = new UUID("66c41e39-38f9-f75a-024e-585989bfaba9"); defaultWearables[0].ItemID = DEFAULT_BODY_ITEM;
defaultWearables[0].AssetID = new UUID("66c41e39-38f9-f75a-024e-585989bfab73"); defaultWearables[0].AssetID = DEFAULT_BODY_ASSET;
// Hair // Hair
defaultWearables[2].ItemID = new UUID("d342e6c1-b9d2-11dc-95ff-0800200c9a66"); defaultWearables[2].ItemID = DEFAULT_HAIR_ITEM;
defaultWearables[2].AssetID = new UUID("d342e6c0-b9d2-11dc-95ff-0800200c9a66"); defaultWearables[2].AssetID = DEFAULT_HAIR_ASSET;
// Skin // Skin
defaultWearables[1].ItemID = new UUID("77c41e39-38f9-f75a-024e-585989bfabc9"); defaultWearables[1].ItemID = DEFAULT_SKIN_ITEM;
defaultWearables[1].AssetID = new UUID("77c41e39-38f9-f75a-024e-585989bbabbb"); defaultWearables[1].AssetID = DEFAULT_SKIN_ASSET;
// Shirt // Shirt
defaultWearables[4].ItemID = new UUID("77c41e39-38f9-f75a-0000-585989bf0000"); defaultWearables[4].ItemID = DEFAULT_SHIRT_ITEM;
defaultWearables[4].AssetID = new UUID("00000000-38f9-1111-024e-222222111110"); defaultWearables[4].AssetID = DEFAULT_SHIRT_ASSET;
// Pants // Pants
defaultWearables[5].ItemID = new UUID("77c41e39-38f9-f75a-0000-5859892f1111"); defaultWearables[5].ItemID = DEFAULT_PANTS_ITEM;
defaultWearables[5].AssetID = new UUID("00000000-38f9-1111-024e-222222111120"); defaultWearables[5].AssetID = DEFAULT_PANTS_ASSET;
return defaultWearables; return defaultWearables;
} }

View File

@ -1017,7 +1017,9 @@ namespace OpenSim.Framework
uint flags, string capsURL); uint flags, string capsURL);
void SendTeleportFailed(string reason); void SendTeleportFailed(string reason);
void SendTeleportLocationStart(); void SendTeleportStart(uint flags);
void SendTeleportProgress(uint flags, string message);
void SendMoneyBalance(UUID transaction, bool success, byte[] description, int balance); void SendMoneyBalance(UUID transaction, bool success, byte[] description, int balance);
void SendPayPrice(UUID objectID, int[] payPrice); void SendPayPrice(UUID objectID, int[] payPrice);

View File

@ -211,7 +211,17 @@ namespace OpenSim
else else
{ {
string basepath = Path.GetFullPath(Util.configDir()); string basepath = Path.GetFullPath(Util.configDir());
string path = Path.Combine(basepath, file); // Resolve relative paths with wildcards
string chunkWithoutWildcards = file;
string chunkWithWildcards = string.Empty;
int wildcardIndex = file.IndexOfAny(new char[] { '*', '?' });
if (wildcardIndex != -1)
{
chunkWithoutWildcards = file.Substring(0, wildcardIndex);
chunkWithWildcards = file.Substring(wildcardIndex);
}
string path = Path.Combine(basepath, chunkWithoutWildcards);
path = Path.GetFullPath(path) + chunkWithWildcards;
string[] paths = Util.Glob(path); string[] paths = Util.Glob(path);
foreach (string p in paths) foreach (string p in paths)
{ {

View File

@ -418,7 +418,7 @@ namespace OpenSim
{ {
MainConsole.Instance.Output( MainConsole.Instance.Output(
String.Format( String.Format(
"Kicking user: {0,-16}{1,-16}{2,-37} in region: {3,-16}", "Kicking user: {0,-16} {1,-16} {2,-37} in region: {3,-16}",
presence.Firstname, presence.Lastname, presence.UUID, regionInfo.RegionName)); presence.Firstname, presence.Lastname, presence.UUID, regionInfo.RegionName));
// kick client... // kick client...
@ -530,7 +530,10 @@ namespace OpenSim
regionFile = cmd[3]; regionFile = cmd[3];
IScene scene; IScene scene;
CreateRegion(new RegionInfo(cmd[2], regionFile, false, ConfigSource.Source), true, out scene); RegionInfo regInfo = new RegionInfo(cmd[2], regionFile, false, ConfigSource.Source);
PopulateRegionEstateInfo(regInfo);
CreateRegion(regInfo, true, out scene);
regInfo.EstateSettings.Save();
} }
else if (cmd[3].EndsWith(".ini")) else if (cmd[3].EndsWith(".ini"))
{ {
@ -541,7 +544,10 @@ namespace OpenSim
regionFile = cmd[3]; regionFile = cmd[3];
IScene scene; IScene scene;
CreateRegion(new RegionInfo(cmd[2], regionFile, false, ConfigSource.Source, cmd[2]), true, out scene); RegionInfo regInfo = new RegionInfo(cmd[2], regionFile, false, ConfigSource.Source, cmd[2]);
PopulateRegionEstateInfo(regInfo);
CreateRegion(regInfo, true, out scene);
regInfo.EstateSettings.Save();
} }
else else
{ {
@ -861,7 +867,7 @@ namespace OpenSim
MainConsole.Instance.Output(String.Format("\nAgents connected: {0}\n", agents.Count)); MainConsole.Instance.Output(String.Format("\nAgents connected: {0}\n", agents.Count));
MainConsole.Instance.Output( MainConsole.Instance.Output(
String.Format("{0,-16}{1,-16}{2,-37}{3,-11}{4,-16}{5,-30}", "Firstname", "Lastname", String.Format("{0,-16} {1,-16} {2,-37} {3,-11} {4,-16} {5,-30}", "Firstname", "Lastname",
"Agent ID", "Root/Child", "Region", "Position")); "Agent ID", "Root/Child", "Region", "Position"));
foreach (ScenePresence presence in agents) foreach (ScenePresence presence in agents)
@ -880,7 +886,7 @@ namespace OpenSim
MainConsole.Instance.Output( MainConsole.Instance.Output(
String.Format( String.Format(
"{0,-16}{1,-16}{2,-37}{3,-11}{4,-16}{5,-30}", "{0,-16} {1,-16} {2,-37} {3,-11} {4,-16} {5,-30}",
presence.Firstname, presence.Firstname,
presence.Lastname, presence.Lastname,
presence.UUID, presence.UUID,

View File

@ -395,9 +395,13 @@ namespace OpenSim
scene.SnmpService.BootInfo("Creating region texture", scene); scene.SnmpService.BootInfo("Creating region texture", scene);
} }
// moved these here as the terrain texture has to be created after the modules are initialized // moved these here as the map texture has to be created after the modules are initialized
// and has to happen before the region is registered with the grid. // and has to happen before the region is registered with the grid.
scene.CreateTerrainTexture(); IWorldMapModule mapModule = scene.RequestModuleInterface<IWorldMapModule>();
if (mapModule != null)
mapModule.GenerateMaptile();
else
m_log.WarnFormat("[STARTUP]: No map module available to generate map tile");
// TODO : Try setting resource for region xstats here on scene // TODO : Try setting resource for region xstats here on scene
MainServer.Instance.AddStreamHandler(new Region.Framework.Scenes.RegionStatsHandler(regionInfo)); MainServer.Instance.AddStreamHandler(new Region.Framework.Scenes.RegionStatsHandler(regionInfo));
@ -867,6 +871,60 @@ namespace OpenSim
{ {
regionnum = m_sceneManager.Scenes.Count; regionnum = m_sceneManager.Scenes.Count;
} }
/// <summary>
/// Load the estate information for the provided RegionInfo object.
/// </summary>
/// <param name="regInfo">
/// A <see cref="RegionInfo"/>
/// </param>
public void PopulateRegionEstateInfo(RegionInfo regInfo)
{
if (m_storageManager.EstateDataStore != null)
{
regInfo.EstateSettings = m_storageManager.EstateDataStore.LoadEstateSettings(regInfo.RegionID, false);
}
if (regInfo.EstateSettings.EstateID == 0) // No record at all
{
MainConsole.Instance.Output("Your region is not part of an estate.");
while (true)
{
string response = MainConsole.Instance.CmdPrompt("Do you wish to join an existing estate?", "no", new List<string>() {"yes", "no"});
if (response == "no")
{
// Create a new estate
regInfo.EstateSettings = m_storageManager.EstateDataStore.LoadEstateSettings(regInfo.RegionID, true);
regInfo.EstateSettings.EstateName = MainConsole.Instance.CmdPrompt("New estate name", regInfo.EstateSettings.EstateName);
//regInfo.EstateSettings.Save();
break;
}
else
{
response = MainConsole.Instance.CmdPrompt("Estate name to join", "None");
if (response == "None")
continue;
List<int> estateIDs = m_storageManager.EstateDataStore.GetEstates(response);
if (estateIDs.Count < 1)
{
MainConsole.Instance.Output("The name you have entered matches no known estate. Please try again");
continue;
}
int estateID = estateIDs[0];
regInfo.EstateSettings = m_storageManager.EstateDataStore.LoadEstateSettings(estateID);
if (m_storageManager.EstateDataStore.LinkRegion(regInfo.RegionID, estateID))
break;
MainConsole.Instance.Output("Joining the estate failed. Please try again.");
}
}
}
}
} }

View File

@ -1442,16 +1442,27 @@ namespace OpenSim.Region.ClientStack.LindenUDP
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
public void SendTeleportLocationStart() public void SendTeleportStart(uint flags)
{ {
//TeleportStartPacket tpStart = (TeleportStartPacket)PacketPool.Instance.GetPacket(PacketType.TeleportStart); TeleportStartPacket tpStart = (TeleportStartPacket)PacketPool.Instance.GetPacket(PacketType.TeleportStart);
TeleportStartPacket tpStart = new TeleportStartPacket(); //TeleportStartPacket tpStart = new TeleportStartPacket();
tpStart.Info.TeleportFlags = 16; // Teleport via location tpStart.Info.TeleportFlags = flags; //16; // Teleport via location
// Hack to get this out immediately and skip throttles // Hack to get this out immediately and skip throttles
OutPacket(tpStart, ThrottleOutPacketType.Unknown); OutPacket(tpStart, ThrottleOutPacketType.Unknown);
} }
public void SendTeleportProgress(uint flags, string message)
{
TeleportProgressPacket tpProgress = (TeleportProgressPacket)PacketPool.Instance.GetPacket(PacketType.TeleportProgress);
tpProgress.AgentData.AgentID = this.AgentId;
tpProgress.Info.TeleportFlags = flags;
tpProgress.Info.Message = Util.StringToBytes256(message);
// Hack to get this out immediately and skip throttles
OutPacket(tpProgress, ThrottleOutPacketType.Unknown);
}
public void SendMoneyBalance(UUID transaction, bool success, byte[] description, int balance) public void SendMoneyBalance(UUID transaction, bool success, byte[] description, int balance)
{ {
MoneyBalanceReplyPacket money = (MoneyBalanceReplyPacket)PacketPool.Instance.GetPacket(PacketType.MoneyBalanceReply); MoneyBalanceReplyPacket money = (MoneyBalanceReplyPacket)PacketPool.Instance.GetPacket(PacketType.MoneyBalanceReply);
@ -3041,7 +3052,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
{ {
OSDMap GroupDataMap = new OSDMap(6); OSDMap GroupDataMap = new OSDMap(6);
OSDMap NewGroupDataMap = new OSDMap(1); OSDMap NewGroupDataMap = new OSDMap(1);
GroupDataMap.Add("GroupPowers", OSD.FromBinary(m.GroupPowers)); GroupDataMap.Add("GroupPowers", OSD.FromULong(m.GroupPowers));
GroupDataMap.Add("AcceptNotices", OSD.FromBoolean(m.AcceptNotices)); GroupDataMap.Add("AcceptNotices", OSD.FromBoolean(m.AcceptNotices));
GroupDataMap.Add("GroupTitle", OSD.FromString(m.GroupTitle)); GroupDataMap.Add("GroupTitle", OSD.FromString(m.GroupTitle));
GroupDataMap.Add("GroupID", OSD.FromUUID(m.GroupID)); GroupDataMap.Add("GroupID", OSD.FromUUID(m.GroupID));
@ -6332,7 +6343,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
} }
#endregion #endregion
ObjectDuplicatePacket.AgentDataBlock AgentandGroupData = dupe.AgentData; // ObjectDuplicatePacket.AgentDataBlock AgentandGroupData = dupe.AgentData;
ObjectDuplicate handlerObjectDuplicate = null; ObjectDuplicate handlerObjectDuplicate = null;
@ -11765,8 +11776,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
{ {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.Append("["); sb.Append("[");
if (this.priority != null) sb.Append(this.priority.ToString());
sb.Append(this.priority.ToString());
sb.Append(","); sb.Append(",");
if (this.value != null) if (this.value != null)
sb.Append(this.value.ToString()); sb.Append(this.value.ToString());

View File

@ -58,6 +58,11 @@ namespace OpenSim.Region.ClientStack
protected StorageManager m_storageManager; protected StorageManager m_storageManager;
public StorageManager StorageManager
{
get { return m_storageManager; }
}
protected ClientStackManager m_clientStackManager; protected ClientStackManager m_clientStackManager;
public SceneManager SceneManager public SceneManager SceneManager

View File

@ -93,7 +93,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Combat.CombatModule
{ {
string deadAvatarMessage; string deadAvatarMessage;
ScenePresence killingAvatar = null; ScenePresence killingAvatar = null;
string killingAvatarMessage; // string killingAvatarMessage;
if (killerObjectLocalID == 0) if (killerObjectLocalID == 0)
deadAvatarMessage = "You committed suicide!"; deadAvatarMessage = "You committed suicide!";
@ -118,14 +118,14 @@ namespace OpenSim.Region.CoreModules.Avatar.Combat.CombatModule
deadAvatarMessage = String.Format("You impaled yourself on {0} owned by {1}!", part.Name, deadAvatar.Scene.GetUserName(part.OwnerID)); deadAvatarMessage = String.Format("You impaled yourself on {0} owned by {1}!", part.Name, deadAvatar.Scene.GetUserName(part.OwnerID));
else else
{ {
killingAvatarMessage = String.Format("You fragged {0}!", deadAvatar.Name); // killingAvatarMessage = String.Format("You fragged {0}!", deadAvatar.Name);
deadAvatarMessage = String.Format("You got killed by {0}!", killingAvatar.Name); deadAvatarMessage = String.Format("You got killed by {0}!", killingAvatar.Name);
} }
} }
} }
else else
{ {
killingAvatarMessage = String.Format("You fragged {0}!", deadAvatar.Name); // killingAvatarMessage = String.Format("You fragged {0}!", deadAvatar.Name);
deadAvatarMessage = String.Format("You got killed by {0}!", killingAvatar.Name); deadAvatarMessage = String.Format("You got killed by {0}!", killingAvatar.Name);
} }
} }

View File

@ -82,6 +82,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
scene.EventManager.OnNewClient += OnNewClient; scene.EventManager.OnNewClient += OnNewClient;
scene.EventManager.OnClientClosed += ClientLoggedOut; scene.EventManager.OnClientClosed += ClientLoggedOut;
scene.EventManager.OnIncomingInstantMessage += OnGridInstantMessage; scene.EventManager.OnIncomingInstantMessage += OnGridInstantMessage;
scene.EventManager.OnSetRootAgentScene += OnSetRootAgentScene;
} }
public void RegionLoaded(Scene scene) public void RegionLoaded(Scene scene)
@ -98,9 +99,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
scene.EventManager.OnNewClient -= OnNewClient; scene.EventManager.OnNewClient -= OnNewClient;
scene.EventManager.OnClientClosed -= ClientLoggedOut; scene.EventManager.OnClientClosed -= ClientLoggedOut;
scene.EventManager.OnIncomingInstantMessage -= OnGridInstantMessage; scene.EventManager.OnIncomingInstantMessage -= OnGridInstantMessage;
scene.EventManager.OnSetRootAgentScene -= OnSetRootAgentScene;
} }
} }
} }
public void RemoveRegion(Scene scene) public void RemoveRegion(Scene scene)
@ -108,6 +109,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
scene.EventManager.OnNewClient -= OnNewClient; scene.EventManager.OnNewClient -= OnNewClient;
scene.EventManager.OnClientClosed -= ClientLoggedOut; scene.EventManager.OnClientClosed -= ClientLoggedOut;
scene.EventManager.OnIncomingInstantMessage -= OnGridInstantMessage; scene.EventManager.OnIncomingInstantMessage -= OnGridInstantMessage;
scene.EventManager.OnSetRootAgentScene -= OnSetRootAgentScene;
m_Scenelist.Remove(scene); m_Scenelist.Remove(scene);
} }
@ -136,6 +138,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
// Inventory giving is conducted via instant message // Inventory giving is conducted via instant message
client.OnInstantMessage += OnInstantMessage; client.OnInstantMessage += OnInstantMessage;
} }
protected void OnSetRootAgentScene(UUID id, Scene scene)
{
m_AgentRegions[id] = scene;
}
private Scene FindClientScene(UUID agentId) private Scene FindClientScene(UUID agentId)
{ {
@ -160,7 +167,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
if (scene == null) // Something seriously wrong here. if (scene == null) // Something seriously wrong here.
return; return;
if (im.dialog == (byte) InstantMessageDialog.InventoryOffered) if (im.dialog == (byte) InstantMessageDialog.InventoryOffered)
{ {
//m_log.DebugFormat("Asset type {0}", ((AssetType)im.binaryBucket[0])); //m_log.DebugFormat("Asset type {0}", ((AssetType)im.binaryBucket[0]));
@ -348,11 +354,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
} }
} }
public void SetRootAgentScene(UUID agentID, Scene scene)
{
m_AgentRegions[agentID] = scene;
}
public bool NeedSceneCacheClear(UUID agentID, Scene scene) public bool NeedSceneCacheClear(UUID agentID, Scene scene)
{ {
if (!m_AgentRegions.ContainsKey(agentID)) if (!m_AgentRegions.ContainsKey(agentID))

View File

@ -1,4 +1,4 @@
/* /*
* Copyright (c) Contributors, http://opensimulator.org/ * Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders. * See CONTRIBUTORS.TXT for a full list of copyright holders.
* *
@ -174,9 +174,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
position.Z = newPosZ; position.Z = newPosZ;
} }
// Only send this if the event queue is null sp.ControllingClient.SendTeleportStart(teleportFlags);
if (eq == null)
sp.ControllingClient.SendTeleportLocationStart();
sp.ControllingClient.SendLocalTeleport(position, lookAt, teleportFlags); sp.ControllingClient.SendLocalTeleport(position, lookAt, teleportFlags);
sp.Teleport(position); sp.Teleport(position);
@ -257,9 +255,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
ulong destinationHandle = finalDestination.RegionHandle; ulong destinationHandle = finalDestination.RegionHandle;
if (eq == null)
sp.ControllingClient.SendTeleportLocationStart();
// Let's do DNS resolution only once in this process, please! // Let's do DNS resolution only once in this process, please!
// This may be a costly operation. The reg.ExternalEndPoint field is not a passive field, // This may be a costly operation. The reg.ExternalEndPoint field is not a passive field,
// it's actually doing a lot of work. // it's actually doing a lot of work.
@ -277,6 +272,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
return; return;
} }
sp.ControllingClient.SendTeleportStart(teleportFlags);
// the avatar.Close below will clear the child region list. We need this below for (possibly) // the avatar.Close below will clear the child region list. We need this below for (possibly)
// closing the child agents, so save it here (we need a copy as it is Clear()-ed). // closing the child agents, so save it here (we need a copy as it is Clear()-ed).
//List<ulong> childRegions = new List<ulong>(avatar.GetKnownRegionList()); //List<ulong> childRegions = new List<ulong>(avatar.GetKnownRegionList());
@ -307,7 +304,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
string reason = String.Empty; string reason = String.Empty;
// Let's create an agent there if one doesn't exist yet. // Let's create an agent there if one doesn't exist yet.
if (!CreateAgent(sp, reg, finalDestination, agentCircuit, teleportFlags, out reason)) bool logout = false;
if (!CreateAgent(sp, reg, finalDestination, agentCircuit, teleportFlags, out reason, out logout))
{ {
sp.ControllingClient.SendTeleportFailed(String.Format("Destination refused: {0}", sp.ControllingClient.SendTeleportFailed(String.Format("Destination refused: {0}",
reason)); reason));
@ -319,6 +317,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
if (NeedsNewAgent(oldRegionX, newRegionX, oldRegionY, newRegionY)) if (NeedsNewAgent(oldRegionX, newRegionX, oldRegionY, newRegionY))
{ {
//sp.ControllingClient.SendTeleportProgress(teleportFlags, "Creating agent...");
#region IP Translation for NAT #region IP Translation for NAT
IClientIPEndpoint ipepClient; IClientIPEndpoint ipepClient;
if (sp.ClientView.TryGet(out ipepClient)) if (sp.ClientView.TryGet(out ipepClient))
@ -396,6 +396,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
agent.Position = position; agent.Position = position;
SetCallbackURL(agent, sp.Scene.RegionInfo); SetCallbackURL(agent, sp.Scene.RegionInfo);
//sp.ControllingClient.SendTeleportProgress(teleportFlags, "Updating agent...");
if (!UpdateAgent(reg, finalDestination, agent)) if (!UpdateAgent(reg, finalDestination, agent))
{ {
// Region doesn't take it // Region doesn't take it
@ -434,8 +436,13 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
// CrossAttachmentsIntoNewRegion is a synchronous call. We shouldn't need to wait after it // CrossAttachmentsIntoNewRegion is a synchronous call. We shouldn't need to wait after it
CrossAttachmentsIntoNewRegion(finalDestination, sp, true); CrossAttachmentsIntoNewRegion(finalDestination, sp, true);
// Well, this is it. The agent is over there.
KillEntity(sp.Scene, sp.LocalId); KillEntity(sp.Scene, sp.LocalId);
// May need to logout or other cleanup
AgentHasMovedAway(sp.ControllingClient.SessionId, logout);
// Now let's make it officially a child agent // Now let's make it officially a child agent
sp.MakeChildAgent(); sp.MakeChildAgent();
@ -483,8 +490,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
} }
protected virtual bool CreateAgent(ScenePresence sp, GridRegion reg, GridRegion finalDestination, AgentCircuitData agentCircuit, uint teleportFlags, out string reason) protected virtual bool CreateAgent(ScenePresence sp, GridRegion reg, GridRegion finalDestination, AgentCircuitData agentCircuit, uint teleportFlags, out string reason, out bool logout)
{ {
logout = false;
return m_aScene.SimulationService.CreateAgent(finalDestination, agentCircuit, teleportFlags, out reason); return m_aScene.SimulationService.CreateAgent(finalDestination, agentCircuit, teleportFlags, out reason);
} }
@ -500,6 +508,10 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
} }
protected virtual void AgentHasMovedAway(UUID sessionID, bool logout)
{
}
protected void KillEntity(Scene scene, uint localID) protected void KillEntity(Scene scene, uint localID)
{ {
scene.SendKillObject(localID); scene.SendKillObject(localID);
@ -1286,18 +1298,18 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
return handles; return handles;
} }
private void Dump(string msg, List<ulong> handles) // private void Dump(string msg, List<ulong> handles)
{ // {
m_log.InfoFormat("-------------- HANDLE DUMP ({0}) ---------", msg); // m_log.InfoFormat("-------------- HANDLE DUMP ({0}) ---------", msg);
foreach (ulong handle in handles) // foreach (ulong handle in handles)
{ // {
uint x, y; // uint x, y;
Utils.LongToUInts(handle, out x, out y); // Utils.LongToUInts(handle, out x, out y);
x = x / Constants.RegionSize; // x = x / Constants.RegionSize;
y = y / Constants.RegionSize; // y = y / Constants.RegionSize;
m_log.InfoFormat("({0}, {1})", x, y); // m_log.InfoFormat("({0}, {1})", x, y);
} // }
} // }
#endregion #endregion

View File

@ -140,9 +140,17 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
return false; return false;
} }
protected override bool CreateAgent(ScenePresence sp, GridRegion reg, GridRegion finalDestination, AgentCircuitData agentCircuit, uint teleportFlags, out string reason) protected override void AgentHasMovedAway(UUID sessionID, bool logout)
{
if (logout)
// Log them out of this grid
m_aScene.PresenceService.LogoutAgent(sessionID);
}
protected override bool CreateAgent(ScenePresence sp, GridRegion reg, GridRegion finalDestination, AgentCircuitData agentCircuit, uint teleportFlags, out string reason, out bool logout)
{ {
reason = string.Empty; reason = string.Empty;
logout = false;
int flags = m_aScene.GridService.GetRegionFlags(m_aScene.RegionInfo.ScopeID, reg.RegionID); int flags = m_aScene.GridService.GetRegionFlags(m_aScene.RegionInfo.ScopeID, reg.RegionID);
if (flags == -1 /* no region in DB */ || (flags & (int)OpenSim.Data.RegionFlags.Hyperlink) != 0) if (flags == -1 /* no region in DB */ || (flags & (int)OpenSim.Data.RegionFlags.Hyperlink) != 0)
{ {
@ -152,9 +160,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
string userAgentDriver = agentCircuit.ServiceURLs["HomeURI"].ToString(); string userAgentDriver = agentCircuit.ServiceURLs["HomeURI"].ToString();
IUserAgentService connector = new UserAgentServiceConnector(userAgentDriver); IUserAgentService connector = new UserAgentServiceConnector(userAgentDriver);
bool success = connector.LoginAgentToGrid(agentCircuit, reg, finalDestination, out reason); bool success = connector.LoginAgentToGrid(agentCircuit, reg, finalDestination, out reason);
if (success) logout = success; // flag for later logout from this grid; this is an HG TP
// Log them out of this grid
m_aScene.PresenceService.LogoutAgent(agentCircuit.SessionID);
return success; return success;
} }

View File

@ -54,12 +54,10 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue
} }
private static byte[] uintToByteArray(uint uIntValue) private static byte[] uintToByteArray(uint uIntValue)
{ {
byte[] resultbytes = Utils.UIntToBytes(uIntValue); byte[] result = new byte[4];
if (BitConverter.IsLittleEndian) Utils.UIntToBytesBig(uIntValue, result, 0);
Array.Reverse(resultbytes); return result;
return resultbytes;
} }
public static OSD buildEvent(string eventName, OSD eventBody) public static OSD buildEvent(string eventName, OSD eventBody)
@ -160,7 +158,7 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue
info.Add("SimAccess", OSD.FromInteger(simAccess)); info.Add("SimAccess", OSD.FromInteger(simAccess));
info.Add("SimIP", OSD.FromBinary(regionExternalEndPoint.Address.GetAddressBytes())); info.Add("SimIP", OSD.FromBinary(regionExternalEndPoint.Address.GetAddressBytes()));
info.Add("SimPort", OSD.FromInteger(regionExternalEndPoint.Port)); info.Add("SimPort", OSD.FromInteger(regionExternalEndPoint.Port));
info.Add("TeleportFlags", OSD.FromBinary(1L << 4)); // AgentManager.TeleportFlags.ViaLocation info.Add("TeleportFlags", OSD.FromULong(1L << 4)); // AgentManager.TeleportFlags.ViaLocation
OSDArray infoArr = new OSDArray(); OSDArray infoArr = new OSDArray();
infoArr.Add(info); infoArr.Add(info);

View File

@ -95,7 +95,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
try try
{ {
asset1.ID = url + "/" + asset.ID; asset1.ID = url + "/" + asset.ID;
UUID temp = UUID.Zero; // UUID temp = UUID.Zero;
// TODO: if the creator is local, stick this grid's URL in front // TODO: if the creator is local, stick this grid's URL in front
//if (UUID.TryParse(asset.Metadata.CreatorID, out temp)) //if (UUID.TryParse(asset.Metadata.CreatorID, out temp))
// asset1.Metadata.CreatorID = ??? + "/" + asset.Metadata.CreatorID; // asset1.Metadata.CreatorID = ??? + "/" + asset.Metadata.CreatorID;

View File

@ -1,4 +1,4 @@
/* /*
* Copyright (c) Contributors, http://opensimulator.org/ * Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders. * See CONTRIBUTORS.TXT for a full list of copyright holders.
* *
@ -54,7 +54,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
get { return m_assMapper; } get { return m_assMapper; }
} }
private bool m_Initialized = false; // private bool m_Initialized = false;
#region INonSharedRegionModule #region INonSharedRegionModule

View File

@ -1,4 +1,4 @@
/* /*
* Copyright (c) Contributors, http://opensimulator.org/ * Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders. * See CONTRIBUTORS.TXT for a full list of copyright holders.
* *
@ -572,7 +572,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
} }
if (attachment) if (attachment)
{ {
group.RootPart.ObjectFlags |= (uint)PrimFlags.Phantom; group.RootPart.Flags |= PrimFlags.Phantom;
group.RootPart.IsAttachment = true; group.RootPart.IsAttachment = true;
} }

View File

@ -51,7 +51,7 @@ namespace OpenSim.Region.CoreModules.Framework.Library
private static bool m_HasRunOnce = false; private static bool m_HasRunOnce = false;
private bool m_Enabled = false; private bool m_Enabled = false;
private string m_LibraryName = "OpenSim Library"; // private string m_LibraryName = "OpenSim Library";
private Scene m_Scene; private Scene m_Scene;
private ILibraryService m_Library; private ILibraryService m_Library;
@ -212,13 +212,13 @@ namespace OpenSim.Region.CoreModules.Framework.Library
} }
} }
private void DumpLibrary() // private void DumpLibrary()
{ // {
InventoryFolderImpl lib = m_Library.LibraryRootFolder; // InventoryFolderImpl lib = m_Library.LibraryRootFolder;
//
m_log.DebugFormat(" - folder {0}", lib.Name); // m_log.DebugFormat(" - folder {0}", lib.Name);
DumpFolder(lib); // DumpFolder(lib);
} // }
// //
// private void DumpLibrary() // private void DumpLibrary()
// { // {

View File

@ -0,0 +1,169 @@
/*
* Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the OpenSimulator Project nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using log4net;
using Mono.Addins;
using Nini.Config;
using OpenMetaverse;
using OpenMetaverse.Packets;
using OpenSim.Framework;
using OpenSim.Region.Framework;
using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes;
namespace OpenSim.Region.CoreModules.Avatar.Attachments
{
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "BinaryLoggingModule")]
public class BinaryLoggingModule : INonSharedRegionModule
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
protected bool m_collectStats;
protected Scene m_scene = null;
public string Name { get { return "Binary Statistics Logging Module"; } }
public Type ReplaceableInterface { get { return null; } }
public void Initialise(IConfigSource source)
{
try
{
IConfig statConfig = source.Configs["Statistics.Binary"];
if (statConfig.Contains("enabled") && statConfig.GetBoolean("enabled"))
{
if (statConfig.Contains("collect_region_stats"))
{
if (statConfig.GetBoolean("collect_region_stats"))
{
m_collectStats = true;
}
}
if (statConfig.Contains("region_stats_period_seconds"))
{
m_statLogPeriod = TimeSpan.FromSeconds(statConfig.GetInt("region_stats_period_seconds"));
}
if (statConfig.Contains("stats_dir"))
{
m_statsDir = statConfig.GetString("stats_dir");
}
}
}
catch
{
// if it doesn't work, we don't collect anything
}
}
public void AddRegion(Scene scene)
{
m_scene = scene;
}
public void RemoveRegion(Scene scene)
{
}
public void RegionLoaded(Scene scene)
{
if (m_collectStats)
m_scene.StatsReporter.OnSendStatsResult += LogSimStats;
}
public void Close()
{
}
public class StatLogger
{
public DateTime StartTime;
public string Path;
public System.IO.BinaryWriter Log;
}
static StatLogger m_statLog = null;
static TimeSpan m_statLogPeriod = TimeSpan.FromSeconds(300);
static string m_statsDir = String.Empty;
static Object m_statLockObject = new Object();
private void LogSimStats(SimStats stats)
{
SimStatsPacket pack = new SimStatsPacket();
pack.Region = new SimStatsPacket.RegionBlock();
pack.Region.RegionX = stats.RegionX;
pack.Region.RegionY = stats.RegionY;
pack.Region.RegionFlags = stats.RegionFlags;
pack.Region.ObjectCapacity = stats.ObjectCapacity;
//pack.Region = //stats.RegionBlock;
pack.Stat = stats.StatsBlock;
pack.Header.Reliable = false;
// note that we are inside the reporter lock when called
DateTime now = DateTime.Now;
// hide some time information into the packet
pack.Header.Sequence = (uint)now.Ticks;
lock (m_statLockObject) // m_statLog is shared so make sure there is only executer here
{
try
{
if (m_statLog == null || now > m_statLog.StartTime + m_statLogPeriod)
{
// First log file or time has expired, start writing to a new log file
if (m_statLog != null && m_statLog.Log != null)
{
m_statLog.Log.Close();
}
m_statLog = new StatLogger();
m_statLog.StartTime = now;
m_statLog.Path = (m_statsDir.Length > 0 ? m_statsDir + System.IO.Path.DirectorySeparatorChar.ToString() : "")
+ String.Format("stats-{0}.log", now.ToString("yyyyMMddHHmmss"));
m_statLog.Log = new BinaryWriter(File.Open(m_statLog.Path, FileMode.Append, FileAccess.Write));
}
// Write the serialized data to disk
if (m_statLog != null && m_statLog.Log != null)
m_statLog.Log.Write(pack.ToBytes());
}
catch (Exception ex)
{
m_log.Error("statistics gathering failed: " + ex.Message, ex);
if (m_statLog != null && m_statLog.Log != null)
{
m_statLog.Log.Close();
}
m_statLog = null;
}
}
return;
}
}
}

View File

@ -91,7 +91,7 @@ namespace OpenSim.Region.CoreModules.InterGrid
private string httpsCN = ""; private string httpsCN = "";
private bool httpSSL = false; private bool httpSSL = false;
private uint httpsslport = 0; private uint httpsslport = 0;
private bool GridMode = false; // private bool GridMode = false;
#region IRegionModule Members #region IRegionModule Members
@ -126,10 +126,10 @@ namespace OpenSim.Region.CoreModules.InterGrid
} }
if (startupcfg != null) // if (startupcfg != null)
{ // {
GridMode = enabled = startupcfg.GetBoolean("gridmode", false); // GridMode = enabled = startupcfg.GetBoolean("gridmode", false);
} // }
if (cfg != null) if (cfg != null)
{ {
@ -1213,18 +1213,19 @@ namespace OpenSim.Region.CoreModules.InterGrid
} }
} }
private string CreateRandomStr(int len) // private string CreateRandomStr(int len)
{ // {
Random rnd = new Random(Environment.TickCount); // Random rnd = new Random(Environment.TickCount);
string returnstring = ""; // string returnstring = "";
string chars = "abcdefghijklmnopqrstuvwxyz0123456789"; // string chars = "abcdefghijklmnopqrstuvwxyz0123456789";
//
for (int i = 0; i < len; i++) // for (int i = 0; i < len; i++)
{ // {
returnstring += chars.Substring(rnd.Next(chars.Length), 1); // returnstring += chars.Substring(rnd.Next(chars.Length), 1);
} // }
return returnstring; // return returnstring;
} // }
// Temporary hack to allow teleporting to and from Vaak // Temporary hack to allow teleporting to and from Vaak
private static bool customXertificateValidation(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors error) private static bool customXertificateValidation(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors error)
{ {

View File

@ -32,7 +32,6 @@ using System.Reflection;
using Nini.Config; using Nini.Config;
using OpenSim.Framework; using OpenSim.Framework;
using OpenSim.Framework.Statistics; using OpenSim.Framework.Statistics;
using OpenSim.Services.Connectors; using OpenSim.Services.Connectors;
using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes; using OpenSim.Region.Framework.Scenes;
@ -48,7 +47,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
private bool m_Enabled = false; private bool m_Enabled = false;
private bool m_Initialized = false; private bool m_Initialized = false;
private Scene m_Scene; // private Scene m_Scene;
private InventoryServicesConnector m_RemoteConnector; private InventoryServicesConnector m_RemoteConnector;
public Type ReplaceableInterface public Type ReplaceableInterface
@ -105,7 +104,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
public void AddRegion(Scene scene) public void AddRegion(Scene scene)
{ {
m_Scene = scene; // m_Scene = scene;
//m_log.Debug("[XXXX] Adding scene " + m_Scene.RegionInfo.RegionName); //m_log.Debug("[XXXX] Adding scene " + m_Scene.RegionInfo.RegionName);
if (!m_Enabled) if (!m_Enabled)

View File

@ -32,7 +32,6 @@ using System.Reflection;
using Nini.Config; using Nini.Config;
using OpenSim.Framework; using OpenSim.Framework;
using OpenSim.Framework.Statistics; using OpenSim.Framework.Statistics;
using OpenSim.Services.Connectors; using OpenSim.Services.Connectors;
using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes; using OpenSim.Region.Framework.Scenes;
@ -48,7 +47,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
private bool m_Enabled = false; private bool m_Enabled = false;
private bool m_Initialized = false; private bool m_Initialized = false;
private Scene m_Scene; // private Scene m_Scene;
private XInventoryServicesConnector m_RemoteConnector; private XInventoryServicesConnector m_RemoteConnector;
public Type ReplaceableInterface public Type ReplaceableInterface
@ -109,7 +108,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
public void AddRegion(Scene scene) public void AddRegion(Scene scene)
{ {
m_Scene = scene; // m_Scene = scene;
//m_log.Debug("[XXXX] Adding scene " + m_Scene.RegionInfo.RegionName); //m_log.Debug("[XXXX] Adding scene " + m_Scene.RegionInfo.RegionName);
if (!m_Enabled) if (!m_Enabled)

View File

@ -55,7 +55,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.UserAccounts
if (account != null) if (account != null)
m_NameCache.AddOrUpdate(account.Name, account.PrincipalID, DateTime.Now + TimeSpan.FromMinutes(2.0d)); m_NameCache.AddOrUpdate(account.Name, account.PrincipalID, DateTime.Now + TimeSpan.FromMinutes(2.0d));
m_log.DebugFormat("[USER CACHE]: cached user {0}", userID); // m_log.DebugFormat("[USER CACHE]: cached user {0}", userID);
} }
public UserAccount Get(UUID userID, out bool inCache) public UserAccount Get(UUID userID, out bool inCache)

View File

@ -345,7 +345,6 @@ namespace OpenSim.Region.CoreModules.World.Estate
{ {
if (!s.IsChildAgent) if (!s.IsChildAgent)
{ {
s.ControllingClient.SendTeleportLocationStart();
m_scene.TeleportClientHome(user, s.ControllingClient); m_scene.TeleportClientHome(user, s.ControllingClient);
} }
} }
@ -480,7 +479,6 @@ namespace OpenSim.Region.CoreModules.World.Estate
ScenePresence s = m_scene.GetScenePresence(prey); ScenePresence s = m_scene.GetScenePresence(prey);
if (s != null) if (s != null)
{ {
s.ControllingClient.SendTeleportLocationStart();
m_scene.TeleportClientHome(prey, s.ControllingClient); m_scene.TeleportClientHome(prey, s.ControllingClient);
} }
} }
@ -500,7 +498,6 @@ namespace OpenSim.Region.CoreModules.World.Estate
// Also make sure they are actually in the region // Also make sure they are actually in the region
if (p != null && !p.IsChildAgent) if (p != null && !p.IsChildAgent)
{ {
p.ControllingClient.SendTeleportLocationStart();
m_scene.TeleportClientHome(p.UUID, p.ControllingClient); m_scene.TeleportClientHome(p.UUID, p.ControllingClient);
} }
} }

View File

@ -147,12 +147,12 @@ namespace OpenSim.Region.CoreModules.World.Land
{ {
} }
private bool OnVerifyUserConnection(ScenePresence scenePresence, out string reason) // private bool OnVerifyUserConnection(ScenePresence scenePresence, out string reason)
{ // {
ILandObject nearestParcel = m_scene.GetNearestAllowedParcel(scenePresence.UUID, scenePresence.AbsolutePosition.X, scenePresence.AbsolutePosition.Y); // ILandObject nearestParcel = m_scene.GetNearestAllowedParcel(scenePresence.UUID, scenePresence.AbsolutePosition.X, scenePresence.AbsolutePosition.Y);
reason = "You are not allowed to enter this sim."; // reason = "You are not allowed to enter this sim.";
return nearestParcel != null; // return nearestParcel != null;
} // }
void EventManagerOnNewClient(IClientAPI client) void EventManagerOnNewClient(IClientAPI client)
{ {

View File

@ -0,0 +1,263 @@
/*
* Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the OpenSimulator Project nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
using System;
using System.Collections.Generic;
using System.Reflection;
using log4net;
using Mono.Addins;
using Nini.Config;
using OpenMetaverse;
using OpenMetaverse.Packets;
using OpenSim.Framework;
using OpenSim.Region.Framework;
using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes;
using OpenSim.Region.Framework.Scenes.Serialization;
namespace OpenSim.Region.CoreModules.World.Objects.BuySell
{
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "BuySellModule")]
public class BuySellModule : IBuySellModule, INonSharedRegionModule
{
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
protected Scene m_scene = null;
protected IDialogModule m_dialogModule;
public string Name { get { return "Object BuySell Module"; } }
public Type ReplaceableInterface { get { return null; } }
public void Initialise(IConfigSource source) {}
public void AddRegion(Scene scene)
{
m_scene = scene;
m_scene.RegisterModuleInterface<IBuySellModule>(this);
m_scene.EventManager.OnNewClient += SubscribeToClientEvents;
}
public void RemoveRegion(Scene scene)
{
m_scene.EventManager.OnNewClient -= SubscribeToClientEvents;
}
public void RegionLoaded(Scene scene)
{
m_dialogModule = scene.RequestModuleInterface<IDialogModule>();
}
public void Close()
{
RemoveRegion(m_scene);
}
public void SubscribeToClientEvents(IClientAPI client)
{
client.OnObjectSaleInfo += ObjectSaleInfo;
}
protected void ObjectSaleInfo(
IClientAPI client, UUID agentID, UUID sessionID, uint localID, byte saleType, int salePrice)
{
SceneObjectPart part = m_scene.GetSceneObjectPart(localID);
if (part == null || part.ParentGroup == null)
return;
if (part.ParentGroup.IsDeleted)
return;
part = part.ParentGroup.RootPart;
part.ObjectSaleType = saleType;
part.SalePrice = salePrice;
part.ParentGroup.HasGroupChanged = true;
part.GetProperties(client);
}
public bool BuyObject(IClientAPI remoteClient, UUID categoryID, uint localID, byte saleType)
{
SceneObjectPart part = m_scene.GetSceneObjectPart(localID);
if (part == null)
return false;
if (part.ParentGroup == null)
return false;
SceneObjectGroup group = part.ParentGroup;
switch (saleType)
{
case 1: // Sell as original (in-place sale)
uint effectivePerms = group.GetEffectivePermissions();
if ((effectivePerms & (uint)PermissionMask.Transfer) == 0)
{
if (m_dialogModule != null)
m_dialogModule.SendAlertToUser(remoteClient, "This item doesn't appear to be for sale");
return false;
}
group.SetOwnerId(remoteClient.AgentId);
group.SetRootPartOwner(part, remoteClient.AgentId, remoteClient.ActiveGroupId);
List<SceneObjectPart> partList = new List<SceneObjectPart>(group.Children.Values);
if (m_scene.Permissions.PropagatePermissions())
{
foreach (SceneObjectPart child in partList)
{
child.Inventory.ChangeInventoryOwner(remoteClient.AgentId);
child.TriggerScriptChangedEvent(Changed.OWNER);
child.ApplyNextOwnerPermissions();
}
}
part.ObjectSaleType = 0;
part.SalePrice = 10;
group.HasGroupChanged = true;
part.GetProperties(remoteClient);
part.TriggerScriptChangedEvent(Changed.OWNER);
group.ResumeScripts();
part.ScheduleFullUpdate();
break;
case 2: // Sell a copy
Vector3 inventoryStoredPosition = new Vector3
(((group.AbsolutePosition.X > (int)Constants.RegionSize)
? 250
: group.AbsolutePosition.X)
,
(group.AbsolutePosition.X > (int)Constants.RegionSize)
? 250
: group.AbsolutePosition.X,
group.AbsolutePosition.Z);
Vector3 originalPosition = group.AbsolutePosition;
group.AbsolutePosition = inventoryStoredPosition;
string sceneObjectXml = SceneObjectSerializer.ToOriginalXmlFormat(group);
group.AbsolutePosition = originalPosition;
uint perms = group.GetEffectivePermissions();
if ((perms & (uint)PermissionMask.Transfer) == 0)
{
if (m_dialogModule != null)
m_dialogModule.SendAlertToUser(remoteClient, "This item doesn't appear to be for sale");
return false;
}
AssetBase asset = m_scene.CreateAsset(
group.GetPartName(localID),
group.GetPartDescription(localID),
(sbyte)AssetType.Object,
Utils.StringToBytes(sceneObjectXml),
group.OwnerID);
m_scene.AssetService.Store(asset);
InventoryItemBase item = new InventoryItemBase();
item.CreatorId = part.CreatorID.ToString();
item.ID = UUID.Random();
item.Owner = remoteClient.AgentId;
item.AssetID = asset.FullID;
item.Description = asset.Description;
item.Name = asset.Name;
item.AssetType = asset.Type;
item.InvType = (int)InventoryType.Object;
item.Folder = categoryID;
uint nextPerms=(perms & 7) << 13;
if ((nextPerms & (uint)PermissionMask.Copy) == 0)
perms &= ~(uint)PermissionMask.Copy;
if ((nextPerms & (uint)PermissionMask.Transfer) == 0)
perms &= ~(uint)PermissionMask.Transfer;
if ((nextPerms & (uint)PermissionMask.Modify) == 0)
perms &= ~(uint)PermissionMask.Modify;
item.BasePermissions = perms & part.NextOwnerMask;
item.CurrentPermissions = perms & part.NextOwnerMask;
item.NextPermissions = part.NextOwnerMask;
item.EveryOnePermissions = part.EveryoneMask &
part.NextOwnerMask;
item.GroupPermissions = part.GroupMask &
part.NextOwnerMask;
item.CurrentPermissions |= 16; // Slam!
item.CreationDate = Util.UnixTimeSinceEpoch();
if (m_scene.InventoryService.AddItem(item))
{
remoteClient.SendInventoryItemCreateUpdate(item, 0);
}
else
{
if (m_dialogModule != null)
m_dialogModule.SendAlertToUser(remoteClient, "Cannot buy now. Your inventory is unavailable");
return false;
}
break;
case 3: // Sell contents
List<UUID> invList = part.Inventory.GetInventoryList();
bool okToSell = true;
foreach (UUID invID in invList)
{
TaskInventoryItem item1 = part.Inventory.GetInventoryItem(invID);
if ((item1.CurrentPermissions &
(uint)PermissionMask.Transfer) == 0)
{
okToSell = false;
break;
}
}
if (!okToSell)
{
if (m_dialogModule != null)
m_dialogModule.SendAlertToUser(
remoteClient, "This item's inventory doesn't appear to be for sale");
return false;
}
if (invList.Count > 0)
m_scene.MoveTaskInventoryItems(remoteClient.AgentId, part.Name, part, invList);
break;
}
return true;
}
}
}

View File

@ -588,8 +588,9 @@ namespace OpenSim.Region.CoreModules.World.Terrain
client.OnModifyTerrain += client_OnModifyTerrain; client.OnModifyTerrain += client_OnModifyTerrain;
client.OnBakeTerrain += client_OnBakeTerrain; client.OnBakeTerrain += client_OnBakeTerrain;
client.OnLandUndo += client_OnLandUndo; client.OnLandUndo += client_OnLandUndo;
client.OnUnackedTerrain += client_OnUnackedTerrain;
} }
/// <summary> /// <summary>
/// Checks to see if the terrain has been modified since last check /// Checks to see if the terrain has been modified since last check
/// but won't attempt to limit those changes to the limits specified in the estate settings /// but won't attempt to limit those changes to the limits specified in the estate settings
@ -810,6 +811,12 @@ namespace OpenSim.Region.CoreModules.World.Terrain
InterfaceBakeTerrain(null); //bake terrain does not use the passed in parameter InterfaceBakeTerrain(null); //bake terrain does not use the passed in parameter
} }
} }
protected void client_OnUnackedTerrain(IClientAPI client, int patchX, int patchY)
{
//m_log.Debug("Terrain packet unacked, resending patch: " + patchX + " , " + patchY);
client.SendLayerData(patchX, patchY, m_scene.Heightmap.GetFloatsSerialised());
}
private void StoreUndoState() private void StoreUndoState()
{ {

View File

@ -138,14 +138,14 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
remoteClient.SendMapBlock(blocks, 2); remoteClient.SendMapBlock(blocks, 2);
} }
private Scene GetClientScene(IClientAPI client) // private Scene GetClientScene(IClientAPI client)
{ // {
foreach (Scene s in m_scenes) // foreach (Scene s in m_scenes)
{ // {
if (client.Scene.RegionInfo.RegionHandle == s.RegionInfo.RegionHandle) // if (client.Scene.RegionInfo.RegionHandle == s.RegionInfo.RegionHandle)
return s; // return s;
} // }
return m_scene; // return m_scene;
} // }
} }
} }

View File

@ -1000,11 +1000,24 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
return responsemap; return responsemap;
} }
public void RegenerateMaptile(byte[] data) public void GenerateMaptile()
{ {
// Cannot create a map for a nonexistant heightmap
if (m_scene.Heightmap == null)
return;
//create a texture asset of the terrain
IMapImageGenerator terrain = m_scene.RequestModuleInterface<IMapImageGenerator>();
if (terrain == null)
return;
byte[] data = terrain.WriteJpeg2000Image("defaultstripe.png");
if (data == null)
return;
UUID lastMapRegionUUID = m_scene.RegionInfo.RegionSettings.TerrainImageID; UUID lastMapRegionUUID = m_scene.RegionInfo.RegionSettings.TerrainImageID;
m_log.Debug("[MAPTILE]: STORING MAPTILE IMAGE"); m_log.Debug("[WORLDMAP]: STORING MAPTILE IMAGE");
m_scene.RegionInfo.RegionSettings.TerrainImageID = UUID.Random(); m_scene.RegionInfo.RegionSettings.TerrainImageID = UUID.Random();

View File

@ -135,7 +135,7 @@ namespace OpenSim.Region.DataSnapshot.Providers
xmlobject.AppendChild(node); xmlobject.AppendChild(node);
node = nodeFactory.CreateNode(XmlNodeType.Element, "flags", ""); node = nodeFactory.CreateNode(XmlNodeType.Element, "flags", "");
node.InnerText = String.Format("{0:x}", m_rootPart.ObjectFlags); node.InnerText = String.Format("{0:x}", (uint)m_rootPart.Flags);
xmlobject.AppendChild(node); xmlobject.AppendChild(node);
node = nodeFactory.CreateNode(XmlNodeType.Element, "regionuuid", ""); node = nodeFactory.CreateNode(XmlNodeType.Element, "regionuuid", "");

View File

@ -520,7 +520,11 @@ namespace OpenSim.Region.Examples.SimpleModule
{ {
} }
public virtual void SendTeleportLocationStart() public virtual void SendTeleportStart(uint flags)
{
}
public virtual void SendTeleportProgress(uint flags, string message)
{ {
} }

View File

@ -0,0 +1,47 @@
/*
* Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the OpenSimulator Project nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
using OpenMetaverse;
using OpenSim.Framework;
namespace OpenSim.Region.Framework.Interfaces
{
public interface IBuySellModule
{
/// <summary>
/// Try to buy an object
/// </summary>
/// <param name="remoteClient"></param>
/// <param name="categoryID"></param>
/// <param name="localID"></param>
/// <param name="saleType"></param>
/// <returns>
/// True on a successful purchase, false on failure
/// </returns>
bool BuyObject(IClientAPI remoteClient, UUID categoryID, uint localID, byte saleType);
}
}

View File

@ -25,7 +25,6 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
namespace OpenSim.Region.Framework.Interfaces namespace OpenSim.Region.Framework.Interfaces
{ {
public interface ICloudModule : IRegionModule public interface ICloudModule : IRegionModule
@ -35,4 +34,4 @@ namespace OpenSim.Region.Framework.Interfaces
/// </summary> /// </summary>
float CloudCover(int x, int y, int z); float CloudCover(int x, int y, int z);
} }
} }

View File

@ -35,7 +35,6 @@ namespace OpenSim.Region.Framework.Interfaces
/// </summary> /// </summary>
public interface IInventoryTransferModule public interface IInventoryTransferModule
{ {
void SetRootAgentScene(UUID agentID, Scene scene);
bool NeedSceneCacheClear(UUID agentID, Scene scene); bool NeedSceneCacheClear(UUID agentID, Scene scene);
} }
} }

View File

@ -29,6 +29,9 @@ namespace OpenSim.Region.Framework.Interfaces
{ {
public interface IWorldMapModule public interface IWorldMapModule
{ {
void RegenerateMaptile(byte[] data); /// <summary>
/// Generate a map tile for the scene. a terrain texture for this scene
/// </summary>
void GenerateMaptile();
} }
} }

View File

@ -197,9 +197,9 @@ namespace OpenSim.Region.Framework.Scenes
return 0.0; return 0.0;
// Use group position for child prims // Use group position for child prims
Vector3 entityPos = entity.AbsolutePosition; Vector3 entityPos;
if (entity is SceneObjectPart) if (entity is SceneObjectPart)
entityPos = m_scene.GetGroupByPrim(entity.LocalId).AbsolutePosition; entityPos = ((SceneObjectPart)entity).ParentGroup.AbsolutePosition;
else else
entityPos = entity.AbsolutePosition; entityPos = entity.AbsolutePosition;

View File

@ -687,7 +687,7 @@ namespace OpenSim.Region.Framework.Scenes
/// <summary> /// <summary>
/// Create a new asset data structure. /// Create a new asset data structure.
/// </summary> /// </summary>
private AssetBase CreateAsset(string name, string description, sbyte assetType, byte[] data, UUID creatorID) public AssetBase CreateAsset(string name, string description, sbyte assetType, byte[] data, UUID creatorID)
{ {
AssetBase asset = new AssetBase(UUID.Random(), name, assetType, creatorID.ToString()); AssetBase asset = new AssetBase(UUID.Random(), name, assetType, creatorID.ToString());
asset.Description = description; asset.Description = description;
@ -869,7 +869,7 @@ namespace OpenSim.Region.Framework.Scenes
ScenePresence presence; ScenePresence presence;
if (TryGetScenePresence(remoteClient.AgentId, out presence)) if (TryGetScenePresence(remoteClient.AgentId, out presence))
{ {
byte[] data = null; // byte[] data = null;
AssetBase asset = new AssetBase(); AssetBase asset = new AssetBase();
asset.FullID = olditemID; asset.FullID = olditemID;
@ -877,8 +877,10 @@ namespace OpenSim.Region.Framework.Scenes
asset.Name = name; asset.Name = name;
asset.Description = description; asset.Description = description;
CreateNewInventoryItem(remoteClient, remoteClient.AgentId.ToString(), folderID, name, 0, callbackID, asset, invType, (uint)PermissionMask.All, (uint)PermissionMask.All, (uint)PermissionMask.All, (uint)PermissionMask.All, (uint)PermissionMask.All, Util.UnixTimeSinceEpoch()); CreateNewInventoryItem(
remoteClient, remoteClient.AgentId.ToString(), folderID, name, 0, callbackID, asset, invType,
(uint)PermissionMask.All, (uint)PermissionMask.All, (uint)PermissionMask.All,
(uint)PermissionMask.All, (uint)PermissionMask.All, Util.UnixTimeSinceEpoch());
} }
else else
{ {
@ -911,7 +913,6 @@ namespace OpenSim.Region.Framework.Scenes
InventoryService.DeleteFolders(remoteClient.AgentId, folderIDs); InventoryService.DeleteFolders(remoteClient.AgentId, folderIDs);
} }
/// <summary> /// <summary>
/// Send the details of a prim's inventory to the client. /// Send the details of a prim's inventory to the client.
/// </summary> /// </summary>

View File

@ -496,73 +496,6 @@ namespace OpenSim.Region.Framework.Scenes
#endregion #endregion
#region BinaryStats
public class StatLogger
{
public DateTime StartTime;
public string Path;
public System.IO.BinaryWriter Log;
}
static StatLogger m_statLog = null;
static TimeSpan m_statLogPeriod = TimeSpan.FromSeconds(300);
static string m_statsDir = String.Empty;
static Object m_statLockObject = new Object();
private void LogSimStats(SimStats stats)
{
SimStatsPacket pack = new SimStatsPacket();
pack.Region = new SimStatsPacket.RegionBlock();
pack.Region.RegionX = stats.RegionX;
pack.Region.RegionY = stats.RegionY;
pack.Region.RegionFlags = stats.RegionFlags;
pack.Region.ObjectCapacity = stats.ObjectCapacity;
//pack.Region = //stats.RegionBlock;
pack.Stat = stats.StatsBlock;
pack.Header.Reliable = false;
// note that we are inside the reporter lock when called
DateTime now = DateTime.Now;
// hide some time information into the packet
pack.Header.Sequence = (uint)now.Ticks;
lock (m_statLockObject) // m_statLog is shared so make sure there is only executer here
{
try
{
if (m_statLog == null || now > m_statLog.StartTime + m_statLogPeriod)
{
// First log file or time has expired, start writing to a new log file
if (m_statLog != null && m_statLog.Log != null)
{
m_statLog.Log.Close();
}
m_statLog = new StatLogger();
m_statLog.StartTime = now;
m_statLog.Path = (m_statsDir.Length > 0 ? m_statsDir + System.IO.Path.DirectorySeparatorChar.ToString() : "")
+ String.Format("stats-{0}.log", now.ToString("yyyyMMddHHmmss"));
m_statLog.Log = new BinaryWriter(File.Open(m_statLog.Path, FileMode.Append, FileAccess.Write));
}
// Write the serialized data to disk
if (m_statLog != null && m_statLog.Log != null)
m_statLog.Log.Write(pack.ToBytes());
}
catch (Exception ex)
{
m_log.Error("statistics gathering failed: " + ex.Message, ex);
if (m_statLog != null && m_statLog.Log != null)
{
m_statLog.Log.Close();
}
m_statLog = null;
}
}
return;
}
#endregion
#region Constructors #region Constructors
public Scene(RegionInfo regInfo, AgentCircuitManager authen, public Scene(RegionInfo regInfo, AgentCircuitManager authen,
@ -628,45 +561,6 @@ namespace OpenSim.Region.Framework.Scenes
if (m_storageManager.EstateDataStore != null) if (m_storageManager.EstateDataStore != null)
{ {
m_regInfo.EstateSettings = m_storageManager.EstateDataStore.LoadEstateSettings(m_regInfo.RegionID, false); m_regInfo.EstateSettings = m_storageManager.EstateDataStore.LoadEstateSettings(m_regInfo.RegionID, false);
if (m_regInfo.EstateSettings.EstateID == 0) // No record at all
{
MainConsole.Instance.Output("Your region is not part of an estate.");
while (true)
{
string response = MainConsole.Instance.CmdPrompt("Do you wish to join an existing estate?", "no", new List<string>() {"yes", "no"});
if (response == "no")
{
// Create a new estate
m_regInfo.EstateSettings = m_storageManager.EstateDataStore.LoadEstateSettings(m_regInfo.RegionID, true);
m_regInfo.EstateSettings.EstateName = MainConsole.Instance.CmdPrompt("New estate name", m_regInfo.EstateSettings.EstateName);
m_regInfo.EstateSettings.Save();
break;
}
else
{
response = MainConsole.Instance.CmdPrompt("Estate name to join", "None");
if (response == "None")
continue;
List<int> estateIDs = m_storageManager.EstateDataStore.GetEstates(response);
if (estateIDs.Count < 1)
{
MainConsole.Instance.Output("The name you have entered matches no known estate. Please try again");
continue;
}
int estateID = estateIDs[0];
m_regInfo.EstateSettings = m_storageManager.EstateDataStore.LoadEstateSettings(estateID);
if (m_storageManager.EstateDataStore.LinkRegion(m_regInfo.RegionID, estateID))
break;
MainConsole.Instance.Output("Joining the estate failed. Please try again.");
}
}
}
} }
#endregion Region Settings #endregion Region Settings
@ -771,38 +665,6 @@ namespace OpenSim.Region.Framework.Scenes
m_strictAccessControl = startupConfig.GetBoolean("StrictAccessControl", m_strictAccessControl); m_strictAccessControl = startupConfig.GetBoolean("StrictAccessControl", m_strictAccessControl);
CombineRegions = startupConfig.GetBoolean("CombineContiguousRegions", false); CombineRegions = startupConfig.GetBoolean("CombineContiguousRegions", false);
#region BinaryStats
try
{
IConfig statConfig = m_config.Configs["Statistics.Binary"];
if (statConfig.Contains("enabled") && statConfig.GetBoolean("enabled"))
{
if (statConfig.Contains("collect_region_stats"))
{
if (statConfig.GetBoolean("collect_region_stats"))
{
// if enabled, add us to the event. If not enabled, I won't get called
StatsReporter.OnSendStatsResult += LogSimStats;
}
}
if (statConfig.Contains("region_stats_period_seconds"))
{
m_statLogPeriod = TimeSpan.FromSeconds(statConfig.GetInt("region_stats_period_seconds"));
}
if (statConfig.Contains("stats_dir"))
{
m_statsDir = statConfig.GetString("stats_dir");
}
}
}
catch
{
// if it doesn't work, we don't collect anything
}
#endregion BinaryStats
} }
catch catch
{ {
@ -1844,33 +1706,6 @@ namespace OpenSim.Region.Framework.Scenes
} }
/// <summary>
/// Create a terrain texture for this scene
/// </summary>
public void CreateTerrainTexture()
{
//create a texture asset of the terrain
IMapImageGenerator terrain = RequestModuleInterface<IMapImageGenerator>();
// Cannot create a map for a nonexistant heightmap yet.
if (Heightmap == null)
return;
if (terrain == null)
return;
byte[] data = terrain.WriteJpeg2000Image("defaultstripe.png");
if (data != null)
{
IWorldMapModule mapModule = RequestModuleInterface<IWorldMapModule>();
if (mapModule != null)
mapModule.RegenerateMaptile(data);
else
m_log.DebugFormat("[SCENE]: MapModule is null, can't save maptile");
}
}
#endregion #endregion
#region Load Land #region Load Land
@ -1929,7 +1764,7 @@ namespace OpenSim.Region.Framework.Scenes
AddRestoredSceneObject(group, true, true); AddRestoredSceneObject(group, true, true);
SceneObjectPart rootPart = group.GetChildPart(group.UUID); SceneObjectPart rootPart = group.GetChildPart(group.UUID);
rootPart.ObjectFlags &= ~(uint)PrimFlags.Scripted; rootPart.Flags &= ~PrimFlags.Scripted;
rootPart.TrimPermissions(); rootPart.TrimPermissions();
group.CheckSculptAndLoad(); group.CheckSculptAndLoad();
//rootPart.DoPhysicsPropertyUpdate(UsePhysics, true); //rootPart.DoPhysicsPropertyUpdate(UsePhysics, true);
@ -2248,7 +2083,7 @@ namespace OpenSim.Region.Framework.Scenes
foreach (SceneObjectPart part in group.Children.Values) foreach (SceneObjectPart part in group.Children.Values)
{ {
if (part.IsJoint() && ((part.ObjectFlags&(uint)PrimFlags.Physics) != 0)) if (part.IsJoint() && ((part.Flags & PrimFlags.Physics) != 0))
{ {
PhysicsScene.RequestJointDeletion(part.Name); // FIXME: what if the name changed? PhysicsScene.RequestJointDeletion(part.Name); // FIXME: what if the name changed?
} }
@ -2761,7 +2596,7 @@ namespace OpenSim.Region.Framework.Scenes
if (!VerifyClient(aCircuit, ep, out vialogin)) if (!VerifyClient(aCircuit, ep, out vialogin))
{ {
// uh-oh, this is fishy // uh-oh, this is fishy
m_log.WarnFormat("[Scene]: Agent {0} with session {1} connecting with unidentified end point {2}. Refusing service.", m_log.WarnFormat("[SCENE]: Agent {0} with session {1} connecting with unidentified end point {2}. Refusing service.",
client.AgentId, client.SessionId, ep.ToString()); client.AgentId, client.SessionId, ep.ToString());
try try
{ {
@ -2769,13 +2604,13 @@ namespace OpenSim.Region.Framework.Scenes
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[Scene]: Exception while closing aborted client: {0}", e.StackTrace); m_log.DebugFormat("[SCENE]: Exception while closing aborted client: {0}", e.StackTrace);
} }
return; return;
} }
} }
m_log.Debug("[Scene] Adding new agent " + client.Name + " to scene " + RegionInfo.RegionName); m_log.Debug("[SCENE]: Adding new agent " + client.Name + " to scene " + RegionInfo.RegionName);
ScenePresence sp = CreateAndAddScenePresence(client); ScenePresence sp = CreateAndAddScenePresence(client);
if (aCircuit != null) if (aCircuit != null)
@ -2804,7 +2639,7 @@ namespace OpenSim.Region.Framework.Scenes
// Do the verification here // Do the verification here
if ((aCircuit.teleportFlags & (uint)Constants.TeleportFlags.ViaLogin) != 0) if ((aCircuit.teleportFlags & (uint)Constants.TeleportFlags.ViaLogin) != 0)
{ {
m_log.DebugFormat("[Scene]: Incoming client {0} {1} in region {2} via Login", aCircuit.firstname, aCircuit.lastname, RegionInfo.RegionName); m_log.DebugFormat("[SCENE]: Incoming client {0} {1} in region {2} via Login", aCircuit.firstname, aCircuit.lastname, RegionInfo.RegionName);
vialogin = true; vialogin = true;
IUserAgentVerificationModule userVerification = RequestModuleInterface<IUserAgentVerificationModule>(); IUserAgentVerificationModule userVerification = RequestModuleInterface<IUserAgentVerificationModule>();
if (userVerification != null && ep != null) if (userVerification != null && ep != null)
@ -2814,11 +2649,11 @@ namespace OpenSim.Region.Framework.Scenes
if (!userVerification.VerifyClient(aCircuit, /*ep.Address.ToString() */ addr.ToString())) if (!userVerification.VerifyClient(aCircuit, /*ep.Address.ToString() */ addr.ToString()))
{ {
// uh-oh, this is fishy // uh-oh, this is fishy
m_log.DebugFormat("[Scene]: User Client Verification for {0} {1} in {2} returned false", aCircuit.firstname, aCircuit.lastname, RegionInfo.RegionName); m_log.DebugFormat("[SCENE]: User Client Verification for {0} {1} in {2} returned false", aCircuit.firstname, aCircuit.lastname, RegionInfo.RegionName);
return false; return false;
} }
else else
m_log.DebugFormat("[Scene]: User Client Verification for {0} {1} in {2} returned true", aCircuit.firstname, aCircuit.lastname, RegionInfo.RegionName); m_log.DebugFormat("[SCENE]: User Client Verification for {0} {1} in {2} returned true", aCircuit.firstname, aCircuit.lastname, RegionInfo.RegionName);
} }
} }
@ -2849,7 +2684,7 @@ namespace OpenSim.Region.Framework.Scenes
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[Scene]: Exception while closing aborted client: {0}", e.StackTrace); m_log.DebugFormat("[SCENE]: Exception while closing aborted client: {0}", e.StackTrace);
} }
} }
else else
@ -2879,7 +2714,6 @@ namespace OpenSim.Region.Framework.Scenes
public virtual void SubscribeToClientTerrainEvents(IClientAPI client) public virtual void SubscribeToClientTerrainEvents(IClientAPI client)
{ {
client.OnRegionHandShakeReply += SendLayerData; client.OnRegionHandShakeReply += SendLayerData;
client.OnUnackedTerrain += TerrainUnAcked;
} }
public virtual void SubscribeToClientPrimEvents(IClientAPI client) public virtual void SubscribeToClientPrimEvents(IClientAPI client)
@ -2919,8 +2753,7 @@ namespace OpenSim.Region.Framework.Scenes
client.OnUndo += m_sceneGraph.HandleUndo; client.OnUndo += m_sceneGraph.HandleUndo;
client.OnRedo += m_sceneGraph.HandleRedo; client.OnRedo += m_sceneGraph.HandleRedo;
client.OnObjectDescription += m_sceneGraph.PrimDescription; client.OnObjectDescription += m_sceneGraph.PrimDescription;
client.OnObjectDrop += m_sceneGraph.DropObject; client.OnObjectDrop += m_sceneGraph.DropObject;
client.OnObjectSaleInfo += ObjectSaleInfo;
client.OnObjectIncludeInSearch += m_sceneGraph.MakeObjectSearchable; client.OnObjectIncludeInSearch += m_sceneGraph.MakeObjectSearchable;
client.OnObjectOwner += ObjectOwner; client.OnObjectOwner += ObjectOwner;
} }
@ -3011,7 +2844,6 @@ namespace OpenSim.Region.Framework.Scenes
public virtual void UnSubscribeToClientTerrainEvents(IClientAPI client) public virtual void UnSubscribeToClientTerrainEvents(IClientAPI client)
{ {
client.OnRegionHandShakeReply -= SendLayerData; client.OnRegionHandShakeReply -= SendLayerData;
client.OnUnackedTerrain -= TerrainUnAcked;
} }
public virtual void UnSubscribeToClientPrimEvents(IClientAPI client) public virtual void UnSubscribeToClientPrimEvents(IClientAPI client)
@ -3050,7 +2882,6 @@ namespace OpenSim.Region.Framework.Scenes
client.OnRedo -= m_sceneGraph.HandleRedo; client.OnRedo -= m_sceneGraph.HandleRedo;
client.OnObjectDescription -= m_sceneGraph.PrimDescription; client.OnObjectDescription -= m_sceneGraph.PrimDescription;
client.OnObjectDrop -= m_sceneGraph.DropObject; client.OnObjectDrop -= m_sceneGraph.DropObject;
client.OnObjectSaleInfo -= ObjectSaleInfo;
client.OnObjectIncludeInSearch -= m_sceneGraph.MakeObjectSearchable; client.OnObjectIncludeInSearch -= m_sceneGraph.MakeObjectSearchable;
client.OnObjectOwner -= ObjectOwner; client.OnObjectOwner -= ObjectOwner;
} }
@ -4625,23 +4456,6 @@ namespace OpenSim.Region.Framework.Scenes
client.SendRegionHandle(regionID, handle); client.SendRegionHandle(regionID, handle);
} }
public void TerrainUnAcked(IClientAPI client, int patchX, int patchY)
{
//m_log.Debug("Terrain packet unacked, resending patch: " + patchX + " , " + patchY);
client.SendLayerData(patchX, patchY, Heightmap.GetFloatsSerialised());
}
public void SetRootAgentScene(UUID agentID)
{
IInventoryTransferModule inv = RequestModuleInterface<IInventoryTransferModule>();
if (inv == null)
return;
inv.SetRootAgentScene(agentID, this);
EventManager.TriggerSetRootAgentScene(agentID, this);
}
public bool NeedSceneCacheClear(UUID agentID) public bool NeedSceneCacheClear(UUID agentID)
{ {
IInventoryTransferModule inv = RequestModuleInterface<IInventoryTransferModule>(); IInventoryTransferModule inv = RequestModuleInterface<IInventoryTransferModule>();
@ -4651,184 +4465,6 @@ namespace OpenSim.Region.Framework.Scenes
return inv.NeedSceneCacheClear(agentID, this); return inv.NeedSceneCacheClear(agentID, this);
} }
public void ObjectSaleInfo(IClientAPI client, UUID agentID, UUID sessionID, uint localID, byte saleType, int salePrice)
{
SceneObjectPart part = GetSceneObjectPart(localID);
if (part == null || part.ParentGroup == null)
return;
if (part.ParentGroup.IsDeleted)
return;
part = part.ParentGroup.RootPart;
part.ObjectSaleType = saleType;
part.SalePrice = salePrice;
part.ParentGroup.HasGroupChanged = true;
part.GetProperties(client);
}
public bool PerformObjectBuy(IClientAPI remoteClient, UUID categoryID,
uint localID, byte saleType)
{
SceneObjectPart part = GetSceneObjectPart(localID);
if (part == null)
return false;
if (part.ParentGroup == null)
return false;
SceneObjectGroup group = part.ParentGroup;
switch (saleType)
{
case 1: // Sell as original (in-place sale)
uint effectivePerms=group.GetEffectivePermissions();
if ((effectivePerms & (uint)PermissionMask.Transfer) == 0)
{
m_dialogModule.SendAlertToUser(remoteClient, "This item doesn't appear to be for sale");
return false;
}
group.SetOwnerId(remoteClient.AgentId);
group.SetRootPartOwner(part, remoteClient.AgentId,
remoteClient.ActiveGroupId);
List<SceneObjectPart> partList =
new List<SceneObjectPart>(group.Children.Values);
if (Permissions.PropagatePermissions())
{
foreach (SceneObjectPart child in partList)
{
child.Inventory.ChangeInventoryOwner(remoteClient.AgentId);
child.TriggerScriptChangedEvent(Changed.OWNER);
child.ApplyNextOwnerPermissions();
}
}
part.ObjectSaleType = 0;
part.SalePrice = 10;
group.HasGroupChanged = true;
part.GetProperties(remoteClient);
part.TriggerScriptChangedEvent(Changed.OWNER);
group.ResumeScripts();
part.ScheduleFullUpdate();
break;
case 2: // Sell a copy
Vector3 inventoryStoredPosition = new Vector3
(((group.AbsolutePosition.X > (int)Constants.RegionSize)
? 250
: group.AbsolutePosition.X)
,
(group.AbsolutePosition.X > (int)Constants.RegionSize)
? 250
: group.AbsolutePosition.X,
group.AbsolutePosition.Z);
Vector3 originalPosition = group.AbsolutePosition;
group.AbsolutePosition = inventoryStoredPosition;
string sceneObjectXml = SceneObjectSerializer.ToOriginalXmlFormat(group);
group.AbsolutePosition = originalPosition;
uint perms=group.GetEffectivePermissions();
if ((perms & (uint)PermissionMask.Transfer) == 0)
{
m_dialogModule.SendAlertToUser(remoteClient, "This item doesn't appear to be for sale");
return false;
}
AssetBase asset = CreateAsset(
group.GetPartName(localID),
group.GetPartDescription(localID),
(sbyte)AssetType.Object,
Utils.StringToBytes(sceneObjectXml),
group.OwnerID);
AssetService.Store(asset);
InventoryItemBase item = new InventoryItemBase();
item.CreatorId = part.CreatorID.ToString();
item.ID = UUID.Random();
item.Owner = remoteClient.AgentId;
item.AssetID = asset.FullID;
item.Description = asset.Description;
item.Name = asset.Name;
item.AssetType = asset.Type;
item.InvType = (int)InventoryType.Object;
item.Folder = categoryID;
uint nextPerms=(perms & 7) << 13;
if ((nextPerms & (uint)PermissionMask.Copy) == 0)
perms &= ~(uint)PermissionMask.Copy;
if ((nextPerms & (uint)PermissionMask.Transfer) == 0)
perms &= ~(uint)PermissionMask.Transfer;
if ((nextPerms & (uint)PermissionMask.Modify) == 0)
perms &= ~(uint)PermissionMask.Modify;
item.BasePermissions = perms & part.NextOwnerMask;
item.CurrentPermissions = perms & part.NextOwnerMask;
item.NextPermissions = part.NextOwnerMask;
item.EveryOnePermissions = part.EveryoneMask &
part.NextOwnerMask;
item.GroupPermissions = part.GroupMask &
part.NextOwnerMask;
item.CurrentPermissions |= 16; // Slam!
item.CreationDate = Util.UnixTimeSinceEpoch();
if (InventoryService.AddItem(item))
remoteClient.SendInventoryItemCreateUpdate(item, 0);
else
{
m_dialogModule.SendAlertToUser(remoteClient, "Cannot buy now. Your inventory is unavailable");
return false;
}
break;
case 3: // Sell contents
List<UUID> invList = part.Inventory.GetInventoryList();
bool okToSell = true;
foreach (UUID invID in invList)
{
TaskInventoryItem item1 = part.Inventory.GetInventoryItem(invID);
if ((item1.CurrentPermissions &
(uint)PermissionMask.Transfer) == 0)
{
okToSell = false;
break;
}
}
if (!okToSell)
{
m_dialogModule.SendAlertToUser(
remoteClient, "This item's inventory doesn't appear to be for sale");
return false;
}
if (invList.Count > 0)
MoveTaskInventoryItems(remoteClient.AgentId, part.Name,
part, invList);
break;
}
return true;
}
public void CleanTempObjects() public void CleanTempObjects()
{ {
List<EntityBase> objs = GetEntities(); List<EntityBase> objs = GetEntities();
@ -4969,7 +4605,7 @@ namespace OpenSim.Region.Framework.Scenes
} }
// turn the proxy non-physical, which also stops its client-side interpolation // turn the proxy non-physical, which also stops its client-side interpolation
bool wasUsingPhysics = ((jointProxyObject.ObjectFlags & (uint)PrimFlags.Physics) != 0); bool wasUsingPhysics = ((jointProxyObject.Flags & PrimFlags.Physics) != 0);
if (wasUsingPhysics) if (wasUsingPhysics)
{ {
jointProxyObject.UpdatePrimFlags(false, false, true, false); // FIXME: possible deadlock here; check to make sure all the scene alterations set into motion here won't deadlock jointProxyObject.UpdatePrimFlags(false, false, true, false); // FIXME: possible deadlock here; check to make sure all the scene alterations set into motion here won't deadlock

View File

@ -1588,9 +1588,9 @@ namespace OpenSim.Region.Framework.Scenes
public void aggregateScriptEvents() public void aggregateScriptEvents()
{ {
uint objectflagupdate=(uint)RootPart.GetEffectiveObjectFlags(); PrimFlags objectflagupdate = (PrimFlags)RootPart.GetEffectiveObjectFlags();
scriptEvents aggregateScriptEvents=0; scriptEvents aggregateScriptEvents = 0;
lockPartsForRead(true); lockPartsForRead(true);
{ {
@ -1600,7 +1600,7 @@ namespace OpenSim.Region.Framework.Scenes
if (part == null) if (part == null)
continue; continue;
if (part != RootPart) if (part != RootPart)
part.ObjectFlags = objectflagupdate; part.Flags = objectflagupdate;
aggregateScriptEvents |= part.AggregateScriptEvents; aggregateScriptEvents |= part.AggregateScriptEvents;
} }

View File

@ -1348,7 +1348,7 @@ namespace OpenSim.Region.Framework.Scenes
public void AddFlag(PrimFlags flag) public void AddFlag(PrimFlags flag)
{ {
// PrimFlags prevflag = Flags; // PrimFlags prevflag = Flags;
if ((ObjectFlags & (uint) flag) == 0) if ((Flags & flag) == 0)
{ {
//m_log.Debug("Adding flag: " + ((PrimFlags) flag).ToString()); //m_log.Debug("Adding flag: " + ((PrimFlags) flag).ToString());
Flags |= flag; Flags |= flag;
@ -1638,7 +1638,7 @@ namespace OpenSim.Region.Framework.Scenes
dupe.Velocity = new Vector3(0, 0, 0); dupe.Velocity = new Vector3(0, 0, 0);
dupe.Acceleration = new Vector3(0, 0, 0); dupe.Acceleration = new Vector3(0, 0, 0);
dupe.AngularVelocity = new Vector3(0, 0, 0); dupe.AngularVelocity = new Vector3(0, 0, 0);
dupe.ObjectFlags = ObjectFlags; dupe.Flags = Flags;
dupe._ownershipCost = _ownershipCost; dupe._ownershipCost = _ownershipCost;
dupe._objectSaleType = _objectSaleType; dupe._objectSaleType = _objectSaleType;
@ -1675,7 +1675,7 @@ namespace OpenSim.Region.Framework.Scenes
m_parentGroup.Scene.AssetService.Get(dupe.m_shape.SculptTexture.ToString(), dupe, AssetReceived); m_parentGroup.Scene.AssetService.Get(dupe.m_shape.SculptTexture.ToString(), dupe, AssetReceived);
} }
bool UsePhysics = ((dupe.ObjectFlags & (uint)PrimFlags.Physics) != 0); bool UsePhysics = ((dupe.Flags & PrimFlags.Physics) != 0);
dupe.DoPhysicsPropertyUpdate(UsePhysics, true); dupe.DoPhysicsPropertyUpdate(UsePhysics, true);
} }
@ -4299,9 +4299,9 @@ namespace OpenSim.Region.Framework.Scenes
public void UpdatePrimFlags(bool UsePhysics, bool IsTemporary, bool IsPhantom, bool IsVD) public void UpdatePrimFlags(bool UsePhysics, bool IsTemporary, bool IsPhantom, bool IsVD)
{ {
bool wasUsingPhysics = ((ObjectFlags & (uint) PrimFlags.Physics) != 0); bool wasUsingPhysics = ((Flags & PrimFlags.Physics) != 0);
bool wasTemporary = ((ObjectFlags & (uint)PrimFlags.TemporaryOnRez) != 0); bool wasTemporary = ((Flags & PrimFlags.TemporaryOnRez) != 0);
bool wasPhantom = ((ObjectFlags & (uint)PrimFlags.Phantom) != 0); bool wasPhantom = ((Flags & PrimFlags.Phantom) != 0);
bool wasVD = VolumeDetectActive; bool wasVD = VolumeDetectActive;
if ((UsePhysics == wasUsingPhysics) && (wasTemporary == IsTemporary) && (wasPhantom == IsPhantom) && (IsVD==wasVD)) if ((UsePhysics == wasUsingPhysics) && (wasTemporary == IsTemporary) && (wasPhantom == IsPhantom) && (IsVD==wasVD))

View File

@ -905,7 +905,8 @@ namespace OpenSim.Region.Framework.Scenes
m_grouptitle = gm.GetGroupTitle(m_uuid); m_grouptitle = gm.GetGroupTitle(m_uuid);
m_rootRegionHandle = m_scene.RegionInfo.RegionHandle; m_rootRegionHandle = m_scene.RegionInfo.RegionHandle;
m_scene.SetRootAgentScene(m_uuid);
m_scene.EventManager.TriggerSetRootAgentScene(m_uuid, m_scene);
// Moved this from SendInitialData to ensure that m_appearance is initialized // Moved this from SendInitialData to ensure that m_appearance is initialized
// before the inventory is processed in MakeRootAgent. This fixes a race condition // before the inventory is processed in MakeRootAgent. This fixes a race condition

View File

@ -1045,11 +1045,15 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
} }
public void SendTeleportLocationStart() public void SendTeleportStart(uint flags)
{ {
} }
public void SendTeleportProgress(uint flags, string message)
{
}
public void SendMoneyBalance(UUID transaction, bool success, byte[] description, int balance) public void SendMoneyBalance(UUID transaction, bool success, byte[] description, int balance)
{ {

View File

@ -1129,7 +1129,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
OSDMap NewGroupDataMap = new OSDMap(1); OSDMap NewGroupDataMap = new OSDMap(1);
GroupDataMap.Add("GroupID", OSD.FromUUID(membership.GroupID)); GroupDataMap.Add("GroupID", OSD.FromUUID(membership.GroupID));
GroupDataMap.Add("GroupPowers", OSD.FromBinary(membership.GroupPowers)); GroupDataMap.Add("GroupPowers", OSD.FromULong(membership.GroupPowers));
GroupDataMap.Add("AcceptNotices", OSD.FromBoolean(membership.AcceptNotices)); GroupDataMap.Add("AcceptNotices", OSD.FromBoolean(membership.AcceptNotices));
GroupDataMap.Add("GroupInsigniaID", OSD.FromUUID(membership.GroupPicture)); GroupDataMap.Add("GroupInsigniaID", OSD.FromUUID(membership.GroupPicture));
GroupDataMap.Add("Contribution", OSD.FromInteger(membership.Contribution)); GroupDataMap.Add("Contribution", OSD.FromInteger(membership.Contribution));

View File

@ -72,8 +72,6 @@ namespace OpenSim.Region.OptionalModules.World.MoneyModule
private IConfigSource m_gConfig; private IConfigSource m_gConfig;
/// <summary> /// <summary>
/// Region UUIDS indexed by AgentID /// Region UUIDS indexed by AgentID
/// </summary> /// </summary>
@ -85,7 +83,7 @@ namespace OpenSim.Region.OptionalModules.World.MoneyModule
// private int m_stipend = 1000; // private int m_stipend = 1000;
private int ObjectCapacity = 45000; // private int ObjectCapacity = 45000;
private int ObjectCount = 0; private int ObjectCount = 0;
private int PriceEnergyUnit = 0; private int PriceEnergyUnit = 0;
private int PriceGroupCreate = 0; private int PriceGroupCreate = 0;
@ -267,13 +265,11 @@ namespace OpenSim.Region.OptionalModules.World.MoneyModule
PriceGroupCreate = startupConfig.GetInt("PriceGroupCreate", -1); PriceGroupCreate = startupConfig.GetInt("PriceGroupCreate", -1);
m_sellEnabled = startupConfig.GetBoolean("SellEnabled", false); m_sellEnabled = startupConfig.GetBoolean("SellEnabled", false);
} }
} }
private void GetClientFunds(IClientAPI client) private void GetClientFunds(IClientAPI client)
{ {
CheckExistAndRefreshFunds(client.AgentId); CheckExistAndRefreshFunds(client.AgentId);
} }
/// <summary> /// <summary>
@ -815,7 +811,10 @@ namespace OpenSim.Region.OptionalModules.World.MoneyModule
remoteClient.SendAgentAlertMessage("Unable to buy now. The object was not found.", false); remoteClient.SendAgentAlertMessage("Unable to buy now. The object was not found.", false);
return; return;
} }
s.PerformObjectBuy(remoteClient, categoryID, localID, saleType);
IBuySellModule module = s.RequestModuleInterface<IBuySellModule>();
if (module != null)
module.BuyObject(remoteClient, categoryID, localID, saleType);
} }
} }
@ -825,7 +824,5 @@ namespace OpenSim.Region.OptionalModules.World.MoneyModule
RegionMoneyRequest = 1, RegionMoneyRequest = 1,
Gift = 2, Gift = 2,
Purchase = 3 Purchase = 3
} }
}
}

View File

@ -611,7 +611,11 @@ namespace OpenSim.Region.OptionalModules.World.NPC
{ {
} }
public virtual void SendTeleportLocationStart() public virtual void SendTeleportStart(uint flags)
{
}
public virtual void SendTeleportProgress(uint flags, string message)
{ {
} }

View File

@ -4405,7 +4405,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if (m_host.OwnerID == World.LandChannel.GetLandObject( if (m_host.OwnerID == World.LandChannel.GetLandObject(
presence.AbsolutePosition.X, presence.AbsolutePosition.Y).LandData.OwnerID) presence.AbsolutePosition.X, presence.AbsolutePosition.Y).LandData.OwnerID)
{ {
presence.ControllingClient.SendTeleportLocationStart();
World.TeleportClientHome(agentId, presence.ControllingClient); World.TeleportClientHome(agentId, presence.ControllingClient);
} }
} }

View File

@ -673,7 +673,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
regionName = regInfo.RegionName; regionName = regInfo.RegionName;
} }
} }
presence.ControllingClient.SendTeleportLocationStart();
World.RequestTeleportLocation(presence.ControllingClient, regionName, World.RequestTeleportLocation(presence.ControllingClient, regionName,
new Vector3((float)position.x, (float)position.y, (float)position.z), new Vector3((float)position.x, (float)position.y, (float)position.z),
new Vector3((float)lookat.x, (float)lookat.y, (float)lookat.z), (uint)TPFlags.ViaLocation); new Vector3((float)lookat.x, (float)lookat.y, (float)lookat.z), (uint)TPFlags.ViaLocation);
@ -705,7 +704,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
== World.LandChannel.GetLandObject( == World.LandChannel.GetLandObject(
presence.AbsolutePosition.X, presence.AbsolutePosition.Y).LandData.OwnerID) presence.AbsolutePosition.X, presence.AbsolutePosition.Y).LandData.OwnerID)
{ {
presence.ControllingClient.SendTeleportLocationStart();
World.RequestTeleportLocation(presence.ControllingClient, regionHandle, World.RequestTeleportLocation(presence.ControllingClient, regionHandle,
new Vector3((float)position.x, (float)position.y, (float)position.z), new Vector3((float)position.x, (float)position.y, (float)position.z),
new Vector3((float)lookat.x, (float)lookat.y, (float)lookat.z), (uint)TPFlags.ViaLocation); new Vector3((float)lookat.x, (float)lookat.y, (float)lookat.z), (uint)TPFlags.ViaLocation);

View File

@ -102,16 +102,15 @@ namespace OpenSim.Server.Handlers.Grid
} }
catch (Exception) catch (Exception)
{ {
_log.Debug("[GRID INFO SERVICE]: Cannot get grid info from config source, using minimal defaults"); _log.Warn("[GRID INFO SERVICE]: Cannot get grid info from config source, using minimal defaults");
} }
_log.DebugFormat("[GRID INFO SERVICE]: Grid info service initialized with {0} keys", _info.Count); _log.DebugFormat("[GRID INFO SERVICE]: Grid info service initialized with {0} keys", _info.Count);
} }
private void IssueWarning() private void IssueWarning()
{ {
_log.Warn("[GRID INFO SERVICE]: found no [GridInfo] section in your OpenSim.ini"); _log.Warn("[GRID INFO SERVICE]: found no [GridInfo] section in your configuration files");
_log.Warn("[GRID INFO SERVICE]: trying to guess sensible defaults, you might want to provide better ones:"); _log.Warn("[GRID INFO SERVICE]: trying to guess sensible defaults, you might want to provide better ones:");
foreach (string k in _info.Keys) foreach (string k in _info.Keys)
@ -125,7 +124,7 @@ namespace OpenSim.Server.Handlers.Grid
XmlRpcResponse response = new XmlRpcResponse(); XmlRpcResponse response = new XmlRpcResponse();
Hashtable responseData = new Hashtable(); Hashtable responseData = new Hashtable();
_log.Info("[GRID INFO SERVICE]: Request for grid info"); _log.Debug("[GRID INFO SERVICE]: Request for grid info");
foreach (string k in _info.Keys) foreach (string k in _info.Keys)
{ {

View File

@ -53,9 +53,20 @@ namespace OpenSim.Services.Connectors.Hypergrid
MethodBase.GetCurrentMethod().DeclaringType); MethodBase.GetCurrentMethod().DeclaringType);
string m_ServerURL; string m_ServerURL;
Uri m_Uri;
public UserAgentServiceConnector(string url) public UserAgentServiceConnector(string url)
{ {
m_ServerURL = url; m_ServerURL = url;
try
{
m_Uri = new Uri(m_ServerURL);
IPAddress ip = Util.GetHostFromDNS(m_Uri.Host);
m_ServerURL = "http://" + ip.ToString() + ":" + m_Uri.Port;
}
catch (Exception e)
{
m_log.DebugFormat("[USER AGENT CONNECTOR]: Malformed Uri {0}: {1}", m_ServerURL, e.Message);
}
} }
public UserAgentServiceConnector(IConfigSource config) public UserAgentServiceConnector(IConfigSource config)
@ -373,7 +384,7 @@ namespace OpenSim.Services.Connectors.Hypergrid
if (response.IsFault) if (response.IsFault)
{ {
m_log.ErrorFormat("[HGrid]: remote call to {0} returned an error: {1}", m_ServerURL, response.FaultString); m_log.ErrorFormat("[USER AGENT CONNECTOR]: remote call to {0} returned an error: {1}", m_ServerURL, response.FaultString);
reason = "XMLRPC Fault"; reason = "XMLRPC Fault";
return false; return false;
} }
@ -403,7 +414,7 @@ namespace OpenSim.Services.Connectors.Hypergrid
} }
catch (Exception e) catch (Exception e)
{ {
m_log.ErrorFormat("[HGrid]: Got exception on GetBoolResponse response."); m_log.ErrorFormat("[USER AGENT CONNECTOR]: Got exception on GetBoolResponse response.");
if (hash.ContainsKey("result") && hash["result"] != null) if (hash.ContainsKey("result") && hash["result"] != null)
m_log.ErrorFormat("Reply was ", (string)hash["result"]); m_log.ErrorFormat("Reply was ", (string)hash["result"]);
reason = "Exception: " + e.Message; reason = "Exception: " + e.Message;

View File

@ -184,7 +184,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
} }
catch (Exception ex) catch (Exception ex)
{ {
m_log.Warn("[SIMIAN ASSET CONNECTOR]: Asset GET from " + url + " failed: " + ex.Message); m_log.Warn("[SIMIAN ASSET CONNECTOR]: Asset HEAD from " + url + " failed: " + ex.Message);
} }
return metadata; return metadata;

View File

@ -326,7 +326,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
try try
{ {
interests = OSDParser.DeserializeJson(user["LLInterests"].AsString()) as OSDMap; interests = OSDParser.DeserializeJson(user["LLInterests"].AsString()) as OSDMap;
client.SendAvatarInterestsReply(avatarID, interests["WantMask"].AsUInteger(), interests["WantText"].AsString(), interests["SkillsMask"].AsUInteger(), interests["SkillsText"].AsString(), interests["languages"].AsString()); client.SendAvatarInterestsReply(avatarID, interests["WantMask"].AsUInteger(), interests["WantText"].AsString(), interests["SkillsMask"].AsUInteger(), interests["SkillsText"].AsString(), interests["Languages"].AsString());
} }
catch { } catch { }
} }

View File

@ -257,7 +257,7 @@ namespace OpenSim.Services.Connectors.Simulation
HttpWebRequest ChildUpdateRequest = (HttpWebRequest)WebRequest.Create(uri); HttpWebRequest ChildUpdateRequest = (HttpWebRequest)WebRequest.Create(uri);
ChildUpdateRequest.Method = "PUT"; ChildUpdateRequest.Method = "PUT";
ChildUpdateRequest.ContentType = "application/json"; ChildUpdateRequest.ContentType = "application/json";
ChildUpdateRequest.Timeout = 10000; ChildUpdateRequest.Timeout = 30000;
//ChildUpdateRequest.KeepAlive = false; //ChildUpdateRequest.KeepAlive = false;
// Fill it in // Fill it in
@ -334,7 +334,7 @@ namespace OpenSim.Services.Connectors.Simulation
} }
catch (WebException ex) catch (WebException ex)
{ {
m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: exception on reply of ChilAgentUpdate {0}", ex.Message); m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: exception on reply of ChilAgentUpdate from {0}: {1}", uri, ex.Message);
// ignore, really // ignore, really
} }
finally finally

View File

@ -113,7 +113,7 @@ namespace OpenSim.Services.Connectors
public virtual UserAccount GetUserAccount(UUID scopeID, UUID userID) public virtual UserAccount GetUserAccount(UUID scopeID, UUID userID)
{ {
m_log.DebugFormat("[ACCOUNTS CONNECTOR]: GetUserAccount {0}", userID); // m_log.DebugFormat("[ACCOUNTS CONNECTOR]: GetUserAccount {0}", userID);
Dictionary<string, object> sendData = new Dictionary<string, object>(); Dictionary<string, object> sendData = new Dictionary<string, object>();
//sendData["SCOPEID"] = scopeID.ToString(); //sendData["SCOPEID"] = scopeID.ToString();
sendData["VERSIONMIN"] = ProtocolVersions.ClientProtocolVersionMin.ToString(); sendData["VERSIONMIN"] = ProtocolVersions.ClientProtocolVersionMin.ToString();

View File

@ -259,7 +259,16 @@ namespace OpenSim.Services.HypergridService
if (account == null && !aCircuit.lastname.StartsWith("@")) if (account == null && !aCircuit.lastname.StartsWith("@"))
{ {
aCircuit.firstname = aCircuit.firstname + "." + aCircuit.lastname; aCircuit.firstname = aCircuit.firstname + "." + aCircuit.lastname;
aCircuit.lastname = "@" + aCircuit.ServiceURLs["HomeURI"].ToString(); try
{
Uri uri = new Uri(aCircuit.ServiceURLs["HomeURI"].ToString());
aCircuit.lastname = "@" + uri.Host; // + ":" + uri.Port;
}
catch
{
m_log.WarnFormat("[GATEKEEPER SERVICE]: Malformed HomeURI (this should never happen): {0}", aCircuit.ServiceURLs["HomeURI"]);
aCircuit.lastname = "@" + aCircuit.ServiceURLs["HomeURI"].ToString();
}
} }
// //

View File

@ -614,7 +614,11 @@ namespace OpenSim.Tests.Common.Mock
{ {
} }
public virtual void SendTeleportLocationStart() public virtual void SendTeleportStart(uint flags)
{
}
public void SendTeleportProgress(uint flags, string message)
{ {
} }

View File

@ -42,7 +42,7 @@ namespace OpenSim.Tests.Common.Mock
/// </summary> /// </summary>
public class TestInventoryDataPlugin : IInventoryDataPlugin public class TestInventoryDataPlugin : IInventoryDataPlugin
{ {
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
/// <value> /// <value>
/// Inventory folders /// Inventory folders

View File

@ -0,0 +1,143 @@
/*
* Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the OpenSimulator Project nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
using System.IO;
using Nini.Config;
using NUnit.Framework;
using OpenSim.Framework;
namespace OpenSim.Tests
{
[TestFixture]
public class ConfigurationLoaderTests
{
private const string m_testSubdirectory = "test";
private string m_basePath;
private string m_workingDirectory;
private IConfigSource m_config;
/// <summary>
/// Set up a test directory.
/// </summary>
[SetUp]
public void SetUp()
{
m_basePath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
string path = Path.Combine(m_basePath, m_testSubdirectory);
Directory.CreateDirectory(path);
m_workingDirectory = Directory.GetCurrentDirectory();
Directory.SetCurrentDirectory(path);
}
/// <summary>
/// Remove the test directory.
/// </summary>
[TearDown]
public void TearDown()
{
Directory.SetCurrentDirectory(m_workingDirectory);
Directory.Delete(m_basePath, true);
}
/// <summary>
/// Test the including of ini files with absolute and relative paths.
/// </summary>
[Test]
public void IncludeTests()
{
const string mainIniFile = "OpenSim.ini";
m_config = new IniConfigSource();
// Create ini files in a directory structure
IniConfigSource ini;
IConfig config;
ini = new IniConfigSource();
config = ini.AddConfig("IncludeTest");
config.Set("Include-absolute", "absolute/*/config/*.ini");
config.Set("Include-relative", "../" + m_testSubdirectory + "/relative/*/config/*.ini");
CreateIni(mainIniFile, ini);
ini = new IniConfigSource();
ini.AddConfig("Absolute1").Set("name1", "value1");
CreateIni("absolute/one/config/setting.ini", ini);
ini = new IniConfigSource();
ini.AddConfig("Absolute2").Set("name2", 2.3);
CreateIni("absolute/two/config/setting1.ini", ini);
ini = new IniConfigSource();
ini.AddConfig("Absolute2").Set("name3", "value3");
CreateIni("absolute/two/config/setting2.ini", ini);
ini = new IniConfigSource();
ini.AddConfig("Relative1").Set("name4", "value4");
CreateIni("relative/one/config/setting.ini", ini);
ini = new IniConfigSource();
ini.AddConfig("Relative2").Set("name5", true);
CreateIni("relative/two/config/setting1.ini", ini);
ini = new IniConfigSource();
ini.AddConfig("Relative2").Set("name6", 6);
CreateIni("relative/two/config/setting2.ini", ini);
// Prepare call to ConfigurationLoader.LoadConfigSettings()
ConfigurationLoader cl = new ConfigurationLoader();
IConfigSource argvSource = new IniConfigSource();
argvSource.AddConfig("Startup").Set("inifile", mainIniFile);
ConfigSettings configSettings;
NetworkServersInfo networkInfo;
OpenSimConfigSource source = cl.LoadConfigSettings(argvSource, out configSettings, out networkInfo);
// Remove default config
config = source.Source.Configs["Startup"];
source.Source.Configs.Remove(config);
config = source.Source.Configs["Network"];
source.Source.Configs.Remove(config);
// Finally, we are able to check the result
Assert.AreEqual(m_config.ToString(), source.Source.ToString(),
"Configuration with includes does not contain all settings.");
// The following would be preferable but fails due to a type mismatch which I am not able to resolve
//CollectionAssert.AreEquivalent(m_config.Configs, source.Source.Configs,
// String.Format("Configuration with includes does not contain all settings.\nAll settings:\n{0}\nSettings read:\n{1}", m_config, source.Source));
}
private void CreateIni(string filepath, IniConfigSource source)
{
string path = Path.GetDirectoryName(filepath);
if (path != string.Empty)
{
Directory.CreateDirectory(path);
}
source.Save(filepath);
m_config.Merge(source);
}
}
}

View File

@ -141,7 +141,17 @@ namespace OpenSim.Tools.Configger
else else
{ {
string basepath = Path.GetFullPath("."); string basepath = Path.GetFullPath(".");
string path = Path.Combine(basepath, file); // Resolve relative paths with wildcards
string chunkWithoutWildcards = file;
string chunkWithWildcards = string.Empty;
int wildcardIndex = file.IndexOfAny(new char[] { '*', '?' });
if (wildcardIndex != -1)
{
chunkWithoutWildcards = file.Substring(0, wildcardIndex);
chunkWithWildcards = file.Substring(wildcardIndex);
}
string path = Path.Combine(basepath, chunkWithoutWildcards);
path = Path.GetFullPath(path) + chunkWithWildcards;
string[] paths = Util.Glob(path); string[] paths = Util.Glob(path);
foreach (string p in paths) foreach (string p in paths)
{ {

Binary file not shown.

View File

@ -2801,6 +2801,28 @@
</Files> </Files>
</Project> </Project>
<Project frameworkVersion="v3_5" name="OpenSim.Tests" path="OpenSim/Tests" type="Library">
<Configuration name="Debug">
<Options>
<OutputPath>../../bin/</OutputPath>
</Options>
</Configuration>
<Configuration name="Release">
<Options>
<OutputPath>../../bin/</OutputPath>
</Options>
</Configuration>
<ReferencePath>../../bin/</ReferencePath>
<Reference name="OpenSim.Framework"/>
<Reference name="Nini.dll" />
<Reference name="nunit.framework.dll" />
<Reference name="OpenSim" />
<Files>
<Match pattern="*.cs" recurse="false"/>
</Files>
</Project>
<Project frameworkVersion="v3_5" name="OpenSim.Data.Tests" path="OpenSim/Data/Tests" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Data.Tests" path="OpenSim/Data/Tests" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>