Merge branch 'master' of ssh://MyConnection/var/git/opensim

remotes/origin/0.6.7-post-fixes
Teravus Ovares (Dan Olivares) 2009-08-15 13:10:21 -04:00
commit 30ce56e721
54 changed files with 2753 additions and 375 deletions

View File

@ -77,7 +77,6 @@ what it is today.
* Intimidated * Intimidated
* Jeremy Bongio (IBM) * Jeremy Bongio (IBM)
* jhurliman * jhurliman
* Mike Osias (IBM)
* John R Sohn (XenReborn) * John R Sohn (XenReborn)
* jonc * jonc
* Junta Kohime * Junta Kohime
@ -91,6 +90,7 @@ what it is today.
* maimedleech * maimedleech
* Mic Bowman * Mic Bowman
* Michelle Argus * Michelle Argus
* Mike Osias (IBM)
* Mike Pitman (IBM) * Mike Pitman (IBM)
* mikkopa/_someone - RealXtend * mikkopa/_someone - RealXtend
* Mircea Kitsune * Mircea Kitsune
@ -119,9 +119,11 @@ what it is today.
* Xantor * Xantor
* Y. Nitta * Y. Nitta
* YZh * YZh
* Zackary Geers aka Kunnis Basiat
* Zha Ewry * Zha Ewry
LSL Devs LSL Devs
* Alondria * Alondria

View File

@ -41,12 +41,18 @@ using OpenSim.Region.Framework.Interfaces;
namespace OpenSim.Client.Linden namespace OpenSim.Client.Linden
{ {
/// <summary>
/// Linden UDP Stack Region Module
/// </summary>
public class LLClientStackModule : INonSharedRegionModule public class LLClientStackModule : INonSharedRegionModule
{ {
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
#region IRegionModule Members #region IRegionModule Members
/// <summary>
/// Scene that contains the region's data
/// </summary>
protected Scene m_scene; protected Scene m_scene;
protected bool m_createClientStack = false; protected bool m_createClientStack = false;
protected IClientNetworkServer m_clientServer; protected IClientNetworkServer m_clientServer;

View File

@ -204,8 +204,16 @@ namespace OpenSim.Data.Tests
UUID webloginkey = UUID.Random(); UUID webloginkey = UUID.Random();
uint homeregx = (uint) random.Next(); uint homeregx = (uint) random.Next();
uint homeregy = (uint) random.Next(); uint homeregy = (uint) random.Next();
Vector3 homeloc = new Vector3((float)Math.Round(random.NextDouble(),5),(float)Math.Round(random.NextDouble(),5),(float)Math.Round(random.NextDouble(),5)); Vector3 homeloc
Vector3 homelookat = new Vector3((float)Math.Round(random.NextDouble(),5),(float)Math.Round(random.NextDouble(),5),(float)Math.Round(random.NextDouble(),5)); = new Vector3(
(float)Math.Round(random.NextDouble(), 5),
(float)Math.Round(random.NextDouble(), 5),
(float)Math.Round(random.NextDouble(), 5));
Vector3 homelookat
= new Vector3(
(float)Math.Round(random.NextDouble(), 5),
(float)Math.Round(random.NextDouble(), 5),
(float)Math.Round(random.NextDouble(), 5));
int created = random.Next(); int created = random.Next();
int lastlogin = random.Next(); int lastlogin = random.Next();
string userinvuri = RandomName(); string userinvuri = RandomName();

View File

@ -0,0 +1,298 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using NUnit.Framework;
using NUnit.Framework.Constraints;
using NUnit.Framework.SyntaxHelpers;
using OpenMetaverse;
using OpenSim.Framework;
namespace OpenSim.Data.Tests
{
public static class Constraints
{
//This is here because C# has a gap in the language, you can't infer type from a constructor
public static PropertyCompareConstraint<T> PropertyCompareConstraint<T>(T expected)
{
return new PropertyCompareConstraint<T>(expected);
}
}
public class PropertyCompareConstraint<T> : NUnit.Framework.Constraints.Constraint
{
private readonly object _expected;
//the reason everywhere uses propertyNames.Reverse().ToArray() is because the stack is backwards of the order we want to display the properties in.
private string failingPropertyName = string.Empty;
private object failingExpected;
private object failingActual;
public PropertyCompareConstraint(T expected)
{
_expected = expected;
}
public override bool Matches(object actual)
{
return ObjectCompare(_expected, actual, new Stack<string>());
}
private bool ObjectCompare(object expected, object actual, Stack<string> propertyNames)
{
if (actual.GetType() != expected.GetType())
{
propertyNames.Push("GetType()");
failingPropertyName = string.Join(".", propertyNames.Reverse().ToArray());
propertyNames.Pop();
failingActual = actual.GetType();
failingExpected = expected.GetType();
return false;
}
if(actual.GetType() == typeof(Color))
{
Color actualColor = (Color) actual;
Color expectedColor = (Color) expected;
if (actualColor.R != expectedColor.R)
{
propertyNames.Push("R");
failingPropertyName = string.Join(".", propertyNames.Reverse().ToArray());
propertyNames.Pop();
failingActual = actualColor.R;
failingExpected = expectedColor.R;
return false;
}
if (actualColor.G != expectedColor.G)
{
propertyNames.Push("G");
failingPropertyName = string.Join(".", propertyNames.Reverse().ToArray());
propertyNames.Pop();
failingActual = actualColor.G;
failingExpected = expectedColor.G;
return false;
}
if (actualColor.B != expectedColor.B)
{
propertyNames.Push("B");
failingPropertyName = string.Join(".", propertyNames.Reverse().ToArray());
propertyNames.Pop();
failingActual = actualColor.B;
failingExpected = expectedColor.B;
return false;
}
if (actualColor.A != expectedColor.A)
{
propertyNames.Push("A");
failingPropertyName = string.Join(".", propertyNames.Reverse().ToArray());
propertyNames.Pop();
failingActual = actualColor.A;
failingExpected = expectedColor.A;
return false;
}
return true;
}
//Skip static properties. I had a nasty problem comparing colors because of all of the public static colors.
PropertyInfo[] properties = expected.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (var property in properties)
{
if (ignores.Contains(property.Name))
continue;
object actualValue = property.GetValue(actual, null);
object expectedValue = property.GetValue(expected, null);
//If they are both null, they are equal
if (actualValue == null && expectedValue == null)
continue;
//If only one is null, then they aren't
if (actualValue == null || expectedValue == null)
{
propertyNames.Push(property.Name);
failingPropertyName = string.Join(".", propertyNames.Reverse().ToArray());
propertyNames.Pop();
failingActual = actualValue;
failingExpected = expectedValue;
return false;
}
IComparable comp = actualValue as IComparable;
if (comp != null)
{
if (comp.CompareTo(expectedValue) != 0)
{
propertyNames.Push(property.Name);
failingPropertyName = string.Join(".", propertyNames.Reverse().ToArray());
propertyNames.Pop();
failingActual = actualValue;
failingExpected = expectedValue;
return false;
}
continue;
}
IEnumerable arr = actualValue as IEnumerable;
if (arr != null)
{
List<object> actualList = arr.Cast<object>().ToList();
List<object> expectedList = ((IEnumerable)expectedValue).Cast<object>().ToList();
if (actualList.Count != expectedList.Count)
{
propertyNames.Push(property.Name);
propertyNames.Push("Count");
failingPropertyName = string.Join(".", propertyNames.Reverse().ToArray());
failingActual = actualList.Count;
failingExpected = expectedList.Count;
propertyNames.Pop();
propertyNames.Pop();
}
//Todo: A value-wise comparison of all of the values.
//Everything seems okay...
continue;
}
propertyNames.Push(property.Name);
if (!ObjectCompare(expectedValue, actualValue, propertyNames))
return false;
propertyNames.Pop();
}
return true;
}
public override void WriteDescriptionTo(MessageWriter writer)
{
writer.WriteExpectedValue(failingExpected);
}
public override void WriteActualValueTo(MessageWriter writer)
{
writer.WriteActualValue(failingActual);
writer.WriteLine();
writer.Write(" On Property: " + failingPropertyName);
}
//These notes assume the lambda: (x=>x.Parent.Value)
//ignores should really contain like a fully dotted version of the property name, but I'm starting with small steps
readonly List<string> ignores = new List<string>();
public PropertyCompareConstraint<T> IgnoreProperty(Expression<Func<T, object>> func)
{
Expression express = func.Body;
PullApartExpression(express);
return this;
}
private void PullApartExpression(Expression express)
{
//This deals with any casts... like implicit casts to object. Not all UnaryExpression are casts, but this is a first attempt.
if (express is UnaryExpression)
PullApartExpression(((UnaryExpression)express).Operand);
if (express is MemberExpression)
{
//If the inside of the lambda is the access to x, we've hit the end of the chain.
// We should track by the fully scoped parameter name, but this is the first rev of doing this.
if (((MemberExpression)express).Expression is ParameterExpression)
{
ignores.Add(((MemberExpression)express).Member.Name);
}
else
{
//Otherwise there could be more parameters inside...
PullApartExpression(((MemberExpression)express).Expression);
}
}
}
}
[TestFixture]
public class PropertyCompareConstraintTest
{
public class HasInt
{
public int TheValue { get; set; }
}
[Test]
public void IntShouldMatch()
{
HasInt actual = new HasInt { TheValue = 5 };
HasInt expected = new HasInt { TheValue = 5 };
var constraint = Constraints.PropertyCompareConstraint(expected);
Assert.That(constraint.Matches(actual), Is.True);
}
[Test]
public void IntShouldNotMatch()
{
HasInt actual = new HasInt { TheValue = 5 };
HasInt expected = new HasInt { TheValue = 4 };
var constraint = Constraints.PropertyCompareConstraint(expected);
Assert.That(constraint.Matches(actual), Is.False);
}
[Test]
public void IntShouldIgnore()
{
HasInt actual = new HasInt { TheValue = 5 };
HasInt expected = new HasInt { TheValue = 4 };
var constraint = Constraints.PropertyCompareConstraint(expected).IgnoreProperty(x=>x.TheValue);
Assert.That(constraint.Matches(actual), Is.True);
}
[Test]
public void AssetShouldMatch()
{
UUID uuid1 = UUID.Random();
AssetBase actual = new AssetBase(uuid1, "asset one");
AssetBase expected = new AssetBase(uuid1, "asset one");
var constraint = Constraints.PropertyCompareConstraint(expected);
Assert.That(constraint.Matches(actual), Is.True);
}
[Test]
public void AssetShouldNotMatch()
{
UUID uuid1 = UUID.Random();
AssetBase actual = new AssetBase(uuid1, "asset one");
AssetBase expected = new AssetBase(UUID.Random(), "asset one");
var constraint = Constraints.PropertyCompareConstraint(expected);
Assert.That(constraint.Matches(actual), Is.False);
}
[Test]
public void AssetShouldNotMatch2()
{
UUID uuid1 = UUID.Random();
AssetBase actual = new AssetBase(uuid1, "asset one");
AssetBase expected = new AssetBase(uuid1, "asset two");
var constraint = Constraints.PropertyCompareConstraint(expected);
Assert.That(constraint.Matches(actual), Is.False);
}
[Test]
public void TestColors()
{
Color actual = Color.Red;
Color expected = Color.FromArgb(actual.A, actual.R, actual.G, actual.B);
var constraint = Constraints.PropertyCompareConstraint(expected);
Assert.That(constraint.Matches(actual), Is.True);
}
}
}

View File

@ -0,0 +1,102 @@
using System;
using System.Collections;
using System.Reflection;
using System.Text;
using NUnit.Framework;
using OpenMetaverse;
using OpenSim.Framework;
namespace OpenSim.Data.Tests
{
public static class ScrambleForTesting
{
private static readonly Random random = new Random();
public static void Scramble(object obj)
{
PropertyInfo[] properties = obj.GetType().GetProperties();
foreach (var property in properties)
{
//Skip indexers of classes. We will assume that everything that has an indexer
// is also IEnumberable. May not always be true, but should be true normally.
if(property.GetIndexParameters().Length > 0)
continue;
RandomizeProperty(obj, property, null);
}
//Now if it implments IEnumberable, it's probably some kind of list, so we should randomize
// everything inside of it.
IEnumerable enumerable = obj as IEnumerable;
if(enumerable != null)
{
foreach (object value in enumerable)
{
Scramble(value);
}
}
}
private static void RandomizeProperty(object obj, PropertyInfo property, object[] index)
{
Type t = property.PropertyType;
if (!property.CanWrite)
return;
object value = property.GetValue(obj, index);
if (value == null)
return;
if (t == typeof (string))
property.SetValue(obj, RandomName(), index);
else if (t == typeof (UUID))
property.SetValue(obj, UUID.Random(), index);
else if (t == typeof (sbyte))
property.SetValue(obj, (sbyte)random.Next(sbyte.MinValue, sbyte.MaxValue), index);
else if (t == typeof (short))
property.SetValue(obj, (short)random.Next(short.MinValue, short.MaxValue), index);
else if (t == typeof (int))
property.SetValue(obj, random.Next(), index);
else if (t == typeof (long))
property.SetValue(obj, random.Next() * int.MaxValue, index);
else if (t == typeof (byte))
property.SetValue(obj, (byte)random.Next(byte.MinValue, byte.MaxValue), index);
else if (t == typeof (ushort))
property.SetValue(obj, (ushort)random.Next(ushort.MinValue, ushort.MaxValue), index);
else if (t == typeof (uint))
property.SetValue(obj, Convert.ToUInt32(random.Next()), index);
else if (t == typeof (ulong))
property.SetValue(obj, Convert.ToUInt64(random.Next()) * Convert.ToUInt64(UInt32.MaxValue), index);
else if (t == typeof (bool))
property.SetValue(obj, true, index);
else if (t == typeof (byte[]))
{
byte[] bytes = new byte[30];
random.NextBytes(bytes);
property.SetValue(obj, bytes, index);
}
else
Scramble(value);
}
private static string RandomName()
{
StringBuilder name = new StringBuilder();
int size = random.Next(5, 12);
for (int i = 0; i < size; i++)
{
char ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));
name.Append(ch);
}
return name.ToString();
}
}
[TestFixture]
public class ScrableForTestingTest
{
[Test]
public void TestScramble()
{
AssetBase actual = new AssetBase(UUID.Random(), "asset one");
ScrambleForTesting.Scramble(actual);
}
}
}

View File

@ -46,6 +46,11 @@ namespace OpenSim.Framework
private Dictionary<string, Resource> Resources = new Dictionary<string, Resource>(); private Dictionary<string, Resource> Resources = new Dictionary<string, Resource>();
private Dictionary<string, Role> Roles = new Dictionary<string, Role>(); private Dictionary<string, Role> Roles = new Dictionary<string, Role>();
/// <summary>
/// Adds a new role
/// </summary>
/// <param name="role"></param>
/// <returns></returns>
public ACL AddRole(Role role) public ACL AddRole(Role role)
{ {
if (Roles.ContainsKey(role.Name)) if (Roles.ContainsKey(role.Name))
@ -56,6 +61,11 @@ namespace OpenSim.Framework
return this; return this;
} }
/// <summary>
/// Adds a new resource
/// </summary>
/// <param name="resource"></param>
/// <returns></returns>
public ACL AddResource(Resource resource) public ACL AddResource(Resource resource)
{ {
Resources.Add(resource.Name, resource); Resources.Add(resource.Name, resource);
@ -63,6 +73,12 @@ namespace OpenSim.Framework
return this; return this;
} }
/// <summary>
/// Permision for user/roll on a resource
/// </summary>
/// <param name="role"></param>
/// <param name="resource"></param>
/// <returns></returns>
public Permission HasPermission(string role, string resource) public Permission HasPermission(string role, string resource)
{ {
if (!Roles.ContainsKey(role)) if (!Roles.ContainsKey(role))
@ -234,6 +250,9 @@ namespace OpenSim.Framework
#region Tests #region Tests
/// <summary>
/// ACL Test class
/// </summary>
internal class ACLTester internal class ACLTester
{ {
public ACLTester() public ACLTester()

View File

@ -32,26 +32,83 @@ using OpenMetaverse.StructuredData;
namespace OpenSim.Framework namespace OpenSim.Framework
{ {
/// <summary>
/// Circuit data for an agent. Connection information shared between
/// regions that accept UDP connections from a client
/// </summary>
public class AgentCircuitData public class AgentCircuitData
{ {
/// <summary>
/// Avatar Unique Agent Identifier
/// </summary>
public UUID AgentID; public UUID AgentID;
/// <summary>
/// Avatar's Appearance
/// </summary>
public AvatarAppearance Appearance; public AvatarAppearance Appearance;
/// <summary>
/// Agent's root inventory folder
/// </summary>
public UUID BaseFolder; public UUID BaseFolder;
/// <summary>
/// Base Caps path for user
/// </summary>
public string CapsPath = String.Empty; public string CapsPath = String.Empty;
/// <summary>
/// Seed caps for neighbor regions that the user can see into
/// </summary>
public Dictionary<ulong, string> ChildrenCapSeeds; public Dictionary<ulong, string> ChildrenCapSeeds;
/// <summary>
/// Root agent, or Child agent
/// </summary>
public bool child; public bool child;
/// <summary>
/// Number given to the client when they log-in that they provide
/// as credentials to the UDP server
/// </summary>
public uint circuitcode; public uint circuitcode;
/// <summary>
/// Agent's account first name
/// </summary>
public string firstname; public string firstname;
public UUID InventoryFolder; public UUID InventoryFolder;
/// <summary>
/// Agent's account last name
/// </summary>
public string lastname; public string lastname;
/// <summary>
/// Random Unique GUID for this session. Client gets this at login and it's
/// only supposed to be disclosed over secure channels
/// </summary>
public UUID SecureSessionID; public UUID SecureSessionID;
/// <summary>
/// Non secure Session ID
/// </summary>
public UUID SessionID; public UUID SessionID;
/// <summary>
/// Position the Agent's Avatar starts in the region
/// </summary>
public Vector3 startpos; public Vector3 startpos;
public AgentCircuitData() public AgentCircuitData()
{ {
} }
/// <summary>
/// Create AgentCircuitData from a Serializable AgentCircuitData
/// </summary>
/// <param name="cAgent"></param>
public AgentCircuitData(sAgentCircuitData cAgent) public AgentCircuitData(sAgentCircuitData cAgent)
{ {
AgentID = new UUID(cAgent.AgentID); AgentID = new UUID(cAgent.AgentID);
@ -68,6 +125,10 @@ namespace OpenSim.Framework
ChildrenCapSeeds = cAgent.ChildrenCapSeeds; ChildrenCapSeeds = cAgent.ChildrenCapSeeds;
} }
/// <summary>
/// Pack AgentCircuitData into an OSDMap for transmission over LLSD XML or LLSD json
/// </summary>
/// <returns>map of the agent circuit data</returns>
public OSDMap PackAgentCircuitData() public OSDMap PackAgentCircuitData()
{ {
OSDMap args = new OSDMap(); OSDMap args = new OSDMap();
@ -98,6 +159,10 @@ namespace OpenSim.Framework
return args; return args;
} }
/// <summary>
/// Unpack agent circuit data map into an AgentCiruitData object
/// </summary>
/// <param name="args"></param>
public void UnpackAgentCircuitData(OSDMap args) public void UnpackAgentCircuitData(OSDMap args)
{ {
if (args["agent_id"] != null) if (args["agent_id"] != null)
@ -150,6 +215,9 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// Serializable Agent Circuit Data
/// </summary>
[Serializable] [Serializable]
public class sAgentCircuitData public class sAgentCircuitData
{ {

View File

@ -30,18 +30,52 @@ using OpenMetaverse;
namespace OpenSim.Framework namespace OpenSim.Framework
{ {
/// <summary>
/// Client provided parameters for avatar movement
/// </summary>
public class AgentUpdateArgs : EventArgs public class AgentUpdateArgs : EventArgs
{ {
/// <summary>
/// Agent's unique ID
/// </summary>
public UUID AgentID; public UUID AgentID;
/// <summary>
/// Rotation of the avatar's body
/// </summary>
public Quaternion BodyRotation; public Quaternion BodyRotation;
/// <summary>
/// AT portion of the camera matrix
/// </summary>
public Vector3 CameraAtAxis; public Vector3 CameraAtAxis;
/// <summary>
/// Position of the camera in the Scene
/// </summary>
public Vector3 CameraCenter; public Vector3 CameraCenter;
public Vector3 CameraLeftAxis; public Vector3 CameraLeftAxis;
public Vector3 CameraUpAxis; public Vector3 CameraUpAxis;
/// <summary>
/// Bitflag field for agent movement. Fly, forward, backward, turn left, turn right, go up, go down, Straffe, etc.
/// </summary>
public uint ControlFlags; public uint ControlFlags;
/// <summary>
/// Agent's client Draw distance setting
/// </summary>
public float Far; public float Far;
public byte Flags; public byte Flags;
/// <summary>
/// Rotation of the avatar's head
/// </summary>
public Quaternion HeadRotation; public Quaternion HeadRotation;
/// <summary>
/// Session Id
/// </summary>
public UUID SessionID; public UUID SessionID;
public byte State; public byte State;
} }

View File

@ -31,10 +31,17 @@ using OpenMetaverse.StructuredData;
namespace OpenSim.Framework namespace OpenSim.Framework
{ {
/// <summary>
/// Information about an Animation
/// </summary>
[Serializable] [Serializable]
public class Animation public class Animation
{ {
private UUID animID; private UUID animID;
/// <summary>
/// ID of Animation
/// </summary>
public UUID AnimID public UUID AnimID
{ {
get { return animID; } get { return animID; }
@ -49,6 +56,10 @@ namespace OpenSim.Framework
} }
private UUID objectID; private UUID objectID;
/// <summary>
/// Unique ID of object that is being animated
/// </summary>
public UUID ObjectID public UUID ObjectID
{ {
get { return objectID; } get { return objectID; }
@ -59,6 +70,12 @@ namespace OpenSim.Framework
{ {
} }
/// <summary>
/// Creates an Animation based on the data
/// </summary>
/// <param name="animID">UUID ID of animation</param>
/// <param name="sequenceNum"></param>
/// <param name="objectID">ID of object to be animated</param>
public Animation(UUID animID, int sequenceNum, UUID objectID) public Animation(UUID animID, int sequenceNum, UUID objectID)
{ {
this.animID = animID; this.animID = animID;
@ -66,11 +83,20 @@ namespace OpenSim.Framework
this.objectID = objectID; this.objectID = objectID;
} }
/// <summary>
/// Animation from OSDMap from LLSD XML or LLSD json
/// </summary>
/// <param name="args"></param>
public Animation(OSDMap args) public Animation(OSDMap args)
{ {
UnpackUpdateMessage(args); UnpackUpdateMessage(args);
} }
/// <summary>
/// Pack this object up as an OSDMap for transferring via LLSD XML or LLSD json
/// </summary>
/// <returns></returns>
public OSDMap PackUpdateMessage() public OSDMap PackUpdateMessage()
{ {
OSDMap anim = new OSDMap(); OSDMap anim = new OSDMap();
@ -80,6 +106,10 @@ namespace OpenSim.Framework
return anim; return anim;
} }
/// <summary>
/// Fill object with data from OSDMap
/// </summary>
/// <param name="args"></param>
public void UnpackUpdateMessage(OSDMap args) public void UnpackUpdateMessage(OSDMap args)
{ {
if (args["animation"] != null) if (args["animation"] != null)

View File

@ -31,10 +31,20 @@ using OpenMetaverse;
namespace OpenSim.Framework namespace OpenSim.Framework
{ {
/// <summary>
/// Asset class. All Assets are reference by this class or a class derived from this class
/// </summary>
[Serializable] [Serializable]
public class AssetBase public class AssetBase
{ {
/// <summary>
/// Data of the Asset
/// </summary>
private byte[] m_data; private byte[] m_data;
/// <summary>
/// Meta Data of the Asset
/// </summary>
private AssetMetadata m_metadata; private AssetMetadata m_metadata;
public AssetBase() public AssetBase()
@ -71,6 +81,9 @@ namespace OpenSim.Framework
} }
/// <summary>
/// Checks if this asset is a binary or text asset
/// </summary>
public bool IsBinaryAsset public bool IsBinaryAsset
{ {
get get
@ -102,12 +115,17 @@ namespace OpenSim.Framework
set { m_data = value; } set { m_data = value; }
} }
/// <summary>
/// Asset UUID
/// </summary>
public UUID FullID public UUID FullID
{ {
get { return m_metadata.FullID; } get { return m_metadata.FullID; }
set { m_metadata.FullID = value; } set { m_metadata.FullID = value; }
} }
/// <summary>
/// Asset MetaData ID (transferring from UUID to string ID)
/// </summary>
public string ID public string ID
{ {
get { return m_metadata.ID; } get { return m_metadata.ID; }
@ -126,18 +144,27 @@ namespace OpenSim.Framework
set { m_metadata.Description = value; } set { m_metadata.Description = value; }
} }
/// <summary>
/// (sbyte) AssetType enum
/// </summary>
public sbyte Type public sbyte Type
{ {
get { return m_metadata.Type; } get { return m_metadata.Type; }
set { m_metadata.Type = value; } set { m_metadata.Type = value; }
} }
/// <summary>
/// Is this a region only asset, or does this exist on the asset server also
/// </summary>
public bool Local public bool Local
{ {
get { return m_metadata.Local; } get { return m_metadata.Local; }
set { m_metadata.Local = value; } set { m_metadata.Local = value; }
} }
/// <summary>
/// Is this asset going to be saved to the asset database?
/// </summary>
public bool Temporary public bool Temporary
{ {
get { return m_metadata.Temporary; } get { return m_metadata.Temporary; }

View File

@ -28,14 +28,13 @@
using System; using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Runtime.Serialization;
using System.Security.Permissions;
using OpenMetaverse; using OpenMetaverse;
using log4net;
using System.Reflection;
namespace OpenSim.Framework namespace OpenSim.Framework
{ {
/// <summary>
/// Contains the Avatar's Appearance and methods to manipulate the appearance.
/// </summary>
public class AvatarAppearance public class AvatarAppearance
{ {
//private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); //private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

View File

@ -29,10 +29,24 @@ using OpenMetaverse;
namespace OpenSim.Framework namespace OpenSim.Framework
{ {
/// <summary>
/// Avatar returned by the Avatar Picker request
/// </summary>
public class AvatarPickerAvatar public class AvatarPickerAvatar
{ {
/// <summary>
/// Avatar's Unique ID
/// </summary>
public UUID AvatarID; public UUID AvatarID;
/// <summary>
/// Avatar's Account first name
/// </summary>
public string firstName; public string firstName;
/// <summary>
/// Avatar's Account last name
/// </summary>
public string lastName; public string lastName;
} }
} }

View File

@ -30,9 +30,19 @@ using OpenMetaverse;
namespace OpenSim.Framework namespace OpenSim.Framework
{ {
/// <summary>
/// Args to return to a client that queries picker data
/// </summary>
public class AvatarPickerReplyAgentDataArgs : EventArgs public class AvatarPickerReplyAgentDataArgs : EventArgs
{ {
/// <summary>
/// Unique Agent ID
/// </summary>
public UUID AgentID; public UUID AgentID;
/// <summary>
/// ID of query user submitted
/// </summary>
public UUID QueryID; public UUID QueryID;
} }
} }

View File

@ -45,6 +45,9 @@ namespace OpenSim.Framework
get { return m_cultureInfo; } get { return m_cultureInfo; }
} }
/// <summary>
/// Set Culture to en-US to make string processing of numbers simpler.
/// </summary>
public static void SetCurrentCulture() public static void SetCurrentCulture()
{ {
Thread.CurrentThread.CurrentCulture = m_cultureInfo; Thread.CurrentThread.CurrentCulture = m_cultureInfo;

View File

@ -0,0 +1,37 @@
/*
* 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.Collections;
using OpenMetaverse;
namespace OpenSim.Framework
{
public interface IProfileModule
{
Hashtable GetProfileData(UUID userID);
}
}

View File

@ -68,5 +68,24 @@ namespace OpenSim.Framework
get { return _version; } get { return _version; }
set { _version = value; } set { _version = value; }
} }
public InventoryFolderBase()
{
}
public InventoryFolderBase(UUID id)
{
ID = id;
}
public InventoryFolderBase(UUID id, string name, UUID owner, short type, UUID parent, ushort version)
{
ID = id;
Name = name;
Owner = owner;
Type = type;
ParentID = parent;
Version = version;
}
} }
} }

View File

@ -31,6 +31,9 @@ using OpenMetaverse;
namespace OpenSim.Framework namespace OpenSim.Framework
{ {
/// <summary>
/// Details of a Parcel of land
/// </summary>
public class LandData public class LandData
{ {
private Vector3 _AABBMax = new Vector3(); private Vector3 _AABBMax = new Vector3();
@ -80,6 +83,9 @@ namespace OpenSim.Framework
private int _dwell = 0; private int _dwell = 0;
private int _otherCleanTime = 0; private int _otherCleanTime = 0;
/// <summary>
/// Upper corner of the AABB for the parcel
/// </summary>
public Vector3 AABBMax { public Vector3 AABBMax {
get { get {
return _AABBMax; return _AABBMax;
@ -88,7 +94,9 @@ namespace OpenSim.Framework
_AABBMax = value; _AABBMax = value;
} }
} }
/// <summary>
/// Lower corner of the AABB for the parcel
/// </summary>
public Vector3 AABBMin { public Vector3 AABBMin {
get { get {
return _AABBMin; return _AABBMin;
@ -98,6 +106,9 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// Area in meters^2 the parcel contains
/// </summary>
public int Area { public int Area {
get { get {
return _area; return _area;
@ -107,6 +118,9 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// ID of auction (3rd Party Integration) when parcel is being auctioned
/// </summary>
public uint AuctionID { public uint AuctionID {
get { get {
return _auctionID; return _auctionID;
@ -116,6 +130,9 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// UUID of authorized buyer of parcel. This is UUID.Zero if anyone can buy it.
/// </summary>
public UUID AuthBuyerID { public UUID AuthBuyerID {
get { get {
return _authBuyerID; return _authBuyerID;
@ -125,6 +142,9 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// Category of parcel. Used for classifying the parcel in classified listings
/// </summary>
public ParcelCategory Category { public ParcelCategory Category {
get { get {
return _category; return _category;
@ -134,6 +154,9 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// Date that the current owner purchased or claimed the parcel
/// </summary>
public int ClaimDate { public int ClaimDate {
get { get {
return _claimDate; return _claimDate;
@ -143,6 +166,9 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// The last price that the parcel was sold at
/// </summary>
public int ClaimPrice { public int ClaimPrice {
get { get {
return _claimPrice; return _claimPrice;
@ -152,6 +178,9 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// Global ID for the parcel. (3rd Party Integration)
/// </summary>
public UUID GlobalID { public UUID GlobalID {
get { get {
return _globalID; return _globalID;
@ -161,6 +190,9 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// Unique ID of the Group that owns
/// </summary>
public UUID GroupID { public UUID GroupID {
get { get {
return _groupID; return _groupID;
@ -170,6 +202,9 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// Number of SceneObjectPart that are owned by a Group
/// </summary>
public int GroupPrims { public int GroupPrims {
get { get {
return _groupPrims; return _groupPrims;
@ -179,6 +214,9 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// Returns true if the Land Parcel is owned by a group
/// </summary>
public bool IsGroupOwned { public bool IsGroupOwned {
get { get {
return _isGroupOwned; return _isGroupOwned;
@ -188,6 +226,9 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// jp2 data for the image representative of the parcel in the parcel dialog
/// </summary>
public byte[] Bitmap { public byte[] Bitmap {
get { get {
return _bitmap; return _bitmap;
@ -197,6 +238,9 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// Parcel Description
/// </summary>
public string Description { public string Description {
get { get {
return _description; return _description;
@ -206,6 +250,9 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// Parcel settings. Access flags, Fly, NoPush, Voice, Scripts allowed, etc. ParcelFlags
/// </summary>
public uint Flags { public uint Flags {
get { get {
return _flags; return _flags;
@ -215,6 +262,10 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// Determines if people are able to teleport where they please on the parcel or if they
/// get constrainted to a specific point on teleport within the parcel
/// </summary>
public byte LandingType { public byte LandingType {
get { get {
return _landingType; return _landingType;
@ -224,6 +275,9 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// Parcel Name
/// </summary>
public string Name { public string Name {
get { get {
return _name; return _name;
@ -233,6 +287,9 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// Status of Parcel, Leased, Abandoned, For Sale
/// </summary>
public ParcelStatus Status { public ParcelStatus Status {
get { get {
return _status; return _status;
@ -242,6 +299,9 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// Internal ID of the parcel. Sometimes the client will try to use this value
/// </summary>
public int LocalID { public int LocalID {
get { get {
return _localID; return _localID;
@ -251,6 +311,9 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// Determines if we scale the media based on the surface it's on
/// </summary>
public byte MediaAutoScale { public byte MediaAutoScale {
get { get {
return _mediaAutoScale; return _mediaAutoScale;
@ -260,6 +323,9 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// Texture Guid to replace with the output of the media stream
/// </summary>
public UUID MediaID { public UUID MediaID {
get { get {
return _mediaID; return _mediaID;
@ -269,6 +335,9 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// URL to the media file to display
/// </summary>
public string MediaURL { public string MediaURL {
get { get {
return _mediaURL; return _mediaURL;
@ -278,6 +347,9 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// URL to the shoutcast music stream to play on the parcel
/// </summary>
public string MusicURL { public string MusicURL {
get { get {
return _musicURL; return _musicURL;
@ -287,6 +359,10 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// Number of SceneObjectPart that are owned by users who do not own the parcel
/// and don't have the 'group. These are elegable for AutoReturn collection
/// </summary>
public int OtherPrims { public int OtherPrims {
get { get {
return _otherPrims; return _otherPrims;
@ -296,6 +372,10 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// Owner Avatar or Group of the parcel. Naturally, all land masses must be
/// owned by someone
/// </summary>
public UUID OwnerID { public UUID OwnerID {
get { get {
return _ownerID; return _ownerID;
@ -305,6 +385,9 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// Number of SceneObjectPart that are owned by the owner of the parcel
/// </summary>
public int OwnerPrims { public int OwnerPrims {
get { get {
return _ownerPrims; return _ownerPrims;
@ -314,6 +397,9 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// List of access data for the parcel. User data, some bitflags, and a time
/// </summary>
public List<ParcelManager.ParcelAccessEntry> ParcelAccessList { public List<ParcelManager.ParcelAccessEntry> ParcelAccessList {
get { get {
return _parcelAccessList; return _parcelAccessList;
@ -323,6 +409,9 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// How long in hours a Pass to the parcel is given
/// </summary>
public float PassHours { public float PassHours {
get { get {
return _passHours; return _passHours;
@ -332,6 +421,9 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// Price to purchase a Pass to a restricted parcel
/// </summary>
public int PassPrice { public int PassPrice {
get { get {
return _passPrice; return _passPrice;
@ -341,6 +433,9 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// When the parcel is being sold, this is the price to purchase the parcel
/// </summary>
public int SalePrice { public int SalePrice {
get { get {
return _salePrice; return _salePrice;
@ -350,6 +445,9 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// Number of SceneObjectPart that are currently selected by avatar
/// </summary>
public int SelectedPrims { public int SelectedPrims {
get { get {
return _selectedPrims; return _selectedPrims;
@ -359,6 +457,9 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// Number of meters^2 in the Simulator
/// </summary>
public int SimwideArea { public int SimwideArea {
get { get {
return _simwideArea; return _simwideArea;
@ -368,6 +469,9 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// Number of SceneObjectPart in the Simulator
/// </summary>
public int SimwidePrims { public int SimwidePrims {
get { get {
return _simwidePrims; return _simwidePrims;
@ -377,6 +481,9 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// ID of the snapshot used in the client parcel dialog of the parcel
/// </summary>
public UUID SnapshotID { public UUID SnapshotID {
get { get {
return _snapshotID; return _snapshotID;
@ -386,6 +493,10 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// When teleporting is restricted to a certain point, this is the location
/// that the user will be redirected to
/// </summary>
public Vector3 UserLocation { public Vector3 UserLocation {
get { get {
return _userLocation; return _userLocation;
@ -395,6 +506,10 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// When teleporting is restricted to a certain point, this is the rotation
/// that the user will be positioned
/// </summary>
public Vector3 UserLookAt { public Vector3 UserLookAt {
get { get {
return _userLookAt; return _userLookAt;
@ -404,6 +519,9 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// Depreciated idea. Number of visitors ~= free money
/// </summary>
public int Dwell { public int Dwell {
get { get {
return _dwell; return _dwell;
@ -413,6 +531,10 @@ namespace OpenSim.Framework
} }
} }
/// <summary>
/// Number of minutes to return SceneObjectGroup that are owned by someone who doesn't own
/// the parcel and isn't set to the same 'group' as the parcel.
/// </summary>
public int OtherCleanTime { public int OtherCleanTime {
get { get {
return _otherCleanTime; return _otherCleanTime;
@ -422,11 +544,16 @@ namespace OpenSim.Framework
} }
} }
public LandData() public LandData()
{ {
_globalID = UUID.Random(); _globalID = UUID.Random();
} }
/// <summary>
/// Make a new copy of the land data
/// </summary>
/// <returns></returns>
public LandData Copy() public LandData Copy()
{ {
LandData landData = new LandData(); LandData landData = new LandData();

View File

@ -443,7 +443,7 @@ namespace OpenSim.Framework.Servers
string inputLine; string inputLine;
int strcmp; int strcmp;
if (File.Exists( gitCommitFileName)) if (File.Exists(gitCommitFileName))
{ {
StreamReader CommitFile = File.OpenText(gitCommitFileName); StreamReader CommitFile = File.OpenText(gitCommitFileName);
buildVersion = Environment.NewLine + "git# " + CommitFile.ReadLine(); buildVersion = Environment.NewLine + "git# " + CommitFile.ReadLine();

View File

@ -964,8 +964,10 @@ namespace OpenSim.Framework.Servers.HttpServer
} }
} }
response.ContentType = "application/llsd+json"; // response.ContentType = "application/llsd+json";
return Encoding.UTF8.GetBytes(OSDParser.SerializeJsonString(llsdResponse)); // return Encoding.UTF8.GetBytes(OSDParser.SerializeJsonString(llsdResponse));
response.ContentType = "application/llsd+xml";
return OSDParser.SerializeLLSDXmlBytes(llsdResponse);
} }
/// <summary> /// <summary>

View File

@ -0,0 +1,339 @@
/*
* 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.Collections.Generic;
using OpenMetaverse;
using OpenMetaverse.StructuredData;
using NUnit.Framework;
namespace OpenSim.Framework.Tests
{
[TestFixture]
public class AgentCircuitDataTest
{
private UUID AgentId;
private AvatarAppearance AvAppearance;
private byte[] VisualParams;
private UUID BaseFolder;
private string CapsPath;
private Dictionary<ulong, string> ChildrenCapsPaths;
private uint circuitcode = 0949030;
private string firstname;
private string lastname;
private UUID SecureSessionId;
private UUID SessionId;
private Vector3 StartPos;
[SetUp]
public void setup()
{
AgentId = UUID.Random();
BaseFolder = UUID.Random();
CapsPath = "http://www.opensimulator.org/Caps/Foo";
ChildrenCapsPaths = new Dictionary<ulong, string>();
ChildrenCapsPaths.Add(ulong.MaxValue, "http://www.opensimulator.org/Caps/Foo2");
firstname = "CoolAvatarTest";
lastname = "test";
StartPos = new Vector3(5,23,125);
SecureSessionId = UUID.Random();
SessionId = UUID.Random();
AvAppearance = new AvatarAppearance(AgentId);
AvAppearance.SetDefaultWearables();
VisualParams = new byte[218];
AvAppearance.SetDefaultParams(VisualParams);
//body
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_HEIGHT] = 155;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_THICKNESS] = 00;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_BODY_FAT] = 0;
//Torso
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_TORSO_MUSCLES] = 48;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_NECK_THICKNESS] = 43;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_NECK_LENGTH] = 255;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_SHOULDERS] = 94;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_CHEST_MALE_NO_PECS] = 199;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_ARM_LENGTH] = 255;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_HAND_SIZE] = 33;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_TORSO_LENGTH] = 240;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_LOVE_HANDLES] = 0;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_BELLY_SIZE] = 0;
// legs
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_LEG_MUSCLES] = 82;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_LEG_LENGTH] = 255;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_HIP_WIDTH] = 84;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_HIP_LENGTH] = 166;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_BUTT_SIZE] = 64;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_SADDLEBAGS] = 89;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_BOWED_LEGS] = 127;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_FOOT_SIZE] = 45;
// head
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_HEAD_SIZE] = 255;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_SQUASH_STRETCH_HEAD] = 0; // head stretch
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_HEAD_SHAPE] = 155;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_EGG_HEAD] = 127;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_POINTY_EARS] = 255;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_HEAD_LENGTH] = 45;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_FACE_SHEAR] = 127;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_FOREHEAD_ANGLE] = 104;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_BIG_BROW] = 94;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_PUFFY_UPPER_CHEEKS] = 0; // upper cheeks
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_DOUBLE_CHIN] = 122; // lower cheeks
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_HIGH_CHEEK_BONES] = 130;
// eyes
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_EYE_SIZE] = 105;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_WIDE_EYES] = 135;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_EYE_SPACING] = 184;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_EYELID_CORNER_UP] = 230;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_EYELID_INNER_CORNER_UP] = 120;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_EYE_DEPTH] = 158;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_UPPER_EYELID_FOLD] = 69;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_BAGGY_EYES] = 38;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_EYELASHES_LONG] = 127;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_POP_EYE] = 127;
VisualParams[(int)AvatarAppearance.VPElement.EYES_EYE_COLOR] = 25;
VisualParams[(int)AvatarAppearance.VPElement.EYES_EYE_LIGHTNESS] = 127;
// ears
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_BIG_EARS] = 255;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_EARS_OUT] = 127;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_ATTACHED_EARLOBES] = 127;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_POINTY_EARS] = 255;
// nose
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_NOSE_BIG_OUT] = 79;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_WIDE_NOSE] = 35;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_BROAD_NOSTRILS] = 86;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_LOW_SEPTUM_NOSE] = 112; // nostril division
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_BULBOUS_NOSE] = 25;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_NOBLE_NOSE_BRIDGE] = 25; // upper bridge
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_LOWER_BRIDGE_NOSE] = 25; // lower bridge
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_WIDE_NOSE_BRIDGE] = 25;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_UPTURNED_NOSE_TIP] = 107;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_BULBOUS_NOSE_TIP] = 25;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_CROOKED_NOSE] = 127;
// Mouth
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_LIP_WIDTH] = 122;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_TALL_LIPS] = 10; // lip fullness
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_LIP_THICKNESS] = 112;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_LIP_RATIO] = 137;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_MOUTH_HEIGHT] = 176;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_MOUTH_CORNER] = 140; // Sad --> happy
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_LIP_CLEFT_DEEP] = 84;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_WIDE_LIP_CLEFT] = 84;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_SHIFT_MOUTH] = 127;
// chin
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_WEAK_CHIN] = 119;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_SQUARE_JAW] = 5;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_DEEP_CHIN] = 132;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_JAW_ANGLE] = 153;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_JAW_JUT] = 100;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_JOWLS] = 38;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_CLEFT_CHIN] = 89;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_CLEFT_CHIN_UPPER] = 89;
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_DOUBLE_CHIN] = 0;
// hair color
VisualParams[(int)AvatarAppearance.VPElement.HAIR_WHITE_HAIR] = 0;
VisualParams[(int)AvatarAppearance.VPElement.HAIR_RAINBOW_COLOR_39] = 0;
VisualParams[(int)AvatarAppearance.VPElement.HAIR_BLONDE_HAIR] = 24;
VisualParams[(int)AvatarAppearance.VPElement.HAIR_RED_HAIR] = 0;
// hair style
VisualParams[(int)AvatarAppearance.VPElement.HAIR_HAIR_VOLUME] = 160;
VisualParams[(int)AvatarAppearance.VPElement.HAIR_HAIR_FRONT] = 153;
VisualParams[(int)AvatarAppearance.VPElement.HAIR_HAIR_SIDES] = 153;
VisualParams[(int)AvatarAppearance.VPElement.HAIR_HAIR_BACK] = 170;
VisualParams[(int)AvatarAppearance.VPElement.HAIR_HAIR_BIG_FRONT] = 0;
VisualParams[(int)AvatarAppearance.VPElement.HAIR_HAIR_BIG_TOP] = 117;
VisualParams[(int)AvatarAppearance.VPElement.HAIR_HAIR_BIG_BACK] = 170;
VisualParams[(int)AvatarAppearance.VPElement.HAIR_FRONT_FRINGE] = 0;
VisualParams[(int)AvatarAppearance.VPElement.HAIR_SIDE_FRINGE] = 142;
VisualParams[(int)AvatarAppearance.VPElement.HAIR_BACK_FRINGE] = 0;
VisualParams[(int)AvatarAppearance.VPElement.HAIR_HAIR_SIDES_FULL] = 146;
VisualParams[(int)AvatarAppearance.VPElement.HAIR_HAIR_SWEEP] = 0;
VisualParams[(int)AvatarAppearance.VPElement.HAIR_HAIR_SHEAR_FRONT] = 0;
VisualParams[(int)AvatarAppearance.VPElement.HAIR_HAIR_SHEAR_BACK] = 0;
VisualParams[(int)AvatarAppearance.VPElement.HAIR_HAIR_TAPER_FRONT] = 0;
VisualParams[(int)AvatarAppearance.VPElement.HAIR_HAIR_TAPER_BACK] = 0;
VisualParams[(int)AvatarAppearance.VPElement.HAIR_HAIR_RUMPLED] = 0;
VisualParams[(int)AvatarAppearance.VPElement.HAIR_PIGTAILS] = 0;
VisualParams[(int)AvatarAppearance.VPElement.HAIR_PONYTAIL] = 0;
VisualParams[(int)AvatarAppearance.VPElement.HAIR_HAIR_SPIKED] = 0;
VisualParams[(int)AvatarAppearance.VPElement.HAIR_HAIR_TILT] = 0;
VisualParams[(int)AvatarAppearance.VPElement.HAIR_HAIR_PART_MIDDLE] = 0;
VisualParams[(int)AvatarAppearance.VPElement.HAIR_HAIR_PART_RIGHT] = 0;
VisualParams[(int)AvatarAppearance.VPElement.HAIR_HAIR_PART_LEFT] = 0;
VisualParams[(int)AvatarAppearance.VPElement.HAIR_BANGS_PART_MIDDLE] = 155;
//Eyebrows
VisualParams[(int)AvatarAppearance.VPElement.HAIR_EYEBROW_SIZE] = 20;
VisualParams[(int)AvatarAppearance.VPElement.HAIR_EYEBROW_DENSITY] = 140;
VisualParams[(int)AvatarAppearance.VPElement.HAIR_LOWER_EYEBROWS] = 200; // eyebrow height
VisualParams[(int)AvatarAppearance.VPElement.HAIR_ARCED_EYEBROWS] = 124;
VisualParams[(int)AvatarAppearance.VPElement.HAIR_POINTY_EYEBROWS] = 65;
//Facial hair
VisualParams[(int)AvatarAppearance.VPElement.HAIR_HAIR_THICKNESS] = 65;
VisualParams[(int)AvatarAppearance.VPElement.HAIR_SIDEBURNS] = 235;
VisualParams[(int)AvatarAppearance.VPElement.HAIR_MOUSTACHE] = 75;
VisualParams[(int)AvatarAppearance.VPElement.HAIR_CHIN_CURTAINS] = 140;
VisualParams[(int)AvatarAppearance.VPElement.HAIR_SOULPATCH] = 0;
AvAppearance.VisualParams = VisualParams;
List<byte> wearbyte = new List<byte>();
for (int i = 0; i < VisualParams.Length; i++)
{
wearbyte.Add(VisualParams[i]);
}
AvAppearance.SetAppearance(AvAppearance.Texture.GetBytes(), wearbyte);
}
/// <summary>
/// Test to ensure that the serialization format is the same and the underlying types don't change without notice
/// oldSerialization is just a json serialization of the OSDMap packed for the AgentCircuitData.
/// The idea is that if the current json serializer cannot parse the old serialization, then the underlying types
/// have changed and are incompatible.
/// </summary>
[Test]
public void HistoricalAgentCircuitDataOSDConversion()
{
string oldSerialization = "{\"agent_id\":\"522675bd-8214-40c1-b3ca-9c7f7fd170be\",\"base_folder\":\"c40b5f5f-476f-496b-bd69-b5a539c434d8\",\"caps_path\":\"http://www.opensimulator.org/Caps/Foo\",\"children_seeds\":[{\"handle\":\"18446744073709551615\",\"seed\":\"http://www.opensimulator.org/Caps/Foo2\"}],\"child\":false,\"circuit_code\":\"949030\",\"first_name\":\"CoolAvatarTest\",\"last_name\":\"test\",\"inventory_folder\":\"c40b5f5f-476f-496b-bd69-b5a539c434d8\",\"secure_session_id\":\"1e608e2b-0ddb-41f6-be0f-926f61cd3e0a\",\"session_id\":\"aa06f798-9d70-4bdb-9bbf-012a02ee2baf\",\"start_pos\":\"<5, 23, 125>\"}";
AgentCircuitData Agent1Data = new AgentCircuitData();
Agent1Data.AgentID = new UUID("522675bd-8214-40c1-b3ca-9c7f7fd170be");
Agent1Data.Appearance = AvAppearance;
Agent1Data.BaseFolder = new UUID("c40b5f5f-476f-496b-bd69-b5a539c434d8");
Agent1Data.CapsPath = CapsPath;
Agent1Data.child = false;
Agent1Data.ChildrenCapSeeds = ChildrenCapsPaths;
Agent1Data.circuitcode = circuitcode;
Agent1Data.firstname = firstname;
Agent1Data.InventoryFolder = new UUID("c40b5f5f-476f-496b-bd69-b5a539c434d8");
Agent1Data.lastname = lastname;
Agent1Data.SecureSessionID = new UUID("1e608e2b-0ddb-41f6-be0f-926f61cd3e0a");
Agent1Data.SessionID = new UUID("aa06f798-9d70-4bdb-9bbf-012a02ee2baf");
Agent1Data.startpos = StartPos;
OSDMap map2 = (OSDMap)OSDParser.DeserializeJson(oldSerialization);
AgentCircuitData Agent2Data = new AgentCircuitData();
Agent2Data.UnpackAgentCircuitData(map2);
Assert.That((Agent1Data.AgentID == Agent2Data.AgentID));
Assert.That((Agent1Data.BaseFolder == Agent2Data.BaseFolder));
Assert.That((Agent1Data.CapsPath == Agent2Data.CapsPath));
Assert.That((Agent1Data.child == Agent2Data.child));
Assert.That((Agent1Data.ChildrenCapSeeds.Count == Agent2Data.ChildrenCapSeeds.Count));
Assert.That((Agent1Data.circuitcode == Agent2Data.circuitcode));
Assert.That((Agent1Data.firstname == Agent2Data.firstname));
Assert.That((Agent1Data.InventoryFolder == Agent2Data.InventoryFolder));
Assert.That((Agent1Data.lastname == Agent2Data.lastname));
Assert.That((Agent1Data.SecureSessionID == Agent2Data.SecureSessionID));
Assert.That((Agent1Data.SessionID == Agent2Data.SessionID));
Assert.That((Agent1Data.startpos == Agent2Data.startpos));
/*
Enable this once VisualParams go in the packing method
for (int i=0;i<208;i++)
Assert.That((Agent1Data.Appearance.VisualParams[i] == Agent2Data.Appearance.VisualParams[i]));
*/
}
/// <summary>
/// Test to ensure that the packing and unpacking methods work.
/// </summary>
[Test]
public void TestAgentCircuitDataOSDConversion()
{
AgentCircuitData Agent1Data = new AgentCircuitData();
Agent1Data.AgentID = AgentId;
Agent1Data.Appearance = AvAppearance;
Agent1Data.BaseFolder = BaseFolder;
Agent1Data.CapsPath = CapsPath;
Agent1Data.child = false;
Agent1Data.ChildrenCapSeeds = ChildrenCapsPaths;
Agent1Data.circuitcode = circuitcode;
Agent1Data.firstname = firstname;
Agent1Data.InventoryFolder = BaseFolder;
Agent1Data.lastname = lastname;
Agent1Data.SecureSessionID = SecureSessionId;
Agent1Data.SessionID = SessionId;
Agent1Data.startpos = StartPos;
OSDMap map = Agent1Data.PackAgentCircuitData();
string str = OSDParser.SerializeJsonString(map);
//System.Console.WriteLine(str);
OSDMap map2 = (OSDMap)OSDParser.DeserializeJson(str);
AgentCircuitData Agent2Data = new AgentCircuitData();
Agent2Data.UnpackAgentCircuitData(map2);
Assert.That((Agent1Data.AgentID == Agent2Data.AgentID));
Assert.That((Agent1Data.BaseFolder == Agent2Data.BaseFolder));
Assert.That((Agent1Data.CapsPath == Agent2Data.CapsPath));
Assert.That((Agent1Data.child == Agent2Data.child));
Assert.That((Agent1Data.ChildrenCapSeeds.Count == Agent2Data.ChildrenCapSeeds.Count));
Assert.That((Agent1Data.circuitcode == Agent2Data.circuitcode));
Assert.That((Agent1Data.firstname == Agent2Data.firstname));
Assert.That((Agent1Data.InventoryFolder == Agent2Data.InventoryFolder));
Assert.That((Agent1Data.lastname == Agent2Data.lastname));
Assert.That((Agent1Data.SecureSessionID == Agent2Data.SecureSessionID));
Assert.That((Agent1Data.SessionID == Agent2Data.SessionID));
Assert.That((Agent1Data.startpos == Agent2Data.startpos));
/*
Enable this once VisualParams go in the packing method
for (int i = 0; i < 208; i++)
Assert.That((Agent1Data.Appearance.VisualParams[i] == Agent2Data.Appearance.VisualParams[i]));
*/
}
}
}

View File

@ -0,0 +1,201 @@
/*
* 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.Collections.Generic;
using OpenMetaverse;
using NUnit.Framework;
using System;
namespace OpenSim.Framework.Tests
{
[TestFixture]
public class AgentCircuitManagerTests
{
private AgentCircuitData m_agentCircuitData1;
private AgentCircuitData m_agentCircuitData2;
private UUID AgentId1;
private UUID AgentId2;
private uint circuitcode1;
private uint circuitcode2;
private UUID SessionId1;
private UUID SessionId2;
private Random rnd = new Random(Environment.TickCount);
[SetUp]
public void setup()
{
AgentId1 = UUID.Random();
AgentId2 = UUID.Random();
circuitcode1 = (uint) rnd.Next((int)uint.MinValue, int.MaxValue);
circuitcode2 = (uint) rnd.Next((int)uint.MinValue, int.MaxValue);
SessionId1 = UUID.Random();
SessionId2 = UUID.Random();
UUID BaseFolder = UUID.Random();
string CapsPath = "http://www.opensimulator.org/Caps/Foo";
Dictionary<ulong,string> ChildrenCapsPaths = new Dictionary<ulong, string>();
ChildrenCapsPaths.Add(ulong.MaxValue, "http://www.opensimulator.org/Caps/Foo2");
string firstname = "CoolAvatarTest";
string lastname = "test";
Vector3 StartPos = new Vector3(5, 23, 125);
UUID SecureSessionId = UUID.Random();
UUID SessionId = UUID.Random();
m_agentCircuitData1 = new AgentCircuitData();
m_agentCircuitData1.AgentID = AgentId1;
m_agentCircuitData1.Appearance = new AvatarAppearance(AgentId1);
m_agentCircuitData1.BaseFolder = BaseFolder;
m_agentCircuitData1.CapsPath = CapsPath;
m_agentCircuitData1.child = false;
m_agentCircuitData1.ChildrenCapSeeds = ChildrenCapsPaths;
m_agentCircuitData1.circuitcode = circuitcode1;
m_agentCircuitData1.firstname = firstname;
m_agentCircuitData1.InventoryFolder = BaseFolder;
m_agentCircuitData1.lastname = lastname;
m_agentCircuitData1.SecureSessionID = SecureSessionId;
m_agentCircuitData1.SessionID = SessionId1;
m_agentCircuitData1.startpos = StartPos;
m_agentCircuitData2 = new AgentCircuitData();
m_agentCircuitData2.AgentID = AgentId2;
m_agentCircuitData2.Appearance = new AvatarAppearance(AgentId2);
m_agentCircuitData2.BaseFolder = BaseFolder;
m_agentCircuitData2.CapsPath = CapsPath;
m_agentCircuitData2.child = false;
m_agentCircuitData2.ChildrenCapSeeds = ChildrenCapsPaths;
m_agentCircuitData2.circuitcode = circuitcode2;
m_agentCircuitData2.firstname = firstname;
m_agentCircuitData2.InventoryFolder = BaseFolder;
m_agentCircuitData2.lastname = lastname;
m_agentCircuitData2.SecureSessionID = SecureSessionId;
m_agentCircuitData2.SessionID = SessionId2;
m_agentCircuitData2.startpos = StartPos;
}
/// <summary>
/// Validate that adding the circuit works appropriately
/// </summary>
[Test]
public void AddAgentCircuitTest()
{
AgentCircuitManager agentCircuitManager = new AgentCircuitManager();
agentCircuitManager.AddNewCircuit(circuitcode1,m_agentCircuitData1);
agentCircuitManager.AddNewCircuit(circuitcode2, m_agentCircuitData2);
AgentCircuitData agent = agentCircuitManager.GetAgentCircuitData(circuitcode1);
Assert.That((m_agentCircuitData1.AgentID == agent.AgentID));
Assert.That((m_agentCircuitData1.BaseFolder == agent.BaseFolder));
Assert.That((m_agentCircuitData1.CapsPath == agent.CapsPath));
Assert.That((m_agentCircuitData1.child == agent.child));
Assert.That((m_agentCircuitData1.ChildrenCapSeeds.Count == agent.ChildrenCapSeeds.Count));
Assert.That((m_agentCircuitData1.circuitcode == agent.circuitcode));
Assert.That((m_agentCircuitData1.firstname == agent.firstname));
Assert.That((m_agentCircuitData1.InventoryFolder == agent.InventoryFolder));
Assert.That((m_agentCircuitData1.lastname == agent.lastname));
Assert.That((m_agentCircuitData1.SecureSessionID == agent.SecureSessionID));
Assert.That((m_agentCircuitData1.SessionID == agent.SessionID));
Assert.That((m_agentCircuitData1.startpos == agent.startpos));
}
/// <summary>
/// Validate that removing the circuit code removes it appropriately
/// </summary>
[Test]
public void RemoveAgentCircuitTest()
{
AgentCircuitManager agentCircuitManager = new AgentCircuitManager();
agentCircuitManager.AddNewCircuit(circuitcode1, m_agentCircuitData1);
agentCircuitManager.AddNewCircuit(circuitcode2, m_agentCircuitData2);
agentCircuitManager.RemoveCircuit(circuitcode2);
AgentCircuitData agent = agentCircuitManager.GetAgentCircuitData(circuitcode2);
Assert.That(agent == null);
}
/// <summary>
/// Validate that changing the circuit code works
/// </summary>
[Test]
public void ChangeAgentCircuitCodeTest()
{
AgentCircuitManager agentCircuitManager = new AgentCircuitManager();
agentCircuitManager.AddNewCircuit(circuitcode1, m_agentCircuitData1);
agentCircuitManager.AddNewCircuit(circuitcode2, m_agentCircuitData2);
bool result = false;
result = agentCircuitManager.TryChangeCiruitCode(circuitcode1, 393930);
AgentCircuitData agent = agentCircuitManager.GetAgentCircuitData(393930);
AgentCircuitData agent2 = agentCircuitManager.GetAgentCircuitData(circuitcode1);
Assert.That(agent != null);
Assert.That(agent2 == null);
Assert.That(result);
}
/// <summary>
/// Validates that the login authentication scheme is working
/// First one should be authorized
/// Rest should not be authorized
/// </summary>
[Test]
public void ValidateLoginTest()
{
AgentCircuitManager agentCircuitManager = new AgentCircuitManager();
agentCircuitManager.AddNewCircuit(circuitcode1, m_agentCircuitData1);
agentCircuitManager.AddNewCircuit(circuitcode2, m_agentCircuitData2);
// should be authorized
AuthenticateResponse resp = agentCircuitManager.AuthenticateSession(SessionId1, AgentId1, circuitcode1);
Assert.That(resp.Authorised);
//should not be authorized
resp = agentCircuitManager.AuthenticateSession(SessionId1, UUID.Random(), circuitcode1);
Assert.That(!resp.Authorised);
resp = agentCircuitManager.AuthenticateSession(UUID.Random(), AgentId1, circuitcode1);
Assert.That(!resp.Authorised);
resp = agentCircuitManager.AuthenticateSession(SessionId1, AgentId1, circuitcode2);
Assert.That(!resp.Authorised);
resp = agentCircuitManager.AuthenticateSession(SessionId2, AgentId1, circuitcode2);
Assert.That(!resp.Authorised);
agentCircuitManager.RemoveCircuit(circuitcode2);
resp = agentCircuitManager.AuthenticateSession(SessionId2, AgentId2, circuitcode2);
Assert.That(!resp.Authorised);
}
}
}

View File

@ -0,0 +1,192 @@
/*
* 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 NUnit.Framework;
using System.Threading;
using System.Collections.Generic;
namespace OpenSim.Framework.Tests
{
[TestFixture]
public class ThreadTrackerTests
{
private bool running = true;
private bool running2 = true;
[Test]
public void DefaultThreadTrackerTest()
{
List<Thread> lThread = ThreadTracker.GetThreads();
/*
foreach (Thread t in lThread)
{
System.Console.WriteLine(t.Name);
}
*/
Assert.That(lThread.Count == 1);
Assert.That(lThread[0].Name == "ThreadTrackerThread");
}
/// <summary>
/// Validate that adding a thread to the thread tracker works
/// Validate that removing a thread from the thread tracker also works.
/// </summary>
[Test]
public void AddThreadToThreadTrackerTestAndRemoveTest()
{
Thread t = new Thread(run);
t.Name = "TestThread";
t.Priority = ThreadPriority.BelowNormal;
t.IsBackground = true;
t.SetApartmentState(ApartmentState.MTA);
t.Start();
ThreadTracker.Add(t);
List<Thread> lThread = ThreadTracker.GetThreads();
Assert.That(lThread.Count == 2);
foreach (Thread tr in lThread)
{
Assert.That((tr.Name == "ThreadTrackerThread" || tr.Name == "TestThread"));
}
running = false;
ThreadTracker.Remove(t);
lThread = ThreadTracker.GetThreads();
Assert.That(lThread.Count == 1);
foreach (Thread tr in lThread)
{
Assert.That((tr.Name == "ThreadTrackerThread"));
}
}
/// <summary>
/// Test a dead thread removal by aborting it and setting it's last seen active date to 50 seconds
/// </summary>
[Test]
public void DeadThreadTest()
{
Thread t = new Thread(run2);
t.Name = "TestThread";
t.Priority = ThreadPriority.BelowNormal;
t.IsBackground = true;
t.SetApartmentState(ApartmentState.MTA);
t.Start();
ThreadTracker.Add(t);
t.Abort();
Thread.Sleep(5000);
ThreadTracker.m_Threads[1].LastSeenActive = DateTime.Now.Ticks - (50*10000000);
ThreadTracker.CleanUp();
List<Thread> lThread = ThreadTracker.GetThreads();
Assert.That(lThread.Count == 1);
foreach (Thread tr in lThread)
{
Assert.That((tr.Name == "ThreadTrackerThread"));
}
}
[Test]
public void UnstartedThreadTest()
{
Thread t = new Thread(run2);
t.Name = "TestThread";
t.Priority = ThreadPriority.BelowNormal;
t.IsBackground = true;
t.SetApartmentState(ApartmentState.MTA);
ThreadTracker.Add(t);
ThreadTracker.m_Threads[1].LastSeenActive = DateTime.Now.Ticks - (50 * 10000000);
ThreadTracker.CleanUp();
List<Thread> lThread = ThreadTracker.GetThreads();
Assert.That(lThread.Count == 1);
foreach (Thread tr in lThread)
{
Assert.That((tr.Name == "ThreadTrackerThread"));
}
}
[Test]
public void NullThreadTest()
{
Thread t = null;
ThreadTracker.Add(t);
List<Thread> lThread = ThreadTracker.GetThreads();
Assert.That(lThread.Count == 1);
foreach (Thread tr in lThread)
{
Assert.That((tr.Name == "ThreadTrackerThread"));
}
}
/// <summary>
/// Worker thread 0
/// </summary>
/// <param name="o"></param>
public void run( object o)
{
while (running)
{
Thread.Sleep(5000);
}
}
/// <summary>
/// Worker thread 1
/// </summary>
/// <param name="o"></param>
public void run2(object o)
{
try
{
while (running2)
{
Thread.Sleep(5000);
}
}
catch (ThreadAbortException)
{
}
}
}
}

View File

@ -77,12 +77,15 @@ namespace OpenSim.Framework
public static void Add(Thread thread) public static void Add(Thread thread)
{ {
#if DEBUG #if DEBUG
lock (m_Threads) if (thread != null)
{ {
ThreadTrackerItem tti = new ThreadTrackerItem(); lock (m_Threads)
tti.Thread = thread; {
tti.LastSeenActive = DateTime.Now.Ticks; ThreadTrackerItem tti = new ThreadTrackerItem();
m_Threads.Add(tti); tti.Thread = thread;
tti.LastSeenActive = DateTime.Now.Ticks;
m_Threads.Add(tti);
}
} }
#endif #endif
} }
@ -107,16 +110,25 @@ namespace OpenSim.Framework
{ {
foreach (ThreadTrackerItem tti in new ArrayList(m_Threads)) foreach (ThreadTrackerItem tti in new ArrayList(m_Threads))
{ {
if (tti.Thread.IsAlive) try
{ {
// Its active
tti.LastSeenActive = DateTime.Now.Ticks;
if (tti.Thread.IsAlive)
{
// Its active
tti.LastSeenActive = DateTime.Now.Ticks;
}
else
{
// Its not active -- if its expired then remove it
if (tti.LastSeenActive + ThreadTimeout < DateTime.Now.Ticks)
m_Threads.Remove(tti);
}
} }
else catch (NullReferenceException)
{ {
// Its not active -- if its expired then remove it m_Threads.Remove(tti);
if (tti.LastSeenActive + ThreadTimeout < DateTime.Now.Ticks)
m_Threads.Remove(tti);
} }
} }
} }

View File

@ -36,25 +36,47 @@ using OpenSim.Framework.Console;
namespace OpenSim namespace OpenSim
{ {
/// <summary>
/// Starting class for the OpenSimulator Region
/// </summary>
public class Application public class Application
{ {
/// <summary>
/// Text Console Logger
/// </summary>
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
/// <summary>
/// Path to the main ini Configuration file
/// </summary>
public static string iniFilePath = ""; public static string iniFilePath = "";
/// <summary>
/// Save Crashes in the bin/crashes folder. Configurable with m_crashDir
/// </summary>
public static bool m_saveCrashDumps = false; public static bool m_saveCrashDumps = false;
/// <summary>
/// Directory to save crash reports to. Relative to bin/
/// </summary>
public static string m_crashDir = "crashes"; public static string m_crashDir = "crashes";
/// <summary>
/// Instance of the OpenSim class. This could be OpenSim or OpenSimBackground depending on the configuration
/// </summary>
protected static OpenSimBase m_sim = null; protected static OpenSimBase m_sim = null;
//could move our main function into OpenSimMain and kill this class //could move our main function into OpenSimMain and kill this class
public static void Main(string[] args) public static void Main(string[] args)
{ {
// First line // First line, hook the appdomain to the crash reporter
AppDomain.CurrentDomain.UnhandledException += AppDomain.CurrentDomain.UnhandledException +=
new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
// Add the arguments supplied when running the application to the configuration
ArgvConfigSource configSource = new ArgvConfigSource(args); ArgvConfigSource configSource = new ArgvConfigSource(args);
// Configure Log4Net
configSource.AddSwitch("Startup", "logconfig"); configSource.AddSwitch("Startup", "logconfig");
string logConfigFile = configSource.Configs["Startup"].GetString("logconfig", String.Empty); string logConfigFile = configSource.Configs["Startup"].GetString("logconfig", String.Empty);
if (logConfigFile != String.Empty) if (logConfigFile != String.Empty)
@ -69,6 +91,8 @@ namespace OpenSim
m_log.Info("[OPENSIM MAIN]: configured log4net using default OpenSim.exe.config"); m_log.Info("[OPENSIM MAIN]: configured log4net using default OpenSim.exe.config");
} }
// Check if the system is compatible with OpenSimulator.
// Ensures that the minimum system requirements are met
m_log.Info("Performing compatibility checks... "); m_log.Info("Performing compatibility checks... ");
string supported = String.Empty; string supported = String.Empty;
if (Util.IsEnvironmentSupported(ref supported)) if (Util.IsEnvironmentSupported(ref supported))
@ -80,6 +104,7 @@ namespace OpenSim
m_log.Warn("Environment is unsupported (" + supported + ")\n"); m_log.Warn("Environment is unsupported (" + supported + ")\n");
} }
// Configure nIni aliases and localles
Culture.SetCurrentCulture(); Culture.SetCurrentCulture();
@ -99,8 +124,13 @@ namespace OpenSim
configSource.AddConfig("StandAlone"); configSource.AddConfig("StandAlone");
configSource.AddConfig("Network"); configSource.AddConfig("Network");
// Check if we're running in the background or not
bool background = configSource.Configs["Startup"].GetBoolean("background", false); bool background = configSource.Configs["Startup"].GetBoolean("background", false);
// Check if we're saving crashes
m_saveCrashDumps = configSource.Configs["Startup"].GetBoolean("save_crashes", false); m_saveCrashDumps = configSource.Configs["Startup"].GetBoolean("save_crashes", false);
// load Crash directory config
m_crashDir = configSource.Configs["Startup"].GetString("crash_dir", m_crashDir); m_crashDir = configSource.Configs["Startup"].GetString("crash_dir", m_crashDir);
if (background) if (background)
@ -118,6 +148,7 @@ namespace OpenSim
{ {
try try
{ {
// Block thread here for input
MainConsole.Instance.Prompt(); MainConsole.Instance.Prompt();
} }
catch (Exception e) catch (Exception e)

View File

@ -37,12 +37,32 @@ using OpenSim.Framework;
namespace OpenSim namespace OpenSim
{ {
/// <summary>
/// Loads the Configuration files into nIni
/// </summary>
public class ConfigurationLoader public class ConfigurationLoader
{ {
/// <summary>
/// Various Config settings the region needs to start
/// Physics Engine, Mesh Engine, GridMode, PhysicsPrim allowed, Neighbor,
/// StorageDLL, Storage Connection String, Estate connection String, Client Stack
/// Standalone settings.
/// </summary>
protected ConfigSettings m_configSettings; protected ConfigSettings m_configSettings;
/// <summary>
/// A source of Configuration data
/// </summary>
protected OpenSimConfigSource m_config; protected OpenSimConfigSource m_config;
/// <summary>
/// Grid Service Information. This refers to classes and addresses of the grid service
/// </summary>
protected NetworkServersInfo m_networkServersInfo; protected NetworkServersInfo m_networkServersInfo;
/// <summary>
/// Console logger
/// </summary>
private static readonly ILog m_log = private static readonly ILog m_log =
LogManager.GetLogger( LogManager.GetLogger(
MethodBase.GetCurrentMethod().DeclaringType); MethodBase.GetCurrentMethod().DeclaringType);
@ -51,6 +71,13 @@ namespace OpenSim
{ {
} }
/// <summary>
/// Loads the region configuration
/// </summary>
/// <param name="argvSource">Parameters passed into the process when started</param>
/// <param name="configSettings"></param>
/// <param name="networkInfo"></param>
/// <returns>A configuration that gets passed to modules</returns>
public OpenSimConfigSource LoadConfigSettings( public OpenSimConfigSource LoadConfigSettings(
IConfigSource argvSource, out ConfigSettings configSettings, IConfigSource argvSource, out ConfigSettings configSettings,
out NetworkServersInfo networkInfo) out NetworkServersInfo networkInfo)
@ -169,15 +196,22 @@ namespace OpenSim
return m_config; return m_config;
} }
/// <summary>
/// Adds the included files as ini configuration files
/// </summary>
/// <param name="sources">List of URL strings or filename strings</param>
private void AddIncludes(List<string> sources) private void AddIncludes(List<string> sources)
{ {
//loop over config sources
foreach (IConfig config in m_config.Source.Configs) foreach (IConfig config in m_config.Source.Configs)
{ {
// Look for Include-* in the key name
string[] keys = config.GetKeys(); string[] keys = config.GetKeys();
foreach (string k in keys) foreach (string k in keys)
{ {
if (k.StartsWith("Include-")) if (k.StartsWith("Include-"))
{ {
// read the config file to be included.
string file = config.GetString(k); string file = config.GetString(k);
if (IsUri(file)) if (IsUri(file))
{ {
@ -199,7 +233,11 @@ namespace OpenSim
} }
} }
} }
/// <summary>
/// Check if we can convert the string to a URI
/// </summary>
/// <param name="file">String uri to the remote resource</param>
/// <returns>true if we can convert the string to a Uri object</returns>
bool IsUri(string file) bool IsUri(string file)
{ {
Uri configUri; Uri configUri;
@ -253,7 +291,7 @@ namespace OpenSim
/// <summary> /// <summary>
/// Setup a default config values in case they aren't present in the ini file /// Setup a default config values in case they aren't present in the ini file
/// </summary> /// </summary>
/// <returns></returns> /// <returns>A Configuration source containing the default configuration</returns>
private static IConfigSource DefaultConfig() private static IConfigSource DefaultConfig()
{ {
IConfigSource defaultConfig = new IniConfigSource(); IConfigSource defaultConfig = new IniConfigSource();
@ -322,6 +360,9 @@ namespace OpenSim
return defaultConfig; return defaultConfig;
} }
/// <summary>
/// Read initial region settings from the ConfigSource
/// </summary>
protected virtual void ReadConfigSettings() protected virtual void ReadConfigSettings()
{ {
IConfig startupConfig = m_config.Source.Configs["Startup"]; IConfig startupConfig = m_config.Source.Configs["Startup"];

View File

@ -29,12 +29,24 @@ using OpenSim.Framework;
namespace OpenSim namespace OpenSim
{ {
/// <summary>
/// OpenSimulator Application Plugin framework interface
/// </summary>
public interface IApplicationPlugin : IPlugin public interface IApplicationPlugin : IPlugin
{ {
/// <summary>
/// Initialize the Plugin
/// </summary>
/// <param name="openSim">The Application instance</param>
void Initialise(OpenSimBase openSim); void Initialise(OpenSimBase openSim);
/// <summary>
/// Called when the application loading is completed
/// </summary>
void PostInitialise(); void PostInitialise();
} }
public class ApplicationPluginInitialiser : PluginInitialiserBase public class ApplicationPluginInitialiser : PluginInitialiserBase
{ {
private OpenSimBase server; private OpenSimBase server;

View File

@ -146,6 +146,9 @@ namespace OpenSim
ChangeSelectedRegion("region", new string[] {"change", "region", "root"}); ChangeSelectedRegion("region", new string[] {"change", "region", "root"});
} }
/// <summary>
/// Register standard set of region console commands
/// </summary>
private void RegisterConsoleCommands() private void RegisterConsoleCommands()
{ {
m_console.Commands.AddCommand("region", false, "clear assets", m_console.Commands.AddCommand("region", false, "clear assets",
@ -332,6 +335,11 @@ namespace OpenSim
base.ShutdownSpecific(); base.ShutdownSpecific();
} }
/// <summary>
/// Timer to run a specific text file as console commands. Configured in in the main ini file
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void RunAutoTimerScript(object sender, EventArgs e) private void RunAutoTimerScript(object sender, EventArgs e)
{ {
if (m_timedScript != "disabled") if (m_timedScript != "disabled")
@ -342,6 +350,11 @@ namespace OpenSim
#region Console Commands #region Console Commands
/// <summary>
/// Kicks users off the region
/// </summary>
/// <param name="module"></param>
/// <param name="cmdparams">name of avatar to kick</param>
private void KickUserCommand(string module, string[] cmdparams) private void KickUserCommand(string module, string[] cmdparams)
{ {
if (cmdparams.Length < 4) if (cmdparams.Length < 4)
@ -401,6 +414,10 @@ namespace OpenSim
} }
} }
/// <summary>
/// Opens a file and uses it as input to the console command parser.
/// </summary>
/// <param name="fileName">name of file to use as input to the console</param>
private static void PrintFileToConsole(string fileName) private static void PrintFileToConsole(string fileName)
{ {
if (File.Exists(fileName)) if (File.Exists(fileName))
@ -419,12 +436,22 @@ namespace OpenSim
m_log.Info("Not implemented."); m_log.Info("Not implemented.");
} }
/// <summary>
/// Force resending of all updates to all clients in active region(s)
/// </summary>
/// <param name="module"></param>
/// <param name="args"></param>
private void HandleForceUpdate(string module, string[] args) private void HandleForceUpdate(string module, string[] args)
{ {
m_log.Info("Updating all clients"); m_log.Info("Updating all clients");
m_sceneManager.ForceCurrentSceneClientUpdate(); m_sceneManager.ForceCurrentSceneClientUpdate();
} }
/// <summary>
/// Edits the scale of a primative with the name specified
/// </summary>
/// <param name="module"></param>
/// <param name="args">0,1, name, x, y, z</param>
private void HandleEditScale(string module, string[] args) private void HandleEditScale(string module, string[] args)
{ {
if (args.Length == 6) if (args.Length == 6)
@ -437,6 +464,11 @@ namespace OpenSim
} }
} }
/// <summary>
/// Creates a new region based on the parameters specified. This will ask the user questions on the console
/// </summary>
/// <param name="module"></param>
/// <param name="cmd">0,1,region name, region XML file</param>
private void HandleCreateRegion(string module, string[] cmd) private void HandleCreateRegion(string module, string[] cmd)
{ {
if (cmd.Length < 4) if (cmd.Length < 4)
@ -473,16 +505,32 @@ namespace OpenSim
} }
} }
/// <summary>
/// Enable logins
/// </summary>
/// <param name="module"></param>
/// <param name="cmd"></param>
private void HandleLoginEnable(string module, string[] cmd) private void HandleLoginEnable(string module, string[] cmd)
{ {
ProcessLogin(true); ProcessLogin(true);
} }
/// <summary>
/// Disable logins
/// </summary>
/// <param name="module"></param>
/// <param name="cmd"></param>
private void HandleLoginDisable(string module, string[] cmd) private void HandleLoginDisable(string module, string[] cmd)
{ {
ProcessLogin(false); ProcessLogin(false);
} }
/// <summary>
/// Log login status to the console
/// </summary>
/// <param name="module"></param>
/// <param name="cmd"></param>
private void HandleLoginStatus(string module, string[] cmd) private void HandleLoginStatus(string module, string[] cmd)
{ {
if (m_commsManager.GridService.RegionLoginsEnabled == false) if (m_commsManager.GridService.RegionLoginsEnabled == false)
@ -492,6 +540,12 @@ namespace OpenSim
m_log.Info("[ Login ] Login are enabled"); m_log.Info("[ Login ] Login are enabled");
} }
/// <summary>
/// Change and load configuration file data.
/// </summary>
/// <param name="module"></param>
/// <param name="cmd"></param>
private void HandleConfig(string module, string[] cmd) private void HandleConfig(string module, string[] cmd)
{ {
List<string> args = new List<string>(cmd); List<string> args = new List<string>(cmd);
@ -557,6 +611,12 @@ namespace OpenSim
} }
} }
/// <summary>
/// Load, Unload, and list Region modules in use
/// </summary>
/// <param name="module"></param>
/// <param name="cmd"></param>
private void HandleModules(string module, string[] cmd) private void HandleModules(string module, string[] cmd)
{ {
List<string> args = new List<string>(cmd); List<string> args = new List<string>(cmd);
@ -797,6 +857,11 @@ namespace OpenSim
} }
// see BaseOpenSimServer // see BaseOpenSimServer
/// <summary>
/// Many commands list objects for debugging. Some of the types are listed here
/// </summary>
/// <param name="mod"></param>
/// <param name="cmd"></param>
public override void HandleShow(string mod, string[] cmd) public override void HandleShow(string mod, string[] cmd)
{ {
base.HandleShow(mod, cmd); base.HandleShow(mod, cmd);
@ -902,6 +967,10 @@ namespace OpenSim
} }
} }
/// <summary>
/// print UDP Queue data for each client
/// </summary>
/// <returns></returns>
private string GetQueuesReport() private string GetQueuesReport()
{ {
string report = String.Empty; string report = String.Empty;
@ -1010,6 +1079,11 @@ namespace OpenSim
m_commsManager.UserAdminService.ResetUserPassword(firstName, lastName, newPassword); m_commsManager.UserAdminService.ResetUserPassword(firstName, lastName, newPassword);
} }
/// <summary>
/// Use XML2 format to serialize data to a file
/// </summary>
/// <param name="module"></param>
/// <param name="cmdparams"></param>
protected void SavePrimsXml2(string module, string[] cmdparams) protected void SavePrimsXml2(string module, string[] cmdparams)
{ {
if (cmdparams.Length > 5) if (cmdparams.Length > 5)
@ -1022,6 +1096,11 @@ namespace OpenSim
} }
} }
/// <summary>
/// Use XML format to serialize data to a file
/// </summary>
/// <param name="module"></param>
/// <param name="cmdparams"></param>
protected void SaveXml(string module, string[] cmdparams) protected void SaveXml(string module, string[] cmdparams)
{ {
m_log.Error("[CONSOLE]: PLEASE NOTE, save-xml is DEPRECATED and may be REMOVED soon. If you are using this and there is some reason you can't use save-xml2, please file a mantis detailing the reason."); m_log.Error("[CONSOLE]: PLEASE NOTE, save-xml is DEPRECATED and may be REMOVED soon. If you are using this and there is some reason you can't use save-xml2, please file a mantis detailing the reason.");
@ -1036,6 +1115,11 @@ namespace OpenSim
} }
} }
/// <summary>
/// Loads data and region objects from XML format.
/// </summary>
/// <param name="module"></param>
/// <param name="cmdparams"></param>
protected void LoadXml(string module, string[] cmdparams) protected void LoadXml(string module, string[] cmdparams)
{ {
m_log.Error("[CONSOLE]: PLEASE NOTE, load-xml is DEPRECATED and may be REMOVED soon. If you are using this and there is some reason you can't use load-xml2, please file a mantis detailing the reason."); m_log.Error("[CONSOLE]: PLEASE NOTE, load-xml is DEPRECATED and may be REMOVED soon. If you are using this and there is some reason you can't use load-xml2, please file a mantis detailing the reason.");
@ -1079,7 +1163,11 @@ namespace OpenSim
} }
} }
} }
/// <summary>
/// Serialize region data to XML2Format
/// </summary>
/// <param name="module"></param>
/// <param name="cmdparams"></param>
protected void SaveXml2(string module, string[] cmdparams) protected void SaveXml2(string module, string[] cmdparams)
{ {
if (cmdparams.Length > 2) if (cmdparams.Length > 2)
@ -1092,6 +1180,11 @@ namespace OpenSim
} }
} }
/// <summary>
/// Load region data from Xml2Format
/// </summary>
/// <param name="module"></param>
/// <param name="cmdparams"></param>
protected void LoadXml2(string module, string[] cmdparams) protected void LoadXml2(string module, string[] cmdparams)
{ {
if (cmdparams.Length > 2) if (cmdparams.Length > 2)

View File

@ -40,9 +40,6 @@ namespace OpenSim.Region.Communications.Hypergrid
{ {
public class HGCommunicationsGridMode : CommunicationsManager // CommunicationsOGS1 public class HGCommunicationsGridMode : CommunicationsManager // CommunicationsOGS1
{ {
private static readonly ILog m_log
= LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
IHyperlink m_osw = null; IHyperlink m_osw = null;
public IHyperlink HGServices public IHyperlink HGServices
{ {

View File

@ -74,7 +74,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
/// <summary> /// <summary>
/// Test saving a V0.1 OpenSim Inventory Archive (subject to change since there is no fixed format yet). /// Test saving a V0.1 OpenSim Inventory Archive (subject to change since there is no fixed format yet).
/// </summary> /// </summary>
//[Test] [Test]
public void TestSaveIarV0_1() public void TestSaveIarV0_1()
{ {
TestHelper.InMethod(); TestHelper.InMethod();
@ -82,7 +82,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
InventoryArchiverModule archiverModule = new InventoryArchiverModule(); InventoryArchiverModule archiverModule = new InventoryArchiverModule();
Scene scene = SceneSetupHelpers.SetupScene(""); Scene scene = SceneSetupHelpers.SetupScene("Inventory");
SceneSetupHelpers.SetupSceneModules(scene, archiverModule); SceneSetupHelpers.SetupSceneModules(scene, archiverModule);
CommunicationsManager cm = scene.CommsManager; CommunicationsManager cm = scene.CommsManager;
@ -222,7 +222,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
/// Test loading a V0.1 OpenSim Inventory Archive (subject to change since there is no fixed format yet) where /// Test loading a V0.1 OpenSim Inventory Archive (subject to change since there is no fixed format yet) where
/// an account exists with the creator name. /// an account exists with the creator name.
/// </summary> /// </summary>
//[Test] [Test]
public void TestLoadIarV0_1ExistingUsers() public void TestLoadIarV0_1ExistingUsers()
{ {
TestHelper.InMethod(); TestHelper.InMethod();
@ -262,7 +262,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
InventoryArchiverModule archiverModule = new InventoryArchiverModule(); InventoryArchiverModule archiverModule = new InventoryArchiverModule();
// Annoyingly, we have to set up a scene even though inventory loading has nothing to do with a scene // Annoyingly, we have to set up a scene even though inventory loading has nothing to do with a scene
Scene scene = SceneSetupHelpers.SetupScene(); Scene scene = SceneSetupHelpers.SetupScene("inventory");
IUserAdminService userAdminService = scene.CommsManager.UserAdminService; IUserAdminService userAdminService = scene.CommsManager.UserAdminService;
SceneSetupHelpers.SetupSceneModules(scene, serialiserModule, archiverModule); SceneSetupHelpers.SetupSceneModules(scene, serialiserModule, archiverModule);
@ -276,16 +276,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
CachedUserInfo userInfo CachedUserInfo userInfo
= scene.CommsManager.UserProfileCacheService.GetUserDetails(userFirstName, userLastName); = scene.CommsManager.UserProfileCacheService.GetUserDetails(userFirstName, userLastName);
//userInfo.FetchInventory();
/*
for (int i = 0 ; i < 50 ; i++)
{
if (userInfo.HasReceivedInventory == true)
break;
Thread.Sleep(200);
}
Assert.That(userInfo.HasReceivedInventory, Is.True, "FetchInventory timed out (10 seconds)");
*/
InventoryItemBase foundItem = userInfo.RootFolder.FindItemByPath(itemName); InventoryItemBase foundItem = userInfo.RootFolder.FindItemByPath(itemName);
Assert.That(foundItem, Is.Not.Null, "Didn't find loaded item"); Assert.That(foundItem, Is.Not.Null, "Didn't find loaded item");
Assert.That( Assert.That(
@ -395,17 +386,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
userInfo = UserProfileTestUtils.CreateUserWithInventory(commsManager, InventoryReceived); userInfo = UserProfileTestUtils.CreateUserWithInventory(commsManager, InventoryReceived);
Monitor.Wait(this, 60000); Monitor.Wait(this, 60000);
} }
//userInfo.FetchInventory();
/*
for (int i = 0 ; i < 50 ; i++)
{
if (userInfo.HasReceivedInventory == true)
break;
Thread.Sleep(200);
}
Assert.That(userInfo.HasReceivedInventory, Is.True, "FetchInventory timed out (10 seconds)");
*/
Console.WriteLine("userInfo.RootFolder 1: {0}", userInfo.RootFolder); Console.WriteLine("userInfo.RootFolder 1: {0}", userInfo.RootFolder);
@ -429,22 +409,15 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
Console.WriteLine("userInfo.RootFolder 2: {0}", userInfo.RootFolder); Console.WriteLine("userInfo.RootFolder 2: {0}", userInfo.RootFolder);
try new InventoryArchiveReadRequest(userInfo, null, (Stream)null, null, null)
{ .ReplicateArchivePathToUserInventory(
new InventoryArchiveReadRequest(userInfo, null, (Stream)null, null, null) itemArchivePath, false, userInfo.RootFolder, foldersCreated, nodesLoaded);
.ReplicateArchivePathToUserInventory(itemArchivePath, false, userInfo.RootFolder, foldersCreated, nodesLoaded);
Console.WriteLine("userInfo.RootFolder 3: {0}", userInfo.RootFolder); Console.WriteLine("userInfo.RootFolder 3: {0}", userInfo.RootFolder);
InventoryFolderImpl folder1 = userInfo.RootFolder.FindFolderByPath("a"); InventoryFolderImpl folder1 = userInfo.RootFolder.FindFolderByPath("a");
Assert.That(folder1, Is.Not.Null, "Could not find folder a"); Assert.That(folder1, Is.Not.Null, "Could not find folder a");
InventoryFolderImpl folder2 = folder1.FindFolderByPath("b"); InventoryFolderImpl folder2 = folder1.FindFolderByPath("b");
Assert.That(folder2, Is.Not.Null, "Could not find folder b"); Assert.That(folder2, Is.Not.Null, "Could not find folder b");
}
catch (NullReferenceException e)
{
// Non fatal for now until we resolve the race condition
Console.WriteLine("Test failed with {0}", e);
}
} }
} }
} }

View File

@ -26,6 +26,7 @@
*/ */
using System; using System;
using System.Collections;
using System.Globalization; using System.Globalization;
using System.Reflection; using System.Reflection;
using log4net; using log4net;
@ -41,6 +42,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Profiles
{ {
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private Scene m_scene; private Scene m_scene;
private IProfileModule m_profileModule = null;
public AvatarProfilesModule() public AvatarProfilesModule()
{ {
@ -56,6 +58,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Profiles
public void PostInitialise() public void PostInitialise()
{ {
m_profileModule = m_scene.RequestModuleInterface<IProfileModule>();
} }
public void Close() public void Close()
@ -108,6 +111,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Profiles
charterMember = Utils.StringToBytes(profile.CustomType); charterMember = Utils.StringToBytes(profile.CustomType);
} }
if (m_profileModule != null)
{
Hashtable profileData = m_profileModule.GetProfileData(remoteClient.AgentId);
if (profileData["ProfileUrl"] != null)
profile.ProfileUrl = profileData["ProfileUrl"].ToString();
}
remoteClient.SendAvatarProperties(profile.ID, profile.AboutText, remoteClient.SendAvatarProperties(profile.ID, profile.AboutText,
Util.ToDateTime(profile.Created).ToString("M/d/yyyy", CultureInfo.InvariantCulture), Util.ToDateTime(profile.Created).ToString("M/d/yyyy", CultureInfo.InvariantCulture),
charterMember, profile.FirstLifeAboutText, (uint)(profile.UserFlags & 0xff), charterMember, profile.FirstLifeAboutText, (uint)(profile.UserFlags & 0xff),

View File

@ -0,0 +1,206 @@
/*
* 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 OpenMetaverse;
using Nini.Config;
using log4net;
using OpenSim.Framework;
using OpenSim.Services.Interfaces;
namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
{
public abstract class BaseInventoryConnector : IInventoryService
{
protected InventoryCache m_cache;
protected virtual void Init(IConfigSource source)
{
m_cache = new InventoryCache();
m_cache.Init(source, this);
}
/// <summary>
/// Create the entire inventory for a given user
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
public abstract bool CreateUserInventory(UUID user);
/// <summary>
/// Gets the skeleton of the inventory -- folders only
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
public abstract List<InventoryFolderBase> GetInventorySkeleton(UUID userId);
/// <summary>
/// Synchronous inventory fetch.
/// </summary>
/// <param name="userID"></param>
/// <returns></returns>
public abstract InventoryCollection GetUserInventory(UUID userID);
/// <summary>
/// Request the inventory for a user. This is an asynchronous operation that will call the callback when the
/// inventory has been received
/// </summary>
/// <param name="userID"></param>
/// <param name="callback"></param>
public abstract void GetUserInventory(UUID userID, InventoryReceiptCallback callback);
/// <summary>
/// Retrieve the root inventory folder for the given user.
/// </summary>
/// <param name="userID"></param>
/// <returns>null if no root folder was found</returns>
public abstract InventoryFolderBase GetRootFolder(UUID userID);
public abstract Dictionary<AssetType, InventoryFolderBase> GetSystemFolders(UUID userID);
/// <summary>
/// Gets the user folder for the given folder-type
/// </summary>
/// <param name="userID"></param>
/// <param name="type"></param>
/// <returns></returns>
public InventoryFolderBase GetFolderForType(UUID userID, AssetType type)
{
return m_cache.GetFolderForType(userID, type);
}
/// <summary>
/// Gets everything (folders and items) inside a folder
/// </summary>
/// <param name="userId"></param>
/// <param name="folderID"></param>
/// <returns></returns>
public abstract InventoryCollection GetFolderContent(UUID userID, UUID folderID);
/// <summary>
/// Gets the items inside a folder
/// </summary>
/// <param name="userID"></param>
/// <param name="folderID"></param>
/// <returns></returns>
public abstract List<InventoryItemBase> GetFolderItems(UUID userID, UUID folderID);
/// <summary>
/// Add a new folder to the user's inventory
/// </summary>
/// <param name="folder"></param>
/// <returns>true if the folder was successfully added</returns>
public abstract bool AddFolder(InventoryFolderBase folder);
/// <summary>
/// Update a folder in the user's inventory
/// </summary>
/// <param name="folder"></param>
/// <returns>true if the folder was successfully updated</returns>
public abstract bool UpdateFolder(InventoryFolderBase folder);
/// <summary>
/// Move an inventory folder to a new location
/// </summary>
/// <param name="folder">A folder containing the details of the new location</param>
/// <returns>true if the folder was successfully moved</returns>
public abstract bool MoveFolder(InventoryFolderBase folder);
/// <summary>
/// Purge an inventory folder of all its items and subfolders.
/// </summary>
/// <param name="folder"></param>
/// <returns>true if the folder was successfully purged</returns>
public abstract bool PurgeFolder(InventoryFolderBase folder);
/// <summary>
/// Add a new item to the user's inventory.
/// If the given item has to parent folder, it tries to find the most
/// suitable folder for it.
/// </summary>
/// <param name="item"></param>
/// <returns>true if the item was successfully added</returns>
public bool AddItem(InventoryItemBase item)
{
if (item.Folder == UUID.Zero)
{
InventoryFolderBase f = GetFolderForType(item.Owner, (AssetType)item.AssetType);
if (f != null)
item.Folder = f.ID;
else
{
f = GetRootFolder(item.Owner);
if (f != null)
item.Folder = f.ID;
else
return false;
}
}
return AddItemPlain(item);
}
protected abstract bool AddItemPlain(InventoryItemBase item);
/// <summary>
/// Update an item in the user's inventory
/// </summary>
/// <param name="item"></param>
/// <returns>true if the item was successfully updated</returns>
public abstract bool UpdateItem(InventoryItemBase item);
/// <summary>
/// Delete an item from the user's inventory
/// </summary>
/// <param name="item"></param>
/// <returns>true if the item was successfully deleted</returns>
public abstract bool DeleteItem(InventoryItemBase item);
public abstract InventoryItemBase QueryItem(InventoryItemBase item);
public abstract InventoryFolderBase QueryFolder(InventoryFolderBase folder);
/// <summary>
/// Does the given user have an inventory structure?
/// </summary>
/// <param name="userID"></param>
/// <returns></returns>
public abstract bool HasInventoryForUser(UUID userID);
/// <summary>
/// Get the active gestures of the agent.
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
public abstract List<InventoryItemBase> GetActiveGestures(UUID userId);
}
}

View File

@ -41,7 +41,7 @@ using OpenMetaverse;
namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
{ {
public class HGInventoryBroker : InventoryCache, ISharedRegionModule, IInventoryService public class HGInventoryBroker : BaseInventoryConnector, ISharedRegionModule, IInventoryService
{ {
private static readonly ILog m_log = private static readonly ILog m_log =
LogManager.GetLogger( LogManager.GetLogger(
@ -138,7 +138,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
{ {
} }
public override void AddRegion(Scene scene) public void AddRegion(Scene scene)
{ {
if (!m_Enabled) if (!m_Enabled)
return; return;
@ -156,12 +156,15 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
} }
scene.RegisterModuleInterface<IInventoryService>(this); scene.RegisterModuleInterface<IInventoryService>(this);
base.AddRegion(scene); m_cache.AddRegion(scene);
} }
public override void RemoveRegion(Scene scene) public void RemoveRegion(Scene scene)
{ {
base.RemoveRegion(scene); if (!m_Enabled)
return;
m_cache.RemoveRegion(scene);
} }
public void RegionLoaded(Scene scene) public void RegionLoaded(Scene scene)
@ -175,17 +178,17 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
#region IInventoryService #region IInventoryService
public bool CreateUserInventory(UUID userID) public override bool CreateUserInventory(UUID userID)
{ {
return m_GridService.CreateUserInventory(userID); return m_GridService.CreateUserInventory(userID);
} }
public List<InventoryFolderBase> GetInventorySkeleton(UUID userId) public override List<InventoryFolderBase> GetInventorySkeleton(UUID userId)
{ {
return m_GridService.GetInventorySkeleton(userId); return m_GridService.GetInventorySkeleton(userId);
} }
public InventoryCollection GetUserInventory(UUID userID) public override InventoryCollection GetUserInventory(UUID userID)
{ {
if (IsLocalGridUser(userID)) if (IsLocalGridUser(userID))
return m_GridService.GetUserInventory(userID); return m_GridService.GetUserInventory(userID);
@ -193,7 +196,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
return null; return null;
} }
public void GetUserInventory(UUID userID, InventoryReceiptCallback callback) public override void GetUserInventory(UUID userID, InventoryReceiptCallback callback)
{ {
if (IsLocalGridUser(userID)) if (IsLocalGridUser(userID))
m_GridService.GetUserInventory(userID, callback); m_GridService.GetUserInventory(userID, callback);
@ -220,7 +223,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
// } // }
//} //}
public InventoryCollection GetFolderContent(UUID userID, UUID folderID) public override InventoryCollection GetFolderContent(UUID userID, UUID folderID)
{ {
if (IsLocalGridUser(userID)) if (IsLocalGridUser(userID))
return m_GridService.GetFolderContent(userID, folderID); return m_GridService.GetFolderContent(userID, folderID);
@ -271,12 +274,12 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
return new Dictionary<AssetType, InventoryFolderBase>(); return new Dictionary<AssetType, InventoryFolderBase>();
} }
public List<InventoryItemBase> GetFolderItems(UUID userID, UUID folderID) public override List<InventoryItemBase> GetFolderItems(UUID userID, UUID folderID)
{ {
return new List<InventoryItemBase>(); return new List<InventoryItemBase>();
} }
public bool AddFolder(InventoryFolderBase folder) public override bool AddFolder(InventoryFolderBase folder)
{ {
if (folder == null) if (folder == null)
return false; return false;
@ -291,7 +294,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
} }
} }
public bool UpdateFolder(InventoryFolderBase folder) public override bool UpdateFolder(InventoryFolderBase folder)
{ {
if (folder == null) if (folder == null)
return false; return false;
@ -306,7 +309,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
} }
} }
public bool MoveFolder(InventoryFolderBase folder) public override bool MoveFolder(InventoryFolderBase folder)
{ {
if (folder == null) if (folder == null)
return false; return false;
@ -321,7 +324,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
} }
} }
public bool PurgeFolder(InventoryFolderBase folder) public override bool PurgeFolder(InventoryFolderBase folder)
{ {
if (folder == null) if (folder == null)
return false; return false;
@ -336,7 +339,10 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
} }
} }
public bool AddItem(InventoryItemBase item) // public bool AddItem(InventoryItemBase item) inherited
// Uses AddItemPlain
protected override bool AddItemPlain(InventoryItemBase item)
{ {
if (item == null) if (item == null)
return false; return false;
@ -351,7 +357,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
} }
} }
public bool UpdateItem(InventoryItemBase item) public override bool UpdateItem(InventoryItemBase item)
{ {
if (item == null) if (item == null)
return false; return false;
@ -366,7 +372,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
} }
} }
public bool DeleteItem(InventoryItemBase item) public override bool DeleteItem(InventoryItemBase item)
{ {
if (item == null) if (item == null)
return false; return false;
@ -381,7 +387,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
} }
} }
public InventoryItemBase QueryItem(InventoryItemBase item) public override InventoryItemBase QueryItem(InventoryItemBase item)
{ {
if (item == null) if (item == null)
return null; return null;
@ -396,7 +402,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
} }
} }
public InventoryFolderBase QueryFolder(InventoryFolderBase folder) public override InventoryFolderBase QueryFolder(InventoryFolderBase folder)
{ {
if (folder == null) if (folder == null)
return null; return null;
@ -411,17 +417,17 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
} }
} }
public bool HasInventoryForUser(UUID userID) public override bool HasInventoryForUser(UUID userID)
{ {
return false; return false;
} }
public InventoryFolderBase GetRootFolder(UUID userID) public override InventoryFolderBase GetRootFolder(UUID userID)
{ {
return null; return null;
} }
public List<InventoryItemBase> GetActiveGestures(UUID userId) public override List<InventoryItemBase> GetActiveGestures(UUID userId)
{ {
return new List<InventoryItemBase>(); return new List<InventoryItemBase>();
} }

View File

@ -1,4 +1,31 @@
using System; /*
* 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.Collections.Generic;
using System.Reflection; using System.Reflection;
@ -12,21 +39,23 @@ using log4net;
namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
{ {
public abstract class InventoryCache public class InventoryCache
{ {
private static readonly ILog m_log = private static readonly ILog m_log =
LogManager.GetLogger( LogManager.GetLogger(
MethodBase.GetCurrentMethod().DeclaringType); MethodBase.GetCurrentMethod().DeclaringType);
protected BaseInventoryConnector m_Connector;
protected List<Scene> m_Scenes; protected List<Scene> m_Scenes;
// The cache proper // The cache proper
protected Dictionary<UUID, Dictionary<AssetType, InventoryFolderBase>> m_InventoryCache; protected Dictionary<UUID, Dictionary<AssetType, InventoryFolderBase>> m_InventoryCache;
protected virtual void Init(IConfigSource source) public virtual void Init(IConfigSource source, BaseInventoryConnector connector)
{ {
m_Scenes = new List<Scene>(); m_Scenes = new List<Scene>();
m_InventoryCache = new Dictionary<UUID, Dictionary<AssetType, InventoryFolderBase>>(); m_InventoryCache = new Dictionary<UUID, Dictionary<AssetType, InventoryFolderBase>>();
m_Connector = connector;
} }
public virtual void AddRegion(Scene scene) public virtual void AddRegion(Scene scene)
@ -59,9 +88,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
} }
// If not, go get them and place them in the cache // If not, go get them and place them in the cache
Dictionary<AssetType, InventoryFolderBase> folders = GetSystemFolders(presence.UUID); Dictionary<AssetType, InventoryFolderBase> folders = m_Connector.GetSystemFolders(presence.UUID);
m_log.DebugFormat("[INVENTORY CACHE]: OnMakeRootAgent, fetched system folders for {0} {1}: count {2}", m_log.DebugFormat("[INVENTORY CACHE]: OnMakeRootAgent in {0}, fetched system folders for {1} {2}: count {3}",
presence.Firstname, presence.Lastname, folders.Count); presence.Scene.RegionInfo.RegionName, presence.Firstname, presence.Lastname, folders.Count);
if (folders.Count > 0) if (folders.Count > 0)
lock (m_InventoryCache) lock (m_InventoryCache)
m_InventoryCache.Add(presence.UUID, folders); m_InventoryCache.Add(presence.UUID, folders);
@ -69,28 +98,32 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
void OnClientClosed(UUID clientID, Scene scene) void OnClientClosed(UUID clientID, Scene scene)
{ {
ScenePresence sp = null; if (m_InventoryCache.ContainsKey(clientID)) // if it's still in cache
foreach (Scene s in m_Scenes)
{ {
s.TryGetAvatar(clientID, out sp); ScenePresence sp = null;
if ((sp != null) && !sp.IsChildAgent) foreach (Scene s in m_Scenes)
{ {
m_log.DebugFormat("[INVENTORY CACHE]: OnClientClosed in {0}, but user {1} still in sim. Keeping system folders in cache", s.TryGetAvatar(clientID, out sp);
scene.RegionInfo.RegionName, clientID); if ((sp != null) && !sp.IsChildAgent && (s != scene))
return; {
m_log.DebugFormat("[INVENTORY CACHE]: OnClientClosed in {0}, but user {1} still in sim. Keeping system folders in cache",
scene.RegionInfo.RegionName, clientID);
return;
}
} }
// Drop system folders
lock (m_InventoryCache)
if (m_InventoryCache.ContainsKey(clientID))
{
m_log.DebugFormat("[INVENTORY CACHE]: OnClientClosed in {0}, user {1} out of sim. Dropping system folders",
scene.RegionInfo.RegionName, clientID);
m_InventoryCache.Remove(clientID);
}
} }
m_log.DebugFormat("[INVENTORY CACHE]: OnClientClosed in {0}, user {1} out of sim. Dropping system folders",
scene.RegionInfo.RegionName, clientID);
// Drop system folders
lock (m_InventoryCache)
if (m_InventoryCache.ContainsKey(clientID))
m_InventoryCache.Remove(clientID);
} }
public abstract Dictionary<AssetType, InventoryFolderBase> GetSystemFolders(UUID userID);
public InventoryFolderBase GetFolderForType(UUID userID, AssetType type) public InventoryFolderBase GetFolderForType(UUID userID, AssetType type)
{ {

View File

@ -41,7 +41,7 @@ using OpenMetaverse;
namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
{ {
public class LocalInventoryServicesConnector : InventoryCache, ISharedRegionModule, IInventoryService public class LocalInventoryServicesConnector : BaseInventoryConnector, ISharedRegionModule, IInventoryService
{ {
private static readonly ILog m_log = private static readonly ILog m_log =
LogManager.GetLogger( LogManager.GetLogger(
@ -124,7 +124,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
{ {
} }
public override void AddRegion(Scene scene) public void AddRegion(Scene scene)
{ {
if (!m_Enabled) if (!m_Enabled)
return; return;
@ -141,12 +141,15 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
// "[INVENTORY CONNECTOR]: Registering IInventoryService to scene {0}", scene.RegionInfo.RegionName); // "[INVENTORY CONNECTOR]: Registering IInventoryService to scene {0}", scene.RegionInfo.RegionName);
scene.RegisterModuleInterface<IInventoryService>(this); scene.RegisterModuleInterface<IInventoryService>(this);
base.AddRegion(scene); m_cache.AddRegion(scene);
} }
public override void RemoveRegion(Scene scene) public void RemoveRegion(Scene scene)
{ {
base.RemoveRegion(scene); if (!m_Enabled)
return;
m_cache.RemoveRegion(scene);
} }
public void RegionLoaded(Scene scene) public void RegionLoaded(Scene scene)
@ -160,22 +163,22 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
#region IInventoryService #region IInventoryService
public bool CreateUserInventory(UUID user) public override bool CreateUserInventory(UUID user)
{ {
return m_InventoryService.CreateUserInventory(user); return m_InventoryService.CreateUserInventory(user);
} }
public List<InventoryFolderBase> GetInventorySkeleton(UUID userId) public override List<InventoryFolderBase> GetInventorySkeleton(UUID userId)
{ {
return m_InventoryService.GetInventorySkeleton(userId); return m_InventoryService.GetInventorySkeleton(userId);
} }
public InventoryCollection GetUserInventory(UUID id) public override InventoryCollection GetUserInventory(UUID id)
{ {
return m_InventoryService.GetUserInventory(id); return m_InventoryService.GetUserInventory(id);
} }
public void GetUserInventory(UUID userID, InventoryReceiptCallback callback) public override void GetUserInventory(UUID userID, InventoryReceiptCallback callback)
{ {
m_InventoryService.GetUserInventory(userID, callback); m_InventoryService.GetUserInventory(userID, callback);
} }
@ -207,13 +210,13 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
return new Dictionary<AssetType, InventoryFolderBase>(); return new Dictionary<AssetType, InventoryFolderBase>();
} }
public InventoryCollection GetFolderContent(UUID userID, UUID folderID) public override InventoryCollection GetFolderContent(UUID userID, UUID folderID)
{ {
return m_InventoryService.GetFolderContent(userID, folderID); return m_InventoryService.GetFolderContent(userID, folderID);
} }
public List<InventoryItemBase> GetFolderItems(UUID userID, UUID folderID) public override List<InventoryItemBase> GetFolderItems(UUID userID, UUID folderID)
{ {
return m_InventoryService.GetFolderItems(userID, folderID); return m_InventoryService.GetFolderItems(userID, folderID);
} }
@ -223,7 +226,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
/// </summary> /// </summary>
/// <param name="folder"></param> /// <param name="folder"></param>
/// <returns>true if the folder was successfully added</returns> /// <returns>true if the folder was successfully added</returns>
public bool AddFolder(InventoryFolderBase folder) public override bool AddFolder(InventoryFolderBase folder)
{ {
return m_InventoryService.AddFolder(folder); return m_InventoryService.AddFolder(folder);
} }
@ -233,7 +236,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
/// </summary> /// </summary>
/// <param name="folder"></param> /// <param name="folder"></param>
/// <returns>true if the folder was successfully updated</returns> /// <returns>true if the folder was successfully updated</returns>
public bool UpdateFolder(InventoryFolderBase folder) public override bool UpdateFolder(InventoryFolderBase folder)
{ {
return m_InventoryService.UpdateFolder(folder); return m_InventoryService.UpdateFolder(folder);
} }
@ -243,7 +246,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
/// </summary> /// </summary>
/// <param name="folder">A folder containing the details of the new location</param> /// <param name="folder">A folder containing the details of the new location</param>
/// <returns>true if the folder was successfully moved</returns> /// <returns>true if the folder was successfully moved</returns>
public bool MoveFolder(InventoryFolderBase folder) public override bool MoveFolder(InventoryFolderBase folder)
{ {
return m_InventoryService.MoveFolder(folder); return m_InventoryService.MoveFolder(folder);
} }
@ -253,17 +256,18 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
/// </summary> /// </summary>
/// <param name="folder"></param> /// <param name="folder"></param>
/// <returns>true if the folder was successfully purged</returns> /// <returns>true if the folder was successfully purged</returns>
public bool PurgeFolder(InventoryFolderBase folder) public override bool PurgeFolder(InventoryFolderBase folder)
{ {
return m_InventoryService.PurgeFolder(folder); return m_InventoryService.PurgeFolder(folder);
} }
/// <summary> /// <summary>
/// Add a new item to the user's inventory /// Add a new item to the user's inventory, plain
/// Called by base class AddItem
/// </summary> /// </summary>
/// <param name="item"></param> /// <param name="item"></param>
/// <returns>true if the item was successfully added</returns> /// <returns>true if the item was successfully added</returns>
public bool AddItem(InventoryItemBase item) protected override bool AddItemPlain(InventoryItemBase item)
{ {
return m_InventoryService.AddItem(item); return m_InventoryService.AddItem(item);
} }
@ -273,7 +277,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
/// </summary> /// </summary>
/// <param name="item"></param> /// <param name="item"></param>
/// <returns>true if the item was successfully updated</returns> /// <returns>true if the item was successfully updated</returns>
public bool UpdateItem(InventoryItemBase item) public override bool UpdateItem(InventoryItemBase item)
{ {
return m_InventoryService.UpdateItem(item); return m_InventoryService.UpdateItem(item);
} }
@ -283,17 +287,17 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
/// </summary> /// </summary>
/// <param name="item"></param> /// <param name="item"></param>
/// <returns>true if the item was successfully deleted</returns> /// <returns>true if the item was successfully deleted</returns>
public bool DeleteItem(InventoryItemBase item) public override bool DeleteItem(InventoryItemBase item)
{ {
return m_InventoryService.DeleteItem(item); return m_InventoryService.DeleteItem(item);
} }
public InventoryItemBase QueryItem(InventoryItemBase item) public override InventoryItemBase QueryItem(InventoryItemBase item)
{ {
return m_InventoryService.QueryItem(item); return m_InventoryService.QueryItem(item);
} }
public InventoryFolderBase QueryFolder(InventoryFolderBase folder) public override InventoryFolderBase QueryFolder(InventoryFolderBase folder)
{ {
return m_InventoryService.QueryFolder(folder); return m_InventoryService.QueryFolder(folder);
} }
@ -303,7 +307,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
/// </summary> /// </summary>
/// <param name="userID"></param> /// <param name="userID"></param>
/// <returns></returns> /// <returns></returns>
public bool HasInventoryForUser(UUID userID) public override bool HasInventoryForUser(UUID userID)
{ {
return m_InventoryService.HasInventoryForUser(userID); return m_InventoryService.HasInventoryForUser(userID);
} }
@ -313,12 +317,12 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
/// </summary> /// </summary>
/// <param name="userID"></param> /// <param name="userID"></param>
/// <returns>null if no root folder was found</returns> /// <returns>null if no root folder was found</returns>
public InventoryFolderBase GetRootFolder(UUID userID) public override InventoryFolderBase GetRootFolder(UUID userID)
{ {
return m_InventoryService.GetRootFolder(userID); return m_InventoryService.GetRootFolder(userID);
} }
public List<InventoryItemBase> GetActiveGestures(UUID userId) public override List<InventoryItemBase> GetActiveGestures(UUID userId)
{ {
return m_InventoryService.GetActiveGestures(userId); return m_InventoryService.GetActiveGestures(userId);
} }

View File

@ -40,7 +40,7 @@ using OpenMetaverse;
namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
{ {
public class RemoteInventoryServicesConnector : InventoryCache, ISharedRegionModule, IInventoryService public class RemoteInventoryServicesConnector : BaseInventoryConnector, ISharedRegionModule, IInventoryService
{ {
private static readonly ILog m_log = private static readonly ILog m_log =
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
@ -102,7 +102,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
{ {
} }
public override void AddRegion(Scene scene) public void AddRegion(Scene scene)
{ {
if (!m_Enabled) if (!m_Enabled)
return; return;
@ -117,12 +117,15 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
} }
scene.RegisterModuleInterface<IInventoryService>(this); scene.RegisterModuleInterface<IInventoryService>(this);
base.AddRegion(scene); m_cache.AddRegion(scene);
} }
public override void RemoveRegion(Scene scene) public void RemoveRegion(Scene scene)
{ {
base.RemoveRegion(scene); if (!m_Enabled)
return;
m_cache.RemoveRegion(scene);
} }
public void RegionLoaded(Scene scene) public void RegionLoaded(Scene scene)
@ -138,22 +141,22 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
#region IInventoryService #region IInventoryService
public bool CreateUserInventory(UUID user) public override bool CreateUserInventory(UUID user)
{ {
return false; return false;
} }
public List<InventoryFolderBase> GetInventorySkeleton(UUID userId) public override List<InventoryFolderBase> GetInventorySkeleton(UUID userId)
{ {
return new List<InventoryFolderBase>(); return new List<InventoryFolderBase>();
} }
public InventoryCollection GetUserInventory(UUID userID) public override InventoryCollection GetUserInventory(UUID userID)
{ {
return null; return null;
} }
public void GetUserInventory(UUID userID, InventoryReceiptCallback callback) public override void GetUserInventory(UUID userID, InventoryReceiptCallback callback)
{ {
UUID sessionID = GetSessionID(userID); UUID sessionID = GetSessionID(userID);
try try
@ -180,7 +183,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
return m_RemoteConnector.GetSystemFolders(userID.ToString(), sessionID); return m_RemoteConnector.GetSystemFolders(userID.ToString(), sessionID);
} }
public InventoryCollection GetFolderContent(UUID userID, UUID folderID) public override InventoryCollection GetFolderContent(UUID userID, UUID folderID)
{ {
UUID sessionID = GetSessionID(userID); UUID sessionID = GetSessionID(userID);
try try
@ -199,12 +202,12 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
return nullCollection; return nullCollection;
} }
public List<InventoryItemBase> GetFolderItems(UUID userID, UUID folderID) public override List<InventoryItemBase> GetFolderItems(UUID userID, UUID folderID)
{ {
return new List<InventoryItemBase>(); return new List<InventoryItemBase>();
} }
public bool AddFolder(InventoryFolderBase folder) public override bool AddFolder(InventoryFolderBase folder)
{ {
if (folder == null) if (folder == null)
return false; return false;
@ -213,7 +216,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
return m_RemoteConnector.AddFolder(folder.Owner.ToString(), folder, sessionID); return m_RemoteConnector.AddFolder(folder.Owner.ToString(), folder, sessionID);
} }
public bool UpdateFolder(InventoryFolderBase folder) public override bool UpdateFolder(InventoryFolderBase folder)
{ {
if (folder == null) if (folder == null)
return false; return false;
@ -222,7 +225,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
return m_RemoteConnector.UpdateFolder(folder.Owner.ToString(), folder, sessionID); return m_RemoteConnector.UpdateFolder(folder.Owner.ToString(), folder, sessionID);
} }
public bool MoveFolder(InventoryFolderBase folder) public override bool MoveFolder(InventoryFolderBase folder)
{ {
if (folder == null) if (folder == null)
return false; return false;
@ -231,7 +234,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
return m_RemoteConnector.MoveFolder(folder.Owner.ToString(), folder, sessionID); return m_RemoteConnector.MoveFolder(folder.Owner.ToString(), folder, sessionID);
} }
public bool PurgeFolder(InventoryFolderBase folder) public override bool PurgeFolder(InventoryFolderBase folder)
{ {
if (folder == null) if (folder == null)
return false; return false;
@ -240,7 +243,10 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
return m_RemoteConnector.PurgeFolder(folder.Owner.ToString(), folder, sessionID); return m_RemoteConnector.PurgeFolder(folder.Owner.ToString(), folder, sessionID);
} }
public bool AddItem(InventoryItemBase item) // public bool AddItem(InventoryItemBase item) inherited
// Uses AddItemPlain
protected override bool AddItemPlain(InventoryItemBase item)
{ {
if (item == null) if (item == null)
return false; return false;
@ -249,7 +255,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
return m_RemoteConnector.AddItem(item.Owner.ToString(), item, sessionID); return m_RemoteConnector.AddItem(item.Owner.ToString(), item, sessionID);
} }
public bool UpdateItem(InventoryItemBase item) public override bool UpdateItem(InventoryItemBase item)
{ {
if (item == null) if (item == null)
return false; return false;
@ -258,7 +264,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
return m_RemoteConnector.UpdateItem(item.Owner.ToString(), item, sessionID); return m_RemoteConnector.UpdateItem(item.Owner.ToString(), item, sessionID);
} }
public bool DeleteItem(InventoryItemBase item) public override bool DeleteItem(InventoryItemBase item)
{ {
if (item == null) if (item == null)
return false; return false;
@ -267,7 +273,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
return m_RemoteConnector.DeleteItem(item.Owner.ToString(), item, sessionID); return m_RemoteConnector.DeleteItem(item.Owner.ToString(), item, sessionID);
} }
public InventoryItemBase QueryItem(InventoryItemBase item) public override InventoryItemBase QueryItem(InventoryItemBase item)
{ {
if (item == null) if (item == null)
return null; return null;
@ -276,7 +282,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
return m_RemoteConnector.QueryItem(item.Owner.ToString(), item, sessionID); return m_RemoteConnector.QueryItem(item.Owner.ToString(), item, sessionID);
} }
public InventoryFolderBase QueryFolder(InventoryFolderBase folder) public override InventoryFolderBase QueryFolder(InventoryFolderBase folder)
{ {
if (folder == null) if (folder == null)
return null; return null;
@ -285,17 +291,17 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
return m_RemoteConnector.QueryFolder(folder.Owner.ToString(), folder, sessionID); return m_RemoteConnector.QueryFolder(folder.Owner.ToString(), folder, sessionID);
} }
public bool HasInventoryForUser(UUID userID) public override bool HasInventoryForUser(UUID userID)
{ {
return false; return false;
} }
public InventoryFolderBase GetRootFolder(UUID userID) public override InventoryFolderBase GetRootFolder(UUID userID)
{ {
return null; return null;
} }
public List<InventoryItemBase> GetActiveGestures(UUID userId) public override List<InventoryItemBase> GetActiveGestures(UUID userId)
{ {
return new List<InventoryItemBase>(); return new List<InventoryItemBase>();
} }

View File

@ -429,7 +429,7 @@ namespace OpenSim.Region.Framework.Scenes
private RequestParcelPrimCountUpdate handlerRequestParcelPrimCountUpdate = null; private RequestParcelPrimCountUpdate handlerRequestParcelPrimCountUpdate = null;
private ParcelPrimCountTainted handlerParcelPrimCountTainted = null; private ParcelPrimCountTainted handlerParcelPrimCountTainted = null;
private ObjectBeingRemovedFromScene handlerObjectBeingRemovedFromScene = null; private ObjectBeingRemovedFromScene handlerObjectBeingRemovedFromScene = null;
private ScriptTimerEvent handlerScriptTimerEvent = null; // TODO: unused: private ScriptTimerEvent handlerScriptTimerEvent = null;
private EstateToolsSunUpdate handlerEstateToolsSunUpdate = null; private EstateToolsSunUpdate handlerEstateToolsSunUpdate = null;
private ScriptColliding handlerCollidingStart = null; private ScriptColliding handlerCollidingStart = null;

View File

@ -622,8 +622,26 @@ namespace OpenSim.Region.Framework.Scenes
"[AGENT INVENTORY]: Failed to move folder {0} to {1} for user {2}", "[AGENT INVENTORY]: Failed to move folder {0} to {1} for user {2}",
folderID, parentID, remoteClient.Name); folderID, parentID, remoteClient.Name);
} }
}
public void HandleMoveInventoryFolder2(IClientAPI remoteClient, UUID folderID, UUID parentID)
{
InventoryFolderBase folder = new InventoryFolderBase(folderID);
folder = InventoryService.QueryFolder(folder);
if (folder != null)
{
folder.ParentID = parentID;
if (!InventoryService.MoveFolder(folder))
m_log.WarnFormat("[AGENT INVENTORY]: could not move folder {0}", folderID);
else
m_log.DebugFormat("[AGENT INVENTORY]: folder {0} moved to parent {1}", folderID, parentID);
}
else
{
m_log.WarnFormat("[AGENT INVENTORY]: request to move folder {0} but folder not found", folderID);
}
} }
/// <summary> /// <summary>
/// This should delete all the items and folders in the given directory. /// This should delete all the items and folders in the given directory.
/// </summary> /// </summary>
@ -647,6 +665,17 @@ namespace OpenSim.Region.Framework.Scenes
"[AGENT INVENTORY]: Failed to purge folder for user {0} {1}", "[AGENT INVENTORY]: Failed to purge folder for user {0} {1}",
remoteClient.Name, remoteClient.AgentId); remoteClient.Name, remoteClient.AgentId);
} }
}
public void HandlePurgeInventoryDescendents2(IClientAPI remoteClient, UUID folderID)
{
InventoryFolderBase folder = new InventoryFolderBase(folderID);
if (InventoryService.PurgeFolder(folder))
m_log.DebugFormat("[AGENT INVENTORY]: folder {0} purged successfully", folderID);
else
m_log.WarnFormat("[AGENT INVENTORY]: could not purge folder {0}", folderID);
} }
} }
} }

View File

@ -1038,6 +1038,10 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
/// <summary>
/// Send out simstats data to all clients
/// </summary>
/// <param name="stats">Stats on the Simulator's performance</param>
private void SendSimStatsPackets(SimStats stats) private void SendSimStatsPackets(SimStats stats)
{ {
List<ScenePresence> StatSendAgents = GetScenePresences(); List<ScenePresence> StatSendAgents = GetScenePresences();
@ -1050,6 +1054,9 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
/// <summary>
/// Recount SceneObjectPart in parcel aabb
/// </summary>
private void UpdateLand() private void UpdateLand()
{ {
if (LandChannel != null) if (LandChannel != null)
@ -1061,11 +1068,17 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
/// <summary>
/// Update the terrain if it needs to be updated.
/// </summary>
private void UpdateTerrain() private void UpdateTerrain()
{ {
EventManager.TriggerTerrainTick(); EventManager.TriggerTerrainTick();
} }
/// <summary>
/// Back up queued up changes
/// </summary>
private void UpdateStorageBackup() private void UpdateStorageBackup()
{ {
if (!m_backingup) if (!m_backingup)
@ -1078,6 +1091,9 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
/// <summary>
/// Sends out the OnFrame event to the modules
/// </summary>
private void UpdateEvents() private void UpdateEvents()
{ {
m_eventManager.TriggerOnFrame(); m_eventManager.TriggerOnFrame();
@ -1133,6 +1149,10 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
/// <summary>
/// Synchronous force backup. For deletes and links/unlinks
/// </summary>
/// <param name="group">Object to be backed up</param>
public void ForceSceneObjectBackup(SceneObjectGroup group) public void ForceSceneObjectBackup(SceneObjectGroup group)
{ {
if (group != null) if (group != null)
@ -1141,6 +1161,13 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
/// <summary>
/// Return object to avatar Message
/// </summary>
/// <param name="agentID">Avatar Unique Id</param>
/// <param name="objectName">Name of object returned</param>
/// <param name="location">Location of object returned</param>
/// <param name="reason">Reasion for object return</param>
public void AddReturn(UUID agentID, string objectName, Vector3 location, string reason) public void AddReturn(UUID agentID, string objectName, Vector3 location, string reason)
{ {
lock (m_returns) lock (m_returns)
@ -1167,6 +1194,9 @@ namespace OpenSim.Region.Framework.Scenes
#region Load Terrain #region Load Terrain
/// <summary>
/// Store the terrain in the persistant data store
/// </summary>
public void SaveTerrain() public void SaveTerrain()
{ {
m_storageManager.DataStore.StoreTerrain(Heightmap.GetDoubles(), RegionInfo.RegionID); m_storageManager.DataStore.StoreTerrain(Heightmap.GetDoubles(), RegionInfo.RegionID);
@ -1269,6 +1299,10 @@ namespace OpenSim.Region.Framework.Scenes
#region Load Land #region Load Land
/// <summary>
/// Loads all Parcel data from the datastore for region identified by regionID
/// </summary>
/// <param name="regionID">Unique Identifier of the Region to load parcel data for</param>
public void loadAllLandObjectsFromStorage(UUID regionID) public void loadAllLandObjectsFromStorage(UUID regionID)
{ {
m_log.Info("[SCENE]: Loading land objects from storage"); m_log.Info("[SCENE]: Loading land objects from storage");
@ -1322,6 +1356,20 @@ namespace OpenSim.Region.Framework.Scenes
m_log.Info("[SCENE]: Loaded " + PrimsFromDB.Count.ToString() + " SceneObject(s)"); m_log.Info("[SCENE]: Loaded " + PrimsFromDB.Count.ToString() + " SceneObject(s)");
} }
/// <summary>
/// Gets a new rez location based on the raycast and the size of the object that is being rezzed.
/// </summary>
/// <param name="RayStart"></param>
/// <param name="RayEnd"></param>
/// <param name="RayTargetID"></param>
/// <param name="rot"></param>
/// <param name="bypassRayCast"></param>
/// <param name="RayEndIsIntersection"></param>
/// <param name="frontFacesOnly"></param>
/// <param name="scale"></param>
/// <param name="FaceCenter"></param>
/// <returns></returns>
public Vector3 GetNewRezLocation(Vector3 RayStart, Vector3 RayEnd, UUID RayTargetID, Quaternion rot, byte bypassRayCast, byte RayEndIsIntersection, bool frontFacesOnly, Vector3 scale, bool FaceCenter) public Vector3 GetNewRezLocation(Vector3 RayStart, Vector3 RayEnd, UUID RayTargetID, Quaternion rot, byte bypassRayCast, byte RayEndIsIntersection, bool frontFacesOnly, Vector3 scale, bool FaceCenter)
{ {
Vector3 pos = Vector3.Zero; Vector3 pos = Vector3.Zero;
@ -1412,6 +1460,19 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
/// <summary>
/// Create a New SceneObjectGroup/Part by raycasting
/// </summary>
/// <param name="ownerID"></param>
/// <param name="groupID"></param>
/// <param name="RayEnd"></param>
/// <param name="rot"></param>
/// <param name="shape"></param>
/// <param name="bypassRaycast"></param>
/// <param name="RayStart"></param>
/// <param name="RayTargetID"></param>
/// <param name="RayEndIsIntersection"></param>
public virtual void AddNewPrim(UUID ownerID, UUID groupID, Vector3 RayEnd, Quaternion rot, PrimitiveBaseShape shape, public virtual void AddNewPrim(UUID ownerID, UUID groupID, Vector3 RayEnd, Quaternion rot, PrimitiveBaseShape shape,
byte bypassRaycast, Vector3 RayStart, UUID RayTargetID, byte bypassRaycast, Vector3 RayStart, UUID RayTargetID,
byte RayEndIsIntersection) byte RayEndIsIntersection)
@ -1829,6 +1890,12 @@ namespace OpenSim.Region.Framework.Scenes
return true; return true;
} }
/// <summary>
/// Attachment rezzing
/// </summary>
/// <param name="userID">Agent Unique ID</param>
/// <param name="itemID">Object ID</param>
/// <returns>False</returns>
public virtual bool IncomingCreateObject(UUID userID, UUID itemID) public virtual bool IncomingCreateObject(UUID userID, UUID itemID)
{ {
ScenePresence sp = GetScenePresence(userID); ScenePresence sp = GetScenePresence(userID);
@ -1841,6 +1908,13 @@ namespace OpenSim.Region.Framework.Scenes
return false; return false;
} }
/// <summary>
/// Adds a Scene Object group to the Scene.
/// Verifies that the creator of the object is not banned from the simulator.
/// Checks if the item is an Attachment
/// </summary>
/// <param name="sceneObject"></param>
/// <returns>True if the SceneObjectGroup was added, False if it was not</returns>
public bool AddSceneObject(SceneObjectGroup sceneObject) public bool AddSceneObject(SceneObjectGroup sceneObject)
{ {
// If the user is banned, we won't let any of their objects // If the user is banned, we won't let any of their objects
@ -1933,6 +2007,10 @@ namespace OpenSim.Region.Framework.Scenes
#region Add/Remove Avatar Methods #region Add/Remove Avatar Methods
/// <summary>
/// Adding a New Client and Create a Presence for it.
/// </summary>
/// <param name="client"></param>
public override void AddNewClient(IClientAPI client) public override void AddNewClient(IClientAPI client)
{ {
SubscribeToClientEvents(client); SubscribeToClientEvents(client);
@ -1977,6 +2055,10 @@ namespace OpenSim.Region.Framework.Scenes
EventManager.TriggerOnNewClient(client); EventManager.TriggerOnNewClient(client);
} }
/// <summary>
/// Register for events from the client
/// </summary>
/// <param name="client">The IClientAPI of the connected client</param>
protected virtual void SubscribeToClientEvents(IClientAPI client) protected virtual void SubscribeToClientEvents(IClientAPI client)
{ {
client.OnRegionHandShakeReply += SendLayerData; client.OnRegionHandShakeReply += SendLayerData;
@ -2019,12 +2101,13 @@ namespace OpenSim.Region.Framework.Scenes
client.OnUpdatePrimFlags += m_sceneGraph.UpdatePrimFlags; client.OnUpdatePrimFlags += m_sceneGraph.UpdatePrimFlags;
client.OnRequestObjectPropertiesFamily += m_sceneGraph.RequestObjectPropertiesFamily; client.OnRequestObjectPropertiesFamily += m_sceneGraph.RequestObjectPropertiesFamily;
client.OnObjectPermissions += HandleObjectPermissionsUpdate; client.OnObjectPermissions += HandleObjectPermissionsUpdate;
client.OnCreateNewInventoryItem += CreateNewInventoryItem; client.OnCreateNewInventoryItem += CreateNewInventoryItem;
client.OnCreateNewInventoryFolder += HandleCreateInventoryFolder; client.OnCreateNewInventoryFolder += HandleCreateInventoryFolder;
client.OnUpdateInventoryFolder += HandleUpdateInventoryFolder; client.OnUpdateInventoryFolder += HandleUpdateInventoryFolder;
client.OnMoveInventoryFolder += HandleMoveInventoryFolder; client.OnMoveInventoryFolder += HandleMoveInventoryFolder; // 2; //!!
client.OnFetchInventoryDescendents += HandleFetchInventoryDescendents; client.OnFetchInventoryDescendents += HandleFetchInventoryDescendents;
client.OnPurgeInventoryDescendents += HandlePurgeInventoryDescendents; client.OnPurgeInventoryDescendents += HandlePurgeInventoryDescendents; // 2; //!!
client.OnFetchInventory += HandleFetchInventory; client.OnFetchInventory += HandleFetchInventory;
client.OnUpdateInventoryItem += UpdateInventoryItemAsset; client.OnUpdateInventoryItem += UpdateInventoryItemAsset;
client.OnCopyInventoryItem += CopyInventoryItem; client.OnCopyInventoryItem += CopyInventoryItem;
@ -2036,6 +2119,7 @@ namespace OpenSim.Region.Framework.Scenes
client.OnRemoveTaskItem += RemoveTaskInventory; client.OnRemoveTaskItem += RemoveTaskInventory;
client.OnUpdateTaskInventory += UpdateTaskInventory; client.OnUpdateTaskInventory += UpdateTaskInventory;
client.OnMoveTaskItem += ClientMoveTaskInventoryItem; client.OnMoveTaskItem += ClientMoveTaskInventoryItem;
client.OnGrabObject += ProcessObjectGrab; client.OnGrabObject += ProcessObjectGrab;
client.OnDeGrabObject += ProcessObjectDeGrab; client.OnDeGrabObject += ProcessObjectDeGrab;
client.OnMoneyTransferRequest += ProcessMoneyTransferRequest; client.OnMoneyTransferRequest += ProcessMoneyTransferRequest;
@ -2068,8 +2152,8 @@ namespace OpenSim.Region.Framework.Scenes
/// <summary> /// <summary>
/// Teleport an avatar to their home region /// Teleport an avatar to their home region
/// </summary> /// </summary>
/// <param name="agentId"></param> /// <param name="agentId">The avatar's Unique ID</param>
/// <param name="client"></param> /// <param name="client">The IClientAPI for the client</param>
public virtual void TeleportClientHome(UUID agentId, IClientAPI client) public virtual void TeleportClientHome(UUID agentId, IClientAPI client)
{ {
UserProfileData UserProfile = CommsManager.UserService.GetUserProfile(agentId); UserProfileData UserProfile = CommsManager.UserService.GetUserProfile(agentId);
@ -2097,6 +2181,21 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
/// <summary>
/// Duplicates object specified by localID at position raycasted against RayTargetObject using
/// RayEnd and RayStart to determine what the angle of the ray is
/// </summary>
/// <param name="localID">ID of object to duplicate</param>
/// <param name="dupeFlags"></param>
/// <param name="AgentID">Agent doing the duplication</param>
/// <param name="GroupID">Group of new object</param>
/// <param name="RayTargetObj">The target of the Ray</param>
/// <param name="RayEnd">The ending of the ray (farthest away point)</param>
/// <param name="RayStart">The Beginning of the ray (closest point)</param>
/// <param name="BypassRaycast">Bool to bypass raycasting</param>
/// <param name="RayEndIsIntersection">The End specified is the place to add the object</param>
/// <param name="CopyCenters">Position the object at the center of the face that it's colliding with</param>
/// <param name="CopyRotates">Rotate the object the same as the localID object</param>
public void doObjectDuplicateOnRay(uint localID, uint dupeFlags, UUID AgentID, UUID GroupID, public void doObjectDuplicateOnRay(uint localID, uint dupeFlags, UUID AgentID, UUID GroupID,
UUID RayTargetObj, Vector3 RayEnd, Vector3 RayStart, UUID RayTargetObj, Vector3 RayEnd, Vector3 RayStart,
bool BypassRaycast, bool RayEndIsIntersection, bool CopyCenters, bool CopyRotates) bool BypassRaycast, bool RayEndIsIntersection, bool CopyCenters, bool CopyRotates)
@ -2168,6 +2267,14 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
/// <summary>
/// Sets the Home Point. The GridService uses this to know where to put a user when they log-in
/// </summary>
/// <param name="remoteClient"></param>
/// <param name="regionHandle"></param>
/// <param name="position"></param>
/// <param name="lookAt"></param>
/// <param name="flags"></param>
public virtual void SetHomeRezPoint(IClientAPI remoteClient, ulong regionHandle, Vector3 position, Vector3 lookAt, uint flags) public virtual void SetHomeRezPoint(IClientAPI remoteClient, ulong regionHandle, Vector3 position, Vector3 lookAt, uint flags)
{ {
UserProfileData UserProfile = CommsManager.UserService.GetUserProfile(remoteClient.AgentId); UserProfileData UserProfile = CommsManager.UserService.GetUserProfile(remoteClient.AgentId);
@ -2338,6 +2445,12 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
/// <summary>
/// Removes region from an avatar's known region list. This coincides with child agents. For each child agent, there will be a known region entry.
///
/// </summary>
/// <param name="avatarID"></param>
/// <param name="regionslst"></param>
public void HandleRemoveKnownRegionsFromAvatar(UUID avatarID, List<ulong> regionslst) public void HandleRemoveKnownRegionsFromAvatar(UUID avatarID, List<ulong> regionslst)
{ {
ScenePresence av = GetScenePresence(avatarID); ScenePresence av = GetScenePresence(avatarID);
@ -2353,12 +2466,19 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
/// <summary>
/// Closes all endpoints with the circuitcode provided.
/// </summary>
/// <param name="circuitcode">Circuit Code of the endpoint to close</param>
public override void CloseAllAgents(uint circuitcode) public override void CloseAllAgents(uint circuitcode)
{ {
// Called by ClientView to kill all circuit codes // Called by ClientView to kill all circuit codes
ClientManager.CloseAllAgents(circuitcode); ClientManager.CloseAllAgents(circuitcode);
} }
/// <summary>
/// Inform all other ScenePresences on this Scene that someone else has changed position on the minimap.
/// </summary>
public void NotifyMyCoarseLocationChange() public void NotifyMyCoarseLocationChange()
{ {
ForEachScenePresence(delegate(ScenePresence presence) { presence.CoarseLocationChange(); }); ForEachScenePresence(delegate(ScenePresence presence) { presence.CoarseLocationChange(); });
@ -2453,9 +2573,10 @@ namespace OpenSim.Region.Framework.Scenes
/// The return bool should allow for connections to be refused, but as not all calling paths /// The return bool should allow for connections to be refused, but as not all calling paths
/// take proper notice of it let, we allowed banned users in still. /// take proper notice of it let, we allowed banned users in still.
/// </summary> /// </summary>
/// <param name="regionHandle"></param> /// <param name="agent">CircuitData of the agent who is connecting</param>
/// <param name="agent"></param> /// <param name="reason">Outputs the reason for the false response on this string</param>
/// <param name="reason"></param> /// <returns>True if the region accepts this agent. False if it does not. False will
/// also return a reason.</returns>
public bool NewUserConnection(AgentCircuitData agent, out string reason) public bool NewUserConnection(AgentCircuitData agent, out string reason)
{ {
// Don't disable this log message - it's too helpful // Don't disable this log message - it's too helpful
@ -2528,6 +2649,13 @@ namespace OpenSim.Region.Framework.Scenes
return true; return true;
} }
/// <summary>
/// Verifies that the user has a session on the Grid
/// </summary>
/// <param name="agent">Circuit Data of the Agent we're verifying</param>
/// <param name="reason">Outputs the reason for the false response on this string</param>
/// <returns>True if the user has a session on the grid. False if it does not. False will
/// also return a reason.</returns>
public virtual bool AuthenticateUser(AgentCircuitData agent, out string reason) public virtual bool AuthenticateUser(AgentCircuitData agent, out string reason)
{ {
reason = String.Empty; reason = String.Empty;
@ -2540,6 +2668,13 @@ namespace OpenSim.Region.Framework.Scenes
return result; return result;
} }
/// <summary>
/// Verify if the user can connect to this region. Checks the banlist and ensures that the region is set for public access
/// </summary>
/// <param name="agent">The circuit data for the agent</param>
/// <param name="reason">outputs the reason to this string</param>
/// <returns>True if the region accepts this agent. False if it does not. False will
/// also return a reason.</returns>
protected virtual bool AuthorizeUser(AgentCircuitData agent, out string reason) protected virtual bool AuthorizeUser(AgentCircuitData agent, out string reason)
{ {
reason = String.Empty; reason = String.Empty;
@ -2598,16 +2733,32 @@ namespace OpenSim.Region.Framework.Scenes
return true; return true;
} }
/// <summary>
/// Update an AgentCircuitData object with new information
/// </summary>
/// <param name="data">Information to update the AgentCircuitData with</param>
public void UpdateCircuitData(AgentCircuitData data) public void UpdateCircuitData(AgentCircuitData data)
{ {
m_authenticateHandler.UpdateAgentData(data); m_authenticateHandler.UpdateAgentData(data);
} }
/// <summary>
/// Change the Circuit Code for the user's Circuit Data
/// </summary>
/// <param name="oldcc">The old Circuit Code. Must match a previous circuit code</param>
/// <param name="newcc">The new Circuit Code. Must not be an already existing circuit code</param>
/// <returns>True if we successfully changed it. False if we did not</returns>
public bool ChangeCircuitCode(uint oldcc, uint newcc) public bool ChangeCircuitCode(uint oldcc, uint newcc)
{ {
return m_authenticateHandler.TryChangeCiruitCode(oldcc, newcc); return m_authenticateHandler.TryChangeCiruitCode(oldcc, newcc);
} }
/// <summary>
/// The Grid has requested that we log-off a user. Log them off.
/// </summary>
/// <param name="AvatarID">Unique ID of the avatar to log-off</param>
/// <param name="RegionSecret">SecureSessionID of the user, or the RegionSecret text when logging on to the grid</param>
/// <param name="message">message to display to the user. Reason for being logged off</param>
public void HandleLogOffUserFromGrid(UUID AvatarID, UUID RegionSecret, string message) public void HandleLogOffUserFromGrid(UUID AvatarID, UUID RegionSecret, string message)
{ {
ScenePresence loggingOffUser = null; ScenePresence loggingOffUser = null;
@ -2673,6 +2824,13 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
/// <summary>
/// We've got an update about an agent that sees into this region,
/// send it to ScenePresence for processing It's the full data.
/// </summary>
/// <param name="cAgentData">Agent that contains all of the relevant things about an agent.
/// Appearance, animations, position, etc.</param>
/// <returns>true if we handled it.</returns>
public virtual bool IncomingChildAgentDataUpdate(AgentData cAgentData) public virtual bool IncomingChildAgentDataUpdate(AgentData cAgentData)
{ {
// m_log.DebugFormat( // m_log.DebugFormat(
@ -2690,6 +2848,12 @@ namespace OpenSim.Region.Framework.Scenes
return false; return false;
} }
/// <summary>
/// We've got an update about an agent that sees into this region,
/// send it to ScenePresence for processing It's only positional data
/// </summary>
/// <param name="cAgentData">AgentPosition that contains agent positional data so we can know what to send</param>
/// <returns>true if we handled it.</returns>
public virtual bool IncomingChildAgentDataUpdate(AgentPosition cAgentData) public virtual bool IncomingChildAgentDataUpdate(AgentPosition cAgentData)
{ {
//m_log.Debug(" XXX Scene IncomingChildAgentDataUpdate POSITION in " + RegionInfo.RegionName); //m_log.Debug(" XXX Scene IncomingChildAgentDataUpdate POSITION in " + RegionInfo.RegionName);

View File

@ -48,6 +48,9 @@ namespace OpenSim.Region.Framework.Scenes
public delegate void RemoveKnownRegionsFromAvatarList(UUID avatarID, List<ulong> regionlst); public delegate void RemoveKnownRegionsFromAvatarList(UUID avatarID, List<ulong> regionlst);
/// <summary>
/// Class that Region communications runs through
/// </summary>
public class SceneCommunicationService //one instance per region public class SceneCommunicationService //one instance per region
{ {
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
@ -60,15 +63,46 @@ namespace OpenSim.Region.Framework.Scenes
protected List<UUID> m_agentsInTransit; protected List<UUID> m_agentsInTransit;
/// <summary>
/// An agent is crossing into this region
/// </summary>
public event AgentCrossing OnAvatarCrossingIntoRegion; public event AgentCrossing OnAvatarCrossingIntoRegion;
/// <summary>
/// A user will arrive shortly, set up appropriate credentials so it can connect
/// </summary>
public event ExpectUserDelegate OnExpectUser; public event ExpectUserDelegate OnExpectUser;
/// <summary>
/// A Prim will arrive shortly
/// </summary>
public event ExpectPrimDelegate OnExpectPrim; public event ExpectPrimDelegate OnExpectPrim;
public event CloseAgentConnection OnCloseAgentConnection; public event CloseAgentConnection OnCloseAgentConnection;
/// <summary>
/// A new prim has arrived
/// </summary>
public event PrimCrossing OnPrimCrossingIntoRegion; public event PrimCrossing OnPrimCrossingIntoRegion;
/// <summary>
/// A New Region is up and available
/// </summary>
public event RegionUp OnRegionUp; public event RegionUp OnRegionUp;
/// <summary>
/// We have a child agent for this avatar and we're getting a status update about it
/// </summary>
public event ChildAgentUpdate OnChildAgentUpdate; public event ChildAgentUpdate OnChildAgentUpdate;
//public event RemoveKnownRegionsFromAvatarList OnRemoveKnownRegionFromAvatar; //public event RemoveKnownRegionsFromAvatarList OnRemoveKnownRegionFromAvatar;
/// <summary>
/// Time to log one of our users off. Grid Service sends this mostly
/// </summary>
public event LogOffUser OnLogOffUser; public event LogOffUser OnLogOffUser;
/// <summary>
/// A region wants land data from us!
/// </summary>
public event GetLandData OnGetLandData; public event GetLandData OnGetLandData;
private AgentCrossing handlerAvatarCrossingIntoRegion = null; // OnAvatarCrossingIntoRegion; private AgentCrossing handlerAvatarCrossingIntoRegion = null; // OnAvatarCrossingIntoRegion;
@ -123,11 +157,20 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
/// <summary>
/// Returns a region with the name closest to string provided
/// </summary>
/// <param name="name">Partial Region Name for matching</param>
/// <returns>Region Information for the region</returns>
public RegionInfo RequestClosestRegion(string name) public RegionInfo RequestClosestRegion(string name)
{ {
return m_commsProvider.GridService.RequestClosestRegion(name); return m_commsProvider.GridService.RequestClosestRegion(name);
} }
/// <summary>
/// This region is shutting down, de-register all events!
/// De-Register region from Grid!
/// </summary>
public void Close() public void Close()
{ {
if (regionCommsHost != null) if (regionCommsHost != null)
@ -159,10 +202,9 @@ namespace OpenSim.Region.Framework.Scenes
#region CommsManager Event handlers #region CommsManager Event handlers
/// <summary> /// <summary>
/// /// A New User will arrive shortly, Informs the scene that there's a new user on the way
/// </summary> /// </summary>
/// <param name="regionHandle"></param> /// <param name="agent">Data we need to ensure that the agent can connect</param>
/// <param name="agent"></param>
/// ///
protected void NewUserConnection(AgentCircuitData agent) protected void NewUserConnection(AgentCircuitData agent)
{ {
@ -174,6 +216,12 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
/// <summary>
/// The Grid has requested us to log-off the user
/// </summary>
/// <param name="AgentID">Unique ID of agent to log-off</param>
/// <param name="RegionSecret">The secret string that the region establishes with the grid when registering</param>
/// <param name="message">The message to send to the user that tells them why they were logged off</param>
protected void GridLogOffUser(UUID AgentID, UUID RegionSecret, string message) protected void GridLogOffUser(UUID AgentID, UUID RegionSecret, string message)
{ {
handlerLogOffUser = OnLogOffUser; handlerLogOffUser = OnLogOffUser;
@ -183,6 +231,11 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
/// <summary>
/// A New Region is now available. Inform the scene that there is a new region available.
/// </summary>
/// <param name="region">Information about the new region that is available</param>
/// <returns>True if the event was handled</returns>
protected bool newRegionUp(RegionInfo region) protected bool newRegionUp(RegionInfo region)
{ {
handlerRegionUp = OnRegionUp; handlerRegionUp = OnRegionUp;
@ -194,6 +247,11 @@ namespace OpenSim.Region.Framework.Scenes
return true; return true;
} }
/// <summary>
/// Inform the scene that we've got an update about a child agent that we have
/// </summary>
/// <param name="cAgentData"></param>
/// <returns></returns>
protected bool ChildAgentUpdate(ChildAgentDataUpdate cAgentData) protected bool ChildAgentUpdate(ChildAgentDataUpdate cAgentData)
{ {
handlerChildAgentUpdate = OnChildAgentUpdate; handlerChildAgentUpdate = OnChildAgentUpdate;
@ -204,6 +262,7 @@ namespace OpenSim.Region.Framework.Scenes
return true; return true;
} }
protected void AgentCrossing(UUID agentID, Vector3 position, bool isFlying) protected void AgentCrossing(UUID agentID, Vector3 position, bool isFlying)
{ {
handlerAvatarCrossingIntoRegion = OnAvatarCrossingIntoRegion; handlerAvatarCrossingIntoRegion = OnAvatarCrossingIntoRegion;
@ -213,6 +272,13 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
/// <summary>
/// We have a new prim from a neighbor
/// </summary>
/// <param name="primID">unique ID for the primative</param>
/// <param name="objXMLData">XML2 encoded data of the primative</param>
/// <param name="XMLMethod">An Int that represents the version of the XMLMethod</param>
/// <returns>True if the prim was accepted, false if it was not</returns>
protected bool IncomingPrimCrossing(UUID primID, String objXMLData, int XMLMethod) protected bool IncomingPrimCrossing(UUID primID, String objXMLData, int XMLMethod)
{ {
handlerExpectPrim = OnExpectPrim; handlerExpectPrim = OnExpectPrim;

View File

@ -1098,30 +1098,29 @@ if (m_shape != null) {
} }
} }
private void handleTimerAccounting(uint localID, double interval) // TODO: unused:
{ // private void handleTimerAccounting(uint localID, double interval)
if (localID == LocalId) // {
{ // if (localID == LocalId)
// {
float sec = (float)interval; // float sec = (float)interval;
if (m_parentGroup != null) // if (m_parentGroup != null)
{ // {
if (sec == 0) // if (sec == 0)
{ // {
if (m_parentGroup.scriptScore + 0.001f >= float.MaxValue - 0.001) // if (m_parentGroup.scriptScore + 0.001f >= float.MaxValue - 0.001)
m_parentGroup.scriptScore = 0; // m_parentGroup.scriptScore = 0;
//
m_parentGroup.scriptScore += 0.001f; // m_parentGroup.scriptScore += 0.001f;
return; // return;
} // }
//
if (m_parentGroup.scriptScore + (0.001f / sec) >= float.MaxValue - (0.001f / sec)) // if (m_parentGroup.scriptScore + (0.001f / sec) >= float.MaxValue - (0.001f / sec))
m_parentGroup.scriptScore = 0; // m_parentGroup.scriptScore = 0;
m_parentGroup.scriptScore += (0.001f / sec); // m_parentGroup.scriptScore += (0.001f / sec);
} // }
// }
} // }
}
#endregion Private Methods #endregion Private Methods
@ -1248,7 +1247,6 @@ if (m_shape != null) {
} }
} }
/// <summary> /// <summary>
/// hook to the physics scene to apply angular impulse /// hook to the physics scene to apply angular impulse
/// This is sent up to the group, which then finds the root prim /// This is sent up to the group, which then finds the root prim
@ -1809,7 +1807,6 @@ if (m_shape != null) {
m_parentGroup.SetHoverHeight(0f, PIDHoverType.Ground, 0f); m_parentGroup.SetHoverHeight(0f, PIDHoverType.Ground, 0f);
} }
public virtual void OnGrab(Vector3 offsetPos, IClientAPI remoteClient) public virtual void OnGrab(Vector3 offsetPos, IClientAPI remoteClient)
{ {
} }

View File

@ -113,6 +113,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
agent.InventoryFolder = UUID.Zero; agent.InventoryFolder = UUID.Zero;
agent.startpos = Vector3.Zero; agent.startpos = Vector3.Zero;
agent.CapsPath = GetRandomCapsObjectPath(); agent.CapsPath = GetRandomCapsObjectPath();
agent.ChildrenCapSeeds = new Dictionary<ulong, string>();
string reason; string reason;
scene.NewUserConnection(agent, out reason); scene.NewUserConnection(agent, out reason);
@ -147,7 +148,13 @@ namespace OpenSim.Region.Framework.Scenes.Tests
TestHelper.InMethod(); TestHelper.InMethod();
string reason; string reason;
if (acd1 == null)
fixNullPresence();
scene.NewUserConnection(acd1, out reason); scene.NewUserConnection(acd1, out reason);
if (testclient == null)
testclient = new TestClient(acd1, scene);
scene.AddNewClient(testclient); scene.AddNewClient(testclient);
ScenePresence presence = scene.GetScenePresence(agent1); ScenePresence presence = scene.GetScenePresence(agent1);
@ -162,6 +169,24 @@ namespace OpenSim.Region.Framework.Scenes.Tests
Assert.That(neighbours.Count, Is.EqualTo(2)); Assert.That(neighbours.Count, Is.EqualTo(2));
} }
public void fixNullPresence()
{
string firstName = "testfirstname";
AgentCircuitData agent = new AgentCircuitData();
agent.AgentID = agent1;
agent.firstname = firstName;
agent.lastname = "testlastname";
agent.SessionID = UUID.Zero;
agent.SecureSessionID = UUID.Zero;
agent.circuitcode = 123;
agent.BaseFolder = UUID.Zero;
agent.InventoryFolder = UUID.Zero;
agent.startpos = Vector3.Zero;
agent.CapsPath = GetRandomCapsObjectPath();
acd1 = agent;
}
[Test] [Test]
public void T013_TestRemoveNeighbourRegion() public void T013_TestRemoveNeighbourRegion()

View File

@ -38,6 +38,7 @@ using OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion;
using OpenSim.Tests.Common; using OpenSim.Tests.Common;
using OpenSim.Tests.Common.Mock; using OpenSim.Tests.Common.Mock;
using OpenSim.Tests.Common.Setup; using OpenSim.Tests.Common.Setup;
using System.Threading;
namespace OpenSim.Region.Framework.Scenes.Tests namespace OpenSim.Region.Framework.Scenes.Tests
{ {
@ -55,56 +56,130 @@ namespace OpenSim.Region.Framework.Scenes.Tests
public void TestSimpleNotNeighboursTeleport() public void TestSimpleNotNeighboursTeleport()
{ {
TestHelper.InMethod(); TestHelper.InMethod();
ThreadRunResults results = new ThreadRunResults();
results.Result = false;
results.Message = "Test did not run";
TestRunning testClass = new TestRunning(results);
Thread testThread = new Thread(testClass.run);
try
{
// Seems kind of redundant to start a thread and then join it, however.. We need to protect against
// A thread abort exception in the simulator code.
testThread.Start();
testThread.Join();
}
catch (ThreadAbortException)
{
}
Assert.That(testClass.results.Result, Is.EqualTo(true), testClass.results.Message);
// Console.WriteLine("Beginning test {0}", MethodBase.GetCurrentMethod()); // Console.WriteLine("Beginning test {0}", MethodBase.GetCurrentMethod());
}
}
public class ThreadRunResults
{
public bool Result = false;
public string Message = string.Empty;
}
public class TestRunning
{
public ThreadRunResults results;
public TestRunning(ThreadRunResults t)
{
results = t;
}
public void run(object o)
{
//results.Result = true;
log4net.Config.XmlConfigurator.Configure(); log4net.Config.XmlConfigurator.Configure();
UUID sceneAId = UUID.Parse("00000000-0000-0000-0000-000000000100"); UUID sceneAId = UUID.Parse("00000000-0000-0000-0000-000000000100");
UUID sceneBId = UUID.Parse("00000000-0000-0000-0000-000000000200"); UUID sceneBId = UUID.Parse("00000000-0000-0000-0000-000000000200");
TestCommunicationsManager cm = new TestCommunicationsManager(); TestCommunicationsManager cm = new TestCommunicationsManager();
// shared module // shared module
ISharedRegionModule interregionComms = new RESTInterregionComms(); ISharedRegionModule interregionComms = new RESTInterregionComms();
Scene sceneA = SceneSetupHelpers.SetupScene("sceneA", sceneAId, 1000, 1000, cm); Scene sceneA = SceneSetupHelpers.SetupScene("sceneA", sceneAId, 1000, 1000, cm);
SceneSetupHelpers.SetupSceneModules(sceneA, new IniConfigSource(), interregionComms); SceneSetupHelpers.SetupSceneModules(sceneA, new IniConfigSource(), interregionComms);
sceneA.RegisterRegionWithGrid(); sceneA.RegisterRegionWithGrid();
Scene sceneB = SceneSetupHelpers.SetupScene("sceneB", sceneBId, 1010, 1010, cm); Scene sceneB = SceneSetupHelpers.SetupScene("sceneB", sceneBId, 1010, 1010, cm);
SceneSetupHelpers.SetupSceneModules(sceneB, new IniConfigSource(), interregionComms); SceneSetupHelpers.SetupSceneModules(sceneB, new IniConfigSource(), interregionComms);
sceneB.RegisterRegionWithGrid(); sceneB.RegisterRegionWithGrid();
UUID agentId = UUID.Parse("00000000-0000-0000-0000-000000000041"); UUID agentId = UUID.Parse("00000000-0000-0000-0000-000000000041");
TestClient client = SceneSetupHelpers.AddRootAgent(sceneA, agentId); TestClient client = SceneSetupHelpers.AddRootAgent(sceneA, agentId);
ICapabilitiesModule sceneACapsModule = sceneA.RequestModuleInterface<ICapabilitiesModule>(); ICapabilitiesModule sceneACapsModule = sceneA.RequestModuleInterface<ICapabilitiesModule>();
results.Result = (sceneACapsModule.GetCapsPath(agentId) == client.CapsSeedUrl);
if (!results.Result)
{
results.Message = "Incorrect caps object path set up in sceneA";
return;
}
/*
Assert.That( Assert.That(
sceneACapsModule.GetCapsPath(agentId), sceneACapsModule.GetCapsPath(agentId),
Is.EqualTo(client.CapsSeedUrl), Is.EqualTo(client.CapsSeedUrl),
"Incorrect caps object path set up in sceneA"); "Incorrect caps object path set up in sceneA");
*/
// FIXME: This is a hack to get the test working - really the normal OpenSim mechanisms should be used. // FIXME: This is a hack to get the test working - really the normal OpenSim mechanisms should be used.
client.TeleportTargetScene = sceneB;
client.TeleportTargetScene = sceneB;
client.Teleport(sceneB.RegionInfo.RegionHandle, new Vector3(100, 100, 100), new Vector3(40, 40, 40)); client.Teleport(sceneB.RegionInfo.RegionHandle, new Vector3(100, 100, 100), new Vector3(40, 40, 40));
results.Result = (sceneB.GetScenePresence(agentId) != null);
if (!results.Result)
{
results.Message = "Client does not have an agent in sceneB";
return;
}
//Assert.That(sceneB.GetScenePresence(agentId), Is.Not.Null, "Client does not have an agent in sceneB");
Assert.That(sceneB.GetScenePresence(agentId), Is.Not.Null, "Client does not have an agent in sceneB"); //Assert.That(sceneA.GetScenePresence(agentId), Is.Null, "Client still had an agent in sceneA");
Assert.That(sceneA.GetScenePresence(agentId), Is.Null, "Client still had an agent in sceneA");
results.Result = (sceneA.GetScenePresence(agentId) == null);
if (!results.Result)
{
results.Message = "Client still had an agent in sceneA";
return;
}
ICapabilitiesModule sceneBCapsModule = sceneB.RequestModuleInterface<ICapabilitiesModule>(); ICapabilitiesModule sceneBCapsModule = sceneB.RequestModuleInterface<ICapabilitiesModule>();
results.Result = ("http://" + sceneB.RegionInfo.ExternalHostName + ":" + sceneB.RegionInfo.HttpPort +
"/CAPS/" + sceneBCapsModule.GetCapsPath(agentId) + "0000/" == client.CapsSeedUrl);
if (!results.Result)
{
results.Message = "Incorrect caps object path set up in sceneB";
return;
}
// Temporary assertion - caps url construction should at least be doable through a method. // Temporary assertion - caps url construction should at least be doable through a method.
/*
Assert.That( Assert.That(
"http://" + sceneB.RegionInfo.ExternalHostName + ":" + sceneB.RegionInfo.HttpPort + "/CAPS/" + sceneBCapsModule.GetCapsPath(agentId) + "0000/", "http://" + sceneB.RegionInfo.ExternalHostName + ":" + sceneB.RegionInfo.HttpPort + "/CAPS/" + sceneBCapsModule.GetCapsPath(agentId) + "0000/",
Is.EqualTo(client.CapsSeedUrl), Is.EqualTo(client.CapsSeedUrl),
"Incorrect caps object path set up in sceneB"); "Incorrect caps object path set up in sceneB");
*/
// This assertion will currently fail since we don't remove the caps paths when no longer needed // This assertion will currently fail since we don't remove the caps paths when no longer needed
//Assert.That(sceneACapsModule.GetCapsPath(agentId), Is.Null, "sceneA still had a caps object path"); //Assert.That(sceneACapsModule.GetCapsPath(agentId), Is.Null, "sceneA still had a caps object path");
// TODO: Check that more of everything is as it should be // TODO: Check that more of everything is as it should be
// TODO: test what happens if we try to teleport to a region that doesn't exist // TODO: test what happens if we try to teleport to a region that doesn't exist
} }
} }

View File

@ -304,12 +304,10 @@ namespace OpenSim.Region.Physics.OdePlugin
public d.Vector3 xyz = new d.Vector3(128.1640f, 128.3079f, 25.7600f); public d.Vector3 xyz = new d.Vector3(128.1640f, 128.3079f, 25.7600f);
public d.Vector3 hpr = new d.Vector3(125.5000f, -17.0000f, 0.0000f); public d.Vector3 hpr = new d.Vector3(125.5000f, -17.0000f, 0.0000f);
private uint heightmapWidth = m_regionWidth + 1; // TODO: unused: private uint heightmapWidth = m_regionWidth + 1;
private uint heightmapHeight = m_regionHeight + 1; // TODO: unused: private uint heightmapHeight = m_regionHeight + 1;
// TODO: unused: private uint heightmapWidthSamples;
private uint heightmapWidthSamples; // TODO: unused: private uint heightmapHeightSamples;
private uint heightmapHeightSamples;
private volatile int m_global_contactcount = 0; private volatile int m_global_contactcount = 0;

View File

@ -125,9 +125,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if (lease.CurrentState == LeaseState.Initial) if (lease.CurrentState == LeaseState.Initial)
{ {
lease.InitialLeaseTime = TimeSpan.FromMinutes(1.0); lease.InitialLeaseTime = TimeSpan.FromMinutes(0);
lease.RenewOnCallTime = TimeSpan.FromSeconds(10.0); // lease.RenewOnCallTime = TimeSpan.FromSeconds(10.0);
lease.SponsorshipTimeout = TimeSpan.FromMinutes(1.0); // lease.SponsorshipTimeout = TimeSpan.FromMinutes(1.0);
} }
return lease; return lease;
} }

View File

@ -166,9 +166,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if (lease.CurrentState == LeaseState.Initial) if (lease.CurrentState == LeaseState.Initial)
{ {
lease.InitialLeaseTime = TimeSpan.FromMinutes(1.0); lease.InitialLeaseTime = TimeSpan.FromMinutes(0);
lease.RenewOnCallTime = TimeSpan.FromSeconds(10.0); // lease.RenewOnCallTime = TimeSpan.FromSeconds(10.0);
lease.SponsorshipTimeout = TimeSpan.FromMinutes(1.0); // lease.SponsorshipTimeout = TimeSpan.FromMinutes(1.0);
} }
return lease; return lease;
} }

View File

@ -42,16 +42,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
public partial class ScriptBaseClass : MarshalByRefObject, IScript public partial class ScriptBaseClass : MarshalByRefObject, IScript
{ {
private Dictionary<string, MethodInfo> inits = new Dictionary<string, MethodInfo>(); private Dictionary<string, MethodInfo> inits = new Dictionary<string, MethodInfo>();
private ScriptSponsor m_sponser; // private ScriptSponsor m_sponser;
public override Object InitializeLifetimeService() public override Object InitializeLifetimeService()
{ {
ILease lease = (ILease)base.InitializeLifetimeService(); ILease lease = (ILease)base.InitializeLifetimeService();
if (lease.CurrentState == LeaseState.Initial) if (lease.CurrentState == LeaseState.Initial)
{ {
lease.InitialLeaseTime = TimeSpan.FromMinutes(1.0); // Infinite
lease.RenewOnCallTime = TimeSpan.FromSeconds(10.0); lease.InitialLeaseTime = TimeSpan.FromMinutes(0);
lease.SponsorshipTimeout = TimeSpan.FromMinutes(1.0); // lease.RenewOnCallTime = TimeSpan.FromSeconds(10.0);
// lease.SponsorshipTimeout = TimeSpan.FromMinutes(1.0);
} }
return lease; return lease;
} }
@ -79,7 +80,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
} }
} }
m_sponser = new ScriptSponsor(); // m_sponser = new ScriptSponsor();
} }
private Executor m_Executor = null; private Executor m_Executor = null;
@ -112,7 +113,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
return; return;
ILease lease = (ILease)RemotingServices.GetLifetimeService(data as MarshalByRefObject); ILease lease = (ILease)RemotingServices.GetLifetimeService(data as MarshalByRefObject);
lease.Register(m_sponser); // lease.Register(m_sponser);
MethodInfo mi = inits[api]; MethodInfo mi = inits[api];
@ -126,7 +127,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
public void Close() public void Close()
{ {
m_sponser.Close(); // m_sponser.Close();
} }
public Dictionary<string, object> GetVars() public Dictionary<string, object> GetVars()

View File

@ -53,7 +53,7 @@ using OpenSim.Region.ScriptEngine.Interfaces;
namespace OpenSim.Region.ScriptEngine.Shared.Instance namespace OpenSim.Region.ScriptEngine.Shared.Instance
{ {
public class ScriptInstance : MarshalByRefObject, IScriptInstance, ISponsor public class ScriptInstance : MarshalByRefObject, IScriptInstance
{ {
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
@ -261,7 +261,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
"SecondLife.Script"); "SecondLife.Script");
ILease lease = (ILease)RemotingServices.GetLifetimeService(m_Script as ScriptBaseClass); ILease lease = (ILease)RemotingServices.GetLifetimeService(m_Script as ScriptBaseClass);
lease.Register(this); // lease.Register(this);
} }
catch (Exception) catch (Exception)
{ {
@ -1006,10 +1006,5 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
{ {
return true; return true;
} }
public TimeSpan Renewal(ILease lease)
{
return lease.InitialLeaseTime;
}
} }
} }

View File

@ -40,6 +40,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Tests
/// <summary> /// <summary>
/// Scene presence tests /// Scene presence tests
/// </summary> /// </summary>
/// Commented out XEngineTests that don't do anything
/*
[TestFixture] [TestFixture]
public class XEngineTest public class XEngineTest
{ {
@ -65,4 +67,5 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Tests
xengine.RegionLoaded(scene); xengine.RegionLoaded(scene);
} }
} }
*/
} }

View File

@ -729,8 +729,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
item.Name, startParam, postOnRez, item.Name, startParam, postOnRez,
stateSource, m_MaxScriptQueue); stateSource, m_MaxScriptQueue);
m_log.DebugFormat("[XEngine] Loaded script {0}.{1}", m_log.DebugFormat("[XEngine] Loaded script {0}.{1}, script UUID {2}, prim UUID {3} @ {4}",
part.ParentGroup.RootPart.Name, item.Name); part.ParentGroup.RootPart.Name, item.Name, assetID, part.UUID, part.ParentGroup.RootPart.AbsolutePosition.ToString());
instance.AppDomain = appDomain; instance.AppDomain = appDomain;
instance.LineMap = linemap; instance.LineMap = linemap;

View File

@ -34,25 +34,53 @@ namespace OpenSim.Services.Interfaces
public interface IAssetService public interface IAssetService
{ {
// Three different ways to retrieve an asset /// <summary>
// /// Get an asset synchronously.
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
AssetBase Get(string id); AssetBase Get(string id);
/// <summary>
/// Get an asset's metadata
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
AssetMetadata GetMetadata(string id); AssetMetadata GetMetadata(string id);
byte[] GetData(string id); byte[] GetData(string id);
/// <summary>
/// Get an asset asynchronously
/// </summary>
/// <param name="id">The asset id</param>
/// <param name="sender">Represents the requester. Passed back via the handler</param>
/// <param name="handler">The handler to call back once the asset has been retrieved</param>
/// <returns>True if the id was parseable, false otherwise</returns>
bool Get(string id, Object sender, AssetRetrieved handler); bool Get(string id, Object sender, AssetRetrieved handler);
// Creates a new asset /// <summary>
// Returns a random ID if none is passed into it /// Creates a new asset
// /// </summary>
/// Returns a random ID if none is passed into it
/// <param name="asset"></param>
/// <returns></returns>
string Store(AssetBase asset); string Store(AssetBase asset);
// Attachments and bare scripts need this!! /// <summary>
// /// Update an asset's content
/// </summary>
/// Attachments and bare scripts need this!!
/// <param name="id"> </param>
/// <param name="data"></param>
/// <returns></returns>
bool UpdateContent(string id, byte[] data); bool UpdateContent(string id, byte[] data);
// Kill an asset /// <summary>
// /// Delete an asset
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
bool Delete(string id); bool Delete(string id);
} }
} }

View File

@ -45,7 +45,13 @@ namespace OpenSim.Tests.Common.Mock
public AssetBase Get(string id) public AssetBase Get(string id)
{ {
return Assets[ id ]; AssetBase asset;
if (Assets.ContainsKey(id))
asset = Assets[id];
else
asset = null;
return asset;
} }
public AssetMetadata GetMetadata(string id) public AssetMetadata GetMetadata(string id)
@ -59,8 +65,10 @@ namespace OpenSim.Tests.Common.Mock
} }
public bool Get(string id, object sender, AssetRetrieved handler) public bool Get(string id, object sender, AssetRetrieved handler)
{ {
throw new NotImplementedException(); handler(id, sender, Get(id));
return true;
} }
public string Store(AssetBase asset) public string Store(AssetBase asset)

View File

@ -1,4 +1,31 @@
using System; /*
* 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.Collections.Generic;
using System.Text; using System.Text;
using OpenSim.Framework; using OpenSim.Framework;

View File

@ -25,7 +25,7 @@ See configuring OpenSim
== Installation on Linux == == Installation on Linux ==
Prereqs: Prereqs:
* Mono >= 2.4 (>= 2.4.2 is better) * Mono >= 2.0.1 (>= 2.4.2 is better)
* Nant >= 0.86beta * Nant >= 0.86beta
* sqlite3 or mysql 5.x (you'll need a back end database) * sqlite3 or mysql 5.x (you'll need a back end database)

View File

@ -34,7 +34,7 @@
<!-- Core OpenSim Projects --> <!-- Core OpenSim Projects -->
<!-- <!--
<Project name="OpenSim.Model" path="OpenSim/Model" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Model" path="OpenSim/Model" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -55,7 +55,7 @@
</Project> </Project>
--> -->
<Project name="OpenSim.Framework.Servers.HttpServer" path="OpenSim/Framework/Servers/HttpServer" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Framework.Servers.HttpServer" path="OpenSim/Framework/Servers/HttpServer" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../bin/</OutputPath> <OutputPath>../../../../bin/</OutputPath>
@ -91,7 +91,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Framework.Console" path="OpenSim/Framework/Console" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Framework.Console" path="OpenSim/Framework/Console" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -113,7 +113,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Framework" path="OpenSim/Framework" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Framework" path="OpenSim/Framework" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../bin/</OutputPath> <OutputPath>../../bin/</OutputPath>
@ -145,7 +145,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Framework.Serialization" path="OpenSim/Framework/Serialization" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Framework.Serialization" path="OpenSim/Framework/Serialization" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -170,7 +170,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Framework.Statistics" path="OpenSim/Framework/Statistics" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Framework.Statistics" path="OpenSim/Framework/Statistics" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -194,7 +194,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Data" path="OpenSim/Data" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Data" path="OpenSim/Data" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../bin/</OutputPath> <OutputPath>../../bin/</OutputPath>
@ -223,7 +223,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Framework.Configuration.XML" path="OpenSim/Framework/Configuration/XML" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Framework.Configuration.XML" path="OpenSim/Framework/Configuration/XML" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../bin/</OutputPath> <OutputPath>../../../../bin/</OutputPath>
@ -248,7 +248,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Framework.Configuration.HTTP" path="OpenSim/Framework/Configuration/HTTP" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Framework.Configuration.HTTP" path="OpenSim/Framework/Configuration/HTTP" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../bin/</OutputPath> <OutputPath>../../../../bin/</OutputPath>
@ -275,7 +275,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Framework.AssetLoader.Filesystem" path="OpenSim/Framework/AssetLoader/Filesystem" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Framework.AssetLoader.Filesystem" path="OpenSim/Framework/AssetLoader/Filesystem" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../bin/</OutputPath> <OutputPath>../../../../bin/</OutputPath>
@ -300,7 +300,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Framework.RegionLoader.Web" path="OpenSim/Framework/RegionLoader/Web" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Framework.RegionLoader.Web" path="OpenSim/Framework/RegionLoader/Web" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../bin/</OutputPath> <OutputPath>../../../../bin/</OutputPath>
@ -326,7 +326,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Framework.RegionLoader.Filesystem" path="OpenSim/Framework/RegionLoader/Filesystem" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Framework.RegionLoader.Filesystem" path="OpenSim/Framework/RegionLoader/Filesystem" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../bin/</OutputPath> <OutputPath>../../../../bin/</OutputPath>
@ -351,7 +351,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Framework.Servers" path="OpenSim/Framework/Servers" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Framework.Servers" path="OpenSim/Framework/Servers" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -384,7 +384,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Region.Physics.Manager" path="OpenSim/Region/Physics/Manager" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Region.Physics.Manager" path="OpenSim/Region/Physics/Manager" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../bin/</OutputPath> <OutputPath>../../../../bin/</OutputPath>
@ -412,7 +412,7 @@
</Project> </Project>
<!-- Physics Plug-ins --> <!-- Physics Plug-ins -->
<Project name="OpenSim.Region.Physics.BasicPhysicsPlugin" path="OpenSim/Region/Physics/BasicPhysicsPlugin" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Region.Physics.BasicPhysicsPlugin" path="OpenSim/Region/Physics/BasicPhysicsPlugin" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../bin/Physics/</OutputPath> <OutputPath>../../../../bin/Physics/</OutputPath>
@ -435,7 +435,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Region.Physics.POSPlugin" path="OpenSim/Region/Physics/POSPlugin" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Region.Physics.POSPlugin" path="OpenSim/Region/Physics/POSPlugin" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../bin/Physics/</OutputPath> <OutputPath>../../../../bin/Physics/</OutputPath>
@ -458,7 +458,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Region.Physics.PhysXPlugin" path="OpenSim/Region/Physics/PhysXPlugin" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Region.Physics.PhysXPlugin" path="OpenSim/Region/Physics/PhysXPlugin" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../bin/Physics/</OutputPath> <OutputPath>../../../../bin/Physics/</OutputPath>
@ -483,7 +483,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Region.Physics.OdePlugin" path="OpenSim/Region/Physics/OdePlugin" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Region.Physics.OdePlugin" path="OpenSim/Region/Physics/OdePlugin" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../bin/Physics/</OutputPath> <OutputPath>../../../../bin/Physics/</OutputPath>
@ -512,7 +512,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Region.Physics.BulletXPlugin" path="OpenSim/Region/Physics/BulletXPlugin" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Region.Physics.BulletXPlugin" path="OpenSim/Region/Physics/BulletXPlugin" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../bin/Physics/</OutputPath> <OutputPath>../../../../bin/Physics/</OutputPath>
@ -542,7 +542,7 @@
<Project name="OpenSim.Region.Physics.Meshing" path="OpenSim/Region/Physics/Meshing" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Region.Physics.Meshing" path="OpenSim/Region/Physics/Meshing" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../bin/Physics/</OutputPath> <OutputPath>../../../../bin/Physics/</OutputPath>
@ -570,7 +570,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Region.Physics.BulletDotNETPlugin" path="OpenSim/Region/Physics/BulletDotNETPlugin" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Region.Physics.BulletDotNETPlugin" path="OpenSim/Region/Physics/BulletDotNETPlugin" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../bin/Physics/</OutputPath> <OutputPath>../../../../bin/Physics/</OutputPath>
@ -598,7 +598,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Services.Interfaces" path="OpenSim/Services/Interfaces" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Services.Interfaces" path="OpenSim/Services/Interfaces" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -626,7 +626,7 @@
</Project> </Project>
<Project name="OpenSim.Framework.Capabilities" path="OpenSim/Framework/Capabilities" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Framework.Capabilities" path="OpenSim/Framework/Capabilities" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -660,7 +660,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Framework.Communications" path="OpenSim/Framework/Communications" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Framework.Communications" path="OpenSim/Framework/Communications" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -702,7 +702,7 @@
</Project> </Project>
<Project name="OpenSim.Region.Framework" path="OpenSim/Region/Framework" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Region.Framework" path="OpenSim/Region/Framework" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -752,7 +752,7 @@
<!-- OpenSim.Framework.Communications --> <!-- OpenSim.Framework.Communications -->
<Project name="OpenSim.Region.Communications.Local" path="OpenSim/Region/Communications/Local" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Region.Communications.Local" path="OpenSim/Region/Communications/Local" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../bin/</OutputPath> <OutputPath>../../../../bin/</OutputPath>
@ -783,7 +783,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Region.Communications.OGS1" path="OpenSim/Region/Communications/OGS1" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Region.Communications.OGS1" path="OpenSim/Region/Communications/OGS1" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../bin/</OutputPath> <OutputPath>../../../../bin/</OutputPath>
@ -820,7 +820,7 @@
<!-- OGS projects --> <!-- OGS projects -->
<Project name="OpenSim.Grid.Communications.OGS1" path="OpenSim/Grid/Communications/OGS1" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Grid.Communications.OGS1" path="OpenSim/Grid/Communications/OGS1" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../bin/</OutputPath> <OutputPath>../../../../bin/</OutputPath>
@ -847,7 +847,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Grid.Framework" path="OpenSim/Grid/Framework" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Grid.Framework" path="OpenSim/Grid/Framework" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -878,7 +878,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Grid.GridServer" path="OpenSim/Grid/GridServer" type="Exe"> <Project frameworkVersion="v3_5" name="OpenSim.Grid.GridServer" path="OpenSim/Grid/GridServer" type="Exe">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -913,7 +913,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Grid.GridServer.Modules" path="OpenSim/Grid/GridServer.Modules" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Grid.GridServer.Modules" path="OpenSim/Grid/GridServer.Modules" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -950,7 +950,7 @@
</Project> </Project>
<Project name="OpenSim.Grid.AssetServer" path="OpenSim/Grid/AssetServer" type="Exe"> <Project frameworkVersion="v3_5" name="OpenSim.Grid.AssetServer" path="OpenSim/Grid/AssetServer" type="Exe">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -982,7 +982,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Grid.AssetInventoryServer" path="OpenSim/Grid/AssetInventoryServer" type="Exe"> <Project frameworkVersion="v3_5" name="OpenSim.Grid.AssetInventoryServer" path="OpenSim/Grid/AssetInventoryServer" type="Exe">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -1012,7 +1012,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Grid.AssetInventoryServer.Plugins" path="OpenSim/Grid/AssetInventoryServer/Plugins" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Grid.AssetInventoryServer.Plugins" path="OpenSim/Grid/AssetInventoryServer/Plugins" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../bin/</OutputPath> <OutputPath>../../../../bin/</OutputPath>
@ -1043,7 +1043,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Grid.AssetInventoryServer.Plugins.Simple" path="OpenSim/Grid/AssetInventoryServer/Plugins/Simple" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Grid.AssetInventoryServer.Plugins.Simple" path="OpenSim/Grid/AssetInventoryServer/Plugins/Simple" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../../bin/</OutputPath> <OutputPath>../../../../../bin/</OutputPath>
@ -1072,7 +1072,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Grid.AssetInventoryServer.Plugins.OpenSim" path="OpenSim/Grid/AssetInventoryServer/Plugins/OpenSim" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Grid.AssetInventoryServer.Plugins.OpenSim" path="OpenSim/Grid/AssetInventoryServer/Plugins/OpenSim" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../../bin/</OutputPath> <OutputPath>../../../../../bin/</OutputPath>
@ -1104,7 +1104,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Grid.UserServer.Modules" path="OpenSim/Grid/UserServer.Modules" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Grid.UserServer.Modules" path="OpenSim/Grid/UserServer.Modules" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -1143,7 +1143,7 @@
</Project> </Project>
<Project name="OpenSim.Grid.UserServer" path="OpenSim/Grid/UserServer" type="Exe"> <Project frameworkVersion="v3_5" name="OpenSim.Grid.UserServer" path="OpenSim/Grid/UserServer" type="Exe">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -1181,7 +1181,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Grid.InventoryServer" path="OpenSim/Grid/InventoryServer" type="Exe"> <Project frameworkVersion="v3_5" name="OpenSim.Grid.InventoryServer" path="OpenSim/Grid/InventoryServer" type="Exe">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -1213,7 +1213,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Grid.MessagingServer.Modules" path="OpenSim/Grid/MessagingServer.Modules" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Grid.MessagingServer.Modules" path="OpenSim/Grid/MessagingServer.Modules" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -1247,7 +1247,7 @@
</Project> </Project>
<Project name="OpenSim.Grid.MessagingServer" path="OpenSim/Grid/MessagingServer" type="Exe"> <Project frameworkVersion="v3_5" name="OpenSim.Grid.MessagingServer" path="OpenSim/Grid/MessagingServer" type="Exe">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -1281,7 +1281,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Services.Base" path="OpenSim/Services/Base" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Services.Base" path="OpenSim/Services/Base" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -1308,7 +1308,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Services.UserService" path="OpenSim/Services/UserService" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Services.UserService" path="OpenSim/Services/UserService" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -1338,7 +1338,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Services.Connectors" path="OpenSim/Services/Connectors" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Services.Connectors" path="OpenSim/Services/Connectors" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -1371,7 +1371,7 @@
</Project> </Project>
<Project name="OpenSim.Services.AssetService" path="OpenSim/Services/AssetService" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Services.AssetService" path="OpenSim/Services/AssetService" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -1402,7 +1402,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Services.FreeswitchService" path="OpenSim/Services/FreeswitchService" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Services.FreeswitchService" path="OpenSim/Services/FreeswitchService" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -1433,7 +1433,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Services.AuthenticationService" path="OpenSim/Services/AuthenticationService" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Services.AuthenticationService" path="OpenSim/Services/AuthenticationService" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -1464,7 +1464,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Services.InventoryService" path="OpenSim/Services/InventoryService" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Services.InventoryService" path="OpenSim/Services/InventoryService" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -1496,7 +1496,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Server.Base" path="OpenSim/Server/Base" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Server.Base" path="OpenSim/Server/Base" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -1524,7 +1524,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Server.Handlers" path="OpenSim/Server/Handlers" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Server.Handlers" path="OpenSim/Server/Handlers" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -1560,7 +1560,7 @@
</Project> </Project>
<Project name="OpenSim.Server" path="OpenSim/Server" type="Exe"> <Project frameworkVersion="v3_5" name="OpenSim.Server" path="OpenSim/Server" type="Exe">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../bin/</OutputPath> <OutputPath>../../bin/</OutputPath>
@ -1593,7 +1593,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Region.CoreModules" path="OpenSim/Region/CoreModules" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Region.CoreModules" path="OpenSim/Region/CoreModules" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -1654,7 +1654,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Region.CoreModules.World.Terrain.DefaultEffects" path="OpenSim/Region/CoreModules/World/Terrain/DefaultEffects" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Region.CoreModules.World.Terrain.DefaultEffects" path="OpenSim/Region/CoreModules/World/Terrain/DefaultEffects" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../../../bin/Terrain/</OutputPath> <OutputPath>../../../../../../bin/Terrain/</OutputPath>
@ -1677,7 +1677,7 @@
</Project> </Project>
<Project name="OpenSim.Region.OptionalModules" path="OpenSim/Region/OptionalModules" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Region.OptionalModules" path="OpenSim/Region/OptionalModules" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -1736,7 +1736,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Region.Communications.Hypergrid" path="OpenSim/Region/Communications/Hypergrid" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Region.Communications.Hypergrid" path="OpenSim/Region/Communications/Hypergrid" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../bin/</OutputPath> <OutputPath>../../../../bin/</OutputPath>
@ -1773,7 +1773,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Region.ClientStack" path="OpenSim/Region/ClientStack" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Region.ClientStack" path="OpenSim/Region/ClientStack" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -1810,7 +1810,7 @@
</Project> </Project>
<!-- ClientStack Plugins --> <!-- ClientStack Plugins -->
<Project name="OpenSim.Region.ClientStack.LindenUDP" path="OpenSim/Region/ClientStack/LindenUDP" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Region.ClientStack.LindenUDP" path="OpenSim/Region/ClientStack/LindenUDP" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../bin/</OutputPath> <OutputPath>../../../../bin/</OutputPath>
@ -1851,7 +1851,7 @@
</Project> </Project>
<!-- Datastore Plugins --> <!-- Datastore Plugins -->
<Project name="OpenSim.Data.Null" path="OpenSim/Data/Null" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Data.Null" path="OpenSim/Data/Null" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -1878,7 +1878,7 @@
</Project> </Project>
<!-- OpenSim app --> <!-- OpenSim app -->
<Project name="OpenSim" path="OpenSim/Region/Application" type="Exe"> <Project frameworkVersion="v3_5" name="OpenSim" path="OpenSim/Region/Application" type="Exe">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -1920,7 +1920,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.ApplicationPlugins.LoadRegions" path="OpenSim/ApplicationPlugins/LoadRegions" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.ApplicationPlugins.LoadRegions" path="OpenSim/ApplicationPlugins/LoadRegions" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -1955,7 +1955,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.ApplicationPlugins.RegionModulesController" path="OpenSim/ApplicationPlugins/RegionModulesController" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.ApplicationPlugins.RegionModulesController" path="OpenSim/ApplicationPlugins/RegionModulesController" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -1985,7 +1985,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.ApplicationPlugins.CreateCommsManager" path="OpenSim/ApplicationPlugins/CreateCommsManager" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.ApplicationPlugins.CreateCommsManager" path="OpenSim/ApplicationPlugins/CreateCommsManager" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -2028,7 +2028,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.ApplicationPlugins.RemoteController" path="OpenSim/ApplicationPlugins/RemoteController" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.ApplicationPlugins.RemoteController" path="OpenSim/ApplicationPlugins/RemoteController" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -2068,7 +2068,7 @@
</Project> </Project>
<!-- REST plugins --> <!-- REST plugins -->
<Project name="OpenSim.ApplicationPlugins.Rest" <Project frameworkVersion="v3_5" name="OpenSim.ApplicationPlugins.Rest"
path="OpenSim/ApplicationPlugins/Rest" type="Library"> path="OpenSim/ApplicationPlugins/Rest" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
@ -2104,7 +2104,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.ApplicationPlugins.Rest.Regions" <Project frameworkVersion="v3_5" name="OpenSim.ApplicationPlugins.Rest.Regions"
path="OpenSim/ApplicationPlugins/Rest/Regions" type="Library"> path="OpenSim/ApplicationPlugins/Rest/Regions" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
@ -2142,7 +2142,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.ApplicationPlugins.Rest.Inventory" <Project frameworkVersion="v3_5" name="OpenSim.ApplicationPlugins.Rest.Inventory"
path="OpenSim/ApplicationPlugins/Rest/Inventory" type="Library"> path="OpenSim/ApplicationPlugins/Rest/Inventory" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
@ -2187,7 +2187,7 @@
<!-- Scene Server API Example Apps --> <!-- Scene Server API Example Apps -->
<Project name="OpenSim.Region.DataSnapshot" path="OpenSim/Region/DataSnapshot" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Region.DataSnapshot" path="OpenSim/Region/DataSnapshot" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -2220,7 +2220,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Region.Examples.SimpleModule" path="OpenSim/Region/Examples/SimpleModule" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Region.Examples.SimpleModule" path="OpenSim/Region/Examples/SimpleModule" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>bin/</OutputPath> <OutputPath>bin/</OutputPath>
@ -2250,7 +2250,7 @@
<!-- Client Stack Modules --> <!-- Client Stack Modules -->
<Project name="OpenSim.Client.MXP" path="OpenSim/Client/MXP" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Client.MXP" path="OpenSim/Client/MXP" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -2279,7 +2279,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Client.VWoHTTP" path="OpenSim/Client/VWoHTTP" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Client.VWoHTTP" path="OpenSim/Client/VWoHTTP" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -2310,7 +2310,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Client.Linden" path="OpenSim/Client/Linden" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Client.Linden" path="OpenSim/Client/Linden" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -2350,7 +2350,7 @@
<!-- Data Base Modules --> <!-- Data Base Modules -->
<Project name="OpenSim.Data.MySQL" path="OpenSim/Data/MySQL" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Data.MySQL" path="OpenSim/Data/MySQL" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -2386,7 +2386,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Data.MSSQL" path="OpenSim/Data/MSSQL" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Data.MSSQL" path="OpenSim/Data/MSSQL" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -2419,7 +2419,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Data.SQLite" path="OpenSim/Data/SQLite" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Data.SQLite" path="OpenSim/Data/SQLite" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -2456,7 +2456,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Data.NHibernate" path="OpenSim/Data/NHibernate" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Data.NHibernate" path="OpenSim/Data/NHibernate" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -2496,7 +2496,7 @@
</Files> </Files>
</Project> </Project>
<Project name="SmartThreadPool" path="ThirdParty/SmartThreadPool" type="Library"> <Project frameworkVersion="v3_5" name="SmartThreadPool" path="ThirdParty/SmartThreadPool" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../bin/</OutputPath> <OutputPath>../../bin/</OutputPath>
@ -2518,7 +2518,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Region.ScriptEngine.Shared" path="OpenSim/Region/ScriptEngine/Shared" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Region.ScriptEngine.Shared" path="OpenSim/Region/ScriptEngine/Shared" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../bin/</OutputPath> <OutputPath>../../../../bin/</OutputPath>
@ -2557,7 +2557,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Region.ScriptEngine.Shared.Api.Runtime" path="OpenSim/Region/ScriptEngine/Shared/Api/Runtime" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Region.ScriptEngine.Shared.Api.Runtime" path="OpenSim/Region/ScriptEngine/Shared/Api/Runtime" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../../../bin/</OutputPath> <OutputPath>../../../../../../bin/</OutputPath>
@ -2592,7 +2592,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Region.ScriptEngine.Shared.YieldProlog" path="OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Region.ScriptEngine.Shared.YieldProlog" path="OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../../../../bin/</OutputPath> <OutputPath>../../../../../../../bin/</OutputPath>
@ -2626,7 +2626,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Region.ScriptEngine.Shared.Api" path="OpenSim/Region/ScriptEngine/Shared/Api/Implementation" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Region.ScriptEngine.Shared.Api" path="OpenSim/Region/ScriptEngine/Shared/Api/Implementation" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../../../bin/</OutputPath> <OutputPath>../../../../../../bin/</OutputPath>
@ -2665,7 +2665,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Region.ScriptEngine.Shared.CodeTools" path="OpenSim/Region/ScriptEngine/Shared/CodeTools" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Region.ScriptEngine.Shared.CodeTools" path="OpenSim/Region/ScriptEngine/Shared/CodeTools" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../../bin/</OutputPath> <OutputPath>../../../../../bin/</OutputPath>
@ -2698,7 +2698,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Region.ScriptEngine.Shared.Instance" path="OpenSim/Region/ScriptEngine/Shared/Instance" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Region.ScriptEngine.Shared.Instance" path="OpenSim/Region/ScriptEngine/Shared/Instance" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../../bin/</OutputPath> <OutputPath>../../../../../bin/</OutputPath>
@ -2737,7 +2737,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Region.ScriptEngine.XEngine" path="OpenSim/Region/ScriptEngine/XEngine" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Region.ScriptEngine.XEngine" path="OpenSim/Region/ScriptEngine/XEngine" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../bin/</OutputPath> <OutputPath>../../../../bin/</OutputPath>
@ -2780,7 +2780,7 @@
</Project> </Project>
<Project name="OpenSim.Region.ScriptEngine.DotNetEngine" path="OpenSim/Region/ScriptEngine/DotNetEngine" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Region.ScriptEngine.DotNetEngine" path="OpenSim/Region/ScriptEngine/DotNetEngine" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../bin/</OutputPath> <OutputPath>../../../../bin/</OutputPath>
@ -2820,7 +2820,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.ScriptEngine.Shared.Script" path="OpenSim/ScriptEngine/Shared.Script" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.ScriptEngine.Shared.Script" path="OpenSim/ScriptEngine/Shared.Script" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -2842,7 +2842,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.ScriptEngine.Shared" path="OpenSim/ScriptEngine/Shared" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.ScriptEngine.Shared" path="OpenSim/ScriptEngine/Shared" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -2880,7 +2880,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.ApplicationPlugins.ScriptEngine" path="OpenSim/ApplicationPlugins/ScriptEngine" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.ApplicationPlugins.ScriptEngine" path="OpenSim/ApplicationPlugins/ScriptEngine" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -2921,7 +2921,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.ScriptEngine.Components.DotNetEngine.Commands_LSL" path="OpenSim/ScriptEngine/Components/DotNetEngine/Commands_LSL" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.ScriptEngine.Components.DotNetEngine.Commands_LSL" path="OpenSim/ScriptEngine/Components/DotNetEngine/Commands_LSL" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../../bin/</OutputPath> <OutputPath>../../../../../bin/</OutputPath>
@ -2960,7 +2960,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.ScriptEngine.Components.DotNetEngine.Commands_OSSL" path="OpenSim/ScriptEngine/Components/DotNetEngine/Commands_OSSL" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.ScriptEngine.Components.DotNetEngine.Commands_OSSL" path="OpenSim/ScriptEngine/Components/DotNetEngine/Commands_OSSL" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../../bin/</OutputPath> <OutputPath>../../../../../bin/</OutputPath>
@ -2999,7 +2999,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.ScriptEngine.Components.DotNetEngine.Compilers" path="OpenSim/ScriptEngine/Components/DotNetEngine/Compilers" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.ScriptEngine.Components.DotNetEngine.Compilers" path="OpenSim/ScriptEngine/Components/DotNetEngine/Compilers" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../../bin/</OutputPath> <OutputPath>../../../../../bin/</OutputPath>
@ -3041,7 +3041,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.ScriptEngine.Components.DotNetEngine.Events" path="OpenSim/ScriptEngine/Components/DotNetEngine/Events" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.ScriptEngine.Components.DotNetEngine.Events" path="OpenSim/ScriptEngine/Components/DotNetEngine/Events" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../../bin/</OutputPath> <OutputPath>../../../../../bin/</OutputPath>
@ -3081,7 +3081,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.ScriptEngine.Components.DotNetEngine.Scheduler" path="OpenSim/ScriptEngine/Components/DotNetEngine/Scheduler" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.ScriptEngine.Components.DotNetEngine.Scheduler" path="OpenSim/ScriptEngine/Components/DotNetEngine/Scheduler" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../../bin/</OutputPath> <OutputPath>../../../../../bin/</OutputPath>
@ -3121,7 +3121,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.ScriptEngine.Engines.DotNetEngine" path="OpenSim/ScriptEngine/Engines/DotNetEngine" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.ScriptEngine.Engines.DotNetEngine" path="OpenSim/ScriptEngine/Engines/DotNetEngine" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../bin/</OutputPath> <OutputPath>../../../../bin/</OutputPath>
@ -3166,7 +3166,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Region.UserStatistics" path="OpenSim/Region/UserStatistics" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Region.UserStatistics" path="OpenSim/Region/UserStatistics" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -3217,7 +3217,7 @@
<!-- Tools --> <!-- Tools -->
<Project name="pCampBot" path="OpenSim/Tools/pCampBot" type="Exe"> <Project frameworkVersion="v3_5" name="pCampBot" path="OpenSim/Tools/pCampBot" type="Exe">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -3244,7 +3244,7 @@
</Project> </Project>
<!-- Test Suite --> <!-- Test Suite -->
<Project name="OpenSim.TestSuite" path="OpenSim/TestSuite" type="Exe"> <Project frameworkVersion="v3_5" name="OpenSim.TestSuite" path="OpenSim/TestSuite" type="Exe">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../bin/</OutputPath> <OutputPath>../../bin/</OutputPath>
@ -3271,7 +3271,7 @@
</Project> </Project>
<!-- Test assemblies --> <!-- Test assemblies -->
<Project name="OpenSim.Tests.Common" path="OpenSim/Tests/Common" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Tests.Common" path="OpenSim/Tests/Common" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -3311,7 +3311,7 @@
</Files> </Files>
</Project> </Project>
<Project 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>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -3326,6 +3326,7 @@
<ReferencePath>../../../bin/</ReferencePath> <ReferencePath>../../../bin/</ReferencePath>
<Reference name="System"/> <Reference name="System"/>
<Reference name="System.Xml"/> <Reference name="System.Xml"/>
<Reference name="System.Core"/>
<Reference name="System.Drawing"/> <Reference name="System.Drawing"/>
<Reference name="System.Data"/> <Reference name="System.Data"/>
<Reference name="OpenMetaverse.dll"/> <Reference name="OpenMetaverse.dll"/>
@ -3342,7 +3343,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Data.MySQL.Tests" path="OpenSim/Data/MySQL/Tests" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Data.MySQL.Tests" path="OpenSim/Data/MySQL/Tests" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../bin/</OutputPath> <OutputPath>../../../../bin/</OutputPath>
@ -3378,7 +3379,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Data.NHibernate.Tests" path="OpenSim/Data/NHibernate/Tests" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Data.NHibernate.Tests" path="OpenSim/Data/NHibernate/Tests" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../bin/</OutputPath> <OutputPath>../../../../bin/</OutputPath>
@ -3417,7 +3418,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Data.SQLite.Tests" path="OpenSim/Data/SQLite/Tests" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Data.SQLite.Tests" path="OpenSim/Data/SQLite/Tests" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../bin/</OutputPath> <OutputPath>../../../../bin/</OutputPath>
@ -3454,7 +3455,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Framework.Tests" path="OpenSim/Framework/Tests" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Framework.Tests" path="OpenSim/Framework/Tests" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -3472,6 +3473,7 @@
<Reference name="System.Data"/> <Reference name="System.Data"/>
<Reference name="OpenMetaverse.dll"/> <Reference name="OpenMetaverse.dll"/>
<Reference name="OpenMetaverseTypes.dll"/> <Reference name="OpenMetaverseTypes.dll"/>
<Reference name="OpenMetaverse.StructuredData.dll"/>
<Reference name="XMLRPC.dll"/> <Reference name="XMLRPC.dll"/>
<Reference name="OpenSim.Framework.Console"/> <Reference name="OpenSim.Framework.Console"/>
<Reference name="OpenSim.Framework"/> <Reference name="OpenSim.Framework"/>
@ -3483,7 +3485,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Framework.Servers.Tests" path="OpenSim/Framework/Servers/Tests" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Framework.Servers.Tests" path="OpenSim/Framework/Servers/Tests" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../bin/</OutputPath> <OutputPath>../../../../bin/</OutputPath>
@ -3513,7 +3515,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Framework.Servers.HttpServer.Tests" path="OpenSim/Framework/Servers/HttpServer/Tests" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Framework.Servers.HttpServer.Tests" path="OpenSim/Framework/Servers/HttpServer/Tests" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../../bin/</OutputPath> <OutputPath>../../../../../bin/</OutputPath>
@ -3542,7 +3544,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Framework.Communications.Tests" path="OpenSim/Framework/Communications/Tests" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Framework.Communications.Tests" path="OpenSim/Framework/Communications/Tests" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../bin/</OutputPath> <OutputPath>../../../../bin/</OutputPath>
@ -3577,7 +3579,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Region.CoreModules.Tests" path="OpenSim/Region/CoreModules" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Region.CoreModules.Tests" path="OpenSim/Region/CoreModules" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -3638,7 +3640,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Region.Framework.Tests" path="OpenSim/Region/Framework" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Region.Framework.Tests" path="OpenSim/Region/Framework" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -3694,7 +3696,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Region.ClientStack.LindenUDP.Tests" path="OpenSim/Region/ClientStack/LindenUDP/Tests" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Region.ClientStack.LindenUDP.Tests" path="OpenSim/Region/ClientStack/LindenUDP/Tests" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../../bin/</OutputPath> <OutputPath>../../../../../bin/</OutputPath>
@ -3727,7 +3729,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Region.ScriptEngine.Tests" path="OpenSim/Region/ScriptEngine" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Region.ScriptEngine.Tests" path="OpenSim/Region/ScriptEngine" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../bin/</OutputPath> <OutputPath>../../../bin/</OutputPath>
@ -3773,7 +3775,7 @@
TODO: this is kind of lame, we basically build a duplicate TODO: this is kind of lame, we basically build a duplicate
assembly but with tests added in, just because we can't resolve cross-bin-dir-refs. assembly but with tests added in, just because we can't resolve cross-bin-dir-refs.
--> -->
<Project name="OpenSim.Region.Physics.OdePlugin.Tests" path="OpenSim/Region/Physics/OdePlugin" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Region.Physics.OdePlugin.Tests" path="OpenSim/Region/Physics/OdePlugin" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../bin/</OutputPath> <OutputPath>../../../../bin/</OutputPath>
@ -3801,7 +3803,7 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Server.Handlers.Tests" path="OpenSim/Server/Handlers/Tests" type="Library"> <Project frameworkVersion="v3_5" name="OpenSim.Server.Handlers.Tests" path="OpenSim/Server/Handlers/Tests" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<OutputPath>../../../../bin/</OutputPath> <OutputPath>../../../../bin/</OutputPath>
@ -3860,7 +3862,7 @@
</Options> </Options>
</Configuration> </Configuration>
<Project name="Prebuild" path="src/" language="C#" assemblyName="Prebuild" icon="App.ico" type="Exe" rootNamespace="Prebuild" startupObject="Prebuild.Prebuild"> <Project frameworkVersion="v3_5" name="Prebuild" path="src/" language="C#" assemblyName="Prebuild" icon="App.ico" type="Exe" rootNamespace="Prebuild" startupObject="Prebuild.Prebuild">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
<CompilerDefines>DEBUG;TRACE</CompilerDefines> <CompilerDefines>DEBUG;TRACE</CompilerDefines>