Merge branch 'master' into 0.7.3-post-fixes

0.7.3-post-fixes
Justin Clark-Casey (justincc) 2012-02-15 02:41:50 +00:00
commit 96843f2b17
62 changed files with 1846 additions and 586 deletions

View File

@ -236,3 +236,10 @@ CREATE NONCLUSTERED INDEX IX_regions_name ON dbo.regions
) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
COMMIT COMMIT
:VERSION 9
BEGIN TRANSACTION
ALTER TABLE regions ADD parcelMapTexture uniqueidentifier NULL;
COMMIT

View File

@ -472,3 +472,73 @@ COMMIT;
BEGIN; BEGIN;
ALTER TABLE regionsettings ADD COLUMN covenant_datetime INTEGER NOT NULL default 0; ALTER TABLE regionsettings ADD COLUMN covenant_datetime INTEGER NOT NULL default 0;
COMMIT; COMMIT;
:VERSION 23
BEGIN;
CREATE TABLE regionwindlight (
region_id VARCHAR(36) NOT NULL DEFAULT '000000-0000-0000-0000-000000000000' PRIMARY KEY,
water_color_r FLOAT NOT NULL DEFAULT '4.000000',
water_color_g FLOAT NOT NULL DEFAULT '38.000000',
water_color_b FLOAT NOT NULL DEFAULT '64.000000',
water_color_i FLOAT NOT NULL DEFAULT '1.000000',
water_fog_density_exponent FLOAT NOT NULL DEFAULT '4.0',
underwater_fog_modifier FLOAT NOT NULL DEFAULT '0.25',
reflection_wavelet_scale_1 FLOAT NOT NULL DEFAULT '2.0',
reflection_wavelet_scale_2 FLOAT NOT NULL DEFAULT '2.0',
reflection_wavelet_scale_3 FLOAT NOT NULL DEFAULT '2.0',
fresnel_scale FLOAT NOT NULL DEFAULT '0.40',
fresnel_offset FLOAT NOT NULL DEFAULT '0.50',
refract_scale_above FLOAT NOT NULL DEFAULT '0.03',
refract_scale_below FLOAT NOT NULL DEFAULT '0.20',
blur_multiplier FLOAT NOT NULL DEFAULT '0.040',
big_wave_direction_x FLOAT NOT NULL DEFAULT '1.05',
big_wave_direction_y FLOAT NOT NULL DEFAULT '-0.42',
little_wave_direction_x FLOAT NOT NULL DEFAULT '1.11',
little_wave_direction_y FLOAT NOT NULL DEFAULT '-1.16',
normal_map_texture VARCHAR(36) NOT NULL DEFAULT '822ded49-9a6c-f61c-cb89-6df54f42cdf4',
horizon_r FLOAT NOT NULL DEFAULT '0.25',
horizon_g FLOAT NOT NULL DEFAULT '0.25',
horizon_b FLOAT NOT NULL DEFAULT '0.32',
horizon_i FLOAT NOT NULL DEFAULT '0.32',
haze_horizon FLOAT NOT NULL DEFAULT '0.19',
blue_density_r FLOAT NOT NULL DEFAULT '0.12',
blue_density_g FLOAT NOT NULL DEFAULT '0.22',
blue_density_b FLOAT NOT NULL DEFAULT '0.38',
blue_density_i FLOAT NOT NULL DEFAULT '0.38',
haze_density FLOAT NOT NULL DEFAULT '0.70',
density_multiplier FLOAT NOT NULL DEFAULT '0.18',
distance_multiplier FLOAT NOT NULL DEFAULT '0.8',
max_altitude INTEGER NOT NULL DEFAULT '1605',
sun_moon_color_r FLOAT NOT NULL DEFAULT '0.24',
sun_moon_color_g FLOAT NOT NULL DEFAULT '0.26',
sun_moon_color_b FLOAT NOT NULL DEFAULT '0.30',
sun_moon_color_i FLOAT NOT NULL DEFAULT '0.30',
sun_moon_position FLOAT NOT NULL DEFAULT '0.317',
ambient_r FLOAT NOT NULL DEFAULT '0.35',
ambient_g FLOAT NOT NULL DEFAULT '0.35',
ambient_b FLOAT NOT NULL DEFAULT '0.35',
ambient_i FLOAT NOT NULL DEFAULT '0.35',
east_angle FLOAT NOT NULL DEFAULT '0.00',
sun_glow_focus FLOAT NOT NULL DEFAULT '0.10',
sun_glow_size FLOAT NOT NULL DEFAULT '1.75',
scene_gamma FLOAT NOT NULL DEFAULT '1.00',
star_brightness FLOAT NOT NULL DEFAULT '0.00',
cloud_color_r FLOAT NOT NULL DEFAULT '0.41',
cloud_color_g FLOAT NOT NULL DEFAULT '0.41',
cloud_color_b FLOAT NOT NULL DEFAULT '0.41',
cloud_color_i FLOAT NOT NULL DEFAULT '0.41',
cloud_x FLOAT NOT NULL DEFAULT '1.00',
cloud_y FLOAT NOT NULL DEFAULT '0.53',
cloud_density FLOAT NOT NULL DEFAULT '1.00',
cloud_coverage FLOAT NOT NULL DEFAULT '0.27',
cloud_scale FLOAT NOT NULL DEFAULT '0.42',
cloud_detail_x FLOAT NOT NULL DEFAULT '1.00',
cloud_detail_y FLOAT NOT NULL DEFAULT '0.53',
cloud_detail_density FLOAT NOT NULL DEFAULT '0.12',
cloud_scroll_x FLOAT NOT NULL DEFAULT '0.20',
cloud_scroll_x_lock INTEGER NOT NULL DEFAULT '0',
cloud_scroll_y FLOAT NOT NULL DEFAULT '0.01',
cloud_scroll_y_lock INTEGER NOT NULL DEFAULT '0',
draw_classic_clouds INTEGER NOT NULL DEFAULT '1');
COMMIT;

View File

@ -75,7 +75,7 @@ namespace OpenSim.Data.SQLite
cmd.Parameters.AddWithValue(":PrincipalID", principalID.ToString()); cmd.Parameters.AddWithValue(":PrincipalID", principalID.ToString());
cmd.Parameters.AddWithValue(":Friend", friend); cmd.Parameters.AddWithValue(":Friend", friend);
ExecuteNonQuery(cmd, cmd.Connection); ExecuteNonQuery(cmd, m_Connection);
return true; return true;
} }

File diff suppressed because it is too large Load Diff

View File

@ -31,6 +31,7 @@ using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.Reflection; using System.Reflection;
using System.Text; using System.Text;
using System.Text.RegularExpressions;
using System.Threading; using System.Threading;
using log4net; using log4net;
using OpenSim.Framework; using OpenSim.Framework;
@ -531,6 +532,11 @@ namespace OpenSim.Framework.Console
public class Parser public class Parser
{ {
// If an unquoted portion ends with an element matching this regex
// and the next element contains a space, then we have stripped
// embedded quotes that should not have been stripped
private static Regex optionRegex = new Regex("^--[a-zA-Z0-9-]+=$");
public static string[] Parse(string text) public static string[] Parse(string text)
{ {
List<string> result = new List<string>(); List<string> result = new List<string>();
@ -544,12 +550,40 @@ namespace OpenSim.Framework.Console
if (index % 2 == 0) if (index % 2 == 0)
{ {
string[] words = unquoted[index].Split(new char[] {' '}); string[] words = unquoted[index].Split(new char[] {' '});
bool option = false;
foreach (string w in words) foreach (string w in words)
{ {
if (w != String.Empty) if (w != String.Empty)
{
if (optionRegex.Match(w) == Match.Empty)
option = false;
else
option = true;
result.Add(w); result.Add(w);
} }
} }
// The last item matched the regex, put the quotes back
if (option)
{
// If the line ended with it, don't do anything
if (index < (unquoted.Length - 1))
{
// Get and remove the option name
string optionText = result[result.Count - 1];
result.RemoveAt(result.Count - 1);
// Add the quoted value back
optionText += "\"" + unquoted[index + 1] + "\"";
// Push the result into our return array
result.Add(optionText);
// Skip the already used value
index++;
}
}
}
else else
{ {
result.Add(unquoted[index]); result.Add(unquoted[index]);

View File

@ -625,7 +625,6 @@ namespace OpenSim.Framework
foreach (String s in allKeys) foreach (String s in allKeys)
{ {
string val = config.GetString(s);
SetOtherSetting(s, config.GetString(s)); SetOtherSetting(s, config.GetString(s));
} }
} }

View File

@ -49,15 +49,16 @@ namespace OpenSim.Framework.Serialization.External
/// <param name="nodeToFill"></param> /// <param name="nodeToFill"></param>
/// <param name="processors">/param> /// <param name="processors">/param>
/// <param name="xtr"></param> /// <param name="xtr"></param>
public static void ExecuteReadProcessors<NodeType>( /// <returns>true on successful, false if there were any processing failures</returns>
public static bool ExecuteReadProcessors<NodeType>(
NodeType nodeToFill, Dictionary<string, Action<NodeType, XmlTextReader>> processors, XmlTextReader xtr) NodeType nodeToFill, Dictionary<string, Action<NodeType, XmlTextReader>> processors, XmlTextReader xtr)
{ {
ExecuteReadProcessors( return ExecuteReadProcessors(
nodeToFill, nodeToFill,
processors, processors,
xtr, xtr,
(o, name, e) (o, name, e)
=> m_log.ErrorFormat( => m_log.DebugFormat(
"[ExternalRepresentationUtils]: Exception while parsing element {0}, continuing. Exception {1}{2}", "[ExternalRepresentationUtils]: Exception while parsing element {0}, continuing. Exception {1}{2}",
name, e.Message, e.StackTrace)); name, e.Message, e.StackTrace));
} }
@ -71,12 +72,15 @@ namespace OpenSim.Framework.Serialization.External
/// <param name="parseExceptionAction"> /// <param name="parseExceptionAction">
/// Action to take if there is a parsing problem. This will usually just be to log the exception /// Action to take if there is a parsing problem. This will usually just be to log the exception
/// </param> /// </param>
public static void ExecuteReadProcessors<NodeType>( /// <returns>true on successful, false if there were any processing failures</returns>
public static bool ExecuteReadProcessors<NodeType>(
NodeType nodeToFill, NodeType nodeToFill,
Dictionary<string, Action<NodeType, XmlTextReader>> processors, Dictionary<string, Action<NodeType, XmlTextReader>> processors,
XmlTextReader xtr, XmlTextReader xtr,
Action<NodeType, string, Exception> parseExceptionAction) Action<NodeType, string, Exception> parseExceptionAction)
{ {
bool errors = false;
string nodeName = string.Empty; string nodeName = string.Empty;
while (xtr.NodeType != XmlNodeType.EndElement) while (xtr.NodeType != XmlNodeType.EndElement)
{ {
@ -95,6 +99,7 @@ namespace OpenSim.Framework.Serialization.External
} }
catch (Exception e) catch (Exception e)
{ {
errors = true;
parseExceptionAction(nodeToFill, nodeName, e); parseExceptionAction(nodeToFill, nodeName, e);
if (xtr.NodeType == XmlNodeType.EndElement) if (xtr.NodeType == XmlNodeType.EndElement)
@ -107,6 +112,8 @@ namespace OpenSim.Framework.Serialization.External
xtr.ReadOuterXml(); // ignore xtr.ReadOuterXml(); // ignore
} }
} }
return errors;
} }
/// <summary> /// <summary>
@ -140,6 +147,7 @@ namespace OpenSim.Framework.Serialization.External
UUID.TryParse(node.InnerText, out uuid); UUID.TryParse(node.InnerText, out uuid);
creator = userService.GetUserAccount(scopeID, uuid); creator = userService.GetUserAccount(scopeID, uuid);
} }
if (node.Name == "CreatorData" && node.InnerText != null && node.InnerText != string.Empty) if (node.Name == "CreatorData" && node.InnerText != null && node.InnerText != string.Empty)
hasCreatorData = true; hasCreatorData = true;
@ -163,7 +171,6 @@ namespace OpenSim.Framework.Serialization.External
doc.Save(wr); doc.Save(wr);
return wr.ToString(); return wr.ToString();
} }
} }
} }
} }

View File

@ -1664,13 +1664,14 @@ namespace OpenSim.Framework
/// </summary> /// </summary>
public static void PrintCallStack() public static void PrintCallStack()
{ {
StackTrace stackTrace = new StackTrace(); // get call stack StackTrace stackTrace = new StackTrace(true); // get call stack
StackFrame[] stackFrames = stackTrace.GetFrames(); // get method calls (frames) StackFrame[] stackFrames = stackTrace.GetFrames(); // get method calls (frames)
// write call stack method names // write call stack method names
foreach (StackFrame stackFrame in stackFrames) foreach (StackFrame stackFrame in stackFrames)
{ {
m_log.Debug(stackFrame.GetMethod().DeclaringType + "." + stackFrame.GetMethod().Name); // write method name MethodBase mb = stackFrame.GetMethod();
m_log.DebugFormat("{0}.{1}:{2}", mb.DeclaringType, mb.Name, stackFrame.GetFileLineNumber()); // write method name
} }
} }

View File

@ -422,7 +422,7 @@ namespace OpenSim.Region.ClientStack.Linden
string assetType) string assetType)
{ {
m_log.DebugFormat( m_log.DebugFormat(
"Uploaded asset {0} for inventory item {1}, inv type {2}, asset type {3}", "[BUNCH OF CAPS]: Uploaded asset {0} for inventory item {1}, inv type {2}, asset type {3}",
assetID, inventoryItem, inventoryType, assetType); assetID, inventoryItem, inventoryType, assetType);
sbyte assType = 0; sbyte assType = 0;
@ -625,7 +625,12 @@ namespace OpenSim.Region.ClientStack.Linden
item.AssetType = assType; item.AssetType = assType;
item.InvType = inType; item.InvType = inType;
item.Folder = parentFolder; item.Folder = parentFolder;
item.CurrentPermissions = (uint)PermissionMask.All;
// If we set PermissionMask.All then when we rez the item the next permissions will replace the current
// (owner) permissions. This becomes a problem if next permissions are changed.
item.CurrentPermissions
= (uint)(PermissionMask.Move | PermissionMask.Copy | PermissionMask.Modify | PermissionMask.Transfer);
item.BasePermissions = (uint)PermissionMask.All; item.BasePermissions = (uint)PermissionMask.All;
item.EveryOnePermissions = 0; item.EveryOnePermissions = 0;
item.NextPermissions = (uint)PermissionMask.All; item.NextPermissions = (uint)PermissionMask.All;

View File

@ -50,8 +50,7 @@ namespace OpenSim.Region.ClientStack.Linden
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")] [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")]
public class NewFileAgentInventoryVariablePriceModule : INonSharedRegionModule public class NewFileAgentInventoryVariablePriceModule : INonSharedRegionModule
{ {
// private static readonly ILog m_log = // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
// LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private Scene m_scene; private Scene m_scene;
// private IAssetService m_assetService; // private IAssetService m_assetService;
@ -210,6 +209,9 @@ namespace OpenSim.Region.ClientStack.Linden
UUID inventoryItem, UUID parentFolder, byte[] data, string inventoryType, UUID inventoryItem, UUID parentFolder, byte[] data, string inventoryType,
string assetType,UUID AgentID) string assetType,UUID AgentID)
{ {
// m_log.DebugFormat(
// "[NEW FILE AGENT INVENTORY VARIABLE PRICE MODULE]: Upload complete for {0}", inventoryItem);
sbyte assType = 0; sbyte assType = 0;
sbyte inType = 0; sbyte inType = 0;
@ -259,13 +261,13 @@ namespace OpenSim.Region.ClientStack.Linden
item.AssetType = assType; item.AssetType = assType;
item.InvType = inType; item.InvType = inType;
item.Folder = parentFolder; item.Folder = parentFolder;
item.CurrentPermissions = (uint)PermissionMask.All; item.CurrentPermissions
= (uint)(PermissionMask.Move | PermissionMask.Copy | PermissionMask.Modify | PermissionMask.Transfer);
item.BasePermissions = (uint)PermissionMask.All; item.BasePermissions = (uint)PermissionMask.All;
item.EveryOnePermissions = 0; item.EveryOnePermissions = 0;
item.NextPermissions = (uint)PermissionMask.All; item.NextPermissions = (uint)PermissionMask.All;
item.CreationDate = Util.UnixTimeSinceEpoch(); item.CreationDate = Util.UnixTimeSinceEpoch();
m_scene.AddInventoryItem(item); m_scene.AddInventoryItem(item);
} }
} }
} }

View File

@ -5107,7 +5107,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
AddLocalPacketHandler(PacketType.ImprovedInstantMessage, HandlerImprovedInstantMessage, false); AddLocalPacketHandler(PacketType.ImprovedInstantMessage, HandlerImprovedInstantMessage, false);
AddLocalPacketHandler(PacketType.AcceptFriendship, HandlerAcceptFriendship); AddLocalPacketHandler(PacketType.AcceptFriendship, HandlerAcceptFriendship);
AddLocalPacketHandler(PacketType.DeclineFriendship, HandlerDeclineFriendship); AddLocalPacketHandler(PacketType.DeclineFriendship, HandlerDeclineFriendship);
AddLocalPacketHandler(PacketType.TerminateFriendship, HandlerTerminateFrendship); AddLocalPacketHandler(PacketType.TerminateFriendship, HandlerTerminateFriendship);
AddLocalPacketHandler(PacketType.RezObject, HandlerRezObject); AddLocalPacketHandler(PacketType.RezObject, HandlerRezObject);
AddLocalPacketHandler(PacketType.DeRezObject, HandlerDeRezObject); AddLocalPacketHandler(PacketType.DeRezObject, HandlerDeRezObject);
AddLocalPacketHandler(PacketType.ModifyLand, HandlerModifyLand); AddLocalPacketHandler(PacketType.ModifyLand, HandlerModifyLand);
@ -5827,7 +5827,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
return true; return true;
} }
private bool HandlerTerminateFrendship(IClientAPI sender, Packet Pack) private bool HandlerTerminateFriendship(IClientAPI sender, Packet Pack)
{ {
TerminateFriendshipPacket tfriendpack = (TerminateFriendshipPacket)Pack; TerminateFriendshipPacket tfriendpack = (TerminateFriendshipPacket)Pack;
@ -5842,14 +5842,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP
UUID listOwnerAgentID = tfriendpack.AgentData.AgentID; UUID listOwnerAgentID = tfriendpack.AgentData.AgentID;
UUID exFriendID = tfriendpack.ExBlock.OtherID; UUID exFriendID = tfriendpack.ExBlock.OtherID;
FriendshipTermination TerminateFriendshipHandler = OnTerminateFriendship;
FriendshipTermination handlerTerminateFriendship = OnTerminateFriendship; if (TerminateFriendshipHandler != null)
if (handlerTerminateFriendship != null)
{ {
handlerTerminateFriendship(this, listOwnerAgentID, exFriendID); TerminateFriendshipHandler(this, listOwnerAgentID, exFriendID);
}
return true; return true;
} }
return false;
}
private bool HandleFindAgent(IClientAPI client, Packet Packet) private bool HandleFindAgent(IClientAPI client, Packet Packet)
{ {
@ -7625,6 +7625,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
} }
} }
} }
else
if (transfer.TransferInfo.SourceType == (int)SourceType.SimEstate)
{
//TransferRequestPacket does not include covenant uuid?
//get scene covenant uuid
taskID = m_scene.RegionInfo.RegionSettings.Covenant;
}
MakeAssetRequest(transfer, taskID); MakeAssetRequest(transfer, taskID);
@ -11985,6 +11992,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
{ {
requestID = new UUID(transferRequest.TransferInfo.Params, 80); requestID = new UUID(transferRequest.TransferInfo.Params, 80);
} }
else if (transferRequest.TransferInfo.SourceType == (int)SourceType.SimEstate)
{
requestID = taskID;
}
// m_log.DebugFormat("[CLIENT]: {0} requesting asset {1}", Name, requestID); // m_log.DebugFormat("[CLIENT]: {0} requesting asset {1}", Name, requestID);

View File

@ -111,6 +111,15 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
#region IAvatarFactoryModule #region IAvatarFactoryModule
/// </summary>
/// <param name="sp"></param>
/// <param name="texture"></param>
/// <param name="visualParam"></param>
public void SetAppearance(IScenePresence sp, AvatarAppearance appearance)
{
SetAppearance(sp, appearance.Texture, appearance.VisualParams);
}
/// <summary> /// <summary>
/// Set appearance data (texture asset IDs and slider settings) /// Set appearance data (texture asset IDs and slider settings)
/// </summary> /// </summary>
@ -156,7 +165,9 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
changed = sp.Appearance.SetTextureEntries(textureEntry) || changed; changed = sp.Appearance.SetTextureEntries(textureEntry) || changed;
// WriteBakedTexturesReport(sp, m_log.DebugFormat); // WriteBakedTexturesReport(sp, m_log.DebugFormat);
if (!ValidateBakedTextureCache(sp))
// If bake textures are missing and this is not an NPC, request a rebake from client
if (!ValidateBakedTextureCache(sp) && (((ScenePresence)sp).PresenceType != PresenceType.Npc))
RequestRebake(sp, true); RequestRebake(sp, true);
// This appears to be set only in the final stage of the appearance // This appears to be set only in the final stage of the appearance
@ -164,6 +175,13 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
// appearance send and save here. // appearance send and save here.
} }
// NPC should send to clients immediately and skip saving appearance
if (((ScenePresence)sp).PresenceType == PresenceType.Npc)
{
SendAppearance((ScenePresence)sp);
return;
}
// save only if there were changes, send no matter what (doesn't hurt to send twice) // save only if there were changes, send no matter what (doesn't hurt to send twice)
if (changed) if (changed)
QueueAppearanceSave(sp.ControllingClient.AgentId); QueueAppearanceSave(sp.ControllingClient.AgentId);
@ -174,6 +192,15 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
// m_log.WarnFormat("[AVFACTORY]: complete SetAppearance for {0}:\n{1}",client.AgentId,sp.Appearance.ToString()); // m_log.WarnFormat("[AVFACTORY]: complete SetAppearance for {0}:\n{1}",client.AgentId,sp.Appearance.ToString());
} }
private void SendAppearance(ScenePresence sp)
{
// Send the appearance to everyone in the scene
sp.SendAppearanceToAllOtherAgents();
// Send animations back to the avatar as well
sp.Animator.SendAnimPack();
}
public bool SendAppearance(UUID agentId) public bool SendAppearance(UUID agentId)
{ {
// m_log.DebugFormat("[AVFACTORY]: Sending appearance for {0}", agentId); // m_log.DebugFormat("[AVFACTORY]: Sending appearance for {0}", agentId);
@ -185,12 +212,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
return false; return false;
} }
// Send the appearance to everyone in the scene SendAppearance(sp);
sp.SendAppearanceToAllOtherAgents();
// Send animations back to the avatar as well
sp.Animator.SendAnimPack();
return true; return true;
} }

View File

@ -546,12 +546,20 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
return null; return null;
userID = remoteClient.AgentId; userID = remoteClient.AgentId;
// m_log.DebugFormat(
// "[INVENTORY ACCESS MODULE]: Target of {0} in CreateItemForObject() is {1} {2}",
// action, remoteClient.Name, userID);
} }
else else
{ {
// All returns / deletes go to the object owner // All returns / deletes go to the object owner
// //
userID = so.RootPart.OwnerID; userID = so.RootPart.OwnerID;
// m_log.DebugFormat(
// "[INVENTORY ACCESS MODULE]: Target of {0} in CreateItemForObject() is object owner {1}",
// action, userID);
} }
if (userID == UUID.Zero) // Can't proceed if (userID == UUID.Zero) // Can't proceed
@ -637,11 +645,11 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
} }
// Override and put into where it came from, if it came // Override and put into where it came from, if it came
// from anywhere in inventory // from anywhere in inventory and the owner is taking it back.
// //
if (action == DeRezAction.Take || action == DeRezAction.TakeCopy) if (action == DeRezAction.Take || action == DeRezAction.TakeCopy)
{ {
if (so.RootPart.FromFolderID != UUID.Zero) if (so.RootPart.FromFolderID != UUID.Zero && userID == remoteClient.AgentId)
{ {
InventoryFolderBase f = new InventoryFolderBase(so.RootPart.FromFolderID, userID); InventoryFolderBase f = new InventoryFolderBase(so.RootPart.FromFolderID, userID);
folder = m_Scene.InventoryService.GetFolder(f); folder = m_Scene.InventoryService.GetFolder(f);
@ -789,6 +797,12 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
{ {
group = objlist[i]; group = objlist[i];
// m_log.DebugFormat(
// "[InventoryAccessModule]: Preparing to rez {0} {1} {2} ownermask={3:X} nextownermask={4:X} groupmask={5:X} everyonemask={6:X} for {7}",
// group.Name, group.LocalId, group.UUID,
// group.RootPart.OwnerMask, group.RootPart.NextOwnerMask, group.RootPart.GroupMask, group.RootPart.EveryoneMask,
// remoteClient.Name);
// Vector3 storedPosition = group.AbsolutePosition; // Vector3 storedPosition = group.AbsolutePosition;
if (group.UUID == UUID.Zero) if (group.UUID == UUID.Zero)
{ {
@ -855,8 +869,10 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
} }
// m_log.DebugFormat( // m_log.DebugFormat(
// "[InventoryAccessModule]: Rezzed {0} {1} {2} for {3}", // "[InventoryAccessModule]: Rezzed {0} {1} {2} ownermask={3:X} nextownermask={4:X} groupmask={5:X} everyonemask={6:X} for {7}",
// group.Name, group.LocalId, group.UUID, remoteClient.Name); // group.Name, group.LocalId, group.UUID,
// group.RootPart.OwnerMask, group.RootPart.NextOwnerMask, group.RootPart.GroupMask, group.RootPart.EveryoneMask,
// remoteClient.Name);
} }
if (item != null) if (item != null)
@ -938,6 +954,9 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
rootPart.FromFolderID = item.Folder; rootPart.FromFolderID = item.Folder;
// Console.WriteLine("rootPart.OwnedID {0}, item.Owner {1}, item.CurrentPermissions {2:X}",
// rootPart.OwnerID, item.Owner, item.CurrentPermissions);
if ((rootPart.OwnerID != item.Owner) || if ((rootPart.OwnerID != item.Owner) ||
(item.CurrentPermissions & 16) != 0) (item.CurrentPermissions & 16) != 0)
{ {

View File

@ -707,7 +707,12 @@ namespace OpenSim.Region.CoreModules.World.Permissions
// Object owners should be able to edit their own content // Object owners should be able to edit their own content
if (currentUser == objectOwner) if (currentUser == objectOwner)
{ {
permission = true; // there is no way that later code can change this back to false
// so just return true immediately and short circuit the more
// expensive group checks
return true;
//permission = true;
} }
else if (group.IsAttachment) else if (group.IsAttachment)
{ {

View File

@ -35,6 +35,7 @@ namespace OpenSim.Region.Framework.Interfaces
public interface IAvatarFactoryModule public interface IAvatarFactoryModule
{ {
void SetAppearance(IScenePresence sp, AvatarAppearance appearance);
void SetAppearance(IScenePresence sp, Primitive.TextureEntry textureEntry, byte[] visualParams); void SetAppearance(IScenePresence sp, Primitive.TextureEntry textureEntry, byte[] visualParams);
/// <summary> /// <summary>

View File

@ -58,7 +58,7 @@ namespace OpenSim.Region.Framework.Interfaces
/// </param> /// </param>
/// <param name="scene"></param> /// <param name="scene"></param>
/// <param name="appearance">The avatar appearance to use for the new NPC.</param> /// <param name="appearance">The avatar appearance to use for the new NPC.</param>
/// <returns>The UUID of the ScenePresence created.</returns> /// <returns>The UUID of the ScenePresence created. UUID.Zero if there was a failure.</returns>
UUID CreateNPC( UUID CreateNPC(
string firstname, string firstname,
string lastname, string lastname,

View File

@ -148,7 +148,8 @@ namespace OpenSim.Region.Framework.Scenes
x = m_inventoryDeletes.Dequeue(); x = m_inventoryDeletes.Dequeue();
m_log.DebugFormat( m_log.DebugFormat(
"[ASYNC DELETER]: Sending object to user's inventory, action {1}, count {2}, {0} item(s) remaining.", left, x.action, x.objectGroups.Count); "[ASYNC DELETER]: Sending object to user's inventory, action {1}, count {2}, {0} item(s) remaining.",
left, x.action, x.objectGroups.Count);
try try
{ {

View File

@ -347,6 +347,12 @@ namespace OpenSim.Region.Framework.Scenes
{ {
item.Name = itemUpd.Name; item.Name = itemUpd.Name;
item.Description = itemUpd.Description; item.Description = itemUpd.Description;
// m_log.DebugFormat(
// "[USER INVENTORY]: itemUpd {0} {1} {2} {3}, item {4} {5} {6} {7}",
// itemUpd.NextPermissions, itemUpd.GroupPermissions, itemUpd.EveryOnePermissions, item.Flags,
// item.NextPermissions, item.GroupPermissions, item.EveryOnePermissions, item.CurrentPermissions);
if (item.NextPermissions != (itemUpd.NextPermissions & item.BasePermissions)) if (item.NextPermissions != (itemUpd.NextPermissions & item.BasePermissions))
item.Flags |= (uint)InventoryItemFlags.ObjectOverwriteNextOwner; item.Flags |= (uint)InventoryItemFlags.ObjectOverwriteNextOwner;
item.NextPermissions = itemUpd.NextPermissions & item.BasePermissions; item.NextPermissions = itemUpd.NextPermissions & item.BasePermissions;
@ -355,6 +361,9 @@ namespace OpenSim.Region.Framework.Scenes
item.EveryOnePermissions = itemUpd.EveryOnePermissions & item.BasePermissions; item.EveryOnePermissions = itemUpd.EveryOnePermissions & item.BasePermissions;
if (item.GroupPermissions != (itemUpd.GroupPermissions & item.BasePermissions)) if (item.GroupPermissions != (itemUpd.GroupPermissions & item.BasePermissions))
item.Flags |= (uint)InventoryItemFlags.ObjectOverwriteGroup; item.Flags |= (uint)InventoryItemFlags.ObjectOverwriteGroup;
// m_log.DebugFormat("[USER INVENTORY]: item.Flags {0}", item.Flags);
item.GroupPermissions = itemUpd.GroupPermissions & item.BasePermissions; item.GroupPermissions = itemUpd.GroupPermissions & item.BasePermissions;
item.GroupID = itemUpd.GroupID; item.GroupID = itemUpd.GroupID;
item.GroupOwned = itemUpd.GroupOwned; item.GroupOwned = itemUpd.GroupOwned;
@ -2170,7 +2179,24 @@ namespace OpenSim.Region.Framework.Scenes
m_sceneGraph.DelinkObjects(parts); m_sceneGraph.DelinkObjects(parts);
} }
/// <summary>
/// Link the scene objects containing the indicated parts to a root object.
/// </summary>
/// <param name="client"></param>
/// <param name="parentPrimId">A root prim id of the object which will be the root prim of the resulting linkset.</param>
/// <param name="childPrimIds">A list of child prims for the objects that should be linked in.</param>
public void LinkObjects(IClientAPI client, uint parentPrimId, List<uint> childPrimIds) public void LinkObjects(IClientAPI client, uint parentPrimId, List<uint> childPrimIds)
{
LinkObjects(client.AgentId, parentPrimId, childPrimIds);
}
/// <summary>
/// Link the scene objects containing the indicated parts to a root object.
/// </summary>
/// <param name="agentId">The ID of the user linking.</param>
/// <param name="parentPrimId">A root prim id of the object which will be the root prim of the resulting linkset.</param>
/// <param name="childPrimIds">A list of child prims for the objects that should be linked in.</param>
public void LinkObjects(UUID agentId, uint parentPrimId, List<uint> childPrimIds)
{ {
List<UUID> owners = new List<UUID>(); List<UUID> owners = new List<UUID>();
@ -2183,7 +2209,7 @@ namespace OpenSim.Region.Framework.Scenes
return; return;
} }
if (!Permissions.CanLinkObject(client.AgentId, root.ParentGroup.RootPart.UUID)) if (!Permissions.CanLinkObject(agentId, root.ParentGroup.RootPart.UUID))
{ {
m_log.DebugFormat("[LINK]: Refusing link. No permissions on root prim"); m_log.DebugFormat("[LINK]: Refusing link. No permissions on root prim");
return; return;
@ -2199,7 +2225,7 @@ namespace OpenSim.Region.Framework.Scenes
if (!owners.Contains(part.OwnerID)) if (!owners.Contains(part.OwnerID))
owners.Add(part.OwnerID); owners.Add(part.OwnerID);
if (Permissions.CanLinkObject(client.AgentId, part.ParentGroup.RootPart.UUID)) if (Permissions.CanLinkObject(agentId, part.ParentGroup.RootPart.UUID))
children.Add(part); children.Add(part);
} }

View File

@ -3272,9 +3272,9 @@ namespace OpenSim.Region.Framework.Scenes
// Don't disable this log message - it's too helpful // Don't disable this log message - it's too helpful
m_log.DebugFormat( m_log.DebugFormat(
"[SCENE]: Region {0} told of incoming {1} agent {2} {3} {4} (circuit code {5}, teleportflags {6}, position {7})", "[SCENE]: Region {0} told of incoming {1} agent {2} {3} {4} (circuit code {5}, IP {6}, viewer {7}, teleportflags {8}, position {9})",
RegionInfo.RegionName, (agent.child ? "child" : "root"), agent.firstname, agent.lastname, RegionInfo.RegionName, (agent.child ? "child" : "root"),agent.firstname, agent.lastname,
agent.AgentID, agent.circuitcode, teleportFlags, agent.startpos); agent.AgentID, agent.circuitcode, agent.IPAddress, agent.Viewer, teleportFlags, agent.startpos);
if (LoginsDisabled) if (LoginsDisabled)
{ {

View File

@ -1662,6 +1662,10 @@ namespace OpenSim.Region.Framework.Scenes
{ {
SceneObjectGroup child = children[i].ParentGroup; SceneObjectGroup child = children[i].ParentGroup;
// Don't try and add a group to itself - this will only cause severe problems later on.
if (child == parentGroup)
continue;
// Make sure no child prim is set for sale // Make sure no child prim is set for sale
// So that, on delink, no prims are unwittingly // So that, on delink, no prims are unwittingly
// left for sale and sold off // left for sale and sold off
@ -1684,11 +1688,13 @@ namespace OpenSim.Region.Framework.Scenes
// We need to explicitly resend the newly link prim's object properties since no other actions // We need to explicitly resend the newly link prim's object properties since no other actions
// occur on link to invoke this elsewhere (such as object selection) // occur on link to invoke this elsewhere (such as object selection)
if (childGroups.Count > 0)
{
parentGroup.RootPart.CreateSelected = true; parentGroup.RootPart.CreateSelected = true;
parentGroup.TriggerScriptChangedEvent(Changed.LINK); parentGroup.TriggerScriptChangedEvent(Changed.LINK);
parentGroup.HasGroupChanged = true; parentGroup.HasGroupChanged = true;
parentGroup.ScheduleGroupForFullUpdate(); parentGroup.ScheduleGroupForFullUpdate();
}
} }
finally finally
{ {

View File

@ -265,6 +265,8 @@ namespace OpenSim.Region.Framework.Scenes
public void ApplyNextOwnerPermissions() public void ApplyNextOwnerPermissions()
{ {
// m_log.DebugFormat("[PRIM INVENTORY]: Applying next owner permissions to {0} {1}", Name, UUID);
SceneObjectPart[] parts = m_parts.GetArray(); SceneObjectPart[] parts = m_parts.GetArray();
for (int i = 0; i < parts.Length; i++) for (int i = 0; i < parts.Length; i++)
parts[i].ApplyNextOwnerPermissions(); parts[i].ApplyNextOwnerPermissions();

View File

@ -567,7 +567,8 @@ namespace OpenSim.Region.Framework.Scenes
// ~SceneObjectGroup() // ~SceneObjectGroup()
// { // {
// m_log.DebugFormat("[SCENE OBJECT GROUP]: Destructor called for {0}, local id {1}", Name, LocalId); // //m_log.DebugFormat("[SCENE OBJECT GROUP]: Destructor called for {0}, local id {1}", Name, LocalId);
// Console.WriteLine("Destructor called for {0}, local id {1}", Name, LocalId);
// } // }
#region Constructors #region Constructors
@ -1960,6 +1961,10 @@ namespace OpenSim.Region.Framework.Scenes
// "[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);
// Linking to ourselves is not a valid operation.
if (objectGroup == this)
return;
SceneObjectPart linkPart = objectGroup.m_rootPart; SceneObjectPart linkPart = objectGroup.m_rootPart;
Vector3 oldGroupPosition = linkPart.GroupPosition; Vector3 oldGroupPosition = linkPart.GroupPosition;

View File

@ -303,6 +303,9 @@ namespace OpenSim.Region.Framework.Scenes
// ~SceneObjectPart() // ~SceneObjectPart()
// { // {
// Console.WriteLine(
// "[SCENE OBJECT PART]: Destructor called for {0}, local id {1}, parent {2} {3}",
// Name, LocalId, ParentGroup.Name, ParentGroup.LocalId);
// m_log.DebugFormat( // m_log.DebugFormat(
// "[SCENE OBJECT PART]: Destructor called for {0}, local id {1}, parent {2} {3}", // "[SCENE OBJECT PART]: Destructor called for {0}, local id {1}, parent {2} {3}",
// Name, LocalId, ParentGroup.Name, ParentGroup.LocalId); // Name, LocalId, ParentGroup.Name, ParentGroup.LocalId);
@ -1501,7 +1504,7 @@ namespace OpenSim.Region.Framework.Scenes
PhysActor = null; PhysActor = null;
} }
// Basic Physics returns null.. joy joy joy. // Basic Physics can also return null as well as an exception catch.
if (PhysActor != null) if (PhysActor != null)
{ {
PhysActor.SOPName = this.Name; // save object into the PhysActor so ODE internals know the joint/body info PhysActor.SOPName = this.Name; // save object into the PhysActor so ODE internals know the joint/body info
@ -1509,10 +1512,6 @@ namespace OpenSim.Region.Framework.Scenes
DoPhysicsPropertyUpdate(RigidBody, true); DoPhysicsPropertyUpdate(RigidBody, true);
PhysActor.SetVolumeDetect(VolumeDetectActive ? 1 : 0); PhysActor.SetVolumeDetect(VolumeDetectActive ? 1 : 0);
} }
else
{
m_log.DebugFormat("[SOP]: physics actor is null for {0} with parent {1}", UUID, this.ParentGroup.UUID);
}
} }
} }
} }

View File

@ -267,10 +267,8 @@ namespace OpenSim.Region.Framework.Scenes
/// <returns></returns> /// <returns></returns>
public void CreateScriptInstance(TaskInventoryItem item, int startParam, bool postOnRez, string engine, int stateSource) public void CreateScriptInstance(TaskInventoryItem item, int startParam, bool postOnRez, string engine, int stateSource)
{ {
// m_log.InfoFormat( // m_log.DebugFormat("[PRIM INVENTORY]: Starting script {0} {1} in prim {2} {3} in {4}",
// "[PRIM INVENTORY]: " + // item.Name, item.ItemID, m_part.Name, m_part.UUID, m_part.ParentGroup.Scene.RegionInfo.RegionName);
// "Starting script {0}, {1} in prim {2}, {3}",
// item.Name, item.ItemID, Name, UUID);
if (!m_part.ParentGroup.Scene.Permissions.CanRunScript(item.ItemID, m_part.UUID, item.OwnerID)) if (!m_part.ParentGroup.Scene.Permissions.CanRunScript(item.ItemID, m_part.UUID, item.OwnerID))
return; return;
@ -299,8 +297,7 @@ namespace OpenSim.Region.Framework.Scenes
if (null == asset) if (null == asset)
{ {
m_log.ErrorFormat( m_log.ErrorFormat(
"[PRIM INVENTORY]: " + "[PRIM INVENTORY]: Couldn't start script {0}, {1} at {2} in {3} since asset ID {4} could not be found",
"Couldn't start script {0}, {1} at {2} in {3} since asset ID {4} could not be found",
item.Name, item.ItemID, m_part.AbsolutePosition, item.Name, item.ItemID, m_part.AbsolutePosition,
m_part.ParentGroup.Scene.RegionInfo.RegionName, item.AssetID); m_part.ParentGroup.Scene.RegionInfo.RegionName, item.AssetID);
} }
@ -400,8 +397,7 @@ namespace OpenSim.Region.Framework.Scenes
CreateScriptInstance(item, startParam, postOnRez, engine, stateSource); CreateScriptInstance(item, startParam, postOnRez, engine, stateSource);
else else
m_log.ErrorFormat( m_log.ErrorFormat(
"[PRIM INVENTORY]: " + "[PRIM INVENTORY]: Couldn't start script with ID {0} since it couldn't be found for prim {1}, {2} at {3} in {4}",
"Couldn't start script with ID {0} since it couldn't be found for prim {1}, {2} at {3} in {4}",
itemId, m_part.Name, m_part.UUID, itemId, m_part.Name, m_part.UUID,
m_part.AbsolutePosition, m_part.ParentGroup.Scene.RegionInfo.RegionName); m_part.AbsolutePosition, m_part.ParentGroup.Scene.RegionInfo.RegionName);
} }

View File

@ -291,13 +291,10 @@ namespace OpenSim.Region.Framework.Scenes
/// </summary> /// </summary>
public PhysicsActor PhysicsActor { get; private set; } public PhysicsActor PhysicsActor { get; private set; }
private byte m_movementflag; /// <summary>
/// Record user movement inputs.
public byte MovementFlag /// </summary>
{ public byte MovementFlag { get; private set; }
set { m_movementflag = value; }
get { return m_movementflag; }
}
private bool m_updateflag; private bool m_updateflag;

View File

@ -1470,7 +1470,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
m_SOPXmlProcessors, m_SOPXmlProcessors,
reader, reader,
(o, nodeName, e) (o, nodeName, e)
=> m_log.ErrorFormat( => m_log.DebugFormat(
"[SceneObjectSerializer]: Exception while parsing {0} in object {1} {2}: {3}{4}", "[SceneObjectSerializer]: Exception while parsing {0} in object {1} {2}: {3}{4}",
((SceneObjectPart)o).Name, ((SceneObjectPart)o).UUID, nodeName, e.Message, e.StackTrace)); ((SceneObjectPart)o).Name, ((SceneObjectPart)o).UUID, nodeName, e.Message, e.StackTrace));
@ -1535,14 +1535,18 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
reader.ReadStartElement(name, String.Empty); // Shape reader.ReadStartElement(name, String.Empty); // Shape
ExternalRepresentationUtils.ExecuteReadProcessors( errors = ExternalRepresentationUtils.ExecuteReadProcessors(
shape, shape,
m_ShapeXmlProcessors, m_ShapeXmlProcessors,
reader, reader,
(o, nodeName, e) (o, nodeName, e)
=> m_log.ErrorFormat( =>
{
m_log.DebugFormat(
"[SceneObjectSerializer]: Exception while parsing Shape property {0}: {1}{2}", "[SceneObjectSerializer]: Exception while parsing Shape property {0}: {1}{2}",
nodeName, e.Message, e.StackTrace)); nodeName, e.Message, e.StackTrace);
}
);
reader.ReadEndElement(); // Shape reader.ReadEndElement(); // Shape

View File

@ -27,6 +27,7 @@
using System; using System;
using System.Reflection; using System.Reflection;
using System.Threading;
using NUnit.Framework; using NUnit.Framework;
using OpenMetaverse; using OpenMetaverse;
using OpenSim.Framework; using OpenSim.Framework;
@ -43,6 +44,42 @@ namespace OpenSim.Region.Framework.Scenes.Tests
[TestFixture] [TestFixture]
public class SceneObjectBasicTests public class SceneObjectBasicTests
{ {
// [TearDown]
// public void TearDown()
// {
// Console.WriteLine("TearDown");
// GC.Collect();
// Thread.Sleep(3000);
// }
// public class GcNotify
// {
// public static AutoResetEvent gcEvent = new AutoResetEvent(false);
// private static bool _initialized = false;
//
// public static void Initialize()
// {
// if (!_initialized)
// {
// _initialized = true;
// new GcNotify();
// }
// }
//
// private GcNotify(){}
//
// ~GcNotify()
// {
// if (!Environment.HasShutdownStarted &&
// !AppDomain.CurrentDomain.IsFinalizingForUnload())
// {
// Console.WriteLine("GcNotify called");
// gcEvent.Set();
// new GcNotify();
// }
// }
// }
/// <summary> /// <summary>
/// Test adding an object to a scene. /// Test adding an object to a scene.
/// </summary> /// </summary>

View File

@ -39,14 +39,31 @@ using log4net;
namespace OpenSim.Region.Framework.Scenes.Tests namespace OpenSim.Region.Framework.Scenes.Tests
{ {
/// <summary>
/// Linking tests
/// </summary>
[TestFixture] [TestFixture]
public class SceneObjectLinkingTests public class SceneObjectLinkingTests
{ {
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
/// <summary>
/// Links to self should be ignored.
/// </summary>
[Test]
public void TestLinkToSelf()
{
TestHelpers.InMethod();
UUID ownerId = TestHelpers.ParseTail(0x1);
int nParts = 3;
TestScene scene = SceneHelpers.SetupScene();
SceneObjectGroup sog1 = SceneHelpers.CreateSceneObject(nParts, ownerId, "TestLinkToSelf_", 0x10);
scene.AddSceneObject(sog1);
scene.LinkObjects(ownerId, sog1.LocalId, new List<uint>() { sog1.Parts[1].LocalId });
// sog1.LinkToGroup(sog1);
Assert.That(sog1.Parts.Length, Is.EqualTo(nParts));
}
[Test] [Test]
public void TestLinkDelink2SceneObjects() public void TestLinkDelink2SceneObjects()
{ {

View File

@ -52,6 +52,30 @@ namespace OpenSim.Region.Framework.Tests
[TestFixture] [TestFixture]
public class TaskInventoryTests public class TaskInventoryTests
{ {
[Test]
public void TestAddTaskInventoryItem()
{
TestHelpers.InMethod();
// log4net.Config.XmlConfigurator.Configure();
Scene scene = SceneHelpers.SetupScene();
UserAccount user1 = UserAccountHelpers.CreateUserWithInventory(scene);
SceneObjectGroup sog1 = SceneHelpers.CreateSceneObject(1, user1.PrincipalID);
SceneObjectPart sop1 = sog1.RootPart;
// Create an object embedded inside the first
UUID taskSceneObjectItemId = UUID.Parse("00000000-0000-0000-0000-100000000000");
TaskInventoryItem taskSceneObjectItem
= TaskInventoryHelpers.AddSceneObject(scene, sop1, "tso", taskSceneObjectItemId, user1.PrincipalID);
TaskInventoryItem addedItem = sop1.Inventory.GetInventoryItem(taskSceneObjectItemId);
Assert.That(addedItem.ItemID, Is.EqualTo(taskSceneObjectItemId));
Assert.That(addedItem.OwnerID, Is.EqualTo(user1.PrincipalID));
Assert.That(addedItem.ParentID, Is.EqualTo(sop1.UUID));
Assert.That(addedItem.InvType, Is.EqualTo((int)InventoryType.Object));
Assert.That(addedItem.Type, Is.EqualTo((int)AssetType.Object));
}
[Test] [Test]
public void TestRezObjectFromInventoryItem() public void TestRezObjectFromInventoryItem()
{ {
@ -66,7 +90,7 @@ namespace OpenSim.Region.Framework.Tests
// Create an object embedded inside the first // Create an object embedded inside the first
UUID taskSceneObjectItemId = UUID.Parse("00000000-0000-0000-0000-100000000000"); UUID taskSceneObjectItemId = UUID.Parse("00000000-0000-0000-0000-100000000000");
TaskInventoryItem taskSceneObjectItem TaskInventoryItem taskSceneObjectItem
= TaskInventoryHelpers.AddSceneObject(scene, sop1, "tso", taskSceneObjectItemId); = TaskInventoryHelpers.AddSceneObject(scene, sop1, "tso", taskSceneObjectItemId, user1.PrincipalID);
scene.AddSceneObject(sog1); scene.AddSceneObject(sog1);

View File

@ -63,9 +63,9 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
// Capability string prefixes // Capability string prefixes
private static readonly string m_parcelVoiceInfoRequestPath = "0007/"; private static readonly string m_parcelVoiceInfoRequestPath = "0207/";
private static readonly string m_provisionVoiceAccountRequestPath = "0008/"; private static readonly string m_provisionVoiceAccountRequestPath = "0208/";
private static readonly string m_chatSessionRequestPath = "0009/"; private static readonly string m_chatSessionRequestPath = "0209/";
// Control info // Control info
private static bool m_Enabled = false; private static bool m_Enabled = false;

View File

@ -30,6 +30,7 @@ using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.Specialized; using System.Collections.Specialized;
using System.Reflection; using System.Reflection;
using System.Threading;
using Nwc.XmlRpc; using Nwc.XmlRpc;
@ -167,6 +168,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
private bool m_debugEnabled = false; private bool m_debugEnabled = false;
private Dictionary<string, bool> m_pendingRequests = new Dictionary<string,bool>();
private ExpiringCache<string, OSDMap> m_memoryCache; private ExpiringCache<string, OSDMap> m_memoryCache;
private int m_cacheTimeout = 30; private int m_cacheTimeout = 30;
@ -1348,6 +1351,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
// Immediately forward the request if the cache is disabled. // Immediately forward the request if the cache is disabled.
if (m_cacheTimeout == 0) if (m_cacheTimeout == 0)
{ {
m_log.WarnFormat("[SIMIAN GROUPS CONNECTOR]: cache is disabled");
return WebUtil.PostToService(m_groupsServerURI, requestArgs); return WebUtil.PostToService(m_groupsServerURI, requestArgs);
} }
@ -1355,6 +1359,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
if (requestArgs["RequestMethod"] == "RemoveGeneric" if (requestArgs["RequestMethod"] == "RemoveGeneric"
|| requestArgs["RequestMethod"] == "AddGeneric") || requestArgs["RequestMethod"] == "AddGeneric")
{ {
m_log.WarnFormat("[SIMIAN GROUPS CONNECTOR]: clearing generics cache");
// Any and all updates cause the cache to clear // Any and all updates cause the cache to clear
m_memoryCache.Clear(); m_memoryCache.Clear();
@ -1366,19 +1372,68 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
// Create the cache key for the request and see if we have it cached // Create the cache key for the request and see if we have it cached
string CacheKey = WebUtil.BuildQueryString(requestArgs); string CacheKey = WebUtil.BuildQueryString(requestArgs);
OSDMap response = null;
if (!m_memoryCache.TryGetValue(CacheKey, out response))
{
// if it wasn't in the cache, pass the request to the Simian Grid Services
response = WebUtil.PostToService(m_groupsServerURI, requestArgs);
// and cache the response // This code uses a leader/follower pattern. On a cache miss, the request is added
m_memoryCache.AddOrUpdate(CacheKey, response, TimeSpan.FromSeconds(m_cacheTimeout)); // to a queue; the first thread to add it to the queue completes the request while
// follow on threads busy wait for the results, this situation seems to happen
// often when checking permissions
while (true)
{
OSDMap response = null;
bool firstRequest = false;
lock (m_memoryCache)
{
if (m_memoryCache.TryGetValue(CacheKey, out response))
return response;
if (! m_pendingRequests.ContainsKey(CacheKey))
{
m_pendingRequests.Add(CacheKey,true);
firstRequest = true;
}
}
if (firstRequest)
{
// if it wasn't in the cache, pass the request to the Simian Grid Services
try
{
response = WebUtil.PostToService(m_groupsServerURI, requestArgs);
}
catch (Exception e)
{
m_log.InfoFormat("[SIMIAN GROUPS CONNECTOR] request failed {0}",CacheKey);
}
// and cache the response
lock (m_memoryCache)
{
m_memoryCache.AddOrUpdate(CacheKey, response, TimeSpan.FromSeconds(m_cacheTimeout));
m_pendingRequests.Remove(CacheKey);
} }
// return cached response
return response; return response;
} }
Thread.Sleep(50); // waiting for a web request to complete, 50msecs is reasonable
}
// if (!m_memoryCache.TryGetValue(CacheKey, out response))
// {
// m_log.WarnFormat("[SIMIAN GROUPS CONNECTOR]: query not in the cache");
// Util.PrintCallStack();
// // if it wasn't in the cache, pass the request to the Simian Grid Services
// response = WebUtil.PostToService(m_groupsServerURI, requestArgs);
// // and cache the response
// m_memoryCache.AddOrUpdate(CacheKey, response, TimeSpan.FromSeconds(m_cacheTimeout));
// }
// // return cached response
// return response;
}
#endregion #endregion
} }

View File

@ -96,14 +96,14 @@ namespace OpenSim.Region.OptionalModules.World.NPC
if (!m_avatars.ContainsKey(agentId)) if (!m_avatars.ContainsKey(agentId))
return false; return false;
// Delete existing sp attachments
scene.AttachmentsModule.DeleteAttachmentsFromScene(sp, false); scene.AttachmentsModule.DeleteAttachmentsFromScene(sp, false);
AvatarAppearance npcAppearance = new AvatarAppearance(appearance, true); // Set new sp appearance. Also sends to clients.
sp.Appearance = npcAppearance; scene.RequestModuleInterface<IAvatarFactoryModule>().SetAppearance(sp, new AvatarAppearance(appearance, true));
scene.AttachmentsModule.RezAttachments(sp);
IAvatarFactoryModule module = scene.RequestModuleInterface<IAvatarFactoryModule>(); // Rez needed sp attachments
module.SendAppearance(sp.UUID); scene.AttachmentsModule.RezAttachments(sp);
return true; return true;
} }
@ -148,22 +148,21 @@ namespace OpenSim.Region.OptionalModules.World.NPC
ScenePresence sp; ScenePresence sp;
if (scene.TryGetScenePresence(npcAvatar.AgentId, out sp)) if (scene.TryGetScenePresence(npcAvatar.AgentId, out sp))
{ {
m_log.DebugFormat( // m_log.DebugFormat(
"[NPC MODULE]: Successfully retrieved scene presence for NPC {0} {1}", sp.Name, sp.UUID); // "[NPC MODULE]: Successfully retrieved scene presence for NPC {0} {1}", sp.Name, sp.UUID);
sp.CompleteMovement(npcAvatar, false); sp.CompleteMovement(npcAvatar, false);
m_avatars.Add(npcAvatar.AgentId, npcAvatar);
m_log.DebugFormat("[NPC MODULE]: Created NPC with id {0}", npcAvatar.AgentId);
return npcAvatar.AgentId;
} }
else else
{ {
m_log.WarnFormat("[NPC MODULE]: Could not find scene presence for NPC {0} {1}", sp.Name, sp.UUID); m_log.WarnFormat("[NPC MODULE]: Could not find scene presence for NPC {0} {1}", sp.Name, sp.UUID);
return UUID.Zero;
} }
m_avatars.Add(npcAvatar.AgentId, npcAvatar);
} }
m_log.DebugFormat("[NPC MODULE]: Created NPC with id {0}", npcAvatar.AgentId);
return npcAvatar.AgentId;
} }
public bool MoveToTarget(UUID agentID, Scene scene, Vector3 pos, bool noFly, bool landAtTarget) public bool MoveToTarget(UUID agentID, Scene scene, Vector3 pos, bool noFly, bool landAtTarget)
@ -292,13 +291,16 @@ namespace OpenSim.Region.OptionalModules.World.NPC
NPCAvatar av; NPCAvatar av;
if (m_avatars.TryGetValue(agentID, out av)) if (m_avatars.TryGetValue(agentID, out av))
{ {
// m_log.DebugFormat("[NPC MODULE]: Found {0} {1} to remove", agentID, av.Name);
scene.RemoveClient(agentID, false); scene.RemoveClient(agentID, false);
m_avatars.Remove(agentID); m_avatars.Remove(agentID);
// m_log.DebugFormat("[NPC MODULE]: Removed {0} {1}", agentID, av.Name);
return true; return true;
} }
} }
// m_log.DebugFormat("[NPC MODULE]: Could not find {0} to remove", agentID);
return false; return false;
} }

View File

@ -156,6 +156,22 @@ namespace OpenSim.Region.Physics.OdePlugin
internal UUID m_uuid { get; private set; } internal UUID m_uuid { get; private set; }
internal bool bad = false; internal bool bad = false;
/// <summary>
/// ODE Avatar.
/// </summary>
/// <param name="avName"></param>
/// <param name="parent_scene"></param>
/// <param name="pos"></param>
/// <param name="size"></param>
/// <param name="pid_d"></param>
/// <param name="pid_p"></param>
/// <param name="capsule_radius"></param>
/// <param name="tensor"></param>
/// <param name="density">
/// Only used right now to return information to LSL. Not actually used to set mass in ODE!
/// </param>
/// <param name="walk_divisor"></param>
/// <param name="rundivisor"></param>
public OdeCharacter( public OdeCharacter(
String avName, OdeScene parent_scene, Vector3 pos, Vector3 size, float pid_d, float pid_p, String avName, OdeScene parent_scene, Vector3 pos, Vector3 size, float pid_d, float pid_p,
float capsule_radius, float tensor, float density, float capsule_radius, float tensor, float density,
@ -786,6 +802,10 @@ namespace OpenSim.Region.Physics.OdePlugin
Vector3 vec = Vector3.Zero; Vector3 vec = Vector3.Zero;
d.Vector3 vel = d.BodyGetLinearVel(Body); d.Vector3 vel = d.BodyGetLinearVel(Body);
// m_log.DebugFormat(
// "[ODE CHARACTER]: Current velocity in Move() is <{0},{1},{2}>, target {3} for {4}",
// vel.X, vel.Y, vel.Z, _target_velocity, Name);
float movementdivisor = 1f; float movementdivisor = 1f;
if (!m_alwaysRun) if (!m_alwaysRun)
@ -884,12 +904,14 @@ namespace OpenSim.Region.Physics.OdePlugin
if (flying) if (flying)
{ {
// This also acts as anti-gravity so that we hover when flying rather than fall.
vec.Z = (_target_velocity.Z - vel.Z) * (PID_D); vec.Z = (_target_velocity.Z - vel.Z) * (PID_D);
} }
} }
if (flying) if (flying)
{ {
// Anti-gravity so that we hover when flying rather than fall.
vec.Z += ((-1 * _parent_scene.gravityz) * m_mass); vec.Z += ((-1 * _parent_scene.gravityz) * m_mass);
//Added for auto fly height. Kitto Flora //Added for auto fly height. Kitto Flora
@ -921,6 +943,25 @@ namespace OpenSim.Region.Physics.OdePlugin
return; return;
} }
d.Vector3 newVel = d.BodyGetLinearVel(Body);
if (newVel.X >= 256 || newVel.X <= 256 || newVel.Y >= 256 || newVel.Y <= 256 || newVel.Z >= 256 || newVel.Z <= 256)
{
// m_log.DebugFormat(
// "[ODE CHARACTER]: Limiting falling velocity from {0} to {1} for {2}", newVel.Z, -9.8, Name);
newVel.X = Util.Clamp<float>(newVel.X, -255f, 255f);
newVel.Y = Util.Clamp<float>(newVel.Y, -255f, 255f);
if (!flying)
newVel.Z
= Util.Clamp<float>(
newVel.Z, -_parent_scene.AvatarTerminalVelocity, _parent_scene.AvatarTerminalVelocity);
else
newVel.Z = Util.Clamp<float>(newVel.Z, -255f, 255f);
d.BodySetLinearVel(Body, newVel.X, newVel.Y, newVel.Z);
}
} }
/// <summary> /// <summary>

View File

@ -144,6 +144,8 @@ namespace OpenSim.Region.Physics.OdePlugin
public float gravityy = 0f; public float gravityy = 0f;
public float gravityz = -9.8f; public float gravityz = -9.8f;
public float AvatarTerminalVelocity { get; set; }
private float contactsurfacelayer = 0.001f; private float contactsurfacelayer = 0.001f;
private int worldHashspaceLow = -4; private int worldHashspaceLow = -4;
@ -459,6 +461,15 @@ namespace OpenSim.Region.Physics.OdePlugin
gravityy = physicsconfig.GetFloat("world_gravityy", 0f); gravityy = physicsconfig.GetFloat("world_gravityy", 0f);
gravityz = physicsconfig.GetFloat("world_gravityz", -9.8f); gravityz = physicsconfig.GetFloat("world_gravityz", -9.8f);
float avatarTerminalVelocity = physicsconfig.GetFloat("avatar_terminal_velocity", 54f);
AvatarTerminalVelocity = Util.Clamp<float>(avatarTerminalVelocity, 0, 255f);
if (AvatarTerminalVelocity != avatarTerminalVelocity)
{
m_log.WarnFormat(
"[ODE SCENE]: avatar_terminal_velocity of {0} is invalid. Clamping to {1}",
avatarTerminalVelocity, AvatarTerminalVelocity);
}
worldHashspaceLow = physicsconfig.GetInt("world_hashspace_size_low", -4); worldHashspaceLow = physicsconfig.GetInt("world_hashspace_size_low", -4);
worldHashspaceHigh = physicsconfig.GetInt("world_hashspace_size_high", 128); worldHashspaceHigh = physicsconfig.GetInt("world_hashspace_size_high", 128);

View File

@ -445,17 +445,28 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
Vector3 toRegionPos; Vector3 toRegionPos;
double dis; double dis;
Action<ScenePresence> senseEntity = new Action<ScenePresence>(delegate(ScenePresence presence) Action<ScenePresence> senseEntity = new Action<ScenePresence>(presence =>
{ {
if ((ts.type & NPC) == 0 if ((ts.type & NPC) == 0 && presence.PresenceType == PresenceType.Npc)
&& presence.PresenceType == PresenceType.Npc {
&& !npcModule.GetNPC(presence.UUID, presence.Scene).SenseAsAgent) INPC npcData = npcModule.GetNPC(presence.UUID, presence.Scene);
if (npcData == null || !npcData.SenseAsAgent)
return; return;
}
if ((ts.type & AGENT) == 0 if ((ts.type & AGENT) == 0)
&& (presence.PresenceType == PresenceType.User {
|| npcModule.GetNPC(presence.UUID, presence.Scene).SenseAsAgent)) if (presence.PresenceType == PresenceType.User)
{
return; return;
}
else
{
INPC npcData = npcModule.GetNPC(presence.UUID, presence.Scene);
if (npcData != null && npcData.SenseAsAgent)
return;
}
}
if (presence.IsDeleted || presence.IsChildAgent || presence.GodLevel > 0.0) if (presence.IsDeleted || presence.IsChildAgent || presence.GodLevel > 0.0)
return; return;

View File

@ -44,7 +44,7 @@ namespace OpenSim.Region.ScriptEngine.Shared
string dirName = myDomain.FriendlyName; string dirName = myDomain.FriendlyName;
string ScriptEnginesPath = myDomain.SetupInformation.PrivateBinPath; string ScriptEnginesPath = myDomain.SetupInformation.PrivateBinPath;
string[] pathList = new string[] {"bin", ScriptEnginesPath, string[] pathList = new string[] {"", "bin", ScriptEnginesPath,
Path.Combine(ScriptEnginesPath, dirName)}; Path.Combine(ScriptEnginesPath, dirName)};
string assemblyName = args.Name; string assemblyName = args.Name;
@ -56,6 +56,8 @@ namespace OpenSim.Region.ScriptEngine.Shared
string path = Path.Combine(Directory.GetCurrentDirectory(), string path = Path.Combine(Directory.GetCurrentDirectory(),
Path.Combine(s, assemblyName))+".dll"; Path.Combine(s, assemblyName))+".dll";
// Console.WriteLine("Trying to resolve {0}", path);
if (File.Exists(path)) if (File.Exists(path))
return Assembly.LoadFrom(path); return Assembly.LoadFrom(path);
} }

View File

@ -28,12 +28,16 @@
using System; using System;
using System.IO; using System.IO;
using System.Collections.Generic; using System.Collections.Generic;
using System.Reflection;
using log4net;
using Tools; using Tools;
namespace OpenSim.Region.ScriptEngine.Shared.CodeTools namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
{ {
public class CSCodeGenerator : ICodeConverter public class CSCodeGenerator : ICodeConverter
{ {
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private SYMBOL m_astRoot = null; private SYMBOL m_astRoot = null;
private Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>> m_positionMap; private Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>> m_positionMap;
private int m_indentWidth = 4; // for indentation private int m_indentWidth = 4; // for indentation
@ -87,6 +91,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
/// <returns>String containing the generated C# code.</returns> /// <returns>String containing the generated C# code.</returns>
public string Convert(string script) public string Convert(string script)
{ {
// m_log.DebugFormat("[CS CODE GENERATOR]: Converting to C#\n{0}", script);
m_warnings.Clear(); m_warnings.Clear();
ResetCounters(); ResetCounters();
Parser p = new LSLSyntax(new yyLSLSyntax(), new ErrorHandler(true)); Parser p = new LSLSyntax(new yyLSLSyntax(), new ErrorHandler(true));

View File

@ -291,6 +291,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
public void PerformScriptCompile(string Script, string asset, UUID ownerUUID, public void PerformScriptCompile(string Script, string asset, UUID ownerUUID,
out string assembly, out Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>> linemap) out string assembly, out Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>> linemap)
{ {
// m_log.DebugFormat("[Compiler]: Compiling script\n{0}", Script);
linemap = null; linemap = null;
m_warnings.Clear(); m_warnings.Clear();
@ -357,6 +359,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
if (Script.StartsWith("//yp", true, CultureInfo.InvariantCulture)) if (Script.StartsWith("//yp", true, CultureInfo.InvariantCulture))
language = enumCompileType.yp; language = enumCompileType.yp;
// m_log.DebugFormat("[Compiler]: Compile language is {0}", language);
if (!AllowedCompilers.ContainsKey(language.ToString())) if (!AllowedCompilers.ContainsKey(language.ToString()))
{ {
// Not allowed to compile to this language! // Not allowed to compile to this language!
@ -417,7 +421,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
} }
assembly = CompileFromDotNetText(compileScript, language, asset, assembly); assembly = CompileFromDotNetText(compileScript, language, asset, assembly);
return;
} }
public string[] GetWarnings() public string[] GetWarnings()
@ -491,6 +494,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
/// <returns>Filename to .dll assembly</returns> /// <returns>Filename to .dll assembly</returns>
internal string CompileFromDotNetText(string Script, enumCompileType lang, string asset, string assembly) internal string CompileFromDotNetText(string Script, enumCompileType lang, string asset, string assembly)
{ {
// m_log.DebugFormat("[Compiler]: Compiling to assembly\n{0}", Script);
string ext = "." + lang.ToString(); string ext = "." + lang.ToString();
// Output assembly name // Output assembly name
@ -531,8 +536,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
parameters.IncludeDebugInformation = true; parameters.IncludeDebugInformation = true;
string rootPath = string rootPath = AppDomain.CurrentDomain.BaseDirectory;
Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory);
parameters.ReferencedAssemblies.Add(Path.Combine(rootPath, parameters.ReferencedAssemblies.Add(Path.Combine(rootPath,
"OpenSim.Region.ScriptEngine.Shared.dll")); "OpenSim.Region.ScriptEngine.Shared.dll"));

View File

@ -537,6 +537,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
public bool Stop(int timeout) public bool Stop(int timeout)
{ {
// m_log.DebugFormat(
// "[SCRIPT INSTANCE]: Stopping script {0} {1} with timeout {2}", ScriptName, ItemID, timeout);
IScriptWorkItem result; IScriptWorkItem result;
lock (m_EventQueue) lock (m_EventQueue)
@ -769,7 +772,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
} }
catch (Exception e) catch (Exception e)
{ {
// m_log.DebugFormat("[SCRIPT] Exception: {0}", e.Message); // m_log.DebugFormat(
// "[SCRIPT] Exception in script {0} {1}: {2}{3}",
// ScriptName, ItemID, e.Message, e.StackTrace);
m_InEvent = false; m_InEvent = false;
m_CurrentEvent = String.Empty; m_CurrentEvent = String.Empty;

View File

@ -27,44 +27,100 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading;
using Nini.Config; using Nini.Config;
using NUnit.Framework; using NUnit.Framework;
using OpenSim.Tests.Common.Mock;
using OpenSim.Region.Framework.Scenes;
using OpenMetaverse; using OpenMetaverse;
using OpenSim.Framework;
using OpenSim.Region.CoreModules.Scripting.WorldComm;
using OpenSim.Region.Framework.Scenes;
using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.Framework.Interfaces;
using OpenSim.Tests.Common;
using OpenSim.Tests.Common.Mock;
namespace OpenSim.Region.ScriptEngine.XEngine.Tests namespace OpenSim.Region.ScriptEngine.XEngine.Tests
{ {
/// <summary> /// <summary>
/// Scene presence tests /// XEngine tests.
/// </summary> /// </summary>
/// Commented out XEngineTests that don't do anything
/*
[TestFixture] [TestFixture]
public class XEngineTest public class XEngineTest
{ {
public Scene scene; private TestScene m_scene;
private XEngine m_xEngine;
public static Random random; private AutoResetEvent m_chatEvent = new AutoResetEvent(false);
public TestClient testclient; private OSChatMessage m_osChatMessageReceived;
//TestCommunicationsManager cm;
[TestFixtureSetUp] [TestFixtureSetUp]
public void Init() public void Init()
{ {
TestCommunicationsManager cm = new TestCommunicationsManager(); //AppDomain.CurrentDomain.SetData("APPBASE", Environment.CurrentDirectory + "/bin");
scene = SceneSetupHelpers.SetupScene("My Test", UUID.Random(), 1000, 1000, cm); // Console.WriteLine(AppDomain.CurrentDomain.BaseDirectory);
random = new Random(); m_xEngine = new XEngine();
// Necessary to stop serialization complaining
WorldCommModule wcModule = new WorldCommModule();
IniConfigSource configSource = new IniConfigSource();
IConfig startupConfig = configSource.AddConfig("Startup");
startupConfig.Set("DefaultScriptEngine", "XEngine");
IConfig xEngineConfig = configSource.AddConfig("XEngine");
xEngineConfig.Set("Enabled", "true");
// These tests will not run with AppDomainLoading = true, at least on mono. For unknown reasons, the call
// to AssemblyResolver.OnAssemblyResolve fails.
xEngineConfig.Set("AppDomainLoading", "false");
m_scene = SceneHelpers.SetupScene("My Test", UUID.Random(), 1000, 1000, null, configSource);
SceneHelpers.SetupSceneModules(m_scene, configSource, m_xEngine, wcModule);
m_scene.StartScripts();
} }
/// <summary>
/// Test compilation and starting of a script.
/// </summary>
/// <remarks>
/// This is a less than ideal regression test since it involves an asynchronous operation (in this case,
/// compilation of the script).
/// </remarks>
[Test] [Test]
public void T001_XStart() public void TestCompileAndStartScript()
{ {
INonSharedRegionModule xengine = new XEngine(); TestHelpers.InMethod();
SceneSetupHelpers.SetupSceneModules(scene, new IniConfigSource(), xengine); // log4net.Config.XmlConfigurator.Configure();
xengine.RegionLoaded(scene);
UUID userId = TestHelpers.ParseTail(0x1);
// UUID objectId = TestHelpers.ParseTail(0x2);
// UUID itemId = TestHelpers.ParseTail(0x3);
string itemName = "TestStartScript() Item";
SceneObjectGroup so = SceneHelpers.CreateSceneObject(1, userId, "TestStartScriptPart_", 0x100);
m_scene.AddNewSceneObject(so, true);
InventoryItemBase itemTemplate = new InventoryItemBase();
// itemTemplate.ID = itemId;
itemTemplate.Name = itemName;
itemTemplate.Folder = so.UUID;
itemTemplate.InvType = (int)InventoryType.LSL;
m_scene.EventManager.OnChatFromWorld += OnChatFromWorld;
m_scene.RezNewScript(userId, itemTemplate);
m_chatEvent.WaitOne(60000);
Assert.That(m_osChatMessageReceived, Is.Not.Null, "No chat message received in TestStartScript()");
Assert.That(m_osChatMessageReceived.Message, Is.EqualTo("Script running"));
}
private void OnChatFromWorld(object sender, OSChatMessage oscm)
{
// Console.WriteLine("Got chat [{0}]", oscm.Message);
m_osChatMessageReceived = oscm;
m_chatEvent.Set();
} }
} }
*/
} }

View File

@ -680,6 +680,10 @@ namespace OpenSim.Region.ScriptEngine.XEngine
public void OnRezScript(uint localID, UUID itemID, string script, int startParam, bool postOnRez, string engine, int stateSource) public void OnRezScript(uint localID, UUID itemID, string script, int startParam, bool postOnRez, string engine, int stateSource)
{ {
// m_log.DebugFormat(
// "[XEngine]: OnRezScript event triggered for script {0}, startParam {1}, postOnRez {2}, engine {3}, stateSource {4}, script\n{5}",
// itemID, startParam, postOnRez, engine, stateSource, script);
if (script.StartsWith("//MRM:")) if (script.StartsWith("//MRM:"))
return; return;
@ -761,6 +765,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
m_CompileDict[itemID] = 0; m_CompileDict[itemID] = 0;
} }
// m_log.DebugFormat("[XEngine]: Added script {0} to compile queue", itemID);
if (m_CurrentCompile == null) if (m_CurrentCompile == null)
{ {
// NOTE: Although we use a lockless queue, the lock here // NOTE: Although we use a lockless queue, the lock here
@ -822,6 +828,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
bool postOnRez = (bool)p[4]; bool postOnRez = (bool)p[4];
StateSource stateSource = (StateSource)p[5]; StateSource stateSource = (StateSource)p[5];
// m_log.DebugFormat("[XEngine]: DoOnRezScript called for script {0}", itemID);
lock (m_CompileDict) lock (m_CompileDict)
{ {
if (!m_CompileDict.ContainsKey(itemID)) if (!m_CompileDict.ContainsKey(itemID))
@ -922,6 +930,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
} }
catch (Exception e) catch (Exception e)
{ {
// m_log.ErrorFormat("[XEngine]: Exception when rezzing script {0}{1}", e.Message, e.StackTrace);
// try // try
// { // {
if (!m_ScriptErrors.ContainsKey(itemID)) if (!m_ScriptErrors.ContainsKey(itemID))
@ -1132,7 +1142,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine
handlerObjectRemoved(part.UUID); handlerObjectRemoved(part.UUID);
} }
ScriptRemoved handlerScriptRemoved = OnScriptRemoved; ScriptRemoved handlerScriptRemoved = OnScriptRemoved;
if (handlerScriptRemoved != null) if (handlerScriptRemoved != null)
handlerScriptRemoved(itemID); handlerScriptRemoved(itemID);
@ -1381,6 +1390,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
string path = Path.Combine(Directory.GetCurrentDirectory(), string path = Path.Combine(Directory.GetCurrentDirectory(),
Path.Combine(s, assemblyName))+".dll"; Path.Combine(s, assemblyName))+".dll";
// Console.WriteLine("[XEngine]: Trying to resolve {0}", path);
if (File.Exists(path)) if (File.Exists(path))
return Assembly.LoadFrom(path); return Assembly.LoadFrom(path);
} }
@ -1863,16 +1874,24 @@ namespace OpenSim.Region.ScriptEngine.XEngine
public void SuspendScript(UUID itemID) public void SuspendScript(UUID itemID)
{ {
// m_log.DebugFormat("[XEngine]: Received request to suspend script with ID {0}", itemID);
IScriptInstance instance = GetInstance(itemID); IScriptInstance instance = GetInstance(itemID);
if (instance != null) if (instance != null)
instance.Suspend(); instance.Suspend();
// else
// m_log.DebugFormat("[XEngine]: Could not find script with ID {0} to resume", itemID);
} }
public void ResumeScript(UUID itemID) public void ResumeScript(UUID itemID)
{ {
// m_log.DebugFormat("[XEngine]: Received request to resume script with ID {0}", itemID);
IScriptInstance instance = GetInstance(itemID); IScriptInstance instance = GetInstance(itemID);
if (instance != null) if (instance != null)
instance.Resume(); instance.Resume();
// else
// m_log.DebugFormat("[XEngine]: Could not find script with ID {0} to resume", itemID);
} }
} }
} }

View File

@ -301,7 +301,7 @@ namespace OpenSim.Region.UserStatistics
public void OnRegisterCaps(UUID agentID, Caps caps) public void OnRegisterCaps(UUID agentID, Caps caps)
{ {
m_log.DebugFormat("[VC]: OnRegisterCaps: agentID {0} caps {1}", agentID, caps); m_log.DebugFormat("[WEB STATS MODULE]: OnRegisterCaps: agentID {0} caps {1}", agentID, caps);
string capsPath = "/CAPS/VS/" + UUID.Random(); string capsPath = "/CAPS/VS/" + UUID.Random();
caps.RegisterHandler("ViewerStats", caps.RegisterHandler("ViewerStats",
new RestStreamHandler("POST", capsPath, new RestStreamHandler("POST", capsPath,
@ -462,7 +462,7 @@ namespace OpenSim.Region.UserStatistics
if (!m_sessions.ContainsKey(agentID)) if (!m_sessions.ContainsKey(agentID))
{ {
m_log.Warn("[VS]: no session for stat disclosure"); m_log.Warn("[WEB STATS MODULE]: no session for stat disclosure");
return new UserSessionID(); return new UserSessionID();
} }
uid = m_sessions[agentID]; uid = m_sessions[agentID];
@ -667,14 +667,13 @@ namespace OpenSim.Region.UserStatistics
{ {
updatecmd.ExecuteNonQuery(); updatecmd.ExecuteNonQuery();
} }
catch catch (SqliteExecutionException)
(SqliteExecutionException)
{ {
m_log.Warn("[WEBSTATS]: failed to write stats to storage Execution Exception"); m_log.Warn("[WEB STATS MODULE]: failed to write stats to storage Execution Exception");
} }
catch (SqliteSyntaxException) catch (SqliteSyntaxException)
{ {
m_log.Warn("[WEBSTATS]: failed to write stats to storage SQL Syntax Exception"); m_log.Warn("[WEB STATS MODULE]: failed to write stats to storage SQL Syntax Exception");
} }
} }

View File

@ -110,12 +110,11 @@ namespace OpenSim.Services.Connectors
string reply = string.Empty; string reply = string.Empty;
string reqString = ServerUtils.BuildQueryString(sendData); string reqString = ServerUtils.BuildQueryString(sendData);
string uri = m_ServerURI + "/avatar";
// m_log.DebugFormat("[AVATAR CONNECTOR]: queryString = {0}", reqString); // m_log.DebugFormat("[AVATAR CONNECTOR]: queryString = {0}", reqString);
try try
{ {
reply = SynchronousRestFormsRequester.MakeRequest("POST", reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, reqString);
m_ServerURI + "/avatar",
reqString);
if (reply == null || (reply != null && reply == string.Empty)) if (reply == null || (reply != null && reply == string.Empty))
{ {
m_log.DebugFormat("[AVATAR CONNECTOR]: GetAgent received null or empty reply"); m_log.DebugFormat("[AVATAR CONNECTOR]: GetAgent received null or empty reply");
@ -124,7 +123,7 @@ namespace OpenSim.Services.Connectors
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[AVATAR CONNECTOR]: Exception when contacting presence server: {0}", e.Message); m_log.DebugFormat("[AVATAR CONNECTOR]: Exception when contacting presence server at {0}: {1}", uri, e.Message);
} }
Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply); Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply);
@ -159,12 +158,11 @@ namespace OpenSim.Services.Connectors
string reqString = ServerUtils.BuildQueryString(sendData); string reqString = ServerUtils.BuildQueryString(sendData);
string uri = m_ServerURI + "/avatar";
//m_log.DebugFormat("[AVATAR CONNECTOR]: queryString = {0}", reqString); //m_log.DebugFormat("[AVATAR CONNECTOR]: queryString = {0}", reqString);
try try
{ {
string reply = SynchronousRestFormsRequester.MakeRequest("POST", string reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, reqString);
m_ServerURI + "/avatar",
reqString);
if (reply != string.Empty) if (reply != string.Empty)
{ {
Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply); Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply);
@ -177,15 +175,18 @@ namespace OpenSim.Services.Connectors
return false; return false;
} }
else else
{
m_log.DebugFormat("[AVATAR CONNECTOR]: SetAvatar reply data does not contain result field"); m_log.DebugFormat("[AVATAR CONNECTOR]: SetAvatar reply data does not contain result field");
}
} }
else else
{
m_log.DebugFormat("[AVATAR CONNECTOR]: SetAvatar received empty reply"); m_log.DebugFormat("[AVATAR CONNECTOR]: SetAvatar received empty reply");
} }
}
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[AVATAR CONNECTOR]: Exception when contacting avatar server: {0}", e.Message); m_log.DebugFormat("[AVATAR CONNECTOR]: Exception when contacting presence server at {0}: {1}", uri, e.Message);
} }
return false; return false;
@ -202,12 +203,11 @@ namespace OpenSim.Services.Connectors
sendData["UserID"] = userID.ToString(); sendData["UserID"] = userID.ToString();
string reqString = ServerUtils.BuildQueryString(sendData); string reqString = ServerUtils.BuildQueryString(sendData);
string uri = m_ServerURI + "/avatar";
// m_log.DebugFormat("[AVATAR CONNECTOR]: queryString = {0}", reqString); // m_log.DebugFormat("[AVATAR CONNECTOR]: queryString = {0}", reqString);
try try
{ {
string reply = SynchronousRestFormsRequester.MakeRequest("POST", string reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, reqString);
m_ServerURI + "/avatar",
reqString);
if (reply != string.Empty) if (reply != string.Empty)
{ {
Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply); Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply);
@ -228,7 +228,7 @@ namespace OpenSim.Services.Connectors
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[AVATAR CONNECTOR]: Exception when contacting avatar server: {0}", e.Message); m_log.DebugFormat("[AVATAR CONNECTOR]: Exception when contacting presence server at {0}: {1}", uri, e.Message);
} }
return false; return false;
@ -246,12 +246,11 @@ namespace OpenSim.Services.Connectors
sendData["Values"] = new List<string>(values); sendData["Values"] = new List<string>(values);
string reqString = ServerUtils.BuildQueryString(sendData); string reqString = ServerUtils.BuildQueryString(sendData);
string uri = m_ServerURI + "/avatar";
// m_log.DebugFormat("[AVATAR CONNECTOR]: queryString = {0}", reqString); // m_log.DebugFormat("[AVATAR CONNECTOR]: queryString = {0}", reqString);
try try
{ {
string reply = SynchronousRestFormsRequester.MakeRequest("POST", string reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, reqString);
m_ServerURI + "/avatar",
reqString);
if (reply != string.Empty) if (reply != string.Empty)
{ {
Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply); Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply);
@ -272,7 +271,7 @@ namespace OpenSim.Services.Connectors
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[AVATAR CONNECTOR]: Exception when contacting avatar server: {0}", e.Message); m_log.DebugFormat("[AVATAR CONNECTOR]: Exception when contacting presence server at {0}: {1}", uri, e.Message);
} }
return false; return false;
@ -290,12 +289,11 @@ namespace OpenSim.Services.Connectors
sendData["Names"] = new List<string>(names); sendData["Names"] = new List<string>(names);
string reqString = ServerUtils.BuildQueryString(sendData); string reqString = ServerUtils.BuildQueryString(sendData);
string uri = m_ServerURI + "/avatar";
// m_log.DebugFormat("[AVATAR CONNECTOR]: queryString = {0}", reqString); // m_log.DebugFormat("[AVATAR CONNECTOR]: queryString = {0}", reqString);
try try
{ {
string reply = SynchronousRestFormsRequester.MakeRequest("POST", string reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, reqString);
m_ServerURI + "/avatar",
reqString);
if (reply != string.Empty) if (reply != string.Empty)
{ {
Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply); Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply);
@ -316,7 +314,7 @@ namespace OpenSim.Services.Connectors
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[AVATAR CONNECTOR]: Exception when contacting avatar server: {0}", e.Message); m_log.DebugFormat("[AVATAR CONNECTOR]: Exception when contacting presence server at {0}: {1}", uri, e.Message);
} }
return false; return false;

View File

@ -108,12 +108,11 @@ namespace OpenSim.Services.Connectors.Friends
protected FriendInfo[] GetFriends(Dictionary<string, object> sendData, string PrincipalID) protected FriendInfo[] GetFriends(Dictionary<string, object> sendData, string PrincipalID)
{ {
string reqString = ServerUtils.BuildQueryString(sendData); string reqString = ServerUtils.BuildQueryString(sendData);
string uri = m_ServerURI + "/friends";
try try
{ {
string reply = SynchronousRestFormsRequester.MakeRequest("POST", string reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, reqString);
m_ServerURI + "/friends",
reqString);
if (reply != string.Empty) if (reply != string.Empty)
{ {
Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply); Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply);
@ -143,7 +142,6 @@ namespace OpenSim.Services.Connectors.Friends
// Success // Success
return finfos.ToArray(); return finfos.ToArray();
} }
else else
m_log.DebugFormat("[FRIENDS SERVICE CONNECTOR]: GetFriends {0} received null response", m_log.DebugFormat("[FRIENDS SERVICE CONNECTOR]: GetFriends {0} received null response",
PrincipalID); PrincipalID);
@ -152,7 +150,7 @@ namespace OpenSim.Services.Connectors.Friends
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[FRIENDS SERVICE CONNECTOR]: Exception when contacting friends server: {0}", e.Message); m_log.DebugFormat("[FRIENDS SERVICE CONNECTOR]: Exception when contacting friends server at {0}: {1}", uri, e.Message);
} }
return new FriendInfo[0]; return new FriendInfo[0];
@ -167,15 +165,14 @@ namespace OpenSim.Services.Connectors.Friends
sendData["METHOD"] = "storefriend"; sendData["METHOD"] = "storefriend";
string reply = string.Empty; string reply = string.Empty;
string uri = m_ServerURI + "/friends";
try try
{ {
reply = SynchronousRestFormsRequester.MakeRequest("POST", reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, ServerUtils.BuildQueryString(sendData));
m_ServerURI + "/friends",
ServerUtils.BuildQueryString(sendData));
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[FRIENDS SERVICE CONNECTOR]: Exception when contacting friends server: {0}", e.Message); m_log.DebugFormat("[FRIENDS SERVICE CONNECTOR]: Exception when contacting friends server at {0}: {1}", uri, e.Message);
return false; return false;
} }
@ -223,15 +220,14 @@ namespace OpenSim.Services.Connectors.Friends
public bool Delete(Dictionary<string, object> sendData, string PrincipalID, string Friend) public bool Delete(Dictionary<string, object> sendData, string PrincipalID, string Friend)
{ {
string reply = string.Empty; string reply = string.Empty;
string uri = m_ServerURI = "/friends";
try try
{ {
reply = SynchronousRestFormsRequester.MakeRequest("POST", reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, ServerUtils.BuildQueryString(sendData));
m_ServerURI + "/friends",
ServerUtils.BuildQueryString(sendData));
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[FRIENDS SERVICE CONNECTOR]: Exception when contacting friends server: {0}", e.Message); m_log.DebugFormat("[FRIENDS SERVICE CONNECTOR]: Exception when contacting friends server at {0}: {1}", uri, e.Message);
return false; return false;
} }

View File

@ -139,12 +139,11 @@ namespace OpenSim.Services.Connectors.Friends
return false; return false;
m_log.DebugFormat("[FRIENDS SIM CONNECTOR]: region: {0}", region.ExternalHostName + ":" + region.HttpPort); m_log.DebugFormat("[FRIENDS SIM CONNECTOR]: region: {0}", region.ExternalHostName + ":" + region.HttpPort);
string uri = "http://" + region.ExternalHostName + ":" + region.HttpPort + "/friends";
try try
{ {
string url = "http://" + region.ExternalHostName + ":" + region.HttpPort; string reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, reqString);
string reply = SynchronousRestFormsRequester.MakeRequest("POST",
url + "/friends",
reqString);
if (reply != string.Empty) if (reply != string.Empty)
{ {
Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply); Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply);
@ -165,7 +164,7 @@ namespace OpenSim.Services.Connectors.Friends
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[FRIENDS SIM CONNECTOR]: Exception when contacting remote sim: {0}", e.ToString()); m_log.DebugFormat("[FRIENDS SIM CONNECTOR]: Exception when contacting remote sim at {0}: {1}", uri, e.Message);
} }
return false; return false;

View File

@ -98,12 +98,11 @@ namespace OpenSim.Services.Connectors
sendData["METHOD"] = "register"; sendData["METHOD"] = "register";
string reqString = ServerUtils.BuildQueryString(sendData); string reqString = ServerUtils.BuildQueryString(sendData);
string uri = m_ServerURI + "/grid";
// m_log.DebugFormat("[GRID CONNECTOR]: queryString = {0}", reqString); // m_log.DebugFormat("[GRID CONNECTOR]: queryString = {0}", reqString);
try try
{ {
string reply = SynchronousRestFormsRequester.MakeRequest("POST", string reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, reqString);
m_ServerURI + "/grid",
reqString);
if (reply != string.Empty) if (reply != string.Empty)
{ {
Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply); Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply);
@ -133,7 +132,7 @@ namespace OpenSim.Services.Connectors
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message); m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
} }
return "Error communicating with grid service"; return "Error communicating with grid service";
@ -147,11 +146,12 @@ namespace OpenSim.Services.Connectors
sendData["METHOD"] = "deregister"; sendData["METHOD"] = "deregister";
string uri = m_ServerURI + "/grid";
try try
{ {
string reply = SynchronousRestFormsRequester.MakeRequest("POST", string reply
m_ServerURI + "/grid", = SynchronousRestFormsRequester.MakeRequest("POST", uri, ServerUtils.BuildQueryString(sendData));
ServerUtils.BuildQueryString(sendData));
if (reply != string.Empty) if (reply != string.Empty)
{ {
@ -165,7 +165,7 @@ namespace OpenSim.Services.Connectors
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message); m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
} }
return false; return false;
@ -184,15 +184,15 @@ namespace OpenSim.Services.Connectors
string reqString = ServerUtils.BuildQueryString(sendData); string reqString = ServerUtils.BuildQueryString(sendData);
string reply = string.Empty; string reply = string.Empty;
string uri = m_ServerURI + "/grid";
try try
{ {
reply = SynchronousRestFormsRequester.MakeRequest("POST", reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, reqString);
m_ServerURI + "/grid",
reqString);
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message); m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
return rinfos; return rinfos;
} }
@ -228,15 +228,14 @@ namespace OpenSim.Services.Connectors
sendData["METHOD"] = "get_region_by_uuid"; sendData["METHOD"] = "get_region_by_uuid";
string reply = string.Empty; string reply = string.Empty;
string uri = m_ServerURI + "/grid";
try try
{ {
reply = SynchronousRestFormsRequester.MakeRequest("POST", reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, ServerUtils.BuildQueryString(sendData));
m_ServerURI + "/grid",
ServerUtils.BuildQueryString(sendData));
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message); m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
return null; return null;
} }
@ -274,15 +273,16 @@ namespace OpenSim.Services.Connectors
sendData["METHOD"] = "get_region_by_position"; sendData["METHOD"] = "get_region_by_position";
string reply = string.Empty; string reply = string.Empty;
string uri = m_ServerURI + "/grid";
try try
{ {
reply = SynchronousRestFormsRequester.MakeRequest("POST", reply = SynchronousRestFormsRequester.MakeRequest("POST",
m_ServerURI + "/grid", uri,
ServerUtils.BuildQueryString(sendData)); ServerUtils.BuildQueryString(sendData));
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message); m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
return null; return null;
} }
@ -318,15 +318,16 @@ namespace OpenSim.Services.Connectors
sendData["METHOD"] = "get_region_by_name"; sendData["METHOD"] = "get_region_by_name";
string reply = string.Empty; string reply = string.Empty;
string uri = m_ServerURI + "/grid";
try try
{ {
reply = SynchronousRestFormsRequester.MakeRequest("POST", reply = SynchronousRestFormsRequester.MakeRequest("POST",
m_ServerURI + "/grid", uri,
ServerUtils.BuildQueryString(sendData)); ServerUtils.BuildQueryString(sendData));
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message); m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
return null; return null;
} }
@ -361,15 +362,16 @@ namespace OpenSim.Services.Connectors
sendData["METHOD"] = "get_regions_by_name"; sendData["METHOD"] = "get_regions_by_name";
List<GridRegion> rinfos = new List<GridRegion>(); List<GridRegion> rinfos = new List<GridRegion>();
string reply = string.Empty; string reply = string.Empty;
string uri = m_ServerURI + "/grid";
try try
{ {
reply = SynchronousRestFormsRequester.MakeRequest("POST", reply = SynchronousRestFormsRequester.MakeRequest("POST",
m_ServerURI + "/grid", uri,
ServerUtils.BuildQueryString(sendData)); ServerUtils.BuildQueryString(sendData));
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message); m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
return rinfos; return rinfos;
} }
@ -413,17 +415,19 @@ namespace OpenSim.Services.Connectors
List<GridRegion> rinfos = new List<GridRegion>(); List<GridRegion> rinfos = new List<GridRegion>();
string reply = string.Empty; string reply = string.Empty;
string uri = m_ServerURI + "/grid";
try try
{ {
reply = SynchronousRestFormsRequester.MakeRequest("POST", reply = SynchronousRestFormsRequester.MakeRequest("POST",
m_ServerURI + "/grid", uri,
ServerUtils.BuildQueryString(sendData)); ServerUtils.BuildQueryString(sendData));
//m_log.DebugFormat("[GRID CONNECTOR]: reply was {0}", reply); //m_log.DebugFormat("[GRID CONNECTOR]: reply was {0}", reply);
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message); m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
return rinfos; return rinfos;
} }
@ -463,17 +467,18 @@ namespace OpenSim.Services.Connectors
List<GridRegion> rinfos = new List<GridRegion>(); List<GridRegion> rinfos = new List<GridRegion>();
string reply = string.Empty; string reply = string.Empty;
string uri = m_ServerURI + "/grid";
try try
{ {
reply = SynchronousRestFormsRequester.MakeRequest("POST", reply = SynchronousRestFormsRequester.MakeRequest("POST",
m_ServerURI + "/grid", uri,
ServerUtils.BuildQueryString(sendData)); ServerUtils.BuildQueryString(sendData));
//m_log.DebugFormat("[GRID CONNECTOR]: reply was {0}", reply); //m_log.DebugFormat("[GRID CONNECTOR]: reply was {0}", reply);
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message); m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
return rinfos; return rinfos;
} }
@ -515,17 +520,18 @@ namespace OpenSim.Services.Connectors
List<GridRegion> rinfos = new List<GridRegion>(); List<GridRegion> rinfos = new List<GridRegion>();
string reply = string.Empty; string reply = string.Empty;
string uri = m_ServerURI + "/grid";
try try
{ {
reply = SynchronousRestFormsRequester.MakeRequest("POST", reply = SynchronousRestFormsRequester.MakeRequest("POST",
m_ServerURI + "/grid", uri,
ServerUtils.BuildQueryString(sendData)); ServerUtils.BuildQueryString(sendData));
//m_log.DebugFormat("[GRID CONNECTOR]: reply was {0}", reply); //m_log.DebugFormat("[GRID CONNECTOR]: reply was {0}", reply);
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message); m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
return rinfos; return rinfos;
} }
@ -565,17 +571,18 @@ namespace OpenSim.Services.Connectors
List<GridRegion> rinfos = new List<GridRegion>(); List<GridRegion> rinfos = new List<GridRegion>();
string reply = string.Empty; string reply = string.Empty;
string uri = m_ServerURI + "/grid";
try try
{ {
reply = SynchronousRestFormsRequester.MakeRequest("POST", reply = SynchronousRestFormsRequester.MakeRequest("POST",
m_ServerURI + "/grid", uri,
ServerUtils.BuildQueryString(sendData)); ServerUtils.BuildQueryString(sendData));
//m_log.DebugFormat("[GRID CONNECTOR]: reply was {0}", reply); //m_log.DebugFormat("[GRID CONNECTOR]: reply was {0}", reply);
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message); m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
return rinfos; return rinfos;
} }
@ -615,15 +622,16 @@ namespace OpenSim.Services.Connectors
sendData["METHOD"] = "get_region_flags"; sendData["METHOD"] = "get_region_flags";
string reply = string.Empty; string reply = string.Empty;
string uri = m_ServerURI + "/grid";
try try
{ {
reply = SynchronousRestFormsRequester.MakeRequest("POST", reply = SynchronousRestFormsRequester.MakeRequest("POST",
m_ServerURI + "/grid", uri,
ServerUtils.BuildQueryString(sendData)); ServerUtils.BuildQueryString(sendData));
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message); m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
return -1; return -1;
} }

View File

@ -156,11 +156,12 @@ namespace OpenSim.Services.Connectors
sendData["LookAt"] = lookAt.ToString(); sendData["LookAt"] = lookAt.ToString();
string reqString = ServerUtils.BuildQueryString(sendData); string reqString = ServerUtils.BuildQueryString(sendData);
string uri = m_ServerURI + "/griduser";
// m_log.DebugFormat("[GRID USER CONNECTOR]: queryString = {0}", reqString); // m_log.DebugFormat("[GRID USER CONNECTOR]: queryString = {0}", reqString);
try try
{ {
string reply = SynchronousRestFormsRequester.MakeRequest("POST", string reply = SynchronousRestFormsRequester.MakeRequest("POST",
m_ServerURI + "/griduser", uri,
reqString); reqString);
if (reply != string.Empty) if (reply != string.Empty)
{ {
@ -182,7 +183,7 @@ namespace OpenSim.Services.Connectors
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[GRID USER CONNECTOR]: Exception when contacting grid user server: {0}", e.Message); m_log.DebugFormat("[GRID USER CONNECTOR]: Exception when contacting grid user server at {0}: {1}", uri, e.Message);
} }
return false; return false;
@ -191,11 +192,12 @@ namespace OpenSim.Services.Connectors
protected GridUserInfo Get(Dictionary<string, object> sendData) protected GridUserInfo Get(Dictionary<string, object> sendData)
{ {
string reqString = ServerUtils.BuildQueryString(sendData); string reqString = ServerUtils.BuildQueryString(sendData);
string uri = m_ServerURI + "/griduser";
// m_log.DebugFormat("[GRID USER CONNECTOR]: queryString = {0}", reqString); // m_log.DebugFormat("[GRID USER CONNECTOR]: queryString = {0}", reqString);
try try
{ {
string reply = SynchronousRestFormsRequester.MakeRequest("POST", string reply = SynchronousRestFormsRequester.MakeRequest("POST",
m_ServerURI + "/griduser", uri,
reqString); reqString);
if (reply != string.Empty) if (reply != string.Empty)
{ {
@ -216,7 +218,7 @@ namespace OpenSim.Services.Connectors
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[GRID USER CONNECTOR]: Exception when contacting grid user server: {0}", e.Message); m_log.DebugFormat("[GRID USER CONNECTOR]: Exception when contacting grid user server at {0}: {1}", uri, e.Message);
} }
return null; return null;
@ -235,11 +237,12 @@ namespace OpenSim.Services.Connectors
string reply = string.Empty; string reply = string.Empty;
string reqString = ServerUtils.BuildQueryString(sendData); string reqString = ServerUtils.BuildQueryString(sendData);
string uri = m_ServerURI + "/griduser";
//m_log.DebugFormat("[PRESENCE CONNECTOR]: queryString = {0}", reqString); //m_log.DebugFormat("[PRESENCE CONNECTOR]: queryString = {0}", reqString);
try try
{ {
reply = SynchronousRestFormsRequester.MakeRequest("POST", reply = SynchronousRestFormsRequester.MakeRequest("POST",
m_ServerURI + "/griduser", uri,
reqString); reqString);
if (reply == null || (reply != null && reply == string.Empty)) if (reply == null || (reply != null && reply == string.Empty))
{ {
@ -249,7 +252,7 @@ namespace OpenSim.Services.Connectors
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[GRID USER CONNECTOR]: Exception when contacting grid user server: {0}", e.Message); m_log.DebugFormat("[GRID USER CONNECTOR]: Exception when contacting grid user server at {0}: {1}", uri, e.Message);
} }
List<GridUserInfo> rinfos = new List<GridUserInfo>(); List<GridUserInfo> rinfos = new List<GridUserInfo>();

View File

@ -79,11 +79,12 @@ namespace OpenSim.Services.Connectors.Hypergrid
sendData["SESSIONID"] = m_SessionID.ToString(); sendData["SESSIONID"] = m_SessionID.ToString();
string reqString = ServerUtils.BuildQueryString(sendData); string reqString = ServerUtils.BuildQueryString(sendData);
string uri = m_ServerURI + "/hgfriends";
try try
{ {
string reply = SynchronousRestFormsRequester.MakeRequest("POST", string reply = SynchronousRestFormsRequester.MakeRequest("POST",
m_ServerURI + "/hgfriends", uri,
reqString); reqString);
if (reply != string.Empty) if (reply != string.Empty)
{ {
@ -103,7 +104,7 @@ namespace OpenSim.Services.Connectors.Hypergrid
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[HGFRIENDS CONNECTOR]: Exception when contacting friends server: {0}", e.Message); m_log.DebugFormat("[HGFRIENDS CONNECTOR]: Exception when contacting friends server at {0}: {1}", uri, e.Message);
} }
return 0; return 0;
@ -123,15 +124,16 @@ namespace OpenSim.Services.Connectors.Hypergrid
sendData["SESSIONID"] = m_SessionID.ToString(); sendData["SESSIONID"] = m_SessionID.ToString();
string reply = string.Empty; string reply = string.Empty;
string uri = m_ServerURI + "/hgfriends";
try try
{ {
reply = SynchronousRestFormsRequester.MakeRequest("POST", reply = SynchronousRestFormsRequester.MakeRequest("POST",
m_ServerURI + "/hgfriends", uri,
ServerUtils.BuildQueryString(sendData)); ServerUtils.BuildQueryString(sendData));
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[HGFRIENDS CONNECTOR]: Exception when contacting friends server: {0}", e.Message); m_log.DebugFormat("[HGFRIENDS CONNECTOR]: Exception when contacting friends server at {0}: {1}", uri, e.Message);
return false; return false;
} }
@ -168,15 +170,16 @@ namespace OpenSim.Services.Connectors.Hypergrid
sendData["SECRET"] = secret; sendData["SECRET"] = secret;
string reply = string.Empty; string reply = string.Empty;
string uri = m_ServerURI + "/hgfriends";
try try
{ {
reply = SynchronousRestFormsRequester.MakeRequest("POST", reply = SynchronousRestFormsRequester.MakeRequest("POST",
m_ServerURI + "/hgfriends", uri,
ServerUtils.BuildQueryString(sendData)); ServerUtils.BuildQueryString(sendData));
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[HGFRIENDS CONNECTOR]: Exception when contacting friends server: {0}", e.Message); m_log.DebugFormat("[HGFRIENDS CONNECTOR]: Exception when contacting friends server at {0}: {1}", uri, e.Message);
return false; return false;
} }

View File

@ -97,11 +97,12 @@ namespace OpenSim.Services.Connectors
sendData["DATA"] = Convert.ToBase64String(jpgData); sendData["DATA"] = Convert.ToBase64String(jpgData);
string reqString = ServerUtils.BuildQueryString(sendData); string reqString = ServerUtils.BuildQueryString(sendData);
string uri = m_ServerURI + "/map";
try try
{ {
string reply = SynchronousRestFormsRequester.MakeRequest("POST", string reply = SynchronousRestFormsRequester.MakeRequest("POST",
m_ServerURI + "/map", uri,
reqString); reqString);
if (reply != string.Empty) if (reply != string.Empty)
{ {
@ -135,7 +136,7 @@ namespace OpenSim.Services.Connectors
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[MAP IMAGE CONNECTOR]: Exception when contacting grid server: {0}", e.Message); m_log.DebugFormat("[MAP IMAGE CONNECTOR]: Exception when contacting map server at {0}: {1}", uri, e.Message);
} }
finally finally
{ {

View File

@ -98,11 +98,12 @@ namespace OpenSim.Services.Connectors
sendData["SecureSessionID"] = secureSessionID.ToString(); sendData["SecureSessionID"] = secureSessionID.ToString();
string reqString = ServerUtils.BuildQueryString(sendData); string reqString = ServerUtils.BuildQueryString(sendData);
string uri = m_ServerURI + "/presence";
// m_log.DebugFormat("[PRESENCE CONNECTOR]: queryString = {0}", reqString); // m_log.DebugFormat("[PRESENCE CONNECTOR]: queryString = {0}", reqString);
try try
{ {
string reply = SynchronousRestFormsRequester.MakeRequest("POST", string reply = SynchronousRestFormsRequester.MakeRequest("POST",
m_ServerURI + "/presence", uri,
reqString); reqString);
if (reply != string.Empty) if (reply != string.Empty)
{ {
@ -124,7 +125,7 @@ namespace OpenSim.Services.Connectors
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server: {0}", e.Message); m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server at {0}: {1}", uri, e.Message);
} }
return false; return false;
@ -142,11 +143,12 @@ namespace OpenSim.Services.Connectors
sendData["SessionID"] = sessionID.ToString(); sendData["SessionID"] = sessionID.ToString();
string reqString = ServerUtils.BuildQueryString(sendData); string reqString = ServerUtils.BuildQueryString(sendData);
string uri = m_ServerURI + "/presence";
// m_log.DebugFormat("[PRESENCE CONNECTOR]: queryString = {0}", reqString); // m_log.DebugFormat("[PRESENCE CONNECTOR]: queryString = {0}", reqString);
try try
{ {
string reply = SynchronousRestFormsRequester.MakeRequest("POST", string reply = SynchronousRestFormsRequester.MakeRequest("POST",
m_ServerURI + "/presence", uri,
reqString); reqString);
if (reply != string.Empty) if (reply != string.Empty)
{ {
@ -168,7 +170,7 @@ namespace OpenSim.Services.Connectors
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server: {0}", e.Message); m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server at {0}: {1}", uri, e.Message);
} }
return false; return false;
@ -185,11 +187,12 @@ namespace OpenSim.Services.Connectors
sendData["RegionID"] = regionID.ToString(); sendData["RegionID"] = regionID.ToString();
string reqString = ServerUtils.BuildQueryString(sendData); string reqString = ServerUtils.BuildQueryString(sendData);
string uri = m_ServerURI + "/presence";
// m_log.DebugFormat("[PRESENCE CONNECTOR]: queryString = {0}", reqString); // m_log.DebugFormat("[PRESENCE CONNECTOR]: queryString = {0}", reqString);
try try
{ {
string reply = SynchronousRestFormsRequester.MakeRequest("POST", string reply = SynchronousRestFormsRequester.MakeRequest("POST",
m_ServerURI + "/presence", uri,
reqString); reqString);
if (reply != string.Empty) if (reply != string.Empty)
{ {
@ -211,7 +214,7 @@ namespace OpenSim.Services.Connectors
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server: {0}", e.Message); m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server at {0}: {1}", uri, e.Message);
} }
return false; return false;
@ -229,11 +232,12 @@ namespace OpenSim.Services.Connectors
sendData["RegionID"] = regionID.ToString(); sendData["RegionID"] = regionID.ToString();
string reqString = ServerUtils.BuildQueryString(sendData); string reqString = ServerUtils.BuildQueryString(sendData);
string uri = m_ServerURI + "/presence";
// m_log.DebugFormat("[PRESENCE CONNECTOR]: queryString = {0}", reqString); // m_log.DebugFormat("[PRESENCE CONNECTOR]: queryString = {0}", reqString);
try try
{ {
string reply = SynchronousRestFormsRequester.MakeRequest("POST", string reply = SynchronousRestFormsRequester.MakeRequest("POST",
m_ServerURI + "/presence", uri,
reqString); reqString);
if (reply != string.Empty) if (reply != string.Empty)
{ {
@ -255,7 +259,7 @@ namespace OpenSim.Services.Connectors
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server: {0}", e.Message); m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server at {0}: {1}", uri, e.Message);
} }
return false; return false;
@ -273,11 +277,12 @@ namespace OpenSim.Services.Connectors
string reply = string.Empty; string reply = string.Empty;
string reqString = ServerUtils.BuildQueryString(sendData); string reqString = ServerUtils.BuildQueryString(sendData);
string uri = m_ServerURI + "/presence";
// m_log.DebugFormat("[PRESENCE CONNECTOR]: queryString = {0}", reqString); // m_log.DebugFormat("[PRESENCE CONNECTOR]: queryString = {0}", reqString);
try try
{ {
reply = SynchronousRestFormsRequester.MakeRequest("POST", reply = SynchronousRestFormsRequester.MakeRequest("POST",
m_ServerURI + "/presence", uri,
reqString); reqString);
if (reply == null || (reply != null && reply == string.Empty)) if (reply == null || (reply != null && reply == string.Empty))
{ {
@ -287,7 +292,7 @@ namespace OpenSim.Services.Connectors
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server: {0}", e.Message); m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server at {0}: {1}", uri, e.Message);
} }
Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply); Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply);
@ -316,11 +321,12 @@ namespace OpenSim.Services.Connectors
string reply = string.Empty; string reply = string.Empty;
string reqString = ServerUtils.BuildQueryString(sendData); string reqString = ServerUtils.BuildQueryString(sendData);
string uri = m_ServerURI + "/presence";
//m_log.DebugFormat("[PRESENCE CONNECTOR]: queryString = {0}", reqString); //m_log.DebugFormat("[PRESENCE CONNECTOR]: queryString = {0}", reqString);
try try
{ {
reply = SynchronousRestFormsRequester.MakeRequest("POST", reply = SynchronousRestFormsRequester.MakeRequest("POST",
m_ServerURI + "/presence", uri,
reqString); reqString);
if (reply == null || (reply != null && reply == string.Empty)) if (reply == null || (reply != null && reply == string.Empty))
{ {
@ -330,7 +336,7 @@ namespace OpenSim.Services.Connectors
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server: {0}", e.Message); m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server at {0}: {1}", uri, e.Message);
} }
List<PresenceInfo> rinfos = new List<PresenceInfo>(); List<PresenceInfo> rinfos = new List<PresenceInfo>();

View File

@ -138,11 +138,12 @@ namespace OpenSim.Services.Connectors
string reply = string.Empty; string reply = string.Empty;
string reqString = ServerUtils.BuildQueryString(sendData); string reqString = ServerUtils.BuildQueryString(sendData);
string uri = m_ServerURI + "/accounts";
// m_log.DebugFormat("[ACCOUNTS CONNECTOR]: queryString = {0}", reqString); // m_log.DebugFormat("[ACCOUNTS CONNECTOR]: queryString = {0}", reqString);
try try
{ {
reply = SynchronousRestFormsRequester.MakeRequest("POST", reply = SynchronousRestFormsRequester.MakeRequest("POST",
m_ServerURI + "/accounts", uri,
reqString); reqString);
if (reply == null || (reply != null && reply == string.Empty)) if (reply == null || (reply != null && reply == string.Empty))
{ {
@ -152,7 +153,7 @@ namespace OpenSim.Services.Connectors
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[ACCOUNT CONNECTOR]: Exception when contacting accounts server: {0}", e.Message); m_log.DebugFormat("[ACCOUNT CONNECTOR]: Exception when contacting user accounts server at {0}: {1}", uri, e.Message);
} }
List<UserAccount> accounts = new List<UserAccount>(); List<UserAccount> accounts = new List<UserAccount>();
@ -206,11 +207,12 @@ namespace OpenSim.Services.Connectors
{ {
string reply = string.Empty; string reply = string.Empty;
string reqString = ServerUtils.BuildQueryString(sendData); string reqString = ServerUtils.BuildQueryString(sendData);
string uri = m_ServerURI + "/accounts";
// m_log.DebugFormat("[ACCOUNTS CONNECTOR]: queryString = {0}", reqString); // m_log.DebugFormat("[ACCOUNTS CONNECTOR]: queryString = {0}", reqString);
try try
{ {
reply = SynchronousRestFormsRequester.MakeRequest("POST", reply = SynchronousRestFormsRequester.MakeRequest("POST",
m_ServerURI + "/accounts", uri,
reqString); reqString);
if (reply == null || (reply != null && reply == string.Empty)) if (reply == null || (reply != null && reply == string.Empty))
{ {
@ -220,7 +222,7 @@ namespace OpenSim.Services.Connectors
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[ACCOUNT CONNECTOR]: Exception when contacting user account server: {0}", e.Message); m_log.DebugFormat("[ACCOUNT CONNECTOR]: Exception when contacting user accounts server at {0}: {1}", uri, e.Message);
} }
Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply); Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply);
@ -241,11 +243,12 @@ namespace OpenSim.Services.Connectors
private bool SendAndGetBoolReply(Dictionary<string, object> sendData) private bool SendAndGetBoolReply(Dictionary<string, object> sendData)
{ {
string reqString = ServerUtils.BuildQueryString(sendData); string reqString = ServerUtils.BuildQueryString(sendData);
string uri = m_ServerURI + "/accounts";
// m_log.DebugFormat("[ACCOUNTS CONNECTOR]: queryString = {0}", reqString); // m_log.DebugFormat("[ACCOUNTS CONNECTOR]: queryString = {0}", reqString);
try try
{ {
string reply = SynchronousRestFormsRequester.MakeRequest("POST", string reply = SynchronousRestFormsRequester.MakeRequest("POST",
m_ServerURI + "/accounts", uri,
reqString); reqString);
if (reply != string.Empty) if (reply != string.Empty)
{ {
@ -267,7 +270,7 @@ namespace OpenSim.Services.Connectors
} }
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[ACCOUNTS CONNECTOR]: Exception when contacting user account server: {0}", e.Message); m_log.DebugFormat("[ACCOUNT CONNECTOR]: Exception when contacting user accounts server at {0}: {1}", uri, e.Message);
} }
return false; return false;

View File

@ -88,9 +88,27 @@ namespace OpenSim.Tests.Common
/// <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="cm">This should be the same if simulating two scenes within a standalone</param> /// <param name="cache"></param>
/// <returns></returns> /// <returns></returns>
public static TestScene SetupScene(string name, UUID id, uint x, uint y, CoreAssetCache cache) 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>
/// <returns></returns>
public static TestScene SetupScene(
string name, UUID id, uint x, uint y, CoreAssetCache cache, IConfigSource configSource)
{ {
Console.WriteLine("Setting up test scene {0}", name); Console.WriteLine("Setting up test scene {0}", name);
@ -106,7 +124,6 @@ namespace OpenSim.Tests.Common
ISimulationDataService simDataService = OpenSim.Server.Base.ServerUtils.LoadPlugin<ISimulationDataService>("OpenSim.Tests.Common.dll", null); ISimulationDataService simDataService = OpenSim.Server.Base.ServerUtils.LoadPlugin<ISimulationDataService>("OpenSim.Tests.Common.dll", null);
IEstateDataService estateDataService = null; IEstateDataService estateDataService = null;
IConfigSource configSource = new IniConfigSource();
TestScene testScene = new TestScene( TestScene testScene = new TestScene(
regInfo, acm, scs, simDataService, estateDataService, null, false, configSource, null); regInfo, acm, scs, simDataService, estateDataService, null, false, configSource, null);

View File

@ -72,15 +72,21 @@ namespace OpenSim.Tests.Common
/// <param name="sop"></param> /// <param name="sop"></param>
/// <param name="itemName"></param> /// <param name="itemName"></param>
/// <param name="id"></param> /// <param name="id"></param>
public static TaskInventoryItem AddSceneObject(Scene scene, SceneObjectPart sop, string itemName, UUID id) /// <param name="userId"></param>
public static TaskInventoryItem AddSceneObject(
Scene scene, SceneObjectPart sop, string itemName, UUID id, UUID userId)
{ {
SceneObjectGroup taskSceneObject = SceneHelpers.CreateSceneObject(1, UUID.Zero); SceneObjectGroup taskSceneObject = SceneHelpers.CreateSceneObject(1, UUID.Zero);
AssetBase taskSceneObjectAsset = AssetHelpers.CreateAsset(0x10, taskSceneObject); AssetBase taskSceneObjectAsset = AssetHelpers.CreateAsset(0x10, taskSceneObject);
scene.AssetService.Store(taskSceneObjectAsset); scene.AssetService.Store(taskSceneObjectAsset);
TaskInventoryItem taskSceneObjectItem TaskInventoryItem taskSceneObjectItem
= new TaskInventoryItem = new TaskInventoryItem
{ Name = itemName, AssetID = taskSceneObjectAsset.FullID, ItemID = id, { Name = itemName,
Type = (int)AssetType.Object, InvType = (int)InventoryType.Object }; AssetID = taskSceneObjectAsset.FullID,
ItemID = id,
OwnerID = userId,
Type = (int)AssetType.Object,
InvType = (int)InventoryType.Object };
sop.Inventory.AddInventoryItem(taskSceneObjectItem, true); sop.Inventory.AddInventoryItem(taskSceneObjectItem, true);
return taskSceneObjectItem; return taskSceneObjectItem;

View File

@ -48,6 +48,12 @@ namespace OpenSim.Tests.Common.Mock
{ {
} }
~TestScene()
{
//Console.WriteLine("TestScene destructor called for {0}", RegionInfo.RegionName);
Console.WriteLine("TestScene destructor called");
}
/// <summary> /// <summary>
/// Temporarily override session authentication for tests (namely teleport). /// Temporarily override session authentication for tests (namely teleport).
/// </summary> /// </summary>

View File

@ -0,0 +1,185 @@
/*
* Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the OpenSimulator Project nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using log4net;
using Nini.Config;
using NUnit.Framework;
using OpenMetaverse;
using OpenSim.Framework;
using OpenSim.Framework.Communications;
using OpenSim.Region.CoreModules.Avatar.Attachments;
using OpenSim.Region.CoreModules.Avatar.AvatarFactory;
using OpenSim.Region.CoreModules.Framework.InventoryAccess;
using OpenSim.Region.CoreModules.Framework.UserManagement;
using OpenSim.Region.CoreModules.ServiceConnectorsOut.Avatar;
using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes;
using OpenSim.Region.OptionalModules.World.NPC;
using OpenSim.Services.AvatarService;
using OpenSim.Tests.Common;
using OpenSim.Tests.Common.Mock;
namespace OpenSim.Tests.Torture
{
/// <summary>
/// NPC torture tests
/// </summary>
/// <remarks>
/// Don't rely on the numbers given by these tests - they will vary a lot depending on what is already cached,
/// how much memory is free, etc. In some cases, later larger tests will apparently take less time than smaller
/// earlier tests.
/// </remarks>
[TestFixture]
public class NPCTortureTests
{
private TestScene scene;
private AvatarFactoryModule afm;
private UserManagementModule umm;
private AttachmentsModule am;
[TestFixtureSetUp]
public void FixtureInit()
{
// Don't allow tests to be bamboozled by asynchronous events. Execute everything on the same thread.
Util.FireAndForgetMethod = FireAndForgetMethod.None;
}
[TestFixtureTearDown]
public void TearDown()
{
// We must set this back afterwards, otherwise later tests will fail since they're expecting multiple
// threads. Possibly, later tests should be rewritten not to worry about such things.
Util.FireAndForgetMethod = Util.DefaultFireAndForgetMethod;
}
[SetUp]
public void Init()
{
IConfigSource config = new IniConfigSource();
config.AddConfig("NPC");
config.Configs["NPC"].Set("Enabled", "true");
config.AddConfig("Modules");
config.Configs["Modules"].Set("InventoryAccessModule", "BasicInventoryAccessModule");
afm = new AvatarFactoryModule();
umm = new UserManagementModule();
am = new AttachmentsModule();
scene = SceneHelpers.SetupScene();
SceneHelpers.SetupSceneModules(scene, config, afm, umm, am, new BasicInventoryAccessModule(), new NPCModule());
}
[Test]
public void TestAddRemove100NPCs()
{
TestHelpers.InMethod();
// log4net.Config.XmlConfigurator.Configure();
TestAddRemoveNPCs(100);
}
[Test]
public void TestAddRemove1000NPCs()
{
TestHelpers.InMethod();
// log4net.Config.XmlConfigurator.Configure();
TestAddRemoveNPCs(1000);
}
[Test]
public void TestAddRemove2000NPCs()
{
TestHelpers.InMethod();
// log4net.Config.XmlConfigurator.Configure();
TestAddRemoveNPCs(2000);
}
private void TestAddRemoveNPCs(int numberOfNpcs)
{
ScenePresence sp = SceneHelpers.AddScenePresence(scene, TestHelpers.ParseTail(0x1));
// ScenePresence originalAvatar = scene.GetScenePresence(originalClient.AgentId);
// 8 is the index of the first baked texture in AvatarAppearance
UUID originalFace8TextureId = TestHelpers.ParseTail(0x10);
Primitive.TextureEntry originalTe = new Primitive.TextureEntry(UUID.Zero);
Primitive.TextureEntryFace originalTef = originalTe.CreateFace(8);
originalTef.TextureID = originalFace8TextureId;
// We also need to add the texture to the asset service, otherwise the AvatarFactoryModule will tell
// ScenePresence.SendInitialData() to reset our entire appearance.
scene.AssetService.Store(AssetHelpers.CreateNotecardAsset(originalFace8TextureId));
afm.SetAppearance(sp, originalTe, null);
INPCModule npcModule = scene.RequestModuleInterface<INPCModule>();
List<UUID> npcs = new List<UUID>();
long startGcMemory = GC.GetTotalMemory(true);
Stopwatch sw = new Stopwatch();
sw.Start();
for (int i = 0; i < numberOfNpcs; i++)
{
npcs.Add(
npcModule.CreateNPC("John", "Smith", new Vector3(128, 128, 30), UUID.Zero, true, scene, sp.Appearance));
}
for (int i = 0; i < numberOfNpcs; i++)
{
Assert.That(npcs[i], Is.Not.Null);
ScenePresence npc = scene.GetScenePresence(npcs[i]);
Assert.That(npc, Is.Not.Null);
}
for (int i = 0; i < numberOfNpcs; i++)
{
Assert.That(npcModule.DeleteNPC(npcs[i], scene), Is.True);
ScenePresence npc = scene.GetScenePresence(npcs[i]);
Assert.That(npc, Is.Null);
}
sw.Stop();
long endGcMemory = GC.GetTotalMemory(true);
Console.WriteLine("Took {0} ms", sw.ElapsedMilliseconds);
Console.WriteLine(
"End {0} MB, Start {1} MB, Diff {2} MB",
endGcMemory / 1024 / 1024,
startGcMemory / 1024 / 1024,
(endGcMemory - startGcMemory) / 1024 / 1024);
}
}
}

View File

@ -49,6 +49,13 @@ namespace OpenSim.Tests.Torture
[TestFixture] [TestFixture]
public class ObjectTortureTests public class ObjectTortureTests
{ {
[TearDown]
public void TearDown()
{
GC.Collect();
GC.WaitForPendingFinalizers();
}
// [Test] // [Test]
// public void Test0000Clean() // public void Test0000Clean()
// { // {
@ -118,7 +125,7 @@ namespace OpenSim.Tests.Torture
TestScene scene = SceneHelpers.SetupScene(); TestScene scene = SceneHelpers.SetupScene();
Process process = Process.GetCurrentProcess(); // Process process = Process.GetCurrentProcess();
// long startProcessMemory = process.PrivateMemorySize64; // long startProcessMemory = process.PrivateMemorySize64;
long startGcMemory = GC.GetTotalMemory(true); long startGcMemory = GC.GetTotalMemory(true);
DateTime start = DateTime.Now; DateTime start = DateTime.Now;
@ -131,7 +138,7 @@ namespace OpenSim.Tests.Torture
TimeSpan elapsed = DateTime.Now - start; TimeSpan elapsed = DateTime.Now - start;
// long processMemoryAlloc = process.PrivateMemorySize64 - startProcessMemory; // long processMemoryAlloc = process.PrivateMemorySize64 - startProcessMemory;
long processGcAlloc = GC.GetTotalMemory(false) - startGcMemory; long endGcMemory = GC.GetTotalMemory(false);
for (int i = 1; i <= objectsToAdd; i++) for (int i = 1; i <= objectsToAdd; i++)
{ {
@ -141,9 +148,29 @@ namespace OpenSim.Tests.Torture
string.Format("Object {0} could not be retrieved", i)); string.Format("Object {0} could not be retrieved", i));
} }
// When a scene object is added to a scene, it is placed in the update list for sending to viewers
// (though in this case we have none). When it is deleted, it is not removed from the update which is
// fine since it will later be ignored.
//
// However, that means that we need to manually run an update here to clear out that list so that deleted
// objects will be clean up by the garbage collector before the next stress test is run.
scene.Update();
// Currently, we need to do this in order to garbage collect the scene objects ready for the next test run.
// However, what we really need to do is find out why the entire scene is not garbage collected in
// teardown.
scene.DeleteAllSceneObjects();
Console.WriteLine( Console.WriteLine(
"Took {0}ms, {1}MB to create {2} objects each containing {3} prim(s)", "Took {0}ms, {1}MB ({2} - {3}) to create {4} objects each containing {5} prim(s)",
Math.Round(elapsed.TotalMilliseconds), processGcAlloc / 1024 / 1024, objectsToAdd, primsInEachObject); Math.Round(elapsed.TotalMilliseconds),
(endGcMemory - startGcMemory) / 1024 / 1024,
endGcMemory / 1024 / 1024,
startGcMemory / 1024 / 1024,
objectsToAdd,
primsInEachObject);
scene = null;
} }
} }
} }

View File

@ -0,0 +1,159 @@
/*
* Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the OpenSimulator Project nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Threading;
using log4net;
using Nini.Config;
using NUnit.Framework;
using OpenMetaverse;
using OpenSim.Framework;
using OpenSim.Region.CoreModules.Scripting.WorldComm;
using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes;
using OpenSim.Region.ScriptEngine.XEngine;
using OpenSim.Tests.Common;
using OpenSim.Tests.Common.Mock;
namespace OpenSim.Tests.Torture
{
/// <summary>
/// Script torture tests
/// </summary>
/// <remarks>
/// Don't rely on the numbers given by these tests - they will vary a lot depending on what is already cached,
/// how much memory is free, etc. In some cases, later larger tests will apparently take less time than smaller
/// earlier tests.
/// </remarks>
[TestFixture]
public class ScriptTortureTests
{
private TestScene m_scene;
private XEngine m_xEngine;
private AutoResetEvent m_chatEvent = new AutoResetEvent(false);
private int m_expectedChatMessages;
private List<OSChatMessage> m_osChatMessagesReceived = new List<OSChatMessage>();
[SetUp]
public void Init()
{
//AppDomain.CurrentDomain.SetData("APPBASE", Environment.CurrentDirectory + "/bin");
// Console.WriteLine(AppDomain.CurrentDomain.BaseDirectory);
m_xEngine = new XEngine();
// Necessary to stop serialization complaining
WorldCommModule wcModule = new WorldCommModule();
IniConfigSource configSource = new IniConfigSource();
IConfig startupConfig = configSource.AddConfig("Startup");
startupConfig.Set("DefaultScriptEngine", "XEngine");
IConfig xEngineConfig = configSource.AddConfig("XEngine");
xEngineConfig.Set("Enabled", "true");
// These tests will not run with AppDomainLoading = true, at least on mono. For unknown reasons, the call
// to AssemblyResolver.OnAssemblyResolve fails.
xEngineConfig.Set("AppDomainLoading", "false");
m_scene = SceneHelpers.SetupScene("My Test", UUID.Random(), 1000, 1000, null, configSource);
SceneHelpers.SetupSceneModules(m_scene, configSource, m_xEngine, wcModule);
m_scene.EventManager.OnChatFromWorld += OnChatFromWorld;
m_scene.StartScripts();
}
[Test]
public void TestCompileAndStart100Scripts()
{
TestHelpers.InMethod();
log4net.Config.XmlConfigurator.Configure();
TestCompileAndStartScripts(100);
}
private void TestCompileAndStartScripts(int scriptsToCreate)
{
UUID userId = TestHelpers.ParseTail(0x1);
m_expectedChatMessages = scriptsToCreate;
int startingObjectIdTail = 0x100;
GC.Collect();
for (int idTail = startingObjectIdTail;idTail < startingObjectIdTail + scriptsToCreate; idTail++)
{
AddObjectAndScript(idTail, userId);
}
m_chatEvent.WaitOne(40000 + scriptsToCreate * 1000);
Assert.That(m_osChatMessagesReceived.Count, Is.EqualTo(m_expectedChatMessages));
foreach (OSChatMessage msg in m_osChatMessagesReceived)
Assert.That(
msg.Message,
Is.EqualTo("Script running"),
string.Format(
"Message from {0} was {1} rather than {2}", msg.SenderUUID, msg.Message, "Script running"));
}
private void AddObjectAndScript(int objectIdTail, UUID userId)
{
// UUID itemId = TestHelpers.ParseTail(0x3);
string itemName = string.Format("AddObjectAndScript() Item for object {0}", objectIdTail);
SceneObjectGroup so = SceneHelpers.CreateSceneObject(1, userId, "AddObjectAndScriptPart_", objectIdTail);
m_scene.AddNewSceneObject(so, true);
InventoryItemBase itemTemplate = new InventoryItemBase();
// itemTemplate.ID = itemId;
itemTemplate.Name = itemName;
itemTemplate.Folder = so.UUID;
itemTemplate.InvType = (int)InventoryType.LSL;
m_scene.RezNewScript(userId, itemTemplate);
}
private void OnChatFromWorld(object sender, OSChatMessage oscm)
{
// Console.WriteLine("Got chat [{0}]", oscm.Message);
lock (m_osChatMessagesReceived)
{
m_osChatMessagesReceived.Add(oscm);
if (m_osChatMessagesReceived.Count == m_expectedChatMessages)
m_chatEvent.Set();
}
}
}
}

View File

@ -484,7 +484,6 @@
;; such as the Meta7 viewer. ;; such as the Meta7 viewer.
;; It has no ill effect on viewers which do not support server-side ;; It has no ill effect on viewers which do not support server-side
;; windlight settings. ;; windlight settings.
;; Currently we only have support for MySQL databases.
; enable_windlight = false ; enable_windlight = false
@ -573,10 +572,15 @@
; DeleteScriptsOnStartup = true ; DeleteScriptsOnStartup = true
;; Set this to true (the default) to load each script into a separate ;; Set this to true (the default) to load each script into a separate
;; AppDomain. Setting this to false will load all script assemblies into the ;; AppDomain.
;; current AppDomain, which will reduce the per-script overhead at the ;;
;; expense of reduced security and the inability to garbage collect the ;; Setting this to false will load all script assemblies into the
;; script assemblies ;; current AppDomain, which will significantly improve script loading times.
;; It will also reduce initial per-script memory overhead.
;;
;; However, setting this to false will also prevent script DLLs from being unloaded from memory if the script is deleted.
;; This may cause an OutOfMemory problem over time when avatars with scripted attachments move in and out of the region.
;; Some Windows users have also reported script loading problems when AppDomainLoading = false
; AppDomainLoading = true ; AppDomainLoading = true
;# {DefaultCompileLanguage} {Enabled:true} {Default script language?} {lsl vb cs} lsl ;# {DefaultCompileLanguage} {Enabled:true} {Default script language?} {lsl vb cs} lsl

View File

@ -637,13 +637,12 @@
[Mesh] [Mesh]
; enable / disable Collada mesh support ; enable / disable Collada mesh support
; default is true ; default is true
; AllowMeshUpload = true AllowMeshUpload = true
; if you use Meshmerizer and want collisions for meshies, setting this to true ; if you use Meshmerizer and want collisions for meshies, setting this to true
; will cause OpenSim to attempt to decode meshies assets, extract the physics ; will cause OpenSim to attempt to decode meshies assets, extract the physics
; mesh, and use it for collisions. This is currently experimental code and enabling ; mesh, and use it for collisions.
; it may cause unexpected physics problems. UseMeshiesPhysicsMesh = true
;UseMeshiesPhysicsMesh = false
[ODEPhysicsSettings] [ODEPhysicsSettings]
@ -656,6 +655,11 @@
world_gravityy = 0 world_gravityy = 0
world_gravityz = -9.8 world_gravityz = -9.8
; Terminal velocity of a falling avatar
; This is the same http://en.wikipedia.org/wiki/Terminal_velocity#Examples
; Max value is 255, min value is 0
avatar_terminal_velocity = 54
; World Step size. (warning these are dangerous. Changing these will probably cause your scene to explode dramatically) ; World Step size. (warning these are dangerous. Changing these will probably cause your scene to explode dramatically)
; reference: fps = (0.089/ODE_STEPSIZE) * 1000; ; reference: fps = (0.089/ODE_STEPSIZE) * 1000;
world_stepsize = 0.0178 world_stepsize = 0.0178
@ -1066,7 +1070,6 @@
[LightShare] [LightShare]
; This enables the transmission of Windlight scenes to supporting clients, such as the Meta7 viewer. ; This enables the transmission of Windlight scenes to supporting clients, such as the Meta7 viewer.
; It has no ill effect on viewers which do not support server-side windlight settings. ; It has no ill effect on viewers which do not support server-side windlight settings.
; Currently we only have support for MySQL databases.
enable_windlight = false enable_windlight = false

View File

@ -14,6 +14,8 @@
;StorageProvider = "OpenSim.Data.MySQL.dll" ;StorageProvider = "OpenSim.Data.MySQL.dll"
;ConnectionString = "Data Source=localhost;Database=opensim;User ID=opensim;Password=***;Old Guids=true;" ;ConnectionString = "Data Source=localhost;Database=opensim;User ID=opensim;Password=***;Old Guids=true;"
; Uncomment this line if you are using MySQL and want to use a different database for estates ; Uncomment this line if you are using MySQL and want to use a different database for estates
; The usual application for this is to allow estates to be spread out across multiple simulators by share the same database.
; Most people won't need to do this so only uncomment if you know what you're doing.
;EstateConnectionString = "Data Source=localhost;Database=opensim;User ID=opensim;Password=***;Old Guids=true;" ;EstateConnectionString = "Data Source=localhost;Database=opensim;User ID=opensim;Password=***;Old Guids=true;"
; MSSQL ; MSSQL

View File

@ -3284,9 +3284,16 @@
<Reference name="OpenMetaverse.StructuredData" path="../../../bin/"/> <Reference name="OpenMetaverse.StructuredData" path="../../../bin/"/>
<Reference name="XMLRPC" path="../../../bin/"/> <Reference name="XMLRPC" path="../../../bin/"/>
<Reference name="OpenSim.Framework"/> <Reference name="OpenSim.Framework"/>
<Reference name="OpenSim.Framework.Communications"/>
<Reference name="OpenSim.Framework.Console"/> <Reference name="OpenSim.Framework.Console"/>
<Reference name="OpenSim.Framework.Servers.HttpServer"/> <Reference name="OpenSim.Framework.Servers.HttpServer"/>
<Reference name="OpenSim.Region.CoreModules"/>
<Reference name="OpenSim.Region.Framework"/> <Reference name="OpenSim.Region.Framework"/>
<Reference name="OpenSim.Region.OptionalModules"/>
<Reference name="OpenSim.Region.ScriptEngine.Shared"/>
<Reference name="OpenSim.Region.ScriptEngine.XEngine"/>
<Reference name="OpenSim.Services.Interfaces"/>
<Reference name="OpenSim.Services.AvatarService"/>
<Reference name="OpenSim.Tests.Common"/> <Reference name="OpenSim.Tests.Common"/>
<Files> <Files>
<Match pattern="*.cs" recurse="false"/> <Match pattern="*.cs" recurse="false"/>