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

View File

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

View File

@ -204,8 +204,16 @@ namespace OpenSim.Data.Tests
UUID webloginkey = UUID.Random();
uint homeregx = (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 homelookat = new Vector3((float)Math.Round(random.NextDouble(),5),(float)Math.Round(random.NextDouble(),5),(float)Math.Round(random.NextDouble(),5));
Vector3 homeloc
= 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 lastlogin = random.Next();
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, Role> Roles = new Dictionary<string, Role>();
/// <summary>
/// Adds a new role
/// </summary>
/// <param name="role"></param>
/// <returns></returns>
public ACL AddRole(Role role)
{
if (Roles.ContainsKey(role.Name))
@ -56,6 +61,11 @@ namespace OpenSim.Framework
return this;
}
/// <summary>
/// Adds a new resource
/// </summary>
/// <param name="resource"></param>
/// <returns></returns>
public ACL AddResource(Resource resource)
{
Resources.Add(resource.Name, resource);
@ -63,6 +73,12 @@ namespace OpenSim.Framework
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)
{
if (!Roles.ContainsKey(role))
@ -234,6 +250,9 @@ namespace OpenSim.Framework
#region Tests
/// <summary>
/// ACL Test class
/// </summary>
internal class ACLTester
{
public ACLTester()

View File

@ -32,26 +32,83 @@ using OpenMetaverse.StructuredData;
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
{
/// <summary>
/// Avatar Unique Agent Identifier
/// </summary>
public UUID AgentID;
/// <summary>
/// Avatar's Appearance
/// </summary>
public AvatarAppearance Appearance;
/// <summary>
/// Agent's root inventory folder
/// </summary>
public UUID BaseFolder;
/// <summary>
/// Base Caps path for user
/// </summary>
public string CapsPath = String.Empty;
/// <summary>
/// Seed caps for neighbor regions that the user can see into
/// </summary>
public Dictionary<ulong, string> ChildrenCapSeeds;
/// <summary>
/// Root agent, or Child agent
/// </summary>
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;
/// <summary>
/// Agent's account first name
/// </summary>
public string firstname;
public UUID InventoryFolder;
/// <summary>
/// Agent's account last name
/// </summary>
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;
/// <summary>
/// Non secure Session ID
/// </summary>
public UUID SessionID;
/// <summary>
/// Position the Agent's Avatar starts in the region
/// </summary>
public Vector3 startpos;
public AgentCircuitData()
{
}
/// <summary>
/// Create AgentCircuitData from a Serializable AgentCircuitData
/// </summary>
/// <param name="cAgent"></param>
public AgentCircuitData(sAgentCircuitData cAgent)
{
AgentID = new UUID(cAgent.AgentID);
@ -68,6 +125,10 @@ namespace OpenSim.Framework
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()
{
OSDMap args = new OSDMap();
@ -98,6 +159,10 @@ namespace OpenSim.Framework
return args;
}
/// <summary>
/// Unpack agent circuit data map into an AgentCiruitData object
/// </summary>
/// <param name="args"></param>
public void UnpackAgentCircuitData(OSDMap args)
{
if (args["agent_id"] != null)
@ -150,6 +215,9 @@ namespace OpenSim.Framework
}
}
/// <summary>
/// Serializable Agent Circuit Data
/// </summary>
[Serializable]
public class sAgentCircuitData
{

View File

@ -30,18 +30,52 @@ using OpenMetaverse;
namespace OpenSim.Framework
{
/// <summary>
/// Client provided parameters for avatar movement
/// </summary>
public class AgentUpdateArgs : EventArgs
{
/// <summary>
/// Agent's unique ID
/// </summary>
public UUID AgentID;
/// <summary>
/// Rotation of the avatar's body
/// </summary>
public Quaternion BodyRotation;
/// <summary>
/// AT portion of the camera matrix
/// </summary>
public Vector3 CameraAtAxis;
/// <summary>
/// Position of the camera in the Scene
/// </summary>
public Vector3 CameraCenter;
public Vector3 CameraLeftAxis;
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;
/// <summary>
/// Agent's client Draw distance setting
/// </summary>
public float Far;
public byte Flags;
/// <summary>
/// Rotation of the avatar's head
/// </summary>
public Quaternion HeadRotation;
/// <summary>
/// Session Id
/// </summary>
public UUID SessionID;
public byte State;
}

View File

@ -31,10 +31,17 @@ using OpenMetaverse.StructuredData;
namespace OpenSim.Framework
{
/// <summary>
/// Information about an Animation
/// </summary>
[Serializable]
public class Animation
{
private UUID animID;
/// <summary>
/// ID of Animation
/// </summary>
public UUID AnimID
{
get { return animID; }
@ -49,6 +56,10 @@ namespace OpenSim.Framework
}
private UUID objectID;
/// <summary>
/// Unique ID of object that is being animated
/// </summary>
public UUID 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)
{
this.animID = animID;
@ -66,11 +83,20 @@ namespace OpenSim.Framework
this.objectID = objectID;
}
/// <summary>
/// Animation from OSDMap from LLSD XML or LLSD json
/// </summary>
/// <param name="args"></param>
public Animation(OSDMap 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()
{
OSDMap anim = new OSDMap();
@ -80,6 +106,10 @@ namespace OpenSim.Framework
return anim;
}
/// <summary>
/// Fill object with data from OSDMap
/// </summary>
/// <param name="args"></param>
public void UnpackUpdateMessage(OSDMap args)
{
if (args["animation"] != null)

View File

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

View File

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

View File

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

View File

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

View File

@ -45,6 +45,9 @@ namespace OpenSim.Framework
get { return m_cultureInfo; }
}
/// <summary>
/// Set Culture to en-US to make string processing of numbers simpler.
/// </summary>
public static void SetCurrentCulture()
{
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; }
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
{
/// <summary>
/// Details of a Parcel of land
/// </summary>
public class LandData
{
private Vector3 _AABBMax = new Vector3();
@ -80,6 +83,9 @@ namespace OpenSim.Framework
private int _dwell = 0;
private int _otherCleanTime = 0;
/// <summary>
/// Upper corner of the AABB for the parcel
/// </summary>
public Vector3 AABBMax {
get {
return _AABBMax;
@ -88,7 +94,9 @@ namespace OpenSim.Framework
_AABBMax = value;
}
}
/// <summary>
/// Lower corner of the AABB for the parcel
/// </summary>
public Vector3 AABBMin {
get {
return _AABBMin;
@ -98,6 +106,9 @@ namespace OpenSim.Framework
}
}
/// <summary>
/// Area in meters^2 the parcel contains
/// </summary>
public int Area {
get {
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 {
get {
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 {
get {
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 {
get {
return _category;
@ -134,6 +154,9 @@ namespace OpenSim.Framework
}
}
/// <summary>
/// Date that the current owner purchased or claimed the parcel
/// </summary>
public int ClaimDate {
get {
return _claimDate;
@ -143,6 +166,9 @@ namespace OpenSim.Framework
}
}
/// <summary>
/// The last price that the parcel was sold at
/// </summary>
public int ClaimPrice {
get {
return _claimPrice;
@ -152,6 +178,9 @@ namespace OpenSim.Framework
}
}
/// <summary>
/// Global ID for the parcel. (3rd Party Integration)
/// </summary>
public UUID GlobalID {
get {
return _globalID;
@ -161,6 +190,9 @@ namespace OpenSim.Framework
}
}
/// <summary>
/// Unique ID of the Group that owns
/// </summary>
public UUID GroupID {
get {
return _groupID;
@ -170,6 +202,9 @@ namespace OpenSim.Framework
}
}
/// <summary>
/// Number of SceneObjectPart that are owned by a Group
/// </summary>
public int GroupPrims {
get {
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 {
get {
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 {
get {
return _bitmap;
@ -197,6 +238,9 @@ namespace OpenSim.Framework
}
}
/// <summary>
/// Parcel Description
/// </summary>
public string Description {
get {
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 {
get {
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 {
get {
return _landingType;
@ -224,6 +275,9 @@ namespace OpenSim.Framework
}
}
/// <summary>
/// Parcel Name
/// </summary>
public string Name {
get {
return _name;
@ -233,6 +287,9 @@ namespace OpenSim.Framework
}
}
/// <summary>
/// Status of Parcel, Leased, Abandoned, For Sale
/// </summary>
public ParcelStatus Status {
get {
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 {
get {
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 {
get {
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 {
get {
return _mediaID;
@ -269,6 +335,9 @@ namespace OpenSim.Framework
}
}
/// <summary>
/// URL to the media file to display
/// </summary>
public string MediaURL {
get {
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 {
get {
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 {
get {
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 {
get {
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 {
get {
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 {
get {
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 {
get {
return _passHours;
@ -332,6 +421,9 @@ namespace OpenSim.Framework
}
}
/// <summary>
/// Price to purchase a Pass to a restricted parcel
/// </summary>
public int PassPrice {
get {
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 {
get {
return _salePrice;
@ -350,6 +445,9 @@ namespace OpenSim.Framework
}
}
/// <summary>
/// Number of SceneObjectPart that are currently selected by avatar
/// </summary>
public int SelectedPrims {
get {
return _selectedPrims;
@ -359,6 +457,9 @@ namespace OpenSim.Framework
}
}
/// <summary>
/// Number of meters^2 in the Simulator
/// </summary>
public int SimwideArea {
get {
return _simwideArea;
@ -368,6 +469,9 @@ namespace OpenSim.Framework
}
}
/// <summary>
/// Number of SceneObjectPart in the Simulator
/// </summary>
public int SimwidePrims {
get {
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 {
get {
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 {
get {
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 {
get {
return _userLookAt;
@ -404,6 +519,9 @@ namespace OpenSim.Framework
}
}
/// <summary>
/// Depreciated idea. Number of visitors ~= free money
/// </summary>
public int Dwell {
get {
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 {
get {
return _otherCleanTime;
@ -422,11 +544,16 @@ namespace OpenSim.Framework
}
}
public LandData()
{
_globalID = UUID.Random();
}
/// <summary>
/// Make a new copy of the land data
/// </summary>
/// <returns></returns>
public LandData Copy()
{
LandData landData = new LandData();

View File

@ -964,8 +964,10 @@ namespace OpenSim.Framework.Servers.HttpServer
}
}
response.ContentType = "application/llsd+json";
return Encoding.UTF8.GetBytes(OSDParser.SerializeJsonString(llsdResponse));
// response.ContentType = "application/llsd+json";
// return Encoding.UTF8.GetBytes(OSDParser.SerializeJsonString(llsdResponse));
response.ContentType = "application/llsd+xml";
return OSDParser.SerializeLLSDXmlBytes(llsdResponse);
}
/// <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,6 +77,8 @@ namespace OpenSim.Framework
public static void Add(Thread thread)
{
#if DEBUG
if (thread != null)
{
lock (m_Threads)
{
ThreadTrackerItem tti = new ThreadTrackerItem();
@ -84,6 +86,7 @@ namespace OpenSim.Framework
tti.LastSeenActive = DateTime.Now.Ticks;
m_Threads.Add(tti);
}
}
#endif
}
@ -107,6 +110,10 @@ namespace OpenSim.Framework
{
foreach (ThreadTrackerItem tti in new ArrayList(m_Threads))
{
try
{
if (tti.Thread.IsAlive)
{
// Its active
@ -119,6 +126,11 @@ namespace OpenSim.Framework
m_Threads.Remove(tti);
}
}
catch (NullReferenceException)
{
m_Threads.Remove(tti);
}
}
}
}

View File

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

View File

@ -37,12 +37,32 @@ using OpenSim.Framework;
namespace OpenSim
{
/// <summary>
/// Loads the Configuration files into nIni
/// </summary>
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;
/// <summary>
/// A source of Configuration data
/// </summary>
protected OpenSimConfigSource m_config;
/// <summary>
/// Grid Service Information. This refers to classes and addresses of the grid service
/// </summary>
protected NetworkServersInfo m_networkServersInfo;
/// <summary>
/// Console logger
/// </summary>
private static readonly ILog m_log =
LogManager.GetLogger(
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(
IConfigSource argvSource, out ConfigSettings configSettings,
out NetworkServersInfo networkInfo)
@ -169,15 +196,22 @@ namespace OpenSim
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)
{
//loop over config sources
foreach (IConfig config in m_config.Source.Configs)
{
// Look for Include-* in the key name
string[] keys = config.GetKeys();
foreach (string k in keys)
{
if (k.StartsWith("Include-"))
{
// read the config file to be included.
string file = config.GetString(k);
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)
{
Uri configUri;
@ -253,7 +291,7 @@ namespace OpenSim
/// <summary>
/// Setup a default config values in case they aren't present in the ini file
/// </summary>
/// <returns></returns>
/// <returns>A Configuration source containing the default configuration</returns>
private static IConfigSource DefaultConfig()
{
IConfigSource defaultConfig = new IniConfigSource();
@ -322,6 +360,9 @@ namespace OpenSim
return defaultConfig;
}
/// <summary>
/// Read initial region settings from the ConfigSource
/// </summary>
protected virtual void ReadConfigSettings()
{
IConfig startupConfig = m_config.Source.Configs["Startup"];

View File

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

View File

@ -146,6 +146,9 @@ namespace OpenSim
ChangeSelectedRegion("region", new string[] {"change", "region", "root"});
}
/// <summary>
/// Register standard set of region console commands
/// </summary>
private void RegisterConsoleCommands()
{
m_console.Commands.AddCommand("region", false, "clear assets",
@ -332,6 +335,11 @@ namespace OpenSim
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)
{
if (m_timedScript != "disabled")
@ -342,6 +350,11 @@ namespace OpenSim
#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)
{
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)
{
if (File.Exists(fileName))
@ -419,12 +436,22 @@ namespace OpenSim
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)
{
m_log.Info("Updating all clients");
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)
{
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)
{
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)
{
ProcessLogin(true);
}
/// <summary>
/// Disable logins
/// </summary>
/// <param name="module"></param>
/// <param name="cmd"></param>
private void HandleLoginDisable(string module, string[] cmd)
{
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)
{
if (m_commsManager.GridService.RegionLoginsEnabled == false)
@ -492,6 +540,12 @@ namespace OpenSim
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)
{
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)
{
List<string> args = new List<string>(cmd);
@ -797,6 +857,11 @@ namespace OpenSim
}
// 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)
{
base.HandleShow(mod, cmd);
@ -902,6 +967,10 @@ namespace OpenSim
}
}
/// <summary>
/// print UDP Queue data for each client
/// </summary>
/// <returns></returns>
private string GetQueuesReport()
{
string report = String.Empty;
@ -1010,6 +1079,11 @@ namespace OpenSim
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)
{
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)
{
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)
{
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)
{
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)
{
if (cmdparams.Length > 2)

View File

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

View File

@ -74,7 +74,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
/// <summary>
/// Test saving a V0.1 OpenSim Inventory Archive (subject to change since there is no fixed format yet).
/// </summary>
//[Test]
[Test]
public void TestSaveIarV0_1()
{
TestHelper.InMethod();
@ -82,7 +82,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
InventoryArchiverModule archiverModule = new InventoryArchiverModule();
Scene scene = SceneSetupHelpers.SetupScene("");
Scene scene = SceneSetupHelpers.SetupScene("Inventory");
SceneSetupHelpers.SetupSceneModules(scene, archiverModule);
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
/// an account exists with the creator name.
/// </summary>
//[Test]
[Test]
public void TestLoadIarV0_1ExistingUsers()
{
TestHelper.InMethod();
@ -262,7 +262,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
InventoryArchiverModule archiverModule = new InventoryArchiverModule();
// 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;
SceneSetupHelpers.SetupSceneModules(scene, serialiserModule, archiverModule);
@ -276,16 +276,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
CachedUserInfo userInfo
= 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);
Assert.That(foundItem, Is.Not.Null, "Didn't find loaded item");
Assert.That(
@ -396,17 +387,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
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);
Dictionary <string, InventoryFolderImpl> foldersCreated = new Dictionary<string, InventoryFolderImpl>();
@ -429,10 +409,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
Console.WriteLine("userInfo.RootFolder 2: {0}", userInfo.RootFolder);
try
{
new InventoryArchiveReadRequest(userInfo, null, (Stream)null, null, null)
.ReplicateArchivePathToUserInventory(itemArchivePath, false, userInfo.RootFolder, foldersCreated, nodesLoaded);
.ReplicateArchivePathToUserInventory(
itemArchivePath, false, userInfo.RootFolder, foldersCreated, nodesLoaded);
Console.WriteLine("userInfo.RootFolder 3: {0}", userInfo.RootFolder);
InventoryFolderImpl folder1 = userInfo.RootFolder.FindFolderByPath("a");
@ -440,11 +419,5 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
InventoryFolderImpl folder2 = folder1.FindFolderByPath("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.Collections;
using System.Globalization;
using System.Reflection;
using log4net;
@ -41,6 +42,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Profiles
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private Scene m_scene;
private IProfileModule m_profileModule = null;
public AvatarProfilesModule()
{
@ -56,6 +58,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Profiles
public void PostInitialise()
{
m_profileModule = m_scene.RequestModuleInterface<IProfileModule>();
}
public void Close()
@ -108,6 +111,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Profiles
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,
Util.ToDateTime(profile.Created).ToString("M/d/yyyy", CultureInfo.InvariantCulture),
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
{
public class HGInventoryBroker : InventoryCache, ISharedRegionModule, IInventoryService
public class HGInventoryBroker : BaseInventoryConnector, ISharedRegionModule, IInventoryService
{
private static readonly ILog m_log =
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)
return;
@ -156,12 +156,15 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
}
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)
@ -175,17 +178,17 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
#region IInventoryService
public bool CreateUserInventory(UUID userID)
public override bool CreateUserInventory(UUID userID)
{
return m_GridService.CreateUserInventory(userID);
}
public List<InventoryFolderBase> GetInventorySkeleton(UUID userId)
public override List<InventoryFolderBase> GetInventorySkeleton(UUID userId)
{
return m_GridService.GetInventorySkeleton(userId);
}
public InventoryCollection GetUserInventory(UUID userID)
public override InventoryCollection GetUserInventory(UUID userID)
{
if (IsLocalGridUser(userID))
return m_GridService.GetUserInventory(userID);
@ -193,7 +196,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
return null;
}
public void GetUserInventory(UUID userID, InventoryReceiptCallback callback)
public override void GetUserInventory(UUID userID, InventoryReceiptCallback callback)
{
if (IsLocalGridUser(userID))
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))
return m_GridService.GetFolderContent(userID, folderID);
@ -271,12 +274,12 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
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>();
}
public bool AddFolder(InventoryFolderBase folder)
public override bool AddFolder(InventoryFolderBase folder)
{
if (folder == null)
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)
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)
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)
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)
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)
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)
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)
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)
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;
}
public InventoryFolderBase GetRootFolder(UUID userID)
public override InventoryFolderBase GetRootFolder(UUID userID)
{
return null;
}
public List<InventoryItemBase> GetActiveGestures(UUID userId)
public override List<InventoryItemBase> GetActiveGestures(UUID userId)
{
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.Reflection;
@ -12,21 +39,23 @@ using log4net;
namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
{
public abstract class InventoryCache
public class InventoryCache
{
private static readonly ILog m_log =
LogManager.GetLogger(
MethodBase.GetCurrentMethod().DeclaringType);
protected BaseInventoryConnector m_Connector;
protected List<Scene> m_Scenes;
// The cache proper
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_InventoryCache = new Dictionary<UUID, Dictionary<AssetType, InventoryFolderBase>>();
m_Connector = connector;
}
public virtual void AddRegion(Scene scene)
@ -59,21 +88,23 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
}
// If not, go get them and place them in the cache
Dictionary<AssetType, InventoryFolderBase> folders = GetSystemFolders(presence.UUID);
m_log.DebugFormat("[INVENTORY CACHE]: OnMakeRootAgent, fetched system folders for {0} {1}: count {2}",
presence.Firstname, presence.Lastname, folders.Count);
Dictionary<AssetType, InventoryFolderBase> folders = m_Connector.GetSystemFolders(presence.UUID);
m_log.DebugFormat("[INVENTORY CACHE]: OnMakeRootAgent in {0}, fetched system folders for {1} {2}: count {3}",
presence.Scene.RegionInfo.RegionName, presence.Firstname, presence.Lastname, folders.Count);
if (folders.Count > 0)
lock (m_InventoryCache)
m_InventoryCache.Add(presence.UUID, folders);
}
void OnClientClosed(UUID clientID, Scene scene)
{
if (m_InventoryCache.ContainsKey(clientID)) // if it's still in cache
{
ScenePresence sp = null;
foreach (Scene s in m_Scenes)
{
s.TryGetAvatar(clientID, out sp);
if ((sp != null) && !sp.IsChildAgent)
if ((sp != null) && !sp.IsChildAgent && (s != scene))
{
m_log.DebugFormat("[INVENTORY CACHE]: OnClientClosed in {0}, but user {1} still in sim. Keeping system folders in cache",
scene.RegionInfo.RegionName, clientID);
@ -81,16 +112,18 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
}
}
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);
{
m_log.DebugFormat("[INVENTORY CACHE]: OnClientClosed in {0}, user {1} out of sim. Dropping system folders",
scene.RegionInfo.RegionName, clientID);
m_InventoryCache.Remove(clientID);
}
}
}
public abstract Dictionary<AssetType, InventoryFolderBase> GetSystemFolders(UUID userID);
public InventoryFolderBase GetFolderForType(UUID userID, AssetType type)
{

View File

@ -41,7 +41,7 @@ using OpenMetaverse;
namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
{
public class LocalInventoryServicesConnector : InventoryCache, ISharedRegionModule, IInventoryService
public class LocalInventoryServicesConnector : BaseInventoryConnector, ISharedRegionModule, IInventoryService
{
private static readonly ILog m_log =
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)
return;
@ -141,12 +141,15 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
// "[INVENTORY CONNECTOR]: Registering IInventoryService to scene {0}", scene.RegionInfo.RegionName);
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)
@ -160,22 +163,22 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
#region IInventoryService
public bool CreateUserInventory(UUID user)
public override bool CreateUserInventory(UUID user)
{
return m_InventoryService.CreateUserInventory(user);
}
public List<InventoryFolderBase> GetInventorySkeleton(UUID userId)
public override List<InventoryFolderBase> GetInventorySkeleton(UUID userId)
{
return m_InventoryService.GetInventorySkeleton(userId);
}
public InventoryCollection GetUserInventory(UUID id)
public override InventoryCollection GetUserInventory(UUID 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);
}
@ -207,13 +210,13 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
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);
}
public List<InventoryItemBase> GetFolderItems(UUID userID, UUID folderID)
public override List<InventoryItemBase> GetFolderItems(UUID userID, UUID folderID)
{
return m_InventoryService.GetFolderItems(userID, folderID);
}
@ -223,7 +226,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
/// </summary>
/// <param name="folder"></param>
/// <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);
}
@ -233,7 +236,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
/// </summary>
/// <param name="folder"></param>
/// <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);
}
@ -243,7 +246,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
/// </summary>
/// <param name="folder">A folder containing the details of the new location</param>
/// <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);
}
@ -253,17 +256,18 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
/// </summary>
/// <param name="folder"></param>
/// <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);
}
/// <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>
/// <param name="item"></param>
/// <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);
}
@ -273,7 +277,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
/// </summary>
/// <param name="item"></param>
/// <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);
}
@ -283,17 +287,17 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
/// </summary>
/// <param name="item"></param>
/// <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);
}
public InventoryItemBase QueryItem(InventoryItemBase item)
public override InventoryItemBase QueryItem(InventoryItemBase item)
{
return m_InventoryService.QueryItem(item);
}
public InventoryFolderBase QueryFolder(InventoryFolderBase folder)
public override InventoryFolderBase QueryFolder(InventoryFolderBase folder)
{
return m_InventoryService.QueryFolder(folder);
}
@ -303,7 +307,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
/// </summary>
/// <param name="userID"></param>
/// <returns></returns>
public bool HasInventoryForUser(UUID userID)
public override bool HasInventoryForUser(UUID userID)
{
return m_InventoryService.HasInventoryForUser(userID);
}
@ -313,12 +317,12 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
/// </summary>
/// <param name="userID"></param>
/// <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);
}
public List<InventoryItemBase> GetActiveGestures(UUID userId)
public override List<InventoryItemBase> GetActiveGestures(UUID userId)
{
return m_InventoryService.GetActiveGestures(userId);
}

View File

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

View File

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

View File

@ -624,6 +624,24 @@ namespace OpenSim.Region.Framework.Scenes
}
}
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>
/// This should delete all the items and folders in the given directory.
/// </summary>
@ -648,5 +666,16 @@ namespace OpenSim.Region.Framework.Scenes
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)
{
List<ScenePresence> StatSendAgents = GetScenePresences();
@ -1050,6 +1054,9 @@ namespace OpenSim.Region.Framework.Scenes
}
}
/// <summary>
/// Recount SceneObjectPart in parcel aabb
/// </summary>
private void UpdateLand()
{
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()
{
EventManager.TriggerTerrainTick();
}
/// <summary>
/// Back up queued up changes
/// </summary>
private void UpdateStorageBackup()
{
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()
{
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)
{
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)
{
lock (m_returns)
@ -1167,6 +1194,9 @@ namespace OpenSim.Region.Framework.Scenes
#region Load Terrain
/// <summary>
/// Store the terrain in the persistant data store
/// </summary>
public void SaveTerrain()
{
m_storageManager.DataStore.StoreTerrain(Heightmap.GetDoubles(), RegionInfo.RegionID);
@ -1269,6 +1299,10 @@ namespace OpenSim.Region.Framework.Scenes
#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)
{
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)");
}
/// <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)
{
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,
byte bypassRaycast, Vector3 RayStart, UUID RayTargetID,
byte RayEndIsIntersection)
@ -1829,6 +1890,12 @@ namespace OpenSim.Region.Framework.Scenes
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)
{
ScenePresence sp = GetScenePresence(userID);
@ -1841,6 +1908,13 @@ namespace OpenSim.Region.Framework.Scenes
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)
{
// 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
/// <summary>
/// Adding a New Client and Create a Presence for it.
/// </summary>
/// <param name="client"></param>
public override void AddNewClient(IClientAPI client)
{
SubscribeToClientEvents(client);
@ -1977,6 +2055,10 @@ namespace OpenSim.Region.Framework.Scenes
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)
{
client.OnRegionHandShakeReply += SendLayerData;
@ -2019,12 +2101,13 @@ namespace OpenSim.Region.Framework.Scenes
client.OnUpdatePrimFlags += m_sceneGraph.UpdatePrimFlags;
client.OnRequestObjectPropertiesFamily += m_sceneGraph.RequestObjectPropertiesFamily;
client.OnObjectPermissions += HandleObjectPermissionsUpdate;
client.OnCreateNewInventoryItem += CreateNewInventoryItem;
client.OnCreateNewInventoryFolder += HandleCreateInventoryFolder;
client.OnUpdateInventoryFolder += HandleUpdateInventoryFolder;
client.OnMoveInventoryFolder += HandleMoveInventoryFolder;
client.OnMoveInventoryFolder += HandleMoveInventoryFolder; // 2; //!!
client.OnFetchInventoryDescendents += HandleFetchInventoryDescendents;
client.OnPurgeInventoryDescendents += HandlePurgeInventoryDescendents;
client.OnPurgeInventoryDescendents += HandlePurgeInventoryDescendents; // 2; //!!
client.OnFetchInventory += HandleFetchInventory;
client.OnUpdateInventoryItem += UpdateInventoryItemAsset;
client.OnCopyInventoryItem += CopyInventoryItem;
@ -2036,6 +2119,7 @@ namespace OpenSim.Region.Framework.Scenes
client.OnRemoveTaskItem += RemoveTaskInventory;
client.OnUpdateTaskInventory += UpdateTaskInventory;
client.OnMoveTaskItem += ClientMoveTaskInventoryItem;
client.OnGrabObject += ProcessObjectGrab;
client.OnDeGrabObject += ProcessObjectDeGrab;
client.OnMoneyTransferRequest += ProcessMoneyTransferRequest;
@ -2068,8 +2152,8 @@ namespace OpenSim.Region.Framework.Scenes
/// <summary>
/// Teleport an avatar to their home region
/// </summary>
/// <param name="agentId"></param>
/// <param name="client"></param>
/// <param name="agentId">The avatar's Unique ID</param>
/// <param name="client">The IClientAPI for the client</param>
public virtual void TeleportClientHome(UUID agentId, IClientAPI client)
{
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,
UUID RayTargetObj, Vector3 RayEnd, Vector3 RayStart,
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)
{
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)
{
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)
{
// Called by ClientView to kill all circuit codes
ClientManager.CloseAllAgents(circuitcode);
}
/// <summary>
/// Inform all other ScenePresences on this Scene that someone else has changed position on the minimap.
/// </summary>
public void NotifyMyCoarseLocationChange()
{
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
/// take proper notice of it let, we allowed banned users in still.
/// </summary>
/// <param name="regionHandle"></param>
/// <param name="agent"></param>
/// <param name="reason"></param>
/// <param name="agent">CircuitData of the agent who is connecting</param>
/// <param name="reason">Outputs the reason for the false response on this string</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)
{
// Don't disable this log message - it's too helpful
@ -2528,6 +2649,13 @@ namespace OpenSim.Region.Framework.Scenes
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)
{
reason = String.Empty;
@ -2540,6 +2668,13 @@ namespace OpenSim.Region.Framework.Scenes
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)
{
reason = String.Empty;
@ -2598,16 +2733,32 @@ namespace OpenSim.Region.Framework.Scenes
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)
{
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)
{
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)
{
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)
{
// m_log.DebugFormat(
@ -2690,6 +2848,12 @@ namespace OpenSim.Region.Framework.Scenes
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)
{
//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);
/// <summary>
/// Class that Region communications runs through
/// </summary>
public class SceneCommunicationService //one instance per region
{
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;
/// <summary>
/// An agent is crossing into this region
/// </summary>
public event AgentCrossing OnAvatarCrossingIntoRegion;
/// <summary>
/// A user will arrive shortly, set up appropriate credentials so it can connect
/// </summary>
public event ExpectUserDelegate OnExpectUser;
/// <summary>
/// A Prim will arrive shortly
/// </summary>
public event ExpectPrimDelegate OnExpectPrim;
public event CloseAgentConnection OnCloseAgentConnection;
/// <summary>
/// A new prim has arrived
/// </summary>
public event PrimCrossing OnPrimCrossingIntoRegion;
/// <summary>
/// A New Region is up and available
/// </summary>
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 RemoveKnownRegionsFromAvatarList OnRemoveKnownRegionFromAvatar;
/// <summary>
/// Time to log one of our users off. Grid Service sends this mostly
/// </summary>
public event LogOffUser OnLogOffUser;
/// <summary>
/// A region wants land data from us!
/// </summary>
public event GetLandData OnGetLandData;
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)
{
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()
{
if (regionCommsHost != null)
@ -159,10 +202,9 @@ namespace OpenSim.Region.Framework.Scenes
#region CommsManager Event handlers
/// <summary>
///
/// A New User will arrive shortly, Informs the scene that there's a new user on the way
/// </summary>
/// <param name="regionHandle"></param>
/// <param name="agent"></param>
/// <param name="agent">Data we need to ensure that the agent can connect</param>
///
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)
{
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)
{
handlerRegionUp = OnRegionUp;
@ -194,6 +247,11 @@ namespace OpenSim.Region.Framework.Scenes
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)
{
handlerChildAgentUpdate = OnChildAgentUpdate;
@ -204,6 +262,7 @@ namespace OpenSim.Region.Framework.Scenes
return true;
}
protected void AgentCrossing(UUID agentID, Vector3 position, bool isFlying)
{
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)
{
handlerExpectPrim = OnExpectPrim;

View File

@ -1098,30 +1098,29 @@ if (m_shape != null) {
}
}
private void handleTimerAccounting(uint localID, double interval)
{
if (localID == LocalId)
{
float sec = (float)interval;
if (m_parentGroup != null)
{
if (sec == 0)
{
if (m_parentGroup.scriptScore + 0.001f >= float.MaxValue - 0.001)
m_parentGroup.scriptScore = 0;
m_parentGroup.scriptScore += 0.001f;
return;
}
if (m_parentGroup.scriptScore + (0.001f / sec) >= float.MaxValue - (0.001f / sec))
m_parentGroup.scriptScore = 0;
m_parentGroup.scriptScore += (0.001f / sec);
}
}
}
// TODO: unused:
// private void handleTimerAccounting(uint localID, double interval)
// {
// if (localID == LocalId)
// {
// float sec = (float)interval;
// if (m_parentGroup != null)
// {
// if (sec == 0)
// {
// if (m_parentGroup.scriptScore + 0.001f >= float.MaxValue - 0.001)
// m_parentGroup.scriptScore = 0;
//
// m_parentGroup.scriptScore += 0.001f;
// return;
// }
//
// if (m_parentGroup.scriptScore + (0.001f / sec) >= float.MaxValue - (0.001f / sec))
// m_parentGroup.scriptScore = 0;
// m_parentGroup.scriptScore += (0.001f / sec);
// }
// }
// }
#endregion Private Methods
@ -1248,7 +1247,6 @@ if (m_shape != null) {
}
}
/// <summary>
/// hook to the physics scene to apply angular impulse
/// 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);
}
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.startpos = Vector3.Zero;
agent.CapsPath = GetRandomCapsObjectPath();
agent.ChildrenCapSeeds = new Dictionary<ulong, string>();
string reason;
scene.NewUserConnection(agent, out reason);
@ -147,7 +148,13 @@ namespace OpenSim.Region.Framework.Scenes.Tests
TestHelper.InMethod();
string reason;
if (acd1 == null)
fixNullPresence();
scene.NewUserConnection(acd1, out reason);
if (testclient == null)
testclient = new TestClient(acd1, scene);
scene.AddNewClient(testclient);
ScenePresence presence = scene.GetScenePresence(agent1);
@ -162,6 +169,24 @@ namespace OpenSim.Region.Framework.Scenes.Tests
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]
public void T013_TestRemoveNeighbourRegion()

View File

@ -38,6 +38,7 @@ using OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion;
using OpenSim.Tests.Common;
using OpenSim.Tests.Common.Mock;
using OpenSim.Tests.Common.Setup;
using System.Threading;
namespace OpenSim.Region.Framework.Scenes.Tests
{
@ -55,9 +56,47 @@ namespace OpenSim.Region.Framework.Scenes.Tests
public void TestSimpleNotNeighboursTeleport()
{
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());
}
}
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();
UUID sceneAId = UUID.Parse("00000000-0000-0000-0000-000000000100");
@ -80,26 +119,62 @@ namespace OpenSim.Region.Framework.Scenes.Tests
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(
sceneACapsModule.GetCapsPath(agentId),
Is.EqualTo(client.CapsSeedUrl),
"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.
client.TeleportTargetScene = sceneB;
client.Teleport(sceneB.RegionInfo.RegionHandle, new Vector3(100, 100, 100), new Vector3(40, 40, 40));
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");
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(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>();
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.
/*
Assert.That(
"http://" + sceneB.RegionInfo.ExternalHostName + ":" + sceneB.RegionInfo.HttpPort + "/CAPS/" + sceneBCapsModule.GetCapsPath(agentId) + "0000/",
Is.EqualTo(client.CapsSeedUrl),
"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
//Assert.That(sceneACapsModule.GetCapsPath(agentId), Is.Null, "sceneA still had a caps object path");

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 hpr = new d.Vector3(125.5000f, -17.0000f, 0.0000f);
private uint heightmapWidth = m_regionWidth + 1;
private uint heightmapHeight = m_regionHeight + 1;
private uint heightmapWidthSamples;
private uint heightmapHeightSamples;
// TODO: unused: private uint heightmapWidth = m_regionWidth + 1;
// TODO: unused: private uint heightmapHeight = m_regionHeight + 1;
// TODO: unused: private uint heightmapWidthSamples;
// TODO: unused: private uint heightmapHeightSamples;
private volatile int m_global_contactcount = 0;

View File

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

View File

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

View File

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

View File

@ -53,7 +53,7 @@ using OpenSim.Region.ScriptEngine.Interfaces;
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);
@ -261,7 +261,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
"SecondLife.Script");
ILease lease = (ILease)RemotingServices.GetLifetimeService(m_Script as ScriptBaseClass);
lease.Register(this);
// lease.Register(this);
}
catch (Exception)
{
@ -1006,10 +1006,5 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
{
return true;
}
public TimeSpan Renewal(ILease lease)
{
return lease.InitialLeaseTime;
}
}
}

View File

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

View File

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

View File

@ -34,25 +34,53 @@ namespace OpenSim.Services.Interfaces
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);
/// <summary>
/// Get an asset's metadata
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
AssetMetadata GetMetadata(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);
// Creates a new asset
// Returns a random ID if none is passed into it
//
/// <summary>
/// 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);
// 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);
// Kill an asset
//
/// <summary>
/// Delete an asset
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
bool Delete(string id);
}
}

View File

@ -45,7 +45,13 @@ namespace OpenSim.Tests.Common.Mock
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)
@ -60,7 +66,9 @@ namespace OpenSim.Tests.Common.Mock
public bool Get(string id, object sender, AssetRetrieved handler)
{
throw new NotImplementedException();
handler(id, sender, Get(id));
return true;
}
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.Text;
using OpenSim.Framework;

View File

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

View File

@ -34,7 +34,7 @@
<!-- 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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -55,7 +55,7 @@
</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">
<Options>
<OutputPath>../../../../bin/</OutputPath>
@ -91,7 +91,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -113,7 +113,7 @@
</Files>
</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">
<Options>
<OutputPath>../../bin/</OutputPath>
@ -145,7 +145,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -170,7 +170,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -194,7 +194,7 @@
</Files>
</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">
<Options>
<OutputPath>../../bin/</OutputPath>
@ -223,7 +223,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../bin/</OutputPath>
@ -248,7 +248,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../bin/</OutputPath>
@ -275,7 +275,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../bin/</OutputPath>
@ -300,7 +300,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../bin/</OutputPath>
@ -326,7 +326,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../bin/</OutputPath>
@ -351,7 +351,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -384,7 +384,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../bin/</OutputPath>
@ -412,7 +412,7 @@
</Project>
<!-- 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">
<Options>
<OutputPath>../../../../bin/Physics/</OutputPath>
@ -435,7 +435,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../bin/Physics/</OutputPath>
@ -458,7 +458,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../bin/Physics/</OutputPath>
@ -483,7 +483,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../bin/Physics/</OutputPath>
@ -512,7 +512,7 @@
</Files>
</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">
<Options>
<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">
<Options>
<OutputPath>../../../../bin/Physics/</OutputPath>
@ -570,7 +570,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../bin/Physics/</OutputPath>
@ -598,7 +598,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -626,7 +626,7 @@
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -660,7 +660,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -702,7 +702,7 @@
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -752,7 +752,7 @@
<!-- 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">
<Options>
<OutputPath>../../../../bin/</OutputPath>
@ -783,7 +783,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../bin/</OutputPath>
@ -820,7 +820,7 @@
<!-- 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">
<Options>
<OutputPath>../../../../bin/</OutputPath>
@ -847,7 +847,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -878,7 +878,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -913,7 +913,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -950,7 +950,7 @@
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -982,7 +982,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -1012,7 +1012,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../bin/</OutputPath>
@ -1043,7 +1043,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../../bin/</OutputPath>
@ -1072,7 +1072,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../../bin/</OutputPath>
@ -1104,7 +1104,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -1143,7 +1143,7 @@
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -1181,7 +1181,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -1213,7 +1213,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -1247,7 +1247,7 @@
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -1281,7 +1281,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -1308,7 +1308,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -1338,7 +1338,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -1371,7 +1371,7 @@
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -1402,7 +1402,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -1433,7 +1433,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -1464,7 +1464,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -1496,7 +1496,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -1524,7 +1524,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -1560,7 +1560,7 @@
</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">
<Options>
<OutputPath>../../bin/</OutputPath>
@ -1593,7 +1593,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -1654,7 +1654,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../../../bin/Terrain/</OutputPath>
@ -1677,7 +1677,7 @@
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -1736,7 +1736,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../bin/</OutputPath>
@ -1773,7 +1773,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -1810,7 +1810,7 @@
</Project>
<!-- 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">
<Options>
<OutputPath>../../../../bin/</OutputPath>
@ -1851,7 +1851,7 @@
</Project>
<!-- 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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -1878,7 +1878,7 @@
</Project>
<!-- 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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -1920,7 +1920,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -1955,7 +1955,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -1985,7 +1985,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -2028,7 +2028,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -2068,7 +2068,7 @@
</Project>
<!-- REST plugins -->
<Project name="OpenSim.ApplicationPlugins.Rest"
<Project frameworkVersion="v3_5" name="OpenSim.ApplicationPlugins.Rest"
path="OpenSim/ApplicationPlugins/Rest" type="Library">
<Configuration name="Debug">
<Options>
@ -2104,7 +2104,7 @@
</Files>
</Project>
<Project name="OpenSim.ApplicationPlugins.Rest.Regions"
<Project frameworkVersion="v3_5" name="OpenSim.ApplicationPlugins.Rest.Regions"
path="OpenSim/ApplicationPlugins/Rest/Regions" type="Library">
<Configuration name="Debug">
<Options>
@ -2142,7 +2142,7 @@
</Files>
</Project>
<Project name="OpenSim.ApplicationPlugins.Rest.Inventory"
<Project frameworkVersion="v3_5" name="OpenSim.ApplicationPlugins.Rest.Inventory"
path="OpenSim/ApplicationPlugins/Rest/Inventory" type="Library">
<Configuration name="Debug">
<Options>
@ -2187,7 +2187,7 @@
<!-- 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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -2220,7 +2220,7 @@
</Files>
</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">
<Options>
<OutputPath>bin/</OutputPath>
@ -2250,7 +2250,7 @@
<!-- 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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -2279,7 +2279,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -2310,7 +2310,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -2350,7 +2350,7 @@
<!-- 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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -2386,7 +2386,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -2419,7 +2419,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -2456,7 +2456,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -2496,7 +2496,7 @@
</Files>
</Project>
<Project name="SmartThreadPool" path="ThirdParty/SmartThreadPool" type="Library">
<Project frameworkVersion="v3_5" name="SmartThreadPool" path="ThirdParty/SmartThreadPool" type="Library">
<Configuration name="Debug">
<Options>
<OutputPath>../../bin/</OutputPath>
@ -2518,7 +2518,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../bin/</OutputPath>
@ -2557,7 +2557,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../../../bin/</OutputPath>
@ -2592,7 +2592,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../../../../bin/</OutputPath>
@ -2626,7 +2626,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../../../bin/</OutputPath>
@ -2665,7 +2665,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../../bin/</OutputPath>
@ -2698,7 +2698,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../../bin/</OutputPath>
@ -2737,7 +2737,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../bin/</OutputPath>
@ -2780,7 +2780,7 @@
</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">
<Options>
<OutputPath>../../../../bin/</OutputPath>
@ -2820,7 +2820,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -2842,7 +2842,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -2880,7 +2880,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -2921,7 +2921,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../../bin/</OutputPath>
@ -2960,7 +2960,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../../bin/</OutputPath>
@ -2999,7 +2999,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../../bin/</OutputPath>
@ -3041,7 +3041,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../../bin/</OutputPath>
@ -3081,7 +3081,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../../bin/</OutputPath>
@ -3121,7 +3121,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../bin/</OutputPath>
@ -3166,7 +3166,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -3217,7 +3217,7 @@
<!-- 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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -3244,7 +3244,7 @@
</Project>
<!-- 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">
<Options>
<OutputPath>../../bin/</OutputPath>
@ -3271,7 +3271,7 @@
</Project>
<!-- 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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -3311,7 +3311,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -3326,6 +3326,7 @@
<ReferencePath>../../../bin/</ReferencePath>
<Reference name="System"/>
<Reference name="System.Xml"/>
<Reference name="System.Core"/>
<Reference name="System.Drawing"/>
<Reference name="System.Data"/>
<Reference name="OpenMetaverse.dll"/>
@ -3342,7 +3343,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../bin/</OutputPath>
@ -3378,7 +3379,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../bin/</OutputPath>
@ -3417,7 +3418,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../bin/</OutputPath>
@ -3454,7 +3455,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -3472,6 +3473,7 @@
<Reference name="System.Data"/>
<Reference name="OpenMetaverse.dll"/>
<Reference name="OpenMetaverseTypes.dll"/>
<Reference name="OpenMetaverse.StructuredData.dll"/>
<Reference name="XMLRPC.dll"/>
<Reference name="OpenSim.Framework.Console"/>
<Reference name="OpenSim.Framework"/>
@ -3483,7 +3485,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../bin/</OutputPath>
@ -3513,7 +3515,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../../bin/</OutputPath>
@ -3542,7 +3544,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../bin/</OutputPath>
@ -3577,7 +3579,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -3638,7 +3640,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -3694,7 +3696,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../../bin/</OutputPath>
@ -3727,7 +3729,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../bin/</OutputPath>
@ -3773,7 +3775,7 @@
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.
-->
<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">
<Options>
<OutputPath>../../../../bin/</OutputPath>
@ -3801,7 +3803,7 @@
</Files>
</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">
<Options>
<OutputPath>../../../../bin/</OutputPath>
@ -3860,7 +3862,7 @@
</Options>
</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">
<Options>
<CompilerDefines>DEBUG;TRACE</CompilerDefines>