Merge branch 'master' of ssh://opensimulator.org/var/git/opensim

0.7.4.1
Diva Canto 2012-04-27 09:26:14 -07:00
commit 2970a18e54
69 changed files with 816 additions and 661 deletions

View File

@ -50,7 +50,7 @@ namespace OpenSim.Capabilities.Handlers.GetTexture.Tests
TestHelpers.InMethod(); TestHelpers.InMethod();
// Overkill - we only really need the asset service, not a whole scene. // Overkill - we only really need the asset service, not a whole scene.
Scene scene = SceneHelpers.SetupScene(); Scene scene = new SceneHelpers().SetupScene();
GetTextureHandler handler = new GetTextureHandler(null, scene.AssetService); GetTextureHandler handler = new GetTextureHandler(null, scene.AssetService);
TestOSHttpRequest req = new TestOSHttpRequest(); TestOSHttpRequest req = new TestOSHttpRequest();

View File

@ -38,239 +38,189 @@ namespace OpenSim.Framework
public static class SLUtil public static class SLUtil
{ {
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
#region SL / file extension / content-type conversions #region SL / file extension / content-type conversions
private class TypeMapping
{
private sbyte assetType;
private InventoryType inventoryType;
private string contentType;
private string contentType2;
private string extension;
public sbyte AssetTypeCode
{
get { return assetType; }
}
public object AssetType
{
get {
if (Enum.IsDefined(typeof(OpenMetaverse.AssetType), assetType))
return (OpenMetaverse.AssetType)assetType;
else
return OpenMetaverse.AssetType.Unknown;
}
}
public InventoryType InventoryType
{
get { return inventoryType; }
}
public string ContentType
{
get { return contentType; }
}
public string ContentType2
{
get { return contentType2; }
}
public string Extension
{
get { return extension; }
}
private TypeMapping(sbyte assetType, InventoryType inventoryType, string contentType, string contentType2, string extension)
{
this.assetType = assetType;
this.inventoryType = inventoryType;
this.contentType = contentType;
this.contentType2 = contentType2;
this.extension = extension;
}
public TypeMapping(AssetType assetType, InventoryType inventoryType, string contentType, string contentType2, string extension)
: this((sbyte)assetType, inventoryType, contentType, contentType2, extension)
{
}
public TypeMapping(AssetType assetType, InventoryType inventoryType, string contentType, string extension)
: this((sbyte)assetType, inventoryType, contentType, null, extension)
{
}
}
/// <summary>
/// Maps between AssetType, InventoryType and Content-Type.
/// Where more than one possibility exists, the first one takes precedence. E.g.:
/// AssetType "AssetType.Texture" -> Content-Type "image-xj2c"
/// Content-Type "image/x-j2c" -> InventoryType "InventoryType.Texture"
/// </summary>
private static TypeMapping[] MAPPINGS = new TypeMapping[] {
new TypeMapping(AssetType.Unknown, InventoryType.Unknown, "application/octet-stream", "bin"),
new TypeMapping(AssetType.Texture, InventoryType.Texture, "image/x-j2c", "image/jp2", "j2c"),
new TypeMapping(AssetType.Texture, InventoryType.Snapshot, "image/x-j2c", "image/jp2", "j2c"),
new TypeMapping(AssetType.TextureTGA, InventoryType.Texture, "image/tga", "tga"),
new TypeMapping(AssetType.ImageTGA, InventoryType.Texture, "image/tga", "tga"),
new TypeMapping(AssetType.ImageJPEG, InventoryType.Texture, "image/jpeg", "jpg"),
new TypeMapping(AssetType.Sound, InventoryType.Sound, "audio/ogg", "application/ogg", "ogg"),
new TypeMapping(AssetType.SoundWAV, InventoryType.Sound, "audio/x-wav", "wav"),
new TypeMapping(AssetType.CallingCard, InventoryType.CallingCard, "application/vnd.ll.callingcard", "application/x-metaverse-callingcard", "callingcard"),
new TypeMapping(AssetType.Landmark, InventoryType.Landmark, "application/vnd.ll.landmark", "application/x-metaverse-landmark", "landmark"),
new TypeMapping(AssetType.Clothing, InventoryType.Wearable, "application/vnd.ll.clothing", "application/x-metaverse-clothing", "clothing"),
new TypeMapping(AssetType.Object, InventoryType.Object, "application/vnd.ll.primitive", "application/x-metaverse-primitive", "primitive"),
new TypeMapping(AssetType.Object, InventoryType.Attachment, "application/vnd.ll.primitive", "application/x-metaverse-primitive", "primitive"),
new TypeMapping(AssetType.Notecard, InventoryType.Notecard, "application/vnd.ll.notecard", "application/x-metaverse-notecard", "notecard"),
new TypeMapping(AssetType.Folder, InventoryType.Folder, "application/vnd.ll.folder", "folder"),
new TypeMapping(AssetType.RootFolder, InventoryType.RootCategory, "application/vnd.ll.rootfolder", "rootfolder"),
new TypeMapping(AssetType.LSLText, InventoryType.LSL, "application/vnd.ll.lsltext", "application/x-metaverse-lsl", "lsl"),
new TypeMapping(AssetType.LSLBytecode, InventoryType.LSL, "application/vnd.ll.lslbyte", "application/x-metaverse-lso", "lso"),
new TypeMapping(AssetType.Bodypart, InventoryType.Wearable, "application/vnd.ll.bodypart", "application/x-metaverse-bodypart", "bodypart"),
new TypeMapping(AssetType.TrashFolder, InventoryType.Folder, "application/vnd.ll.trashfolder", "trashfolder"),
new TypeMapping(AssetType.SnapshotFolder, InventoryType.Folder, "application/vnd.ll.snapshotfolder", "snapshotfolder"),
new TypeMapping(AssetType.LostAndFoundFolder, InventoryType.Folder, "application/vnd.ll.lostandfoundfolder", "lostandfoundfolder"),
new TypeMapping(AssetType.Animation, InventoryType.Animation, "application/vnd.ll.animation", "application/x-metaverse-animation", "animation"),
new TypeMapping(AssetType.Gesture, InventoryType.Gesture, "application/vnd.ll.gesture", "application/x-metaverse-gesture", "gesture"),
new TypeMapping(AssetType.Simstate, InventoryType.Snapshot, "application/x-metaverse-simstate", "simstate"),
new TypeMapping(AssetType.FavoriteFolder, InventoryType.Unknown, "application/vnd.ll.favoritefolder", "favoritefolder"),
new TypeMapping(AssetType.Link, InventoryType.Unknown, "application/vnd.ll.link", "link"),
new TypeMapping(AssetType.LinkFolder, InventoryType.Unknown, "application/vnd.ll.linkfolder", "linkfolder"),
new TypeMapping(AssetType.CurrentOutfitFolder, InventoryType.Unknown, "application/vnd.ll.currentoutfitfolder", "currentoutfitfolder"),
new TypeMapping(AssetType.OutfitFolder, InventoryType.Unknown, "application/vnd.ll.outfitfolder", "outfitfolder"),
new TypeMapping(AssetType.MyOutfitsFolder, InventoryType.Unknown, "application/vnd.ll.myoutfitsfolder", "myoutfitsfolder"),
new TypeMapping(AssetType.Mesh, InventoryType.Mesh, "application/vnd.ll.mesh", "llm")
};
private static Dictionary<sbyte, string> asset2Content;
private static Dictionary<sbyte, string> asset2Extension;
private static Dictionary<InventoryType, string> inventory2Content;
private static Dictionary<string, sbyte> content2Asset;
private static Dictionary<string, InventoryType> content2Inventory;
static SLUtil()
{
asset2Content = new Dictionary<sbyte, string>();
asset2Extension = new Dictionary<sbyte, string>();
inventory2Content = new Dictionary<InventoryType, string>();
content2Asset = new Dictionary<string, sbyte>();
content2Inventory = new Dictionary<string, InventoryType>();
foreach (TypeMapping mapping in MAPPINGS)
{
sbyte assetType = mapping.AssetTypeCode;
if (!asset2Content.ContainsKey(assetType))
asset2Content.Add(assetType, mapping.ContentType);
if (!asset2Extension.ContainsKey(assetType))
asset2Extension.Add(assetType, mapping.Extension);
if (!inventory2Content.ContainsKey(mapping.InventoryType))
inventory2Content.Add(mapping.InventoryType, mapping.ContentType);
if (!content2Asset.ContainsKey(mapping.ContentType))
content2Asset.Add(mapping.ContentType, assetType);
if (!content2Inventory.ContainsKey(mapping.ContentType))
content2Inventory.Add(mapping.ContentType, mapping.InventoryType);
if (mapping.ContentType2 != null)
{
if (!content2Asset.ContainsKey(mapping.ContentType2))
content2Asset.Add(mapping.ContentType2, assetType);
if (!content2Inventory.ContainsKey(mapping.ContentType2))
content2Inventory.Add(mapping.ContentType2, mapping.InventoryType);
}
}
}
public static string SLAssetTypeToContentType(int assetType) public static string SLAssetTypeToContentType(int assetType)
{ {
switch ((AssetType)assetType) string contentType;
{ if (!asset2Content.TryGetValue((sbyte)assetType, out contentType))
case AssetType.Texture: contentType = asset2Content[(sbyte)AssetType.Unknown];
return "image/x-j2c"; return contentType;
case AssetType.Sound:
return "audio/ogg";
case AssetType.CallingCard:
return "application/vnd.ll.callingcard";
case AssetType.Landmark:
return "application/vnd.ll.landmark";
case AssetType.Clothing:
return "application/vnd.ll.clothing";
case AssetType.Object:
return "application/vnd.ll.primitive";
case AssetType.Notecard:
return "application/vnd.ll.notecard";
case AssetType.Folder:
return "application/vnd.ll.folder";
case AssetType.RootFolder:
return "application/vnd.ll.rootfolder";
case AssetType.LSLText:
return "application/vnd.ll.lsltext";
case AssetType.LSLBytecode:
return "application/vnd.ll.lslbyte";
case AssetType.TextureTGA:
case AssetType.ImageTGA:
return "image/tga";
case AssetType.Bodypart:
return "application/vnd.ll.bodypart";
case AssetType.TrashFolder:
return "application/vnd.ll.trashfolder";
case AssetType.SnapshotFolder:
return "application/vnd.ll.snapshotfolder";
case AssetType.LostAndFoundFolder:
return "application/vnd.ll.lostandfoundfolder";
case AssetType.SoundWAV:
return "audio/x-wav";
case AssetType.ImageJPEG:
return "image/jpeg";
case AssetType.Animation:
return "application/vnd.ll.animation";
case AssetType.Gesture:
return "application/vnd.ll.gesture";
case AssetType.Simstate:
return "application/x-metaverse-simstate";
case AssetType.FavoriteFolder:
return "application/vnd.ll.favoritefolder";
case AssetType.Link:
return "application/vnd.ll.link";
case AssetType.LinkFolder:
return "application/vnd.ll.linkfolder";
case AssetType.CurrentOutfitFolder:
return "application/vnd.ll.currentoutfitfolder";
case AssetType.OutfitFolder:
return "application/vnd.ll.outfitfolder";
case AssetType.MyOutfitsFolder:
return "application/vnd.ll.myoutfitsfolder";
case AssetType.Unknown:
default:
return "application/octet-stream";
}
} }
public static string SLInvTypeToContentType(int invType) public static string SLInvTypeToContentType(int invType)
{ {
switch ((InventoryType)invType) string contentType;
{ if (!inventory2Content.TryGetValue((InventoryType)invType, out contentType))
case InventoryType.Animation: contentType = inventory2Content[InventoryType.Unknown];
return "application/vnd.ll.animation"; return contentType;
case InventoryType.CallingCard:
return "application/vnd.ll.callingcard";
case InventoryType.Folder:
return "application/vnd.ll.folder";
case InventoryType.Gesture:
return "application/vnd.ll.gesture";
case InventoryType.Landmark:
return "application/vnd.ll.landmark";
case InventoryType.LSL:
return "application/vnd.ll.lsltext";
case InventoryType.Notecard:
return "application/vnd.ll.notecard";
case InventoryType.Attachment:
case InventoryType.Object:
return "application/vnd.ll.primitive";
case InventoryType.Sound:
return "audio/ogg";
case InventoryType.Snapshot:
case InventoryType.Texture:
return "image/x-j2c";
case InventoryType.Wearable:
return "application/vnd.ll.clothing";
default:
return "application/octet-stream";
}
} }
public static sbyte ContentTypeToSLAssetType(string contentType) public static sbyte ContentTypeToSLAssetType(string contentType)
{ {
switch (contentType) sbyte assetType;
{ if (!content2Asset.TryGetValue(contentType, out assetType))
case "image/x-j2c": assetType = (sbyte)AssetType.Unknown;
case "image/jp2": return (sbyte)assetType;
return (sbyte)AssetType.Texture;
case "application/ogg":
case "audio/ogg":
return (sbyte)AssetType.Sound;
case "application/vnd.ll.callingcard":
case "application/x-metaverse-callingcard":
return (sbyte)AssetType.CallingCard;
case "application/vnd.ll.landmark":
case "application/x-metaverse-landmark":
return (sbyte)AssetType.Landmark;
case "application/vnd.ll.clothing":
case "application/x-metaverse-clothing":
return (sbyte)AssetType.Clothing;
case "application/vnd.ll.primitive":
case "application/x-metaverse-primitive":
return (sbyte)AssetType.Object;
case "application/vnd.ll.notecard":
case "application/x-metaverse-notecard":
return (sbyte)AssetType.Notecard;
case "application/vnd.ll.folder":
return (sbyte)AssetType.Folder;
case "application/vnd.ll.rootfolder":
return (sbyte)AssetType.RootFolder;
case "application/vnd.ll.lsltext":
case "application/x-metaverse-lsl":
return (sbyte)AssetType.LSLText;
case "application/vnd.ll.lslbyte":
case "application/x-metaverse-lso":
return (sbyte)AssetType.LSLBytecode;
case "image/tga":
// Note that AssetType.TextureTGA will be converted to AssetType.ImageTGA
return (sbyte)AssetType.ImageTGA;
case "application/vnd.ll.bodypart":
case "application/x-metaverse-bodypart":
return (sbyte)AssetType.Bodypart;
case "application/vnd.ll.trashfolder":
return (sbyte)AssetType.TrashFolder;
case "application/vnd.ll.snapshotfolder":
return (sbyte)AssetType.SnapshotFolder;
case "application/vnd.ll.lostandfoundfolder":
return (sbyte)AssetType.LostAndFoundFolder;
case "audio/x-wav":
return (sbyte)AssetType.SoundWAV;
case "image/jpeg":
return (sbyte)AssetType.ImageJPEG;
case "application/vnd.ll.animation":
case "application/x-metaverse-animation":
return (sbyte)AssetType.Animation;
case "application/vnd.ll.gesture":
case "application/x-metaverse-gesture":
return (sbyte)AssetType.Gesture;
case "application/x-metaverse-simstate":
return (sbyte)AssetType.Simstate;
case "application/vnd.ll.favoritefolder":
return (sbyte)AssetType.FavoriteFolder;
case "application/vnd.ll.link":
return (sbyte)AssetType.Link;
case "application/vnd.ll.linkfolder":
return (sbyte)AssetType.LinkFolder;
case "application/vnd.ll.currentoutfitfolder":
return (sbyte)AssetType.CurrentOutfitFolder;
case "application/vnd.ll.outfitfolder":
return (sbyte)AssetType.OutfitFolder;
case "application/vnd.ll.myoutfitsfolder":
return (sbyte)AssetType.MyOutfitsFolder;
case "application/octet-stream":
default:
return (sbyte)AssetType.Unknown;
}
} }
public static sbyte ContentTypeToSLInvType(string contentType) public static sbyte ContentTypeToSLInvType(string contentType)
{ {
switch (contentType) InventoryType invType;
{ if (!content2Inventory.TryGetValue(contentType, out invType))
case "image/x-j2c": invType = InventoryType.Unknown;
case "image/jp2": return (sbyte)invType;
case "image/tga": }
case "image/jpeg":
return (sbyte)InventoryType.Texture; public static string SLAssetTypeToExtension(int assetType)
case "application/ogg": {
case "audio/ogg": string extension;
case "audio/x-wav": if (!asset2Extension.TryGetValue((sbyte)assetType, out extension))
return (sbyte)InventoryType.Sound; extension = asset2Extension[(sbyte)AssetType.Unknown];
case "application/vnd.ll.callingcard": return extension;
case "application/x-metaverse-callingcard":
return (sbyte)InventoryType.CallingCard;
case "application/vnd.ll.landmark":
case "application/x-metaverse-landmark":
return (sbyte)InventoryType.Landmark;
case "application/vnd.ll.clothing":
case "application/x-metaverse-clothing":
case "application/vnd.ll.bodypart":
case "application/x-metaverse-bodypart":
return (sbyte)InventoryType.Wearable;
case "application/vnd.ll.primitive":
case "application/x-metaverse-primitive":
return (sbyte)InventoryType.Object;
case "application/vnd.ll.notecard":
case "application/x-metaverse-notecard":
return (sbyte)InventoryType.Notecard;
case "application/vnd.ll.folder":
return (sbyte)InventoryType.Folder;
case "application/vnd.ll.rootfolder":
return (sbyte)InventoryType.RootCategory;
case "application/vnd.ll.lsltext":
case "application/x-metaverse-lsl":
case "application/vnd.ll.lslbyte":
case "application/x-metaverse-lso":
return (sbyte)InventoryType.LSL;
case "application/vnd.ll.trashfolder":
case "application/vnd.ll.snapshotfolder":
case "application/vnd.ll.lostandfoundfolder":
return (sbyte)InventoryType.Folder;
case "application/vnd.ll.animation":
case "application/x-metaverse-animation":
return (sbyte)InventoryType.Animation;
case "application/vnd.ll.gesture":
case "application/x-metaverse-gesture":
return (sbyte)InventoryType.Gesture;
case "application/x-metaverse-simstate":
return (sbyte)InventoryType.Snapshot;
case "application/octet-stream":
default:
return (sbyte)InventoryType.Unknown;
}
} }
#endregion SL / file extension / content-type conversions #endregion SL / file extension / content-type conversions
@ -377,4 +327,4 @@ namespace OpenSim.Framework
return output; return output;
} }
} }
} }

View File

@ -214,16 +214,13 @@ namespace OpenSim.Framework.Tests
for (int i = 0; i < contenttypes.Length; i++) for (int i = 0; i < contenttypes.Length; i++)
{ {
if (SLUtil.ContentTypeToSLAssetType(contenttypes[i]) == 18) int expected;
{ if (contenttypes[i] == "image/tga")
Assert.That(contenttypes[i] == "image/tga"); expected = 12; // if we know only the content-type "image/tga", then we assume the asset type is TextureTGA; not ImageTGA
}
else else
{ expected = assettypes[i];
Assert.That(SLUtil.ContentTypeToSLAssetType(contenttypes[i]) == assettypes[i], Assert.AreEqual(expected, SLUtil.ContentTypeToSLAssetType(contenttypes[i]),
"Expecting {0} but got {1}", assettypes[i], String.Format("Incorrect AssetType mapped from Content-Type {0}", contenttypes[i]));
SLUtil.ContentTypeToSLAssetType(contenttypes[i]));
}
} }
int[] inventorytypes = new int[] {-1,0,1,2,3,6,7,8,9,10,15,17,18,20}; int[] inventorytypes = new int[] {-1,0,1,2,3,6,7,8,9,10,15,17,18,20};
@ -237,7 +234,7 @@ namespace OpenSim.Framework.Tests
"application/vnd.ll.primitive", "application/vnd.ll.primitive",
"application/vnd.ll.notecard", "application/vnd.ll.notecard",
"application/vnd.ll.folder", "application/vnd.ll.folder",
"application/octet-stream", "application/vnd.ll.rootfolder",
"application/vnd.ll.lsltext", "application/vnd.ll.lsltext",
"image/x-j2c", "image/x-j2c",
"application/vnd.ll.primitive", "application/vnd.ll.primitive",
@ -247,7 +244,8 @@ namespace OpenSim.Framework.Tests
for (int i=0;i<inventorytypes.Length;i++) for (int i=0;i<inventorytypes.Length;i++)
{ {
Assert.That(SLUtil.SLInvTypeToContentType(inventorytypes[i]) == invcontenttypes[i], "Expected {0}, Got {1}", invcontenttypes[i], SLUtil.SLInvTypeToContentType(inventorytypes[i])); Assert.AreEqual(invcontenttypes[i], SLUtil.SLInvTypeToContentType(inventorytypes[i]),
String.Format("Incorrect Content-Type mapped from InventoryType {0}", inventorytypes[i]));
} }
invcontenttypes = new string[] invcontenttypes = new string[]
@ -280,7 +278,8 @@ namespace OpenSim.Framework.Tests
for (int i = 0; i < invtypes.Length; i++) for (int i = 0; i < invtypes.Length; i++)
{ {
Assert.That(SLUtil.ContentTypeToSLInvType(invcontenttypes[i]) == invtypes[i], "Expected {0}, Got {1}", invtypes[i], SLUtil.ContentTypeToSLInvType(invcontenttypes[i])); Assert.AreEqual(invtypes[i], SLUtil.ContentTypeToSLInvType(invcontenttypes[i]),
String.Format("Incorrect InventoryType mapped from Content-Type {0}", invcontenttypes[i]));
} }
} }
} }

View File

@ -86,8 +86,7 @@ namespace OpenSim.Framework
return eplock; return eplock;
} }
} }
#region JSONRequest #region JSONRequest
/// <summary> /// <summary>
@ -216,7 +215,9 @@ namespace OpenSim.Framework
reqnum,url,method,tickdiff,tickdata); reqnum,url,method,tickdiff,tickdata);
} }
m_log.DebugFormat("[WEB UTIL]: <{0}> osd request for {1}, method {2} FAILED: {3}", reqnum, url, method, errorMessage); m_log.DebugFormat(
"[WEB UTIL]: <{0}> osd request for {1}, method {2} FAILED: {3}", reqnum, url, method, errorMessage);
return ErrorResponseMap(errorMessage); return ErrorResponseMap(errorMessage);
} }
@ -357,7 +358,8 @@ namespace OpenSim.Framework
reqnum,url,method,tickdiff,tickdata); reqnum,url,method,tickdiff,tickdata);
} }
m_log.WarnFormat("[WEB UTIL]: <{0}> form request failed: {1}",reqnum,errorMessage); m_log.WarnFormat("[WEB UTIL]: <{0}> form request to {1} failed: {2}", reqnum, url, errorMessage);
return ErrorResponseMap(errorMessage); return ErrorResponseMap(errorMessage);
} }
@ -771,12 +773,16 @@ namespace OpenSim.Framework
} }
else else
{ {
m_log.ErrorFormat("[ASYNC REQUEST]: Request {0} {1} failed with status {2} and message {3}", verb, requestUrl, e.Status, e.Message); m_log.ErrorFormat(
"[ASYNC REQUEST]: Request {0} {1} failed with status {2} and message {3}",
verb, requestUrl, e.Status, e.Message);
} }
} }
catch (Exception e) catch (Exception e)
{ {
m_log.ErrorFormat("[ASYNC REQUEST]: Request {0} {1} failed with exception {2}", verb, requestUrl, e); m_log.ErrorFormat(
"[ASYNC REQUEST]: Request {0} {1} failed with exception {2}{3}",
verb, requestUrl, e.Message, e.StackTrace);
} }
// m_log.DebugFormat("[ASYNC REQUEST]: Received {0}", deserial.ToString()); // m_log.DebugFormat("[ASYNC REQUEST]: Received {0}", deserial.ToString());
@ -788,7 +794,8 @@ namespace OpenSim.Framework
catch (Exception e) catch (Exception e)
{ {
m_log.ErrorFormat( m_log.ErrorFormat(
"[ASYNC REQUEST]: Request {0} {1} callback failed with exception {2}", verb, requestUrl, e); "[ASYNC REQUEST]: Request {0} {1} callback failed with exception {2}{3}",
verb, requestUrl, e.Message, e.StackTrace);
} }
}, null); }, null);
@ -841,7 +848,8 @@ namespace OpenSim.Framework
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[FORMS]: exception occured on sending request to {0}: " + e.ToString(), requestUrl); m_log.DebugFormat(
"[FORMS]: exception occured {0} {1}: {2}{3}", verb, requestUrl, e.Message, e.StackTrace);
} }
finally finally
{ {
@ -867,7 +875,9 @@ namespace OpenSim.Framework
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[FORMS]: exception occured on receiving reply " + e.ToString()); m_log.DebugFormat(
"[FORMS]: Exception occured on receiving {0} {1}: {2}{3}",
verb, requestUrl, e.Message, e.StackTrace);
} }
finally finally
{ {
@ -880,7 +890,7 @@ namespace OpenSim.Framework
catch (System.InvalidOperationException) catch (System.InvalidOperationException)
{ {
// This is what happens when there is invalid XML // This is what happens when there is invalid XML
m_log.DebugFormat("[FORMS]: InvalidOperationException on receiving request"); m_log.DebugFormat("[FORMS]: InvalidOperationException on receiving {0} {1}", verb, requestUrl);
} }
} }
return respstring; return respstring;
@ -938,7 +948,10 @@ namespace OpenSim.Framework
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[SynchronousRestObjectRequester]: exception in sending data to {0}: {1}", requestUrl, e); m_log.DebugFormat(
"[SynchronousRestObjectRequester]: Exception in making request {0} {1}: {2}{3}",
verb, requestUrl, e.Message, e.StackTrace);
return deserial; return deserial;
} }
finally finally
@ -960,7 +973,11 @@ namespace OpenSim.Framework
respStream.Close(); respStream.Close();
} }
else else
m_log.DebugFormat("[SynchronousRestObjectRequester]: Oops! no content found in response stream from {0} {1}", requestUrl, verb); {
m_log.DebugFormat(
"[SynchronousRestObjectRequester]: Oops! no content found in response stream from {0} {1}",
verb, requestUrl);
}
} }
} }
catch (WebException e) catch (WebException e)
@ -971,20 +988,24 @@ namespace OpenSim.Framework
return deserial; return deserial;
else else
m_log.ErrorFormat( m_log.ErrorFormat(
"[SynchronousRestObjectRequester]: WebException {0} {1} {2} {3}", "[SynchronousRestObjectRequester]: WebException for {0} {1} {2}: {3} {4}",
requestUrl, typeof(TResponse).ToString(), e.Message, e.StackTrace); verb, requestUrl, typeof(TResponse).ToString(), e.Message, e.StackTrace);
} }
catch (System.InvalidOperationException) catch (System.InvalidOperationException)
{ {
// This is what happens when there is invalid XML // This is what happens when there is invalid XML
m_log.DebugFormat("[SynchronousRestObjectRequester]: Invalid XML {0} {1}", requestUrl, typeof(TResponse).ToString()); m_log.DebugFormat(
"[SynchronousRestObjectRequester]: Invalid XML from {0} {1} {2}",
verb, requestUrl, typeof(TResponse).ToString());
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[SynchronousRestObjectRequester]: Exception on response from {0} {1}", requestUrl, e); m_log.DebugFormat(
"[SynchronousRestObjectRequester]: Exception on response from {0} {1}: {2}{3}",
verb, requestUrl, e.Message, e.StackTrace);
} }
return deserial; return deserial;
} }
} }
} }

View File

@ -235,7 +235,10 @@ namespace OpenSim.Region.ClientStack.Linden
if (!m_Scene.CheckClient(m_HostCapsObj.AgentID, httpRequest.RemoteIPEndPoint)) if (!m_Scene.CheckClient(m_HostCapsObj.AgentID, httpRequest.RemoteIPEndPoint))
{ {
m_log.DebugFormat("[CAPS]: Unauthorized CAPS client"); m_log.DebugFormat(
"[CAPS]: Unauthorized CAPS client {0} from {1}",
m_HostCapsObj.AgentID, httpRequest.RemoteIPEndPoint);
return string.Empty; return string.Empty;
} }

View File

@ -60,7 +60,7 @@ namespace OpenSim.Region.ClientStack.Linden.Tests
CapabilitiesModule capsModule = new CapabilitiesModule(); CapabilitiesModule capsModule = new CapabilitiesModule();
EventQueueGetModule eqgModule = new EventQueueGetModule(); EventQueueGetModule eqgModule = new EventQueueGetModule();
m_scene = SceneHelpers.SetupScene(); m_scene = new SceneHelpers().SetupScene();
SceneHelpers.SetupSceneModules(m_scene, config, capsModule, eqgModule); SceneHelpers.SetupSceneModules(m_scene, config, capsModule, eqgModule);
} }

View File

@ -916,7 +916,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
UDPPacketBuffer buffer = (UDPPacketBuffer)array[0]; UDPPacketBuffer buffer = (UDPPacketBuffer)array[0];
UseCircuitCodePacket uccp = (UseCircuitCodePacket)array[1]; UseCircuitCodePacket uccp = (UseCircuitCodePacket)array[1];
m_log.DebugFormat("[LLUDPSERVER]: Handling UseCircuitCode request from {0}", buffer.RemoteEndPoint); m_log.DebugFormat(
"[LLUDPSERVER]: Handling UseCircuitCode request for circuit {0} from {1}",
uccp.CircuitCode.Code, buffer.RemoteEndPoint);
remoteEndPoint = (IPEndPoint)buffer.RemoteEndPoint; remoteEndPoint = (IPEndPoint)buffer.RemoteEndPoint;
@ -1350,7 +1352,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
} }
else else
{ {
m_log.DebugFormat("[LLUDPSERVER]: Dropping incoming {0} packet for dead client {1}", packet.Type, udpClient.AgentID); m_log.DebugFormat(
"[LLUDPSERVER]: Dropped incoming {0} for dead client {1} in {2}",
packet.Type, udpClient.AgentID, m_scene.RegionInfo.RegionName);
} }
} }

View File

@ -158,7 +158,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests
TestHelpers.InMethod(); TestHelpers.InMethod();
// XmlConfigurator.Configure(); // XmlConfigurator.Configure();
TestScene scene = SceneHelpers.SetupScene(); TestScene scene = new SceneHelpers().SetupScene();
uint myCircuitCode = 123456; uint myCircuitCode = 123456;
UUID myAgentUuid = TestHelpers.ParseTail(0x1); UUID myAgentUuid = TestHelpers.ParseTail(0x1);
UUID mySessionUuid = TestHelpers.ParseTail(0x2); UUID mySessionUuid = TestHelpers.ParseTail(0x2);

View File

@ -79,7 +79,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests
J2KDecoderModule j2kdm = new J2KDecoderModule(); J2KDecoderModule j2kdm = new J2KDecoderModule();
scene = SceneHelpers.SetupScene(); scene = new SceneHelpers().SetupScene();
SceneHelpers.SetupSceneModules(scene, j2kdm); SceneHelpers.SetupSceneModules(scene, j2kdm);
tc = new TestClient(SceneHelpers.GenerateAgentData(userId), scene); tc = new TestClient(SceneHelpers.GenerateAgentData(userId), scene);

View File

@ -65,7 +65,7 @@ namespace OpenSim.Region.CoreModules.Asset.Tests
config.Configs["AssetCache"].Set("MemoryCacheEnabled", "true"); config.Configs["AssetCache"].Set("MemoryCacheEnabled", "true");
m_cache = new FlotsamAssetCache(); m_cache = new FlotsamAssetCache();
m_scene = SceneHelpers.SetupScene(); m_scene = new SceneHelpers().SetupScene();
SceneHelpers.SetupSceneModules(m_scene, config, m_cache); SceneHelpers.SetupSceneModules(m_scene, config, m_cache);
} }

View File

@ -72,7 +72,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests
config.AddConfig("Modules"); config.AddConfig("Modules");
config.Configs["Modules"].Set("InventoryAccessModule", "BasicInventoryAccessModule"); config.Configs["Modules"].Set("InventoryAccessModule", "BasicInventoryAccessModule");
scene = SceneHelpers.SetupScene(); scene = new SceneHelpers().SetupScene();
m_attMod = new AttachmentsModule(); m_attMod = new AttachmentsModule();
SceneHelpers.SetupSceneModules(scene, config, m_attMod, new BasicInventoryAccessModule()); SceneHelpers.SetupSceneModules(scene, config, m_attMod, new BasicInventoryAccessModule());
} }

View File

@ -53,7 +53,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
UUID userId = TestHelpers.ParseTail(0x1); UUID userId = TestHelpers.ParseTail(0x1);
AvatarFactoryModule afm = new AvatarFactoryModule(); AvatarFactoryModule afm = new AvatarFactoryModule();
TestScene scene = SceneHelpers.SetupScene(); TestScene scene = new SceneHelpers().SetupScene();
SceneHelpers.SetupSceneModules(scene, afm); SceneHelpers.SetupSceneModules(scene, afm);
ScenePresence sp = SceneHelpers.AddScenePresence(scene, userId); ScenePresence sp = SceneHelpers.AddScenePresence(scene, userId);
@ -81,7 +81,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
CoreAssetCache assetCache = new CoreAssetCache(); CoreAssetCache assetCache = new CoreAssetCache();
AvatarFactoryModule afm = new AvatarFactoryModule(); AvatarFactoryModule afm = new AvatarFactoryModule();
TestScene scene = SceneHelpers.SetupScene(assetCache); TestScene scene = new SceneHelpers(assetCache).SetupScene();
SceneHelpers.SetupSceneModules(scene, afm); SceneHelpers.SetupSceneModules(scene, afm);
ScenePresence sp = SceneHelpers.AddScenePresence(scene, userId); ScenePresence sp = SceneHelpers.AddScenePresence(scene, userId);

View File

@ -78,7 +78,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends.Tests
config.AddConfig("FriendsService"); config.AddConfig("FriendsService");
config.Configs["FriendsService"].Set("StorageProvider", "OpenSim.Data.Null.dll"); config.Configs["FriendsService"].Set("StorageProvider", "OpenSim.Data.Null.dll");
m_scene = SceneHelpers.SetupScene(); m_scene = new SceneHelpers().SetupScene();
m_fm = new FriendsModule(); m_fm = new FriendsModule();
SceneHelpers.SetupSceneModules(m_scene, config, m_fm); SceneHelpers.SetupSceneModules(m_scene, config, m_fm);
} }

View File

@ -100,7 +100,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
// log4net.Config.XmlConfigurator.Configure(); // log4net.Config.XmlConfigurator.Configure();
InventoryArchiverModule archiverModule = new InventoryArchiverModule(); InventoryArchiverModule archiverModule = new InventoryArchiverModule();
Scene scene = SceneHelpers.SetupScene(); Scene scene = new SceneHelpers().SetupScene();
SceneHelpers.SetupSceneModules(scene, archiverModule); SceneHelpers.SetupSceneModules(scene, archiverModule);
UserAccountHelpers.CreateUserWithInventory(scene, m_uaLL1, "hampshire"); UserAccountHelpers.CreateUserWithInventory(scene, m_uaLL1, "hampshire");

View File

@ -61,7 +61,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
SerialiserModule serialiserModule = new SerialiserModule(); SerialiserModule serialiserModule = new SerialiserModule();
m_archiverModule = new InventoryArchiverModule(); m_archiverModule = new InventoryArchiverModule();
m_scene = SceneHelpers.SetupScene(); m_scene = new SceneHelpers().SetupScene();
SceneHelpers.SetupSceneModules(m_scene, serialiserModule, m_archiverModule); SceneHelpers.SetupSceneModules(m_scene, serialiserModule, m_archiverModule);
} }

View File

@ -62,7 +62,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
InventoryArchiverModule archiverModule = new InventoryArchiverModule(); InventoryArchiverModule archiverModule = new InventoryArchiverModule();
Scene scene = SceneHelpers.SetupScene(); Scene scene = new SceneHelpers().SetupScene();
SceneHelpers.SetupSceneModules(scene, archiverModule); SceneHelpers.SetupSceneModules(scene, archiverModule);
// Create user // Create user
@ -179,7 +179,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
InventoryArchiverModule archiverModule = new InventoryArchiverModule(); InventoryArchiverModule archiverModule = new InventoryArchiverModule();
// Annoyingly, we have to set up a scene even though inventory loading has nothing to do with a scene // Annoyingly, we have to set up a scene even though inventory loading has nothing to do with a scene
Scene scene = SceneHelpers.SetupScene(); Scene scene = new SceneHelpers().SetupScene();
SceneHelpers.SetupSceneModules(scene, serialiserModule, archiverModule); SceneHelpers.SetupSceneModules(scene, serialiserModule, archiverModule);
@ -222,7 +222,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
SerialiserModule serialiserModule = new SerialiserModule(); SerialiserModule serialiserModule = new SerialiserModule();
InventoryArchiverModule archiverModule = new InventoryArchiverModule(); InventoryArchiverModule archiverModule = new InventoryArchiverModule();
Scene scene = SceneHelpers.SetupScene(); Scene scene = new SceneHelpers().SetupScene();
SceneHelpers.SetupSceneModules(scene, serialiserModule, archiverModule); SceneHelpers.SetupSceneModules(scene, serialiserModule, archiverModule);
UserAccountHelpers.CreateUserWithInventory(scene, m_uaMT, "password"); UserAccountHelpers.CreateUserWithInventory(scene, m_uaMT, "password");
@ -247,7 +247,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
InventoryArchiverModule archiverModule = new InventoryArchiverModule(); InventoryArchiverModule archiverModule = new InventoryArchiverModule();
Scene scene = SceneHelpers.SetupScene(); Scene scene = new SceneHelpers().SetupScene();
SceneHelpers.SetupSceneModules(scene, archiverModule); SceneHelpers.SetupSceneModules(scene, archiverModule);
// Create user // Create user
@ -326,7 +326,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
TestHelpers.InMethod(); TestHelpers.InMethod();
// log4net.Config.XmlConfigurator.Configure(); // log4net.Config.XmlConfigurator.Configure();
Scene scene = SceneHelpers.SetupScene(); Scene scene = new SceneHelpers().SetupScene();
UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(scene); UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(scene);
Dictionary <string, InventoryFolderBase> foldersCreated = new Dictionary<string, InventoryFolderBase>(); Dictionary <string, InventoryFolderBase> foldersCreated = new Dictionary<string, InventoryFolderBase>();
@ -393,7 +393,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
TestHelpers.InMethod(); TestHelpers.InMethod();
//log4net.Config.XmlConfigurator.Configure(); //log4net.Config.XmlConfigurator.Configure();
Scene scene = SceneHelpers.SetupScene(); Scene scene = new SceneHelpers().SetupScene();
UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(scene); UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(scene);
string folder1ExistingName = "a"; string folder1ExistingName = "a";
@ -444,7 +444,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
TestHelpers.InMethod(); TestHelpers.InMethod();
// log4net.Config.XmlConfigurator.Configure(); // log4net.Config.XmlConfigurator.Configure();
Scene scene = SceneHelpers.SetupScene(); Scene scene = new SceneHelpers().SetupScene();
UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(scene); UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(scene);
string folder1ExistingName = "a"; string folder1ExistingName = "a";

View File

@ -178,7 +178,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
destinationRegionName = sp.Scene.RegionInfo.RegionName; destinationRegionName = sp.Scene.RegionInfo.RegionName;
m_log.DebugFormat( m_log.DebugFormat(
"[ENTITY TRANSFER MODULE]: RequestTeleportToLocation for {0} to {1} within existing region {2}", "[ENTITY TRANSFER MODULE]: Teleport for {0} to {1} within {2}",
sp.Name, position, destinationRegionName); sp.Name, position, destinationRegionName);
// Teleport within the same region // Teleport within the same region
@ -231,7 +231,10 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
GridRegion finalDestination = GetFinalDestination(reg); GridRegion finalDestination = GetFinalDestination(reg);
if (finalDestination == null) if (finalDestination == null)
{ {
m_log.WarnFormat("[ENTITY TRANSFER MODULE]: Final destination is having problems. Unable to teleport agent."); m_log.WarnFormat(
"[ENTITY TRANSFER MODULE]: Final destination is having problems. Unable to teleport {0} {1}",
sp.Name, sp.UUID);
sp.ControllingClient.SendTeleportFailed("Problem at destination"); sp.ControllingClient.SendTeleportFailed("Problem at destination");
return; return;
} }
@ -320,10 +323,17 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
} }
if (IsInTransit(sp.UUID)) // Avie is already on the way. Caller shouldn't do this. if (IsInTransit(sp.UUID)) // Avie is already on the way. Caller shouldn't do this.
{
m_log.DebugFormat(
"[ENTITY TRANSFER MODULE]: Ignoring teleport request of {0} {1} to {2} ({3}) {4}/{5} - agent is already in transit.",
sp.Name, sp.UUID, reg.ServerURI, finalDestination.ServerURI, finalDestination.RegionName, position);
return; return;
}
m_log.DebugFormat( m_log.DebugFormat(
"[ENTITY TRANSFER MODULE]: Request Teleport to {0} ({1}) {2}/{3}", "[ENTITY TRANSFER MODULE]: Teleporting {0} {1} from {2} to {3} ({4}) {5}/{6}",
sp.Name, sp.UUID, sp.Scene.RegionInfo.RegionName,
reg.ServerURI, finalDestination.ServerURI, finalDestination.RegionName, position); reg.ServerURI, finalDestination.ServerURI, finalDestination.RegionName, position);
uint newRegionX = (uint)(reg.RegionHandle >> 40); uint newRegionX = (uint)(reg.RegionHandle >> 40);
@ -444,7 +454,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
capsPath = finalDestination.ServerURI + CapsUtil.GetCapsSeedPath(agentCircuit.CapsPath); capsPath = finalDestination.ServerURI + CapsUtil.GetCapsSeedPath(agentCircuit.CapsPath);
} }
SetInTransit(sp.UUID); SetInTransit(sp.UUID);
// Let's send a full update of the agent. This is a synchronous call. // Let's send a full update of the agent. This is a synchronous call.
@ -588,7 +597,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
protected virtual void AgentHasMovedAway(ScenePresence sp, bool logout) protected virtual void AgentHasMovedAway(ScenePresence sp, bool logout)
{ {
sp.Scene.AttachmentsModule.DeleteAttachmentsFromScene(sp, true); if (sp.Scene.AttachmentsModule != null)
sp.Scene.AttachmentsModule.DeleteAttachmentsFromScene(sp, true);
} }
protected void KillEntity(Scene scene, uint localID) protected void KillEntity(Scene scene, uint localID)
@ -656,7 +666,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
public virtual void TeleportHome(UUID id, IClientAPI client) public virtual void TeleportHome(UUID id, IClientAPI client)
{ {
m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Request to teleport {0} {1} home", client.FirstName, client.LastName); m_log.DebugFormat(
"[ENTITY TRANSFER MODULE]: Request to teleport {0} {1} home", client.Name, client.AgentId);
//OpenSim.Services.Interfaces.PresenceInfo pinfo = m_aScene.PresenceService.GetAgent(client.SessionId); //OpenSim.Services.Interfaces.PresenceInfo pinfo = m_aScene.PresenceService.GetAgent(client.SessionId);
GridUserInfo uinfo = m_aScene.GridUserService.GetGridUserInfo(client.AgentId.ToString()); GridUserInfo uinfo = m_aScene.GridUserService.GetGridUserInfo(client.AgentId.ToString());
@ -671,14 +682,20 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
return; return;
} }
m_log.DebugFormat("[ENTITY TRANSFER MODULE]: User's home region is {0} {1} ({2}-{3})", m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Home region of {0} is {1} ({2}-{3})",
regionInfo.RegionName, regionInfo.RegionID, regionInfo.RegionLocX / Constants.RegionSize, regionInfo.RegionLocY / Constants.RegionSize); client.Name, regionInfo.RegionName, regionInfo.RegionCoordX, regionInfo.RegionCoordY);
// a little eekie that this goes back to Scene and with a forced cast, will fix that at some point... // a little eekie that this goes back to Scene and with a forced cast, will fix that at some point...
((Scene)(client.Scene)).RequestTeleportLocation( ((Scene)(client.Scene)).RequestTeleportLocation(
client, regionInfo.RegionHandle, uinfo.HomePosition, uinfo.HomeLookAt, client, regionInfo.RegionHandle, uinfo.HomePosition, uinfo.HomeLookAt,
(uint)(Constants.TeleportFlags.SetLastToTarget | Constants.TeleportFlags.ViaHome)); (uint)(Constants.TeleportFlags.SetLastToTarget | Constants.TeleportFlags.ViaHome));
} }
else
{
m_log.ErrorFormat(
"[ENTITY TRANSFER MODULE]: No grid user information found for {0} {1}. Cannot send home.",
client.Name, client.AgentId);
}
} }
#endregion #endregion
@ -1362,19 +1379,17 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
// after a cross here // after a cross here
Thread.Sleep(500); Thread.Sleep(500);
Scene m_scene = sp.Scene; Scene scene = sp.Scene;
uint x, y; m_log.DebugFormat(
Utils.LongToUInts(reg.RegionHandle, out x, out y); "[ENTITY TRANSFER MODULE]: Informing {0} {1} about neighbour {2} {3} at ({4},{5})",
x = x / Constants.RegionSize; sp.Name, sp.UUID, reg.RegionName, endPoint, reg.RegionCoordX, reg.RegionCoordY);
y = y / Constants.RegionSize;
m_log.Debug("[ENTITY TRANSFER MODULE]: Starting to inform client about neighbour " + x + ", " + y + "(" + endPoint + ")");
string capsPath = reg.ServerURI + CapsUtil.GetCapsSeedPath(a.CapsPath); string capsPath = reg.ServerURI + CapsUtil.GetCapsSeedPath(a.CapsPath);
string reason = String.Empty; string reason = String.Empty;
bool regionAccepted = m_scene.SimulationService.CreateAgent(reg, a, (uint)TeleportFlags.Default, out reason); bool regionAccepted = scene.SimulationService.CreateAgent(reg, a, (uint)TeleportFlags.Default, out reason);
if (regionAccepted && newAgent) if (regionAccepted && newAgent)
{ {
@ -1391,7 +1406,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
m_log.DebugFormat("[ENTITY TRANSFER MODULE]: {0} is sending {1} EnableSimulator for neighbour region {2} @ {3} " + m_log.DebugFormat("[ENTITY TRANSFER MODULE]: {0} is sending {1} EnableSimulator for neighbour region {2} @ {3} " +
"and EstablishAgentCommunication with seed cap {4}", "and EstablishAgentCommunication with seed cap {4}",
m_scene.RegionInfo.RegionName, sp.Name, reg.RegionName, reg.RegionHandle, capsPath); scene.RegionInfo.RegionName, sp.Name, reg.RegionName, reg.RegionHandle, capsPath);
eq.EnableSimulator(reg.RegionHandle, endPoint, sp.UUID); eq.EnableSimulator(reg.RegionHandle, endPoint, sp.UUID);
eq.EstablishAgentCommunication(sp.UUID, endPoint, capsPath); eq.EstablishAgentCommunication(sp.UUID, endPoint, capsPath);
@ -1402,10 +1417,13 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
// TODO: make Event Queue disablable! // TODO: make Event Queue disablable!
} }
m_log.Debug("[ENTITY TRANSFER MODULE]: Completed inform client about neighbour " + endPoint.ToString()); m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Completed inform {0} {1} about neighbour {2}", sp.Name, sp.UUID, endPoint);
} }
if (!regionAccepted) if (!regionAccepted)
m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Region {0} did not accept agent: {1}", reg.RegionName, reason); m_log.WarnFormat(
"[ENTITY TRANSFER MODULE]: Region {0} did not accept {1} {2}: {3}",
reg.RegionName, sp.Name, sp.UUID, reason);
} }
/// <summary> /// <summary>

View File

@ -201,7 +201,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
public override void TeleportHome(UUID id, IClientAPI client) public override void TeleportHome(UUID id, IClientAPI client)
{ {
m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Request to teleport {0} {1} home", client.FirstName, client.LastName); m_log.DebugFormat(
"[ENTITY TRANSFER MODULE]: Request to teleport {0} {1} home", client.Name, client.AgentId);
// Let's find out if this is a foreign user or a local user // Let's find out if this is a foreign user or a local user
IUserManagement uMan = m_aScene.RequestModuleInterface<IUserManagement>(); IUserManagement uMan = m_aScene.RequestModuleInterface<IUserManagement>();

View File

@ -65,7 +65,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess.Tests
config.AddConfig("Modules"); config.AddConfig("Modules");
config.Configs["Modules"].Set("InventoryAccessModule", "BasicInventoryAccessModule"); config.Configs["Modules"].Set("InventoryAccessModule", "BasicInventoryAccessModule");
m_scene = SceneHelpers.SetupScene(); m_scene = new SceneHelpers().SetupScene();
SceneHelpers.SetupSceneModules(m_scene, config, m_iam); SceneHelpers.SetupSceneModules(m_scene, config, m_iam);
// Create user // Create user

View File

@ -191,7 +191,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
{ {
if (s.RegionInfo.RegionHandle == destination.RegionHandle) if (s.RegionInfo.RegionHandle == destination.RegionHandle)
{ {
m_log.DebugFormat("[LOCAL SIMULATION CONNECTOR]: Found region {0} to send SendCreateChildAgent", destination.RegionName); // m_log.DebugFormat("[LOCAL SIMULATION CONNECTOR]: Found region {0} to send SendCreateChildAgent", destination.RegionName);
return s.NewUserConnection(aCircuit, teleportFlags, out reason); return s.NewUserConnection(aCircuit, teleportFlags, out reason);
} }
} }
@ -209,9 +209,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
{ {
if (s.RegionInfo.RegionHandle == destination.RegionHandle) if (s.RegionInfo.RegionHandle == destination.RegionHandle)
{ {
m_log.DebugFormat( // m_log.DebugFormat(
"[LOCAL SIMULATION CONNECTOR]: Found region {0} {1} to send AgentUpdate", // "[LOCAL SIMULATION CONNECTOR]: Found region {0} {1} to send AgentUpdate",
s.RegionInfo.RegionName, destination.RegionHandle); // s.RegionInfo.RegionName, destination.RegionHandle);
s.IncomingChildAgentDataUpdate(cAgentData); s.IncomingChildAgentDataUpdate(cAgentData);
return true; return true;
@ -281,7 +281,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
{ {
if (s.RegionInfo.RegionID == origin) if (s.RegionInfo.RegionID == origin)
{ {
m_log.Debug("[LOCAL COMMS]: Found region to SendReleaseAgent"); // m_log.Debug("[LOCAL COMMS]: Found region to SendReleaseAgent");
AgentTransferModule.AgentArrivedAtDestination(id); AgentTransferModule.AgentArrivedAtDestination(id);
return true; return true;
// return s.IncomingReleaseAgent(id); // return s.IncomingReleaseAgent(id);

View File

@ -297,10 +297,15 @@ namespace OpenSim.Region.CoreModules.World.Archiver
if (checkPermissions.Contains("T") && !canTransfer) if (checkPermissions.Contains("T") && !canTransfer)
partPermitted = false; partPermitted = false;
// If the user is the Creator of the object then it can always be included in the OAR
bool creator = (obj.CreatorID.Guid == user.Guid);
if (creator)
partPermitted = true;
//string name = (objGroup.PrimCount == 1) ? objGroup.Name : string.Format("{0} ({1}/{2})", obj.Name, primNumber, objGroup.PrimCount); //string name = (objGroup.PrimCount == 1) ? objGroup.Name : string.Format("{0} ({1}/{2})", obj.Name, primNumber, objGroup.PrimCount);
//m_log.DebugFormat("[ARCHIVER]: Object permissions: {0}: Base={1:X4}, Owner={2:X4}, Everyone={3:X4}, permissionClass={4}, checkPermissions={5}, canCopy={6}, canTransfer={7}, permitted={8}", //m_log.DebugFormat("[ARCHIVER]: Object permissions: {0}: Base={1:X4}, Owner={2:X4}, Everyone={3:X4}, permissionClass={4}, checkPermissions={5}, canCopy={6}, canTransfer={7}, creator={8}, permitted={9}",
// name, obj.BaseMask, obj.OwnerMask, obj.EveryoneMask, // name, obj.BaseMask, obj.OwnerMask, obj.EveryoneMask,
// permissionClass, checkPermissions, canCopy, canTransfer, permitted); // permissionClass, checkPermissions, canCopy, canTransfer, creator, partPermitted);
if (!partPermitted) if (!partPermitted)
{ {

View File

@ -68,7 +68,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests
SerialiserModule serialiserModule = new SerialiserModule(); SerialiserModule serialiserModule = new SerialiserModule();
TerrainModule terrainModule = new TerrainModule(); TerrainModule terrainModule = new TerrainModule();
m_scene = SceneHelpers.SetupScene(); m_scene = new SceneHelpers().SetupScene();
SceneHelpers.SetupSceneModules(m_scene, m_archiverModule, serialiserModule, terrainModule); SceneHelpers.SetupSceneModules(m_scene, m_archiverModule, serialiserModule, terrainModule);
} }
@ -463,7 +463,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests
SerialiserModule serialiserModule = new SerialiserModule(); SerialiserModule serialiserModule = new SerialiserModule();
TerrainModule terrainModule = new TerrainModule(); TerrainModule terrainModule = new TerrainModule();
TestScene scene2 = SceneHelpers.SetupScene(); TestScene scene2 = new SceneHelpers().SetupScene();
SceneHelpers.SetupSceneModules(scene2, archiverModule, serialiserModule, terrainModule); SceneHelpers.SetupSceneModules(scene2, archiverModule, serialiserModule, terrainModule);
// Make sure there's a valid owner for the owner we saved (this should have been wiped if the code is // Make sure there's a valid owner for the owner we saved (this should have been wiped if the code is
@ -607,7 +607,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests
SerialiserModule serialiserModule = new SerialiserModule(); SerialiserModule serialiserModule = new SerialiserModule();
TerrainModule terrainModule = new TerrainModule(); TerrainModule terrainModule = new TerrainModule();
Scene scene = SceneHelpers.SetupScene(); Scene scene = new SceneHelpers().SetupScene();
SceneHelpers.SetupSceneModules(scene, archiverModule, serialiserModule, terrainModule); SceneHelpers.SetupSceneModules(scene, archiverModule, serialiserModule, terrainModule);
m_scene.AddNewSceneObject(new SceneObjectGroup(part2), false); m_scene.AddNewSceneObject(new SceneObjectGroup(part2), false);

View File

@ -64,7 +64,7 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests
{ {
m_pcm = new PrimCountModule(); m_pcm = new PrimCountModule();
LandManagementModule lmm = new LandManagementModule(); LandManagementModule lmm = new LandManagementModule();
m_scene = SceneHelpers.SetupScene(); m_scene = new SceneHelpers().SetupScene();
SceneHelpers.SetupSceneModules(m_scene, lmm, m_pcm); SceneHelpers.SetupSceneModules(m_scene, lmm, m_pcm);
int xParcelDivider = (int)Constants.RegionSize - 1; int xParcelDivider = (int)Constants.RegionSize - 1;

View File

@ -53,7 +53,7 @@ namespace OpenSim.Region.CoreModules.World.Media.Moap.Tests
public void SetUp() public void SetUp()
{ {
m_module = new MoapModule(); m_module = new MoapModule();
m_scene = SceneHelpers.SetupScene(); m_scene = new SceneHelpers().SetupScene();
SceneHelpers.SetupSceneModules(m_scene, m_module); SceneHelpers.SetupSceneModules(m_scene, m_module);
} }

View File

@ -343,7 +343,7 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests
public void Init() public void Init()
{ {
m_serialiserModule = new SerialiserModule(); m_serialiserModule = new SerialiserModule();
m_scene = SceneHelpers.SetupScene(); m_scene = new SceneHelpers().SetupScene();
SceneHelpers.SetupSceneModules(m_scene, m_serialiserModule); SceneHelpers.SetupSceneModules(m_scene, m_serialiserModule);
} }

View File

@ -134,6 +134,36 @@ namespace OpenSim.Region.Framework.Interfaces
/// <returns>True if the operation succeeded, false if there was no such agent or the agent was not an NPC</returns> /// <returns>True if the operation succeeded, false if there was no such agent or the agent was not an NPC</returns>
bool Say(UUID agentID, Scene scene, string text); bool Say(UUID agentID, Scene scene, string text);
/// <summary>
/// Get the NPC to say something.
/// </summary>
/// <param name="agentID">The UUID of the NPC</param>
/// <param name="scene"></param>
/// <param name="text"></param>
/// <param name="channel"></param>
/// <returns>True if the operation succeeded, false if there was no such agent or the agent was not an NPC</returns>
bool Say(UUID agentID, Scene scene, string text, int channel);
/// <summary>
/// Get the NPC to shout something.
/// </summary>
/// <param name="agentID">The UUID of the NPC</param>
/// <param name="scene"></param>
/// <param name="text"></param>
/// <param name="channel"></param>
/// <returns>True if the operation succeeded, false if there was no such agent or the agent was not an NPC</returns>
bool Shout(UUID agentID, Scene scene, string text, int channel);
/// <summary>
/// Get the NPC to whisper something.
/// </summary>
/// <param name="agentID">The UUID of the NPC</param>
/// <param name="scene"></param>
/// <param name="text"></param>
/// <param name="channel"></param>
/// <returns>True if the operation succeeded, false if there was no such agent or the agent was not an NPC</returns>
bool Whisper(UUID agentID, Scene scene, string text, int channel);
/// <summary> /// <summary>
/// Sit the NPC. /// Sit the NPC.
/// </summary> /// </summary>

View File

@ -1988,7 +1988,7 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
if (permissionToTake) if (permissionToTake && (action != DeRezAction.Delete || this.m_useTrashOnDelete))
{ {
m_asyncSceneObjectDeleter.DeleteToInventory( m_asyncSceneObjectDeleter.DeleteToInventory(
action, destinationID, deleteGroups, remoteClient, action, destinationID, deleteGroups, remoteClient,

View File

@ -103,6 +103,7 @@ namespace OpenSim.Region.Framework.Scenes
public bool m_trustBinaries; public bool m_trustBinaries;
public bool m_allowScriptCrossings; public bool m_allowScriptCrossings;
public bool m_useFlySlow; public bool m_useFlySlow;
public bool m_useTrashOnDelete = true;
/// <summary> /// <summary>
/// Temporarily setting to trigger appearance resends at 60 second intervals. /// Temporarily setting to trigger appearance resends at 60 second intervals.
@ -436,6 +437,7 @@ namespace OpenSim.Region.Framework.Scenes
{ {
if (m_simulationService == null) if (m_simulationService == null)
m_simulationService = RequestModuleInterface<ISimulationService>(); m_simulationService = RequestModuleInterface<ISimulationService>();
return m_simulationService; return m_simulationService;
} }
} }
@ -709,6 +711,7 @@ namespace OpenSim.Region.Framework.Scenes
m_clampPrimSize = true; m_clampPrimSize = true;
} }
m_useTrashOnDelete = startupConfig.GetBoolean("UseTrashOnDelete",m_useTrashOnDelete);
m_trustBinaries = startupConfig.GetBoolean("TrustBinaries", m_trustBinaries); m_trustBinaries = startupConfig.GetBoolean("TrustBinaries", m_trustBinaries);
m_allowScriptCrossings = startupConfig.GetBoolean("AllowScriptCrossing", m_allowScriptCrossings); m_allowScriptCrossings = startupConfig.GetBoolean("AllowScriptCrossing", m_allowScriptCrossings);
m_dontPersistBefore = m_dontPersistBefore =
@ -3215,8 +3218,8 @@ namespace OpenSim.Region.Framework.Scenes
try try
{ {
m_log.DebugFormat( m_log.DebugFormat(
"[SCENE]: Removing {0} agent {1} from region {2}", "[SCENE]: Removing {0} agent {1} {2} from region {3}",
(isChildAgent ? "child" : "root"), agentID, RegionInfo.RegionName); (isChildAgent ? "child" : "root"), avatar.Name, agentID, RegionInfo.RegionName);
m_sceneGraph.removeUserCount(!isChildAgent); m_sceneGraph.removeUserCount(!isChildAgent);
@ -3794,41 +3797,41 @@ namespace OpenSim.Region.Framework.Scenes
return m_authenticateHandler.TryChangeCiruitCode(oldcc, newcc); return m_authenticateHandler.TryChangeCiruitCode(oldcc, newcc);
} }
/// <summary> // /// <summary>
/// The Grid has requested that we log-off a user. Log them off. // /// The Grid has requested that we log-off a user. Log them off.
/// </summary> // /// </summary>
/// <param name="AvatarID">Unique ID of the avatar to log-off</param> // /// <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="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> // /// <param name="message">message to display to the user. Reason for being logged off</param>
public void HandleLogOffUserFromGrid(UUID AvatarID, UUID RegionSecret, string message) // public void HandleLogOffUserFromGrid(UUID AvatarID, UUID RegionSecret, string message)
{ // {
ScenePresence loggingOffUser = GetScenePresence(AvatarID); // ScenePresence loggingOffUser = GetScenePresence(AvatarID);
if (loggingOffUser != null) // if (loggingOffUser != null)
{ // {
UUID localRegionSecret = UUID.Zero; // UUID localRegionSecret = UUID.Zero;
bool parsedsecret = UUID.TryParse(m_regInfo.regionSecret, out localRegionSecret); // bool parsedsecret = UUID.TryParse(m_regInfo.regionSecret, out localRegionSecret);
//
// Region Secret is used here in case a new sessionid overwrites an old one on the user server. // // Region Secret is used here in case a new sessionid overwrites an old one on the user server.
// Will update the user server in a few revisions to use it. // // Will update the user server in a few revisions to use it.
//
if (RegionSecret == loggingOffUser.ControllingClient.SecureSessionId || (parsedsecret && RegionSecret == localRegionSecret)) // if (RegionSecret == loggingOffUser.ControllingClient.SecureSessionId || (parsedsecret && RegionSecret == localRegionSecret))
{ // {
m_sceneGridService.SendCloseChildAgentConnections(loggingOffUser.UUID, loggingOffUser.KnownRegionHandles); // m_sceneGridService.SendCloseChildAgentConnections(loggingOffUser.UUID, loggingOffUser.KnownRegionHandles);
loggingOffUser.ControllingClient.Kick(message); // loggingOffUser.ControllingClient.Kick(message);
// Give them a second to receive the message! // // Give them a second to receive the message!
Thread.Sleep(1000); // Thread.Sleep(1000);
loggingOffUser.ControllingClient.Close(); // loggingOffUser.ControllingClient.Close();
} // }
else // else
{ // {
m_log.Info("[USERLOGOFF]: System sending the LogOff user message failed to sucessfully authenticate"); // m_log.Info("[USERLOGOFF]: System sending the LogOff user message failed to sucessfully authenticate");
} // }
} // }
else // else
{ // {
m_log.InfoFormat("[USERLOGOFF]: Got a logoff request for {0} but the user isn't here. The user might already have been logged out", AvatarID.ToString()); // m_log.InfoFormat("[USERLOGOFF]: Got a logoff request for {0} but the user isn't here. The user might already have been logged out", AvatarID.ToString());
} // }
} // }
/// <summary> /// <summary>
/// Triggered when an agent crosses into this sim. Also happens on initial login. /// Triggered when an agent crosses into this sim. Also happens on initial login.
@ -3877,7 +3880,10 @@ namespace OpenSim.Region.Framework.Scenes
ILandObject nearestParcel = GetNearestAllowedParcel(cAgentData.AgentID, Constants.RegionSize / 2, Constants.RegionSize / 2); ILandObject nearestParcel = GetNearestAllowedParcel(cAgentData.AgentID, Constants.RegionSize / 2, Constants.RegionSize / 2);
if (nearestParcel == null) if (nearestParcel == null)
{ {
m_log.DebugFormat("[SCENE]: Denying root agent entry to {0}: no allowed parcel", cAgentData.AgentID); m_log.DebugFormat(
"[SCENE]: Denying root agent entry to {0} in {1}: no allowed parcel",
cAgentData.AgentID, RegionInfo.RegionName);
return false; return false;
} }

View File

@ -1969,6 +1969,11 @@ namespace OpenSim.Region.Framework.Scenes
/// <param name="objectGroup">The group of prims which should be linked to this group</param> /// <param name="objectGroup">The group of prims which should be linked to this group</param>
public void LinkToGroup(SceneObjectGroup objectGroup) public void LinkToGroup(SceneObjectGroup objectGroup)
{ {
LinkToGroup(objectGroup, false);
}
public void LinkToGroup(SceneObjectGroup objectGroup, bool insert)
{
// m_log.DebugFormat( // m_log.DebugFormat(
// "[SCENE OBJECT GROUP]: Linking group with root part {0}, {1} to group with root part {2}, {3}", // "[SCENE OBJECT GROUP]: Linking group with root part {0}, {1} to group with root part {2}, {3}",
// objectGroup.RootPart.Name, objectGroup.RootPart.UUID, RootPart.Name, RootPart.UUID); // objectGroup.RootPart.Name, objectGroup.RootPart.UUID, RootPart.Name, RootPart.UUID);
@ -1979,6 +1984,10 @@ namespace OpenSim.Region.Framework.Scenes
SceneObjectPart linkPart = objectGroup.m_rootPart; SceneObjectPart linkPart = objectGroup.m_rootPart;
// physics flags from group to be applied to linked parts
bool grpusephys = UsesPhysics;
bool grptemporary = IsTemporary;
Vector3 oldGroupPosition = linkPart.GroupPosition; Vector3 oldGroupPosition = linkPart.GroupPosition;
Quaternion oldRootRotation = linkPart.RotationOffset; Quaternion oldRootRotation = linkPart.RotationOffset;
@ -2002,15 +2011,35 @@ namespace OpenSim.Region.Framework.Scenes
lock (m_parts.SyncRoot) lock (m_parts.SyncRoot)
{ {
int linkNum = PrimCount + 1; int linkNum;
if (insert)
{
linkNum = 2;
foreach (SceneObjectPart part in Parts)
{
if (part.LinkNum > 1)
part.LinkNum++;
}
}
else
{
linkNum = PrimCount + 1;
}
m_parts.Add(linkPart.UUID, linkPart); m_parts.Add(linkPart.UUID, linkPart);
linkPart.SetParent(this); linkPart.SetParent(this);
linkPart.CreateSelected = true; linkPart.CreateSelected = true;
// let physics know preserve part volume dtc messy since UpdatePrimFlags doesn't look to parent changes for now
linkPart.UpdatePrimFlags(grpusephys, grptemporary, (IsPhantom || (linkPart.Flags & PrimFlags.Phantom) != 0), linkPart.VolumeDetectActive);
if (linkPart.PhysActor != null && m_rootPart.PhysActor != null && m_rootPart.PhysActor.IsPhysical)
{
linkPart.PhysActor.link(m_rootPart.PhysActor);
this.Scene.PhysicsScene.AddPhysicsActorTaint(linkPart.PhysActor);
}
linkPart.LinkNum = linkNum++; linkPart.LinkNum = linkNum++;
linkPart.UpdatePrimFlags(UsesPhysics, IsTemporary, IsPhantom, IsVolumeDetect);
SceneObjectPart[] ogParts = objectGroup.Parts; SceneObjectPart[] ogParts = objectGroup.Parts;
Array.Sort(ogParts, delegate(SceneObjectPart a, SceneObjectPart b) Array.Sort(ogParts, delegate(SceneObjectPart a, SceneObjectPart b)
@ -2022,7 +2051,16 @@ namespace OpenSim.Region.Framework.Scenes
{ {
SceneObjectPart part = ogParts[i]; SceneObjectPart part = ogParts[i];
if (part.UUID != objectGroup.m_rootPart.UUID) if (part.UUID != objectGroup.m_rootPart.UUID)
{
LinkNonRootPart(part, oldGroupPosition, oldRootRotation, linkNum++); LinkNonRootPart(part, oldGroupPosition, oldRootRotation, linkNum++);
// let physics know
part.UpdatePrimFlags(grpusephys, grptemporary, (IsPhantom || (part.Flags & PrimFlags.Phantom) != 0), part.VolumeDetectActive);
if (part.PhysActor != null && m_rootPart.PhysActor != null && m_rootPart.PhysActor.IsPhysical)
{
part.PhysActor.link(m_rootPart.PhysActor);
this.Scene.PhysicsScene.AddPhysicsActorTaint(part.PhysActor);
}
}
part.ClearUndoState(); part.ClearUndoState();
} }
} }

View File

@ -1142,7 +1142,10 @@ namespace OpenSim.Region.Framework.Scenes
if ((m_callbackURI != null) && !m_callbackURI.Equals("")) if ((m_callbackURI != null) && !m_callbackURI.Equals(""))
{ {
m_log.DebugFormat("[SCENE PRESENCE]: Releasing agent in URI {0}", m_callbackURI); m_log.DebugFormat(
"[SCENE PRESENCE]: Releasing {0} {1} with callback to {2}",
client.Name, client.AgentId, m_callbackURI);
Scene.SimulationService.ReleaseAgent(m_originRegionID, UUID, m_callbackURI); Scene.SimulationService.ReleaseAgent(m_originRegionID, UUID, m_callbackURI);
m_callbackURI = null; m_callbackURI = null;
} }
@ -1690,9 +1693,9 @@ namespace OpenSim.Region.Framework.Scenes
if (pos.Z - terrainHeight < 0.2) if (pos.Z - terrainHeight < 0.2)
pos.Z = terrainHeight; pos.Z = terrainHeight;
m_log.DebugFormat( // m_log.DebugFormat(
"[SCENE PRESENCE]: Avatar {0} set move to target {1} (terrain height {2}) in {3}", // "[SCENE PRESENCE]: Avatar {0} set move to target {1} (terrain height {2}) in {3}",
Name, pos, terrainHeight, m_scene.RegionInfo.RegionName); // Name, pos, terrainHeight, m_scene.RegionInfo.RegionName);
if (noFly) if (noFly)
Flying = false; Flying = false;

View File

@ -45,7 +45,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
{ {
static public Random random; static public Random random;
SceneObjectGroup found; SceneObjectGroup found;
Scene scene = SceneHelpers.SetupScene(); Scene scene = new SceneHelpers().SetupScene();
[Test] [Test]
public void T010_AddObjects() public void T010_AddObjects()

View File

@ -44,7 +44,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
public void TestDuplicateObject() public void TestDuplicateObject()
{ {
TestHelpers.InMethod(); TestHelpers.InMethod();
Scene scene = SceneHelpers.SetupScene(); Scene scene = new SceneHelpers().SetupScene();
UUID ownerId = new UUID("00000000-0000-0000-0000-000000000010"); UUID ownerId = new UUID("00000000-0000-0000-0000-000000000010");
string part1Name = "part1"; string part1Name = "part1";

View File

@ -88,7 +88,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
{ {
TestHelpers.InMethod(); TestHelpers.InMethod();
Scene scene = SceneHelpers.SetupScene(); Scene scene = new SceneHelpers().SetupScene();
int partsToTestCount = 3; int partsToTestCount = 3;
SceneObjectGroup so SceneObjectGroup so
@ -118,7 +118,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
{ {
TestHelpers.InMethod(); TestHelpers.InMethod();
Scene scene = SceneHelpers.SetupScene(); Scene scene = new SceneHelpers().SetupScene();
string obj1Name = "Alfred"; string obj1Name = "Alfred";
string obj2Name = "Betty"; string obj2Name = "Betty";
@ -152,7 +152,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
{ {
TestHelpers.InMethod(); TestHelpers.InMethod();
Scene scene = SceneHelpers.SetupScene(); Scene scene = new SceneHelpers().SetupScene();
int partsToTestCount = 3; int partsToTestCount = 3;
SceneObjectGroup so SceneObjectGroup so
@ -185,7 +185,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
{ {
TestHelpers.InMethod(); TestHelpers.InMethod();
TestScene scene = SceneHelpers.SetupScene(); TestScene scene = new SceneHelpers().SetupScene();
SceneObjectPart part = SceneHelpers.AddSceneObject(scene); SceneObjectPart part = SceneHelpers.AddSceneObject(scene);
scene.DeleteSceneObject(part.ParentGroup, false); scene.DeleteSceneObject(part.ParentGroup, false);
@ -204,7 +204,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
UUID agentId = UUID.Parse("00000000-0000-0000-0000-000000000001"); UUID agentId = UUID.Parse("00000000-0000-0000-0000-000000000001");
TestScene scene = SceneHelpers.SetupScene(); TestScene scene = new SceneHelpers().SetupScene();
// Turn off the timer on the async sog deleter - we'll crank it by hand for this test. // Turn off the timer on the async sog deleter - we'll crank it by hand for this test.
AsyncSceneObjectGroupDeleter sogd = scene.SceneObjectGroupDeleter; AsyncSceneObjectGroupDeleter sogd = scene.SceneObjectGroupDeleter;

View File

@ -61,7 +61,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
UUID userId = UUID.Parse("10000000-0000-0000-0000-000000000001"); UUID userId = UUID.Parse("10000000-0000-0000-0000-000000000001");
TestScene scene = SceneHelpers.SetupScene(); TestScene scene = new SceneHelpers().SetupScene();
IConfigSource configSource = new IniConfigSource(); IConfigSource configSource = new IniConfigSource();
IConfig config = configSource.AddConfig("Startup"); IConfig config = configSource.AddConfig("Startup");
config.Set("serverside_object_permissions", true); config.Set("serverside_object_permissions", true);
@ -100,7 +100,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
UUID userId = UUID.Parse("10000000-0000-0000-0000-000000000001"); UUID userId = UUID.Parse("10000000-0000-0000-0000-000000000001");
UUID objectOwnerId = UUID.Parse("20000000-0000-0000-0000-000000000001"); UUID objectOwnerId = UUID.Parse("20000000-0000-0000-0000-000000000001");
TestScene scene = SceneHelpers.SetupScene(); TestScene scene = new SceneHelpers().SetupScene();
IConfigSource configSource = new IniConfigSource(); IConfigSource configSource = new IniConfigSource();
IConfig config = configSource.AddConfig("Startup"); IConfig config = configSource.AddConfig("Startup");
config.Set("serverside_object_permissions", true); config.Set("serverside_object_permissions", true);

View File

@ -55,7 +55,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
UUID ownerId = TestHelpers.ParseTail(0x1); UUID ownerId = TestHelpers.ParseTail(0x1);
int nParts = 3; int nParts = 3;
TestScene scene = SceneHelpers.SetupScene(); TestScene scene = new SceneHelpers().SetupScene();
SceneObjectGroup sog1 = SceneHelpers.CreateSceneObject(nParts, ownerId, "TestLinkToSelf_", 0x10); SceneObjectGroup sog1 = SceneHelpers.CreateSceneObject(nParts, ownerId, "TestLinkToSelf_", 0x10);
scene.AddSceneObject(sog1); scene.AddSceneObject(sog1);
scene.LinkObjects(ownerId, sog1.LocalId, new List<uint>() { sog1.Parts[1].LocalId }); scene.LinkObjects(ownerId, sog1.LocalId, new List<uint>() { sog1.Parts[1].LocalId });
@ -71,7 +71,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
bool debugtest = false; bool debugtest = false;
Scene scene = SceneHelpers.SetupScene(); Scene scene = new SceneHelpers().SetupScene();
SceneObjectPart part1 = SceneHelpers.AddSceneObject(scene); SceneObjectPart part1 = SceneHelpers.AddSceneObject(scene);
SceneObjectGroup grp1 = part1.ParentGroup; SceneObjectGroup grp1 = part1.ParentGroup;
SceneObjectPart part2 = SceneHelpers.AddSceneObject(scene); SceneObjectPart part2 = SceneHelpers.AddSceneObject(scene);
@ -153,7 +153,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
bool debugtest = false; bool debugtest = false;
Scene scene = SceneHelpers.SetupScene(); Scene scene = new SceneHelpers().SetupScene();
SceneObjectPart part1 = SceneHelpers.AddSceneObject(scene); SceneObjectPart part1 = SceneHelpers.AddSceneObject(scene);
SceneObjectGroup grp1 = part1.ParentGroup; SceneObjectGroup grp1 = part1.ParentGroup;
SceneObjectPart part2 = SceneHelpers.AddSceneObject(scene); SceneObjectPart part2 = SceneHelpers.AddSceneObject(scene);
@ -286,7 +286,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
TestHelpers.InMethod(); TestHelpers.InMethod();
//log4net.Config.XmlConfigurator.Configure(); //log4net.Config.XmlConfigurator.Configure();
TestScene scene = SceneHelpers.SetupScene(); TestScene scene = new SceneHelpers().SetupScene();
string rootPartName = "rootpart"; string rootPartName = "rootpart";
UUID rootPartUuid = new UUID("00000000-0000-0000-0000-000000000001"); UUID rootPartUuid = new UUID("00000000-0000-0000-0000-000000000001");
@ -325,7 +325,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
TestHelpers.InMethod(); TestHelpers.InMethod();
//log4net.Config.XmlConfigurator.Configure(); //log4net.Config.XmlConfigurator.Configure();
TestScene scene = SceneHelpers.SetupScene(); TestScene scene = new SceneHelpers().SetupScene();
string rootPartName = "rootpart"; string rootPartName = "rootpart";
UUID rootPartUuid = new UUID("00000000-0000-0000-0000-000000000001"); UUID rootPartUuid = new UUID("00000000-0000-0000-0000-000000000001");

View File

@ -52,7 +52,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
TestHelpers.InMethod(); TestHelpers.InMethod();
// log4net.Config.XmlConfigurator.Configure(); // log4net.Config.XmlConfigurator.Configure();
Scene scene = SceneHelpers.SetupScene(); Scene scene = new SceneHelpers().SetupScene();
SceneObjectGroup g1 = SceneHelpers.AddSceneObject(scene).ParentGroup; SceneObjectGroup g1 = SceneHelpers.AddSceneObject(scene).ParentGroup;
g1.GroupResize(new Vector3(2, 3, 4)); g1.GroupResize(new Vector3(2, 3, 4));
@ -75,7 +75,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
TestHelpers.InMethod(); TestHelpers.InMethod();
//log4net.Config.XmlConfigurator.Configure(); //log4net.Config.XmlConfigurator.Configure();
Scene scene = SceneHelpers.SetupScene(); Scene scene = new SceneHelpers().SetupScene();
SceneObjectGroup g1 = SceneHelpers.CreateSceneObject(2, UUID.Zero); SceneObjectGroup g1 = SceneHelpers.CreateSceneObject(2, UUID.Zero);
g1.RootPart.Scale = new Vector3(2, 3, 4); g1.RootPart.Scale = new Vector3(2, 3, 4);

View File

@ -52,7 +52,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
// UUID itemId = TestHelpers.ParseTail(0x2); // UUID itemId = TestHelpers.ParseTail(0x2);
string itemName = "Test Script Item"; string itemName = "Test Script Item";
Scene scene = SceneHelpers.SetupScene(); Scene scene = new SceneHelpers().SetupScene();
SceneObjectGroup so = SceneHelpers.CreateSceneObject(1, userId); SceneObjectGroup so = SceneHelpers.CreateSceneObject(1, userId);
scene.AddNewSceneObject(so, true); scene.AddNewSceneObject(so, true);

View File

@ -50,7 +50,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
[SetUp] [SetUp]
public void SetUp() public void SetUp()
{ {
m_scene = SceneHelpers.SetupScene(); m_scene = new SceneHelpers().SetupScene();
} }
[Test] [Test]

View File

@ -52,7 +52,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
[SetUp] [SetUp]
public void Init() public void Init()
{ {
m_scene = SceneHelpers.SetupScene(); m_scene = new SceneHelpers().SetupScene();
m_so1 = SceneHelpers.CreateSceneObject(1, m_ownerId, "so1", 0x10); m_so1 = SceneHelpers.CreateSceneObject(1, m_ownerId, "so1", 0x10);
m_so2 = SceneHelpers.CreateSceneObject(1, m_ownerId, "so2", 0x20); m_so2 = SceneHelpers.CreateSceneObject(1, m_ownerId, "so2", 0x20);
} }

View File

@ -58,7 +58,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
UUID userId = UUID.Parse("10000000-0000-0000-0000-000000000001"); UUID userId = UUID.Parse("10000000-0000-0000-0000-000000000001");
TestScene scene = SceneHelpers.SetupScene(); TestScene scene = new SceneHelpers().SetupScene();
IConfigSource configSource = new IniConfigSource(); IConfigSource configSource = new IniConfigSource();
IConfig startupConfig = configSource.AddConfig("Startup"); IConfig startupConfig = configSource.AddConfig("Startup");

View File

@ -67,10 +67,12 @@ namespace OpenSim.Region.Framework.Scenes.Tests
public void Init() public void Init()
{ {
TestHelpers.InMethod(); TestHelpers.InMethod();
scene = SceneHelpers.SetupScene("Neighbour x", UUID.Random(), 1000, 1000); SceneHelpers sh = new SceneHelpers();
scene2 = SceneHelpers.SetupScene("Neighbour x+1", UUID.Random(), 1001, 1000);
scene3 = SceneHelpers.SetupScene("Neighbour x-1", UUID.Random(), 999, 1000); scene = sh.SetupScene("Neighbour x", UUID.Random(), 1000, 1000);
scene2 = sh.SetupScene("Neighbour x+1", UUID.Random(), 1001, 1000);
scene3 = sh.SetupScene("Neighbour x-1", UUID.Random(), 999, 1000);
ISharedRegionModule interregionComms = new LocalSimulationConnectorModule(); ISharedRegionModule interregionComms = new LocalSimulationConnectorModule();
interregionComms.Initialise(new IniConfigSource()); interregionComms.Initialise(new IniConfigSource());
@ -101,7 +103,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
TestHelpers.InMethod(); TestHelpers.InMethod();
// log4net.Config.XmlConfigurator.Configure(); // log4net.Config.XmlConfigurator.Configure();
TestScene scene = SceneHelpers.SetupScene(); TestScene scene = new SceneHelpers().SetupScene();
ScenePresence sp = SceneHelpers.AddScenePresence(scene, TestHelpers.ParseTail(0x1)); ScenePresence sp = SceneHelpers.AddScenePresence(scene, TestHelpers.ParseTail(0x1));
Assert.That(scene.AuthenticateHandler.GetAgentCircuitData(sp.UUID), Is.Not.Null); Assert.That(scene.AuthenticateHandler.GetAgentCircuitData(sp.UUID), Is.Not.Null);
@ -126,7 +128,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
IConfig config = configSource.AddConfig("Modules"); IConfig config = configSource.AddConfig("Modules");
config.Set("SimulationServices", "LocalSimulationConnectorModule"); config.Set("SimulationServices", "LocalSimulationConnectorModule");
TestScene scene = SceneHelpers.SetupScene(); TestScene scene = new SceneHelpers().SetupScene();
SceneHelpers.SetupSceneModules(scene, configSource, lsc); SceneHelpers.SetupSceneModules(scene, configSource, lsc);
UUID agentId = TestHelpers.ParseTail(0x01); UUID agentId = TestHelpers.ParseTail(0x01);
@ -176,8 +178,8 @@ namespace OpenSim.Region.Framework.Scenes.Tests
// UUID agent1Id = UUID.Parse("00000000-0000-0000-0000-000000000001"); // UUID agent1Id = UUID.Parse("00000000-0000-0000-0000-000000000001");
TestScene myScene1 = SceneHelpers.SetupScene("Neighbour y", UUID.Random(), 1000, 1000); TestScene myScene1 = new SceneHelpers().SetupScene("Neighbour y", UUID.Random(), 1000, 1000);
TestScene myScene2 = SceneHelpers.SetupScene("Neighbour y + 1", UUID.Random(), 1001, 1000); TestScene myScene2 = new SceneHelpers().SetupScene("Neighbour y + 1", UUID.Random(), 1001, 1000);
IConfigSource configSource = new IniConfigSource(); IConfigSource configSource = new IniConfigSource();
IConfig config = configSource.AddConfig("Startup"); IConfig config = configSource.AddConfig("Startup");

View File

@ -59,7 +59,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
TestHelpers.InMethod(); TestHelpers.InMethod();
// log4net.Config.XmlConfigurator.Configure(); // log4net.Config.XmlConfigurator.Configure();
TestScene scene = SceneHelpers.SetupScene(); TestScene scene = new SceneHelpers().SetupScene();
ScenePresence sp = SceneHelpers.AddScenePresence(scene, TestHelpers.ParseTail(0x1)); ScenePresence sp = SceneHelpers.AddScenePresence(scene, TestHelpers.ParseTail(0x1));
sp.Flying = true; sp.Flying = true;
sp.PhysicsCollisionUpdate(new CollisionEventUpdate()); sp.PhysicsCollisionUpdate(new CollisionEventUpdate());

View File

@ -64,7 +64,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
[SetUp] [SetUp]
public void Init() public void Init()
{ {
m_scene = SceneHelpers.SetupScene(); m_scene = new SceneHelpers().SetupScene();
} }
[Test] [Test]

View File

@ -50,7 +50,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
[SetUp] [SetUp]
public void Init() public void Init()
{ {
m_scene = SceneHelpers.SetupScene(); m_scene = new SceneHelpers().SetupScene();
m_sp = SceneHelpers.AddScenePresence(m_scene, TestHelpers.ParseTail(0x1)); m_sp = SceneHelpers.AddScenePresence(m_scene, TestHelpers.ParseTail(0x1));
} }

View File

@ -61,7 +61,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
// Not strictly necessary since FriendsModule assumes it is the default (!) // Not strictly necessary since FriendsModule assumes it is the default (!)
config.Configs["Modules"].Set("EntityTransferModule", etm.Name); config.Configs["Modules"].Set("EntityTransferModule", etm.Name);
TestScene scene = SceneHelpers.SetupScene("sceneA", TestHelpers.ParseTail(0x100), 1000, 1000); TestScene scene = new SceneHelpers().SetupScene("sceneA", TestHelpers.ParseTail(0x100), 1000, 1000);
SceneHelpers.SetupSceneModules(scene, config, etm); SceneHelpers.SetupSceneModules(scene, config, etm);
Vector3 teleportPosition = new Vector3(10, 11, 12); Vector3 teleportPosition = new Vector3(10, 11, 12);
@ -83,145 +83,58 @@ namespace OpenSim.Region.Framework.Scenes.Tests
// Assert.That(sp.Lookat, Is.EqualTo(teleportLookAt)); // Assert.That(sp.Lookat, Is.EqualTo(teleportLookAt));
} }
/// <summary> [Test]
/// Test a teleport between two regions that are not neighbours and do not share any neighbours in common. public void TestSameSimulatorSeparatedRegionsTeleport()
/// </summary>
/// Does not yet do what is says on the tin.
/// Commenting for now
//[Test, LongRunning]
public void TestSimpleNotNeighboursTeleport()
{ {
TestHelpers.InMethod(); TestHelpers.InMethod();
ThreadRunResults results = new ThreadRunResults(); // log4net.Config.XmlConfigurator.Configure();
results.Result = false;
results.Message = "Test did not run";
TestRunning testClass = new TestRunning(results);
Thread testThread = new Thread(testClass.run); UUID userId = TestHelpers.ParseTail(0x1);
// Seems kind of redundant to start a thread and then join it, however.. We need to protect against EntityTransferModule etm = new EntityTransferModule();
// A thread abort exception in the simulator code. LocalSimulationConnectorModule lscm = new LocalSimulationConnectorModule();
testThread.Start();
testThread.Join();
Assert.That(testClass.results.Result, Is.EqualTo(true), testClass.results.Message); IConfigSource config = new IniConfigSource();
// Console.WriteLine("Beginning test {0}", MethodBase.GetCurrentMethod()); config.AddConfig("Modules");
} // Not strictly necessary since FriendsModule assumes it is the default (!)
config.Configs["Modules"].Set("EntityTransferModule", etm.Name);
config.Configs["Modules"].Set("SimulationServices", lscm.Name);
[TearDown] SceneHelpers sh = new SceneHelpers();
public void TearDown() TestScene sceneA = sh.SetupScene("sceneA", TestHelpers.ParseTail(0x100), 1000, 1000);
{ TestScene sceneB = sh.SetupScene("sceneB", TestHelpers.ParseTail(0x200), 1002, 1000);
try
{
if (MainServer.Instance != null) MainServer.Instance.Stop();
}
catch (NullReferenceException)
{ }
}
} SceneHelpers.SetupSceneModules(new Scene[] { sceneA, sceneB }, config, etm, lscm);
public class ThreadRunResults Vector3 teleportPosition = new Vector3(10, 11, 12);
{ Vector3 teleportLookAt = new Vector3(20, 21, 22);
public bool Result = false;
public string Message = string.Empty;
}
public class TestRunning ScenePresence sp = SceneHelpers.AddScenePresence(sceneA, userId);
{ sp.AbsolutePosition = new Vector3(30, 31, 32);
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"); // XXX: A very nasty hack to tell the client about the destination scene without having to crank the whole
UUID sceneBId = UUID.Parse("00000000-0000-0000-0000-000000000200"); // UDP stack (?)
((TestClient)sp.ControllingClient).TeleportTargetScene = sceneB;
// shared module sceneA.RequestTeleportLocation(
ISharedRegionModule interregionComms = new LocalSimulationConnectorModule(); sp.ControllingClient,
sceneB.RegionInfo.RegionHandle,
teleportPosition,
teleportLookAt,
(uint)TeleportFlags.ViaLocation);
Assert.That(sceneA.GetScenePresence(userId), Is.Null);
Scene sceneB = SceneHelpers.SetupScene("sceneB", sceneBId, 1010, 1010); ScenePresence sceneBSp = sceneB.GetScenePresence(userId);
SceneHelpers.SetupSceneModules(sceneB, new IniConfigSource(), interregionComms); Assert.That(sceneBSp, Is.Not.Null);
sceneB.RegisterRegionWithGrid(); Assert.That(sceneBSp.Scene.RegionInfo.RegionName, Is.EqualTo(sceneB.RegionInfo.RegionName));
Assert.That(sceneBSp.AbsolutePosition, Is.EqualTo(teleportPosition));
Scene sceneA = SceneHelpers.SetupScene("sceneA", sceneAId, 1000, 1000); // TODO: Add assertions to check correct circuit details in both scenes.
SceneHelpers.SetupSceneModules(sceneA, new IniConfigSource(), interregionComms);
sceneA.RegisterRegionWithGrid();
UUID agentId = UUID.Parse("00000000-0000-0000-0000-000000000041"); // Lookat is sent to the client only - sp.Lookat does not yield the same thing (calculation from camera
TestClient client = (TestClient)SceneHelpers.AddScenePresence(sceneA, agentId).ControllingClient; // position instead).
// Assert.That(sp.Lookat, Is.EqualTo(teleportLookAt));
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));
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");
// TODO: Check that more of everything is as it should be
// TODO: test what happens if we try to teleport to a region that doesn't exist
} }
} }
} }

View File

@ -60,7 +60,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
{ {
TestHelpers.InMethod(); TestHelpers.InMethod();
Scene scene = SceneHelpers.SetupScene(); Scene scene = new SceneHelpers().SetupScene();
scene.Update(1); scene.Update(1);
Assert.That(scene.Frame, Is.EqualTo(1)); Assert.That(scene.Frame, Is.EqualTo(1));

View File

@ -58,7 +58,7 @@ namespace OpenSim.Region.Framework.Tests
TestHelpers.InMethod(); TestHelpers.InMethod();
// log4net.Config.XmlConfigurator.Configure(); // log4net.Config.XmlConfigurator.Configure();
Scene scene = SceneHelpers.SetupScene(); Scene scene = new SceneHelpers().SetupScene();
UserAccount user1 = UserAccountHelpers.CreateUserWithInventory(scene); UserAccount user1 = UserAccountHelpers.CreateUserWithInventory(scene);
SceneObjectGroup sog1 = SceneHelpers.CreateSceneObject(1, user1.PrincipalID); SceneObjectGroup sog1 = SceneHelpers.CreateSceneObject(1, user1.PrincipalID);
SceneObjectPart sop1 = sog1.RootPart; SceneObjectPart sop1 = sog1.RootPart;
@ -81,7 +81,7 @@ namespace OpenSim.Region.Framework.Tests
TestHelpers.InMethod(); TestHelpers.InMethod();
// log4net.Config.XmlConfigurator.Configure(); // log4net.Config.XmlConfigurator.Configure();
Scene scene = SceneHelpers.SetupScene(); Scene scene = new SceneHelpers().SetupScene();
UserAccount user1 = UserAccountHelpers.CreateUserWithInventory(scene); UserAccount user1 = UserAccountHelpers.CreateUserWithInventory(scene);
SceneObjectGroup sog1 = SceneHelpers.CreateSceneObject(1, user1.PrincipalID); SceneObjectGroup sog1 = SceneHelpers.CreateSceneObject(1, user1.PrincipalID);
SceneObjectPart sop1 = sog1.RootPart; SceneObjectPart sop1 = sog1.RootPart;
@ -124,7 +124,7 @@ namespace OpenSim.Region.Framework.Tests
TestHelpers.InMethod(); TestHelpers.InMethod();
// log4net.Config.XmlConfigurator.Configure(); // log4net.Config.XmlConfigurator.Configure();
Scene scene = SceneHelpers.SetupScene(); Scene scene = new SceneHelpers().SetupScene();
UserAccount user1 = UserAccountHelpers.CreateUserWithInventory(scene); UserAccount user1 = UserAccountHelpers.CreateUserWithInventory(scene);
SceneObjectGroup sog1 = SceneHelpers.CreateSceneObject(1, user1.PrincipalID); SceneObjectGroup sog1 = SceneHelpers.CreateSceneObject(1, user1.PrincipalID);
SceneObjectPart sop1 = sog1.RootPart; SceneObjectPart sop1 = sog1.RootPart;
@ -153,7 +153,7 @@ namespace OpenSim.Region.Framework.Tests
TestHelpers.InMethod(); TestHelpers.InMethod();
// log4net.Config.XmlConfigurator.Configure(); // log4net.Config.XmlConfigurator.Configure();
Scene scene = SceneHelpers.SetupScene(); Scene scene = new SceneHelpers().SetupScene();
UserAccount user1 = UserAccountHelpers.CreateUserWithInventory(scene); UserAccount user1 = UserAccountHelpers.CreateUserWithInventory(scene);
SceneObjectGroup sog1 = SceneHelpers.CreateSceneObject(1, user1.PrincipalID); SceneObjectGroup sog1 = SceneHelpers.CreateSceneObject(1, user1.PrincipalID);
SceneObjectPart sop1 = sog1.RootPart; SceneObjectPart sop1 = sog1.RootPart;

View File

@ -58,7 +58,7 @@ namespace OpenSim.Region.Framework.Tests
TestHelpers.InMethod(); TestHelpers.InMethod();
// log4net.Config.XmlConfigurator.Configure(); // log4net.Config.XmlConfigurator.Configure();
Scene scene = SceneHelpers.SetupScene(); Scene scene = new SceneHelpers().SetupScene();
UserAccount user1 = UserAccountHelpers.CreateUserWithInventory(scene, TestHelpers.ParseTail(1001)); UserAccount user1 = UserAccountHelpers.CreateUserWithInventory(scene, TestHelpers.ParseTail(1001));
UserAccount user2 = UserAccountHelpers.CreateUserWithInventory(scene, TestHelpers.ParseTail(1002)); UserAccount user2 = UserAccountHelpers.CreateUserWithInventory(scene, TestHelpers.ParseTail(1002));
InventoryItemBase item1 = UserInventoryHelpers.CreateInventoryItem(scene, "item1", user1.PrincipalID); InventoryItemBase item1 = UserInventoryHelpers.CreateInventoryItem(scene, "item1", user1.PrincipalID);
@ -85,7 +85,7 @@ namespace OpenSim.Region.Framework.Tests
TestHelpers.InMethod(); TestHelpers.InMethod();
// log4net.Config.XmlConfigurator.Configure(); // log4net.Config.XmlConfigurator.Configure();
Scene scene = SceneHelpers.SetupScene(); Scene scene = new SceneHelpers().SetupScene();
UserAccount user1 = UserAccountHelpers.CreateUserWithInventory(scene, TestHelpers.ParseTail(1001)); UserAccount user1 = UserAccountHelpers.CreateUserWithInventory(scene, TestHelpers.ParseTail(1001));
UserAccount user2 = UserAccountHelpers.CreateUserWithInventory(scene, TestHelpers.ParseTail(1002)); UserAccount user2 = UserAccountHelpers.CreateUserWithInventory(scene, TestHelpers.ParseTail(1002));
InventoryFolderBase folder1 InventoryFolderBase folder1

View File

@ -47,7 +47,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
public void Init() public void Init()
{ {
// FIXME: We don't need a full scene here - it would be enough to set up the asset service. // FIXME: We don't need a full scene here - it would be enough to set up the asset service.
Scene scene = SceneHelpers.SetupScene(); Scene scene = new SceneHelpers().SetupScene();
m_assetService = scene.AssetService; m_assetService = scene.AssetService;
m_uuidGatherer = new UuidGatherer(m_assetService); m_uuidGatherer = new UuidGatherer(m_assetService);
} }

View File

@ -50,7 +50,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups.Tests
TestHelpers.InMethod(); TestHelpers.InMethod();
// log4net.Config.XmlConfigurator.Configure(); // log4net.Config.XmlConfigurator.Configure();
TestScene scene = SceneHelpers.SetupScene(); TestScene scene = new SceneHelpers().SetupScene();
IConfigSource configSource = new IniConfigSource(); IConfigSource configSource = new IniConfigSource();
IConfig config = configSource.AddConfig("Groups"); IConfig config = configSource.AddConfig("Groups");
config.Set("Enabled", true); config.Set("Enabled", true);

View File

@ -163,28 +163,37 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore
return; return;
} }
m_comms.RegisterScriptInvocation(this,"JsonCreateStore"); try
m_comms.RegisterScriptInvocation(this,"JsonDestroyStore"); {
m_comms.RegisterScriptInvocation(this,"JsonCreateStore");
m_comms.RegisterScriptInvocation(this,"JsonDestroyStore");
m_comms.RegisterScriptInvocation(this,"JsonReadNotecard"); m_comms.RegisterScriptInvocation(this,"JsonReadNotecard");
m_comms.RegisterScriptInvocation(this,"JsonWriteNotecard"); m_comms.RegisterScriptInvocation(this,"JsonWriteNotecard");
m_comms.RegisterScriptInvocation(this,"JsonTestPath"); m_comms.RegisterScriptInvocation(this,"JsonTestPath");
m_comms.RegisterScriptInvocation(this,"JsonTestPathJson"); m_comms.RegisterScriptInvocation(this,"JsonTestPathJson");
m_comms.RegisterScriptInvocation(this,"JsonGetValue"); m_comms.RegisterScriptInvocation(this,"JsonGetValue");
m_comms.RegisterScriptInvocation(this,"JsonGetValueJson"); m_comms.RegisterScriptInvocation(this,"JsonGetValueJson");
m_comms.RegisterScriptInvocation(this,"JsonTakeValue"); m_comms.RegisterScriptInvocation(this,"JsonTakeValue");
m_comms.RegisterScriptInvocation(this,"JsonTakeValueJson"); m_comms.RegisterScriptInvocation(this,"JsonTakeValueJson");
m_comms.RegisterScriptInvocation(this,"JsonReadValue"); m_comms.RegisterScriptInvocation(this,"JsonReadValue");
m_comms.RegisterScriptInvocation(this,"JsonReadValueJson"); m_comms.RegisterScriptInvocation(this,"JsonReadValueJson");
m_comms.RegisterScriptInvocation(this,"JsonSetValue"); m_comms.RegisterScriptInvocation(this,"JsonSetValue");
m_comms.RegisterScriptInvocation(this,"JsonSetValueJson"); m_comms.RegisterScriptInvocation(this,"JsonSetValueJson");
m_comms.RegisterScriptInvocation(this,"JsonRemoveValue"); m_comms.RegisterScriptInvocation(this,"JsonRemoveValue");
}
catch (Exception e)
{
// See http://opensimulator.org/mantis/view.php?id=5971 for more information
m_log.WarnFormat("[JsonStroreScripts] script method registration failed; {0}",e.Message);
m_enabled = false;
}
} }
} }

View File

@ -76,22 +76,27 @@ namespace OpenSim.Region.OptionalModules.World.NPC
public void Say(string message) public void Say(string message)
{ {
SendOnChatFromClient(message, ChatTypeEnum.Say); SendOnChatFromClient(0, message, ChatTypeEnum.Say);
} }
public void Shout(string message) public void Say(int channel, string message)
{ {
SendOnChatFromClient(message, ChatTypeEnum.Shout); SendOnChatFromClient(channel, message, ChatTypeEnum.Say);
} }
public void Whisper(string message) public void Shout(int channel, string message)
{ {
SendOnChatFromClient(message, ChatTypeEnum.Whisper); SendOnChatFromClient(channel, message, ChatTypeEnum.Shout);
}
public void Whisper(int channel, string message)
{
SendOnChatFromClient(channel, message, ChatTypeEnum.Whisper);
} }
public void Broadcast(string message) public void Broadcast(string message)
{ {
SendOnChatFromClient(message, ChatTypeEnum.Broadcast); SendOnChatFromClient(0, message, ChatTypeEnum.Broadcast);
} }
public void GiveMoney(UUID target, int amount) public void GiveMoney(UUID target, int amount)
@ -146,10 +151,10 @@ namespace OpenSim.Region.OptionalModules.World.NPC
#region Internal Functions #region Internal Functions
private void SendOnChatFromClient(string message, ChatTypeEnum chatType) private void SendOnChatFromClient(int channel, string message, ChatTypeEnum chatType)
{ {
OSChatMessage chatFromClient = new OSChatMessage(); OSChatMessage chatFromClient = new OSChatMessage();
chatFromClient.Channel = 0; chatFromClient.Channel = channel;
chatFromClient.From = Name; chatFromClient.From = Name;
chatFromClient.Message = message; chatFromClient.Message = message;
chatFromClient.Position = StartPos; chatFromClient.Position = StartPos;

View File

@ -211,6 +211,11 @@ namespace OpenSim.Region.OptionalModules.World.NPC
} }
public bool Say(UUID agentID, Scene scene, string text) public bool Say(UUID agentID, Scene scene, string text)
{
return Say(agentID, scene, text, 0);
}
public bool Say(UUID agentID, Scene scene, string text, int channel)
{ {
lock (m_avatars) lock (m_avatars)
{ {
@ -219,7 +224,25 @@ namespace OpenSim.Region.OptionalModules.World.NPC
ScenePresence sp; ScenePresence sp;
scene.TryGetScenePresence(agentID, out sp); scene.TryGetScenePresence(agentID, out sp);
m_avatars[agentID].Say(text); m_avatars[agentID].Say(channel, text);
return true;
}
}
return false;
}
public bool Shout(UUID agentID, Scene scene, string text, int channel)
{
lock (m_avatars)
{
if (m_avatars.ContainsKey(agentID))
{
ScenePresence sp;
scene.TryGetScenePresence(agentID, out sp);
m_avatars[agentID].Shout(channel, text);
return true; return true;
} }
@ -246,6 +269,24 @@ namespace OpenSim.Region.OptionalModules.World.NPC
return false; return false;
} }
public bool Whisper(UUID agentID, Scene scene, string text, int channel)
{
lock (m_avatars)
{
if (m_avatars.ContainsKey(agentID))
{
ScenePresence sp;
scene.TryGetScenePresence(agentID, out sp);
m_avatars[agentID].Whisper(channel, text);
return true;
}
}
return false;
}
public bool Stand(UUID agentID, Scene scene) public bool Stand(UUID agentID, Scene scene)
{ {
lock (m_avatars) lock (m_avatars)

View File

@ -85,7 +85,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests
m_attMod = new AttachmentsModule(); m_attMod = new AttachmentsModule();
m_npcMod = new NPCModule(); m_npcMod = new NPCModule();
m_scene = SceneHelpers.SetupScene(); m_scene = new SceneHelpers().SetupScene();
SceneHelpers.SetupSceneModules(m_scene, config, m_afMod, m_umMod, m_attMod, m_npcMod, new BasicInventoryAccessModule()); SceneHelpers.SetupSceneModules(m_scene, config, m_afMod, m_umMod, m_attMod, m_npcMod, new BasicInventoryAccessModule());
} }

View File

@ -832,8 +832,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
public void llRegionSayTo(string target, int channel, string msg) public void llRegionSayTo(string target, int channel, string msg)
{ {
string error = String.Empty;
if (msg.Length > 1023) if (msg.Length > 1023)
msg = msg.Substring(0, 1023); msg = msg.Substring(0, 1023);
@ -3548,7 +3546,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
public void llCreateLink(string target, int parent) public void llCreateLink(string target, int parent)
{ {
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
UUID targetID; UUID targetID;
if (!UUID.TryParse(target, out targetID)) if (!UUID.TryParse(target, out targetID))
@ -3572,11 +3569,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if (targetPart.ParentGroup.AttachmentPoint != 0) if (targetPart.ParentGroup.AttachmentPoint != 0)
return; // Fail silently if attached return; // Fail silently if attached
if (targetPart.ParentGroup.RootPart.OwnerID != m_host.ParentGroup.RootPart.OwnerID)
return;
SceneObjectGroup parentPrim = null, childPrim = null; SceneObjectGroup parentPrim = null, childPrim = null;
if (targetPart != null) if (targetPart != null)
{ {
if (parent != 0) { if (parent != 0)
{
parentPrim = m_host.ParentGroup; parentPrim = m_host.ParentGroup;
childPrim = targetPart.ParentGroup; childPrim = targetPart.ParentGroup;
} }
@ -3588,7 +3590,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
// Required for linking // Required for linking
childPrim.RootPart.ClearUpdateSchedule(); childPrim.RootPart.ClearUpdateSchedule();
parentPrim.LinkToGroup(childPrim); parentPrim.LinkToGroup(childPrim, true);
} }
parentPrim.TriggerScriptChangedEvent(Changed.LINK); parentPrim.TriggerScriptChangedEvent(Changed.LINK);

View File

@ -351,7 +351,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
UUID ownerID = ti.OwnerID; UUID ownerID = ti.OwnerID;
//OSSL only may be used if objet is in the same group as the parcel //OSSL only may be used if object is in the same group as the parcel
if (m_FunctionPerms[function].AllowedOwnerClasses.Contains("PARCEL_GROUP_MEMBER")) if (m_FunctionPerms[function].AllowedOwnerClasses.Contains("PARCEL_GROUP_MEMBER"))
{ {
ILandObject land = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y); ILandObject land = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y);
@ -729,11 +729,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
// For safety, we add another permission check here, and don't rely only on the standard OSSL permissions
if (World.Permissions.CanRunConsoleCommand(m_host.OwnerID)) if (World.Permissions.CanRunConsoleCommand(m_host.OwnerID))
{ {
MainConsole.Instance.RunCommand(command); MainConsole.Instance.RunCommand(command);
return true; return true;
} }
return false; return false;
} }
@ -2538,6 +2540,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
} }
public void osNpcSay(LSL_Key npc, string message) public void osNpcSay(LSL_Key npc, string message)
{
osNpcSay(npc, 0, message);
}
public void osNpcSay(LSL_Key npc, int channel, string message)
{ {
CheckThreatLevel(ThreatLevel.High, "osNpcSay"); CheckThreatLevel(ThreatLevel.High, "osNpcSay");
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
@ -2550,7 +2557,24 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if (!module.CheckPermissions(npcId, m_host.OwnerID)) if (!module.CheckPermissions(npcId, m_host.OwnerID))
return; return;
module.Say(npcId, World, message); module.Say(npcId, World, message, channel);
}
}
public void osNpcShout(LSL_Key npc, int channel, string message)
{
CheckThreatLevel(ThreatLevel.High, "osNpcShout");
m_host.AddScriptLPS(1);
INPCModule module = World.RequestModuleInterface<INPCModule>();
if (module != null)
{
UUID npcId = new UUID(npc.m_string);
if (!module.CheckPermissions(npcId, m_host.OwnerID))
return;
module.Shout(npcId, World, message, channel);
} }
} }
@ -2635,6 +2659,23 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
} }
} }
public void osNpcWhisper(LSL_Key npc, int channel, string message)
{
CheckThreatLevel(ThreatLevel.High, "osNpcWhisper");
m_host.AddScriptLPS(1);
INPCModule module = World.RequestModuleInterface<INPCModule>();
if (module != null)
{
UUID npcId = new UUID(npc.m_string);
if (!module.CheckPermissions(npcId, m_host.OwnerID))
return;
module.Whisper(npcId, World, message, channel);
}
}
/// <summary> /// <summary>
/// Save the current appearance of the script owner permanently to the named notecard. /// Save the current appearance of the script owner permanently to the named notecard.
/// </summary> /// </summary>
@ -2786,21 +2827,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
CheckThreatLevel(ThreatLevel.Severe, "osKickAvatar"); CheckThreatLevel(ThreatLevel.Severe, "osKickAvatar");
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
if (World.Permissions.CanRunConsoleCommand(m_host.OwnerID)) World.ForEachRootScenePresence(delegate(ScenePresence sp)
{ {
World.ForEachRootScenePresence(delegate(ScenePresence sp) if (sp.Firstname == FirstName && sp.Lastname == SurName)
{ {
if (sp.Firstname == FirstName && sp.Lastname == SurName) // kick client...
{ if (alert != null)
// kick client... sp.ControllingClient.Kick(alert);
if (alert != null)
sp.ControllingClient.Kick(alert);
// ...and close on our side // ...and close on our side
sp.Scene.IncomingCloseAgent(sp.UUID); sp.Scene.IncomingCloseAgent(sp.UUID);
} }
}); });
}
} }
public void osCauseDamage(string avatar, double damage) public void osCauseDamage(string avatar, double damage)

View File

@ -217,11 +217,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
void osNpcSetRot(LSL_Key npc, rotation rot); void osNpcSetRot(LSL_Key npc, rotation rot);
void osNpcStopMoveToTarget(LSL_Key npc); void osNpcStopMoveToTarget(LSL_Key npc);
void osNpcSay(key npc, string message); void osNpcSay(key npc, string message);
void osNpcSay(key npc, int channel, string message);
void osNpcShout(key npc, int channel, string message);
void osNpcSit(key npc, key target, int options); void osNpcSit(key npc, key target, int options);
void osNpcStand(LSL_Key npc); void osNpcStand(LSL_Key npc);
void osNpcRemove(key npc); void osNpcRemove(key npc);
void osNpcPlayAnimation(LSL_Key npc, string animation); void osNpcPlayAnimation(LSL_Key npc, string animation);
void osNpcStopAnimation(LSL_Key npc, string animation); void osNpcStopAnimation(LSL_Key npc, string animation);
void osNpcWhisper(key npc, int channel, string message);
LSL_Key osOwnerSaveAppearance(string notecard); LSL_Key osOwnerSaveAppearance(string notecard);
LSL_Key osAgentSaveAppearance(key agentId, string notecard); LSL_Key osAgentSaveAppearance(key agentId, string notecard);

View File

@ -580,6 +580,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
m_OSSL_Functions.osNpcSay(npc, message); m_OSSL_Functions.osNpcSay(npc, message);
} }
public void osNpcSay(key npc, int channel, string message)
{
m_OSSL_Functions.osNpcSay(npc, channel, message);
}
public void osNpcShout(key npc, int channel, string message)
{
m_OSSL_Functions.osNpcShout(npc, channel, message);
}
public void osNpcSit(LSL_Key npc, LSL_Key target, int options) public void osNpcSit(LSL_Key npc, LSL_Key target, int options)
{ {
m_OSSL_Functions.osNpcSit(npc, target, options); m_OSSL_Functions.osNpcSit(npc, target, options);
@ -605,6 +616,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
m_OSSL_Functions.osNpcStopAnimation(npc, animation); m_OSSL_Functions.osNpcStopAnimation(npc, animation);
} }
public void osNpcWhisper(key npc, int channel, string message)
{
m_OSSL_Functions.osNpcWhisper(npc, channel, message);
}
public LSL_Key osOwnerSaveAppearance(string notecard) public LSL_Key osOwnerSaveAppearance(string notecard)
{ {
return m_OSSL_Functions.osOwnerSaveAppearance(notecard); return m_OSSL_Functions.osOwnerSaveAppearance(notecard);

View File

@ -63,7 +63,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
IConfig config = initConfigSource.AddConfig("XEngine"); IConfig config = initConfigSource.AddConfig("XEngine");
config.Set("Enabled", "true"); config.Set("Enabled", "true");
m_scene = SceneHelpers.SetupScene(); m_scene = new SceneHelpers().SetupScene();
SceneHelpers.SetupSceneModules(m_scene, initConfigSource); SceneHelpers.SetupSceneModules(m_scene, initConfigSource);
m_engine = new XEngine.XEngine(); m_engine = new XEngine.XEngine();

View File

@ -58,7 +58,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
IConfig config = initConfigSource.AddConfig("XEngine"); IConfig config = initConfigSource.AddConfig("XEngine");
config.Set("Enabled", "true"); config.Set("Enabled", "true");
Scene scene = SceneHelpers.SetupScene(); Scene scene = new SceneHelpers().SetupScene();
SceneObjectPart part = SceneHelpers.AddSceneObject(scene); SceneObjectPart part = SceneHelpers.AddSceneObject(scene);
XEngine.XEngine engine = new XEngine.XEngine(); XEngine.XEngine engine = new XEngine.XEngine();
@ -261,7 +261,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
TestHelpers.InMethod(); TestHelpers.InMethod();
// Create Prim1. // Create Prim1.
Scene scene = SceneHelpers.SetupScene(); Scene scene = new SceneHelpers().SetupScene();
string obj1Name = "Prim1"; string obj1Name = "Prim1";
UUID objUuid = new UUID("00000000-0000-0000-0000-000000000001"); UUID objUuid = new UUID("00000000-0000-0000-0000-000000000001");
SceneObjectPart part1 = SceneObjectPart part1 =

View File

@ -67,7 +67,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
config = initConfigSource.AddConfig("NPC"); config = initConfigSource.AddConfig("NPC");
config.Set("Enabled", "true"); config.Set("Enabled", "true");
m_scene = SceneHelpers.SetupScene(); m_scene = new SceneHelpers().SetupScene();
SceneHelpers.SetupSceneModules(m_scene, initConfigSource, new AvatarFactoryModule(), new NPCModule()); SceneHelpers.SetupSceneModules(m_scene, initConfigSource, new AvatarFactoryModule(), new NPCModule());
m_engine = new XEngine.XEngine(); m_engine = new XEngine.XEngine();

View File

@ -68,7 +68,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
config = initConfigSource.AddConfig("NPC"); config = initConfigSource.AddConfig("NPC");
config.Set("Enabled", "true"); config.Set("Enabled", "true");
m_scene = SceneHelpers.SetupScene(); m_scene = new SceneHelpers().SetupScene();
SceneHelpers.SetupSceneModules(m_scene, initConfigSource, new AvatarFactoryModule(), new NPCModule()); SceneHelpers.SetupSceneModules(m_scene, initConfigSource, new AvatarFactoryModule(), new NPCModule());
m_engine = new XEngine.XEngine(); m_engine = new XEngine.XEngine();

View File

@ -73,7 +73,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Tests
// to AssemblyResolver.OnAssemblyResolve fails. // to AssemblyResolver.OnAssemblyResolve fails.
xEngineConfig.Set("AppDomainLoading", "false"); xEngineConfig.Set("AppDomainLoading", "false");
m_scene = SceneHelpers.SetupScene("My Test", UUID.Random(), 1000, 1000, null, configSource); m_scene = new SceneHelpers().SetupScene("My Test", UUID.Random(), 1000, 1000, configSource);
SceneHelpers.SetupSceneModules(m_scene, configSource, m_xEngine, wcModule); SceneHelpers.SetupSceneModules(m_scene, configSource, m_xEngine, wcModule);
m_scene.StartScripts(); m_scene.StartScripts();
} }

View File

@ -58,57 +58,67 @@ namespace OpenSim.Tests.Common
/// </summary> /// </summary>
public class SceneHelpers public class SceneHelpers
{ {
public static TestScene SetupScene() private AgentCircuitManager m_acm = new AgentCircuitManager();
private ISimulationDataService m_simDataService
= OpenSim.Server.Base.ServerUtils.LoadPlugin<ISimulationDataService>("OpenSim.Tests.Common.dll", null);
private IEstateDataService m_estateDataService;
private LocalAssetServicesConnector m_assetService;
private LocalAuthenticationServicesConnector m_authenticationService;
private LocalInventoryServicesConnector m_inventoryService;
private LocalGridServicesConnector m_gridService;
private LocalUserAccountServicesConnector m_userAccountService;
private LocalPresenceServicesConnector m_presenceService;
private CoreAssetCache m_cache;
public SceneHelpers() : this(null) {}
public SceneHelpers(CoreAssetCache cache)
{ {
return SetupScene(null); m_assetService = StartAssetService(cache);
m_authenticationService = StartAuthenticationService();
m_inventoryService = StartInventoryService();
m_gridService = StartGridService();
m_userAccountService = StartUserAccountService();
m_presenceService = StartPresenceService();
m_inventoryService.PostInitialise();
m_assetService.PostInitialise();
m_userAccountService.PostInitialise();
m_presenceService.PostInitialise();
m_cache = cache;
} }
/// <summary> /// <summary>
/// Set up a test scene /// Set up a test scene
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Automatically starts service threads, as would the normal runtime. /// Automatically starts services, as would the normal runtime.
/// </remarks> /// </remarks>
/// <returns></returns> /// <returns></returns>
public static TestScene SetupScene(CoreAssetCache cache) public TestScene SetupScene()
{ {
return SetupScene("Unit test region", UUID.Random(), 1000, 1000, cache); return SetupScene("Unit test region", UUID.Random(), 1000, 1000);
} }
public static TestScene SetupScene(string name, UUID id, uint x, uint y) public TestScene SetupScene(string name, UUID id, uint x, uint y)
{ {
return SetupScene(name, id, x, y, null); return SetupScene(name, id, x, y, new IniConfigSource());
} }
/// <summary> /// <summary>
/// Set up a scene. If it's more then one scene, use the same CommunicationsManager to link regions /// Set up a scene.
/// or a different, to get a brand new scene with new shared region modules.
/// </summary> /// </summary>
/// <param name="name">Name of the region</param> /// <param name="name">Name of the region</param>
/// <param name="id">ID of the region</param> /// <param name="id">ID of the region</param>
/// <param name="x">X co-ordinate of the region</param> /// <param name="x">X co-ordinate of the region</param>
/// <param name="y">Y co-ordinate of the region</param> /// <param name="y">Y co-ordinate of the region</param>
/// <param name="cache"></param>
/// <returns></returns>
public static TestScene SetupScene(
string name, UUID id, uint x, uint y, CoreAssetCache cache)
{
return SetupScene(name, id, x, y, cache, new IniConfigSource());
}
/// <summary>
/// Set up a scene. If it's more then one scene, use the same CommunicationsManager to link regions
/// or a different, to get a brand new scene with new shared region modules.
/// </summary>
/// <param name="name">Name of the region</param>
/// <param name="id">ID of the region</param>
/// <param name="x">X co-ordinate of the region</param>
/// <param name="y">Y co-ordinate of the region</param>
/// <param name="cache"></param>
/// <param name="configSource"></param> /// <param name="configSource"></param>
/// <returns></returns> /// <returns></returns>
public static TestScene SetupScene( public TestScene SetupScene(
string name, UUID id, uint x, uint y, CoreAssetCache cache, IConfigSource configSource) string name, UUID id, uint x, uint y, IConfigSource configSource)
{ {
Console.WriteLine("Setting up test scene {0}", name); Console.WriteLine("Setting up test scene {0}", name);
@ -119,30 +129,47 @@ namespace OpenSim.Tests.Common
regInfo.RegionName = name; regInfo.RegionName = name;
regInfo.RegionID = id; regInfo.RegionID = id;
AgentCircuitManager acm = new AgentCircuitManager();
SceneCommunicationService scs = new SceneCommunicationService(); SceneCommunicationService scs = new SceneCommunicationService();
ISimulationDataService simDataService = OpenSim.Server.Base.ServerUtils.LoadPlugin<ISimulationDataService>("OpenSim.Tests.Common.dll", null);
IEstateDataService estateDataService = null;
TestScene testScene = new TestScene( TestScene testScene = new TestScene(
regInfo, acm, scs, simDataService, estateDataService, null, false, configSource, null); regInfo, m_acm, scs, m_simDataService, m_estateDataService, null, false, configSource, null);
IRegionModule godsModule = new GodsModule(); IRegionModule godsModule = new GodsModule();
godsModule.Initialise(testScene, new IniConfigSource()); godsModule.Initialise(testScene, new IniConfigSource());
testScene.AddModule(godsModule.Name, godsModule); testScene.AddModule(godsModule.Name, godsModule);
LocalAssetServicesConnector assetService = StartAssetService(testScene, cache); // Add scene to services
StartAuthenticationService(testScene); m_assetService.AddRegion(testScene);
LocalInventoryServicesConnector inventoryService = StartInventoryService(testScene);
StartGridService(testScene);
LocalUserAccountServicesConnector userAccountService = StartUserAccountService(testScene);
LocalPresenceServicesConnector presenceService = StartPresenceService(testScene);
inventoryService.PostInitialise(); if (m_cache != null)
assetService.PostInitialise(); {
userAccountService.PostInitialise(); m_cache.AddRegion(testScene);
presenceService.PostInitialise(); m_cache.RegionLoaded(testScene);
testScene.AddRegionModule(m_cache.Name, m_cache);
}
m_assetService.RegionLoaded(testScene);
testScene.AddRegionModule(m_assetService.Name, m_assetService);
m_authenticationService.AddRegion(testScene);
m_authenticationService.RegionLoaded(testScene);
testScene.AddRegionModule(m_authenticationService.Name, m_authenticationService);
m_inventoryService.AddRegion(testScene);
m_inventoryService.RegionLoaded(testScene);
testScene.AddRegionModule(m_inventoryService.Name, m_inventoryService);
m_gridService.AddRegion(testScene);
m_gridService.RegionLoaded(testScene);
testScene.AddRegionModule(m_gridService.Name, m_gridService);
m_userAccountService.AddRegion(testScene);
m_userAccountService.RegionLoaded(testScene);
testScene.AddRegionModule(m_userAccountService.Name, m_userAccountService);
m_presenceService.AddRegion(testScene);
m_presenceService.RegionLoaded(testScene);
testScene.AddRegionModule(m_presenceService.Name, m_presenceService);
testScene.RegionInfo.EstateSettings.EstateOwner = UUID.Random(); testScene.RegionInfo.EstateSettings.EstateOwner = UUID.Random();
testScene.SetModuleInterfaces(); testScene.SetModuleInterfaces();
@ -162,19 +189,17 @@ namespace OpenSim.Tests.Common
return testScene; return testScene;
} }
private static LocalAssetServicesConnector StartAssetService(Scene testScene, CoreAssetCache cache) private static LocalAssetServicesConnector StartAssetService(CoreAssetCache cache)
{ {
LocalAssetServicesConnector assetService = new LocalAssetServicesConnector();
IConfigSource config = new IniConfigSource(); IConfigSource config = new IniConfigSource();
config.AddConfig("Modules"); config.AddConfig("Modules");
config.Configs["Modules"].Set("AssetServices", "LocalAssetServicesConnector"); config.Configs["Modules"].Set("AssetServices", "LocalAssetServicesConnector");
config.AddConfig("AssetService"); config.AddConfig("AssetService");
config.Configs["AssetService"].Set("LocalServiceModule", "OpenSim.Services.AssetService.dll:AssetService"); config.Configs["AssetService"].Set("LocalServiceModule", "OpenSim.Services.AssetService.dll:AssetService");
config.Configs["AssetService"].Set("StorageProvider", "OpenSim.Tests.Common.dll"); config.Configs["AssetService"].Set("StorageProvider", "OpenSim.Tests.Common.dll");
LocalAssetServicesConnector assetService = new LocalAssetServicesConnector();
assetService.Initialise(config); assetService.Initialise(config);
assetService.AddRegion(testScene);
if (cache != null) if (cache != null)
{ {
@ -184,56 +209,43 @@ namespace OpenSim.Tests.Common
cacheConfig.AddConfig("AssetCache"); cacheConfig.AddConfig("AssetCache");
cache.Initialise(cacheConfig); cache.Initialise(cacheConfig);
cache.AddRegion(testScene);
cache.RegionLoaded(testScene);
testScene.AddRegionModule(cache.Name, cache);
} }
assetService.RegionLoaded(testScene);
testScene.AddRegionModule(assetService.Name, assetService);
return assetService; return assetService;
} }
private static void StartAuthenticationService(Scene testScene) private static LocalAuthenticationServicesConnector StartAuthenticationService()
{ {
ISharedRegionModule service = new LocalAuthenticationServicesConnector();
IConfigSource config = new IniConfigSource(); IConfigSource config = new IniConfigSource();
config.AddConfig("Modules"); config.AddConfig("Modules");
config.AddConfig("AuthenticationService"); config.AddConfig("AuthenticationService");
config.Configs["Modules"].Set("AuthenticationServices", "LocalAuthenticationServicesConnector"); config.Configs["Modules"].Set("AuthenticationServices", "LocalAuthenticationServicesConnector");
config.Configs["AuthenticationService"].Set( config.Configs["AuthenticationService"].Set(
"LocalServiceModule", "OpenSim.Services.AuthenticationService.dll:PasswordAuthenticationService"); "LocalServiceModule", "OpenSim.Services.AuthenticationService.dll:PasswordAuthenticationService");
config.Configs["AuthenticationService"].Set("StorageProvider", "OpenSim.Data.Null.dll"); config.Configs["AuthenticationService"].Set("StorageProvider", "OpenSim.Data.Null.dll");
LocalAuthenticationServicesConnector service = new LocalAuthenticationServicesConnector();
service.Initialise(config); service.Initialise(config);
service.AddRegion(testScene);
service.RegionLoaded(testScene); return service;
testScene.AddRegionModule(service.Name, service);
//m_authenticationService = service;
} }
private static LocalInventoryServicesConnector StartInventoryService(Scene testScene) private static LocalInventoryServicesConnector StartInventoryService()
{ {
LocalInventoryServicesConnector inventoryService = new LocalInventoryServicesConnector();
IConfigSource config = new IniConfigSource(); IConfigSource config = new IniConfigSource();
config.AddConfig("Modules"); config.AddConfig("Modules");
config.AddConfig("InventoryService"); config.AddConfig("InventoryService");
config.Configs["Modules"].Set("InventoryServices", "LocalInventoryServicesConnector"); config.Configs["Modules"].Set("InventoryServices", "LocalInventoryServicesConnector");
config.Configs["InventoryService"].Set("LocalServiceModule", "OpenSim.Services.InventoryService.dll:InventoryService"); config.Configs["InventoryService"].Set("LocalServiceModule", "OpenSim.Services.InventoryService.dll:InventoryService");
config.Configs["InventoryService"].Set("StorageProvider", "OpenSim.Tests.Common.dll"); config.Configs["InventoryService"].Set("StorageProvider", "OpenSim.Tests.Common.dll");
LocalInventoryServicesConnector inventoryService = new LocalInventoryServicesConnector();
inventoryService.Initialise(config); inventoryService.Initialise(config);
inventoryService.AddRegion(testScene);
inventoryService.RegionLoaded(testScene);
testScene.AddRegionModule(inventoryService.Name, inventoryService);
return inventoryService; return inventoryService;
} }
private static LocalGridServicesConnector StartGridService(Scene testScene) private static LocalGridServicesConnector StartGridService()
{ {
IConfigSource config = new IniConfigSource(); IConfigSource config = new IniConfigSource();
config.AddConfig("Modules"); config.AddConfig("Modules");
@ -245,8 +257,6 @@ namespace OpenSim.Tests.Common
LocalGridServicesConnector gridService = new LocalGridServicesConnector(); LocalGridServicesConnector gridService = new LocalGridServicesConnector();
gridService.Initialise(config); gridService.Initialise(config);
gridService.AddRegion(testScene);
gridService.RegionLoaded(testScene);
return gridService; return gridService;
} }
@ -256,7 +266,7 @@ namespace OpenSim.Tests.Common
/// </summary> /// </summary>
/// <param name="testScene"></param> /// <param name="testScene"></param>
/// <returns></returns> /// <returns></returns>
private static LocalUserAccountServicesConnector StartUserAccountService(Scene testScene) private static LocalUserAccountServicesConnector StartUserAccountService()
{ {
IConfigSource config = new IniConfigSource(); IConfigSource config = new IniConfigSource();
config.AddConfig("Modules"); config.AddConfig("Modules");
@ -268,10 +278,6 @@ namespace OpenSim.Tests.Common
LocalUserAccountServicesConnector userAccountService = new LocalUserAccountServicesConnector(); LocalUserAccountServicesConnector userAccountService = new LocalUserAccountServicesConnector();
userAccountService.Initialise(config); userAccountService.Initialise(config);
userAccountService.AddRegion(testScene);
userAccountService.RegionLoaded(testScene);
testScene.AddRegionModule(userAccountService.Name, userAccountService);
return userAccountService; return userAccountService;
} }
@ -280,7 +286,7 @@ namespace OpenSim.Tests.Common
/// Start a presence service /// Start a presence service
/// </summary> /// </summary>
/// <param name="testScene"></param> /// <param name="testScene"></param>
private static LocalPresenceServicesConnector StartPresenceService(Scene testScene) private static LocalPresenceServicesConnector StartPresenceService()
{ {
IConfigSource config = new IniConfigSource(); IConfigSource config = new IniConfigSource();
config.AddConfig("Modules"); config.AddConfig("Modules");
@ -292,10 +298,6 @@ namespace OpenSim.Tests.Common
LocalPresenceServicesConnector presenceService = new LocalPresenceServicesConnector(); LocalPresenceServicesConnector presenceService = new LocalPresenceServicesConnector();
presenceService.Initialise(config); presenceService.Initialise(config);
presenceService.AddRegion(testScene);
presenceService.RegionLoaded(testScene);
testScene.AddRegionModule(presenceService.Name, presenceService);
return presenceService; return presenceService;
} }
@ -313,10 +315,37 @@ namespace OpenSim.Tests.Common
/// <summary> /// <summary>
/// Setup modules for a scene. /// Setup modules for a scene.
/// </summary> /// </summary>
/// <param name="scene"></param> /// <remarks>
/// If called directly, then all the modules must be shared modules.
/// </remarks>
/// <param name="scenes"></param>
/// <param name="config"></param> /// <param name="config"></param>
/// <param name="modules"></param> /// <param name="modules"></param>
public static void SetupSceneModules(Scene scene, IConfigSource config, params object[] modules) public static void SetupSceneModules(Scene scene, IConfigSource config, params object[] modules)
{
SetupSceneModules(new Scene[] { scene }, config, modules);
}
/// <summary>
/// Setup modules for a scene using their default settings.
/// </summary>
/// <param name="scenes"></param>
/// <param name="modules"></param>
public static void SetupSceneModules(Scene[] scenes, params object[] modules)
{
SetupSceneModules(scenes, new IniConfigSource(), modules);
}
/// <summary>
/// Setup modules for scenes.
/// </summary>
/// <remarks>
/// If called directly, then all the modules must be shared modules.
/// </remarks>
/// <param name="scenes"></param>
/// <param name="config"></param>
/// <param name="modules"></param>
public static void SetupSceneModules(Scene[] scenes, IConfigSource config, params object[] modules)
{ {
List<IRegionModuleBase> newModules = new List<IRegionModuleBase>(); List<IRegionModuleBase> newModules = new List<IRegionModuleBase>();
foreach (object module in modules) foreach (object module in modules)
@ -324,8 +353,13 @@ namespace OpenSim.Tests.Common
if (module is IRegionModule) if (module is IRegionModule)
{ {
IRegionModule m = (IRegionModule)module; IRegionModule m = (IRegionModule)module;
m.Initialise(scene, config);
scene.AddModule(m.Name, m); foreach (Scene scene in scenes)
{
m.Initialise(scene, config);
scene.AddModule(m.Name, m);
}
m.PostInitialise(); m.PostInitialise();
} }
else if (module is IRegionModuleBase) else if (module is IRegionModuleBase)
@ -345,15 +379,19 @@ namespace OpenSim.Tests.Common
foreach (IRegionModuleBase module in newModules) foreach (IRegionModuleBase module in newModules)
{ {
module.AddRegion(scene); foreach (Scene scene in scenes)
scene.AddRegionModule(module.Name, module); {
module.AddRegion(scene);
scene.AddRegionModule(module.Name, module);
}
} }
// RegionLoaded is fired after all modules have been appropriately added to all scenes // RegionLoaded is fired after all modules have been appropriately added to all scenes
foreach (IRegionModuleBase module in newModules) foreach (IRegionModuleBase module in newModules)
module.RegionLoaded(scene); foreach (Scene scene in scenes)
module.RegionLoaded(scene);
scene.SetModuleInterfaces(); foreach (Scene scene in scenes) { scene.SetModuleInterfaces(); }
} }
/// <summary> /// <summary>

View File

@ -46,6 +46,14 @@ namespace OpenSim.Tests.Common.Mock
{ {
m_scene = scene; m_scene = scene;
m_parcels = new List<ILandObject>(); m_parcels = new List<ILandObject>();
SetupDefaultParcel();
}
private void SetupDefaultParcel()
{
ILandObject obj = new LandObject(UUID.Zero, false, m_scene);
obj.LandData.Name = "Your Parcel";
m_parcels.Add(obj);
} }
public List<ILandObject> ParcelsNearPoint(Vector3 position) public List<ILandObject> ParcelsNearPoint(Vector3 position)
@ -63,11 +71,7 @@ namespace OpenSim.Tests.Common.Mock
m_parcels.Clear(); m_parcels.Clear();
if (setupDefaultParcel) if (setupDefaultParcel)
{ SetupDefaultParcel();
ILandObject obj = new LandObject(UUID.Zero, false, m_scene);
obj.LandData.Name = "Your Parcel";
m_parcels.Add(obj);
}
} }
protected ILandObject GetNoLand() protected ILandObject GetNoLand()
@ -102,6 +106,5 @@ namespace OpenSim.Tests.Common.Mock
public void Join(int start_x, int start_y, int end_x, int end_y, UUID attempting_user_id) {} public void Join(int start_x, int start_y, int end_x, int end_y, UUID attempting_user_id) {}
public void Subdivide(int start_x, int start_y, int end_x, int end_y, UUID attempting_user_id) {} public void Subdivide(int start_x, int start_y, int end_x, int end_y, UUID attempting_user_id) {}
} }
} }

View File

@ -98,7 +98,7 @@ namespace OpenSim.Tests.Torture
umm = new UserManagementModule(); umm = new UserManagementModule();
am = new AttachmentsModule(); am = new AttachmentsModule();
scene = SceneHelpers.SetupScene(); scene = new SceneHelpers().SetupScene();
SceneHelpers.SetupSceneModules(scene, config, afm, umm, am, new BasicInventoryAccessModule(), new NPCModule()); SceneHelpers.SetupSceneModules(scene, config, afm, umm, am, new BasicInventoryAccessModule(), new NPCModule());
} }

View File

@ -126,7 +126,7 @@ namespace OpenSim.Tests.Torture
// Using a local variable for scene, at least on mono 2.6.7, means that it's much more likely to be garbage // Using a local variable for scene, at least on mono 2.6.7, means that it's much more likely to be garbage
// collected when we teardown this test. If it's done in a member variable, even if that is subsequently // collected when we teardown this test. If it's done in a member variable, even if that is subsequently
// nulled out, the garbage collect can be delayed. // nulled out, the garbage collect can be delayed.
TestScene scene = SceneHelpers.SetupScene(); TestScene scene = new SceneHelpers().SetupScene();
// Process process = Process.GetCurrentProcess(); // Process process = Process.GetCurrentProcess();
// long startProcessMemory = process.PrivateMemorySize64; // long startProcessMemory = process.PrivateMemorySize64;

View File

@ -84,7 +84,7 @@ namespace OpenSim.Tests.Torture
// to AssemblyResolver.OnAssemblyResolve fails. // to AssemblyResolver.OnAssemblyResolve fails.
xEngineConfig.Set("AppDomainLoading", "false"); xEngineConfig.Set("AppDomainLoading", "false");
m_scene = SceneHelpers.SetupScene("My Test", UUID.Random(), 1000, 1000, null, configSource); m_scene = new SceneHelpers().SetupScene("My Test", UUID.Random(), 1000, 1000, configSource);
SceneHelpers.SetupSceneModules(m_scene, configSource, m_xEngine, wcModule); SceneHelpers.SetupSceneModules(m_scene, configSource, m_xEngine, wcModule);
m_scene.EventManager.OnChatFromWorld += OnChatFromWorld; m_scene.EventManager.OnChatFromWorld += OnChatFromWorld;

View File

@ -337,6 +337,13 @@
; OpenJPEG if false ; OpenJPEG if false
; UseCSJ2K = true ; UseCSJ2K = true
; Use "Trash" folder for items deleted from the scene
; When set to True (the default) items deleted from the scene will be
; stored in the user's trash or lost and found folder. When set to
; False items will be removed from the scene permanently
UseTrashOnDelete = True
; Persist avatar baked textures ; Persist avatar baked textures
; Persisting baked textures can speed up login and region border ; Persisting baked textures can speed up login and region border
; crossings especially with large numbers of users, though it ; crossings especially with large numbers of users, though it