diff --git a/OpenSim/Framework/AgentCircuitData.cs b/OpenSim/Framework/AgentCircuitData.cs
index 330a41e93d..dcd5cc7c01 100644
--- a/OpenSim/Framework/AgentCircuitData.cs
+++ b/OpenSim/Framework/AgentCircuitData.cs
@@ -267,16 +267,17 @@ namespace OpenSim.Framework
///
public void UnpackAgentCircuitData(OSDMap args)
{
- if (args["agent_id"] != null)
- AgentID = args["agent_id"].AsUUID();
- if (args["base_folder"] != null)
- BaseFolder = args["base_folder"].AsUUID();
- if (args["caps_path"] != null)
- CapsPath = args["caps_path"].AsString();
+ OSD tmpOSD;
+ if (args.TryGetValue("agent_id", out tmpOSD))
+ AgentID = tmpOSD.AsUUID();
+ if (args.TryGetValue("base_folder", out tmpOSD))
+ BaseFolder =tmpOSD.AsUUID();
+ if (args.TryGetValue("caps_path", out tmpOSD))
+ CapsPath = tmpOSD.AsString();
- if ((args["children_seeds"] != null) && (args["children_seeds"].Type == OSDType.Array))
+ if ((args.TryGetValue("children_seeds", out tmpOSD) && tmpOSD is OSDArray))
{
- OSDArray childrenSeeds = (OSDArray)(args["children_seeds"]);
+ OSDArray childrenSeeds = (OSDArray)tmpOSD;
ChildrenCapSeeds = new Dictionary();
foreach (OSD o in childrenSeeds)
{
@@ -285,53 +286,59 @@ namespace OpenSim.Framework
ulong handle = 0;
string seed = "";
OSDMap pair = (OSDMap)o;
- if (pair["handle"] != null)
- if (!UInt64.TryParse(pair["handle"].AsString(), out handle))
+ if (pair.TryGetValue("handle", out tmpOSD))
+ {
+ if (!UInt64.TryParse(tmpOSD.AsString(), out handle))
continue;
- if (pair["seed"] != null)
- seed = pair["seed"].AsString();
+ }
if (!ChildrenCapSeeds.ContainsKey(handle))
- ChildrenCapSeeds.Add(handle, seed);
+ {
+ if (pair.TryGetValue("seed", out tmpOSD))
+ {
+ seed = tmpOSD.AsString();
+ ChildrenCapSeeds.Add(handle, seed);
+ }
+ }
}
}
}
else
ChildrenCapSeeds = new Dictionary();
- if (args["child"] != null)
- child = args["child"].AsBoolean();
- if (args["circuit_code"] != null)
- UInt32.TryParse(args["circuit_code"].AsString(), out circuitcode);
- if (args["first_name"] != null)
- firstname = args["first_name"].AsString();
- if (args["last_name"] != null)
- lastname = args["last_name"].AsString();
- if (args["inventory_folder"] != null)
- InventoryFolder = args["inventory_folder"].AsUUID();
- if (args["secure_session_id"] != null)
- SecureSessionID = args["secure_session_id"].AsUUID();
- if (args["session_id"] != null)
- SessionID = args["session_id"].AsUUID();
- if (args["service_session_id"] != null)
- ServiceSessionID = args["service_session_id"].AsString();
- if (args["client_ip"] != null)
- IPAddress = args["client_ip"].AsString();
- if (args["viewer"] != null)
- Viewer = args["viewer"].AsString();
- if (args["channel"] != null)
- Channel = args["channel"].AsString();
- if (args["mac"] != null)
- Mac = args["mac"].AsString();
- if (args["id0"] != null)
- Id0 = args["id0"].AsString();
- if (args["teleport_flags"] != null)
- teleportFlags = args["teleport_flags"].AsUInteger();
+ if (args.TryGetValue("child", out tmpOSD))
+ child = tmpOSD.AsBoolean();
+ if (args.TryGetValue("circuit_code", out tmpOSD))
+ UInt32.TryParse(tmpOSD.AsString(), out circuitcode);
+ if (args.TryGetValue("first_name", out tmpOSD))
+ firstname = tmpOSD.AsString();
+ if (args.TryGetValue("last_name", out tmpOSD))
+ lastname = tmpOSD.AsString();
+ if (args.TryGetValue("inventory_folder", out tmpOSD))
+ InventoryFolder = tmpOSD.AsUUID();
+ if (args.TryGetValue("secure_session_id", out tmpOSD))
+ SecureSessionID = tmpOSD.AsUUID();
+ if (args.TryGetValue("session_id", out tmpOSD))
+ SessionID = tmpOSD.AsUUID();
+ if (args.TryGetValue("service_session_id", out tmpOSD))
+ ServiceSessionID = tmpOSD.AsString();
+ if (args.TryGetValue("client_ip", out tmpOSD))
+ IPAddress = tmpOSD.AsString();
+ if (args.TryGetValue("viewer", out tmpOSD))
+ Viewer = tmpOSD.AsString();
+ if (args.TryGetValue("channel", out tmpOSD))
+ Channel = tmpOSD.AsString();
+ if (args.TryGetValue("mac", out tmpOSD))
+ Mac = tmpOSD.AsString();
+ if (args.TryGetValue("id0", out tmpOSD))
+ Id0 = tmpOSD.AsString();
+ if (args.TryGetValue("teleport_flags", out tmpOSD))
+ teleportFlags = tmpOSD.AsUInteger();
- if (args["start_pos"] != null)
- Vector3.TryParse(args["start_pos"].AsString(), out startpos);
+ if (args.TryGetValue("start_pos", out tmpOSD))
+ Vector3.TryParse(tmpOSD.AsString(), out startpos);
- if(args["far"] != null)
- startfar = (float)args["far"].AsReal();
+ if(args.TryGetValue("far", out tmpOSD))
+ startfar = (float)tmpOSD.AsReal();
//m_log.InfoFormat("[AGENTCIRCUITDATA]: agentid={0}, child={1}, startpos={2}", AgentID, child, startpos);
@@ -342,12 +349,12 @@ namespace OpenSim.Framework
// Eventually this code should be deprecated, use full appearance
// packing in packed_appearance
- if (args["appearance_serial"] != null)
- Appearance.Serial = args["appearance_serial"].AsInteger();
+ if (args.TryGetValue("appearance_serial", out tmpOSD))
+ Appearance.Serial = tmpOSD.AsInteger();
- if (args.ContainsKey("packed_appearance") && (args["packed_appearance"].Type == OSDType.Map))
+ if (args.TryGetValue("packed_appearance", out tmpOSD) && (tmpOSD is OSDMap))
{
- Appearance.Unpack((OSDMap)args["packed_appearance"]);
+ Appearance.Unpack((OSDMap)tmpOSD);
// m_log.InfoFormat("[AGENTCIRCUITDATA] unpacked appearance");
}
else
@@ -362,31 +369,31 @@ namespace OpenSim.Framework
ServiceURLs = new Dictionary();
// Try parse the new way, OSDMap
- if (args.ContainsKey("serviceurls") && args["serviceurls"] != null && (args["serviceurls"]).Type == OSDType.Map)
+ if (args.TryGetValue("serviceurls", out tmpOSD) && (tmpOSD is OSDMap))
{
- OSDMap urls = (OSDMap)(args["serviceurls"]);
+ OSDMap urls = (OSDMap)tmpOSD;
foreach (KeyValuePair kvp in urls)
{
- ServiceURLs[kvp.Key] = kvp.Value.AsString();
+ tmpOSD = kvp.Value;
+ ServiceURLs[kvp.Key] = tmpOSD.AsString();
//System.Console.WriteLine("XXX " + kvp.Key + "=" + ServiceURLs[kvp.Key]);
-
}
}
// else try the old way, OSDArray
// OBSOLETE -- soon to be deleted
- else if (args.ContainsKey("service_urls") && args["service_urls"] != null && (args["service_urls"]).Type == OSDType.Array)
+ else if (args.TryGetValue("service_urls", out tmpOSD) && (tmpOSD is OSDArray))
{
- OSDArray urls = (OSDArray)(args["service_urls"]);
- for (int i = 0; i < urls.Count / 2; i++)
+ OSDArray urls = (OSDArray)tmpOSD;
+ OSD tmpOSDb;
+ for (int i = 0; i < urls.Count - 1; i += 2)
{
- ServiceURLs[urls[i * 2].AsString()] = urls[(i * 2) + 1].AsString();
+ tmpOSD = urls[i];
+ tmpOSDb = urls[i + 1];
+ ServiceURLs[tmpOSD.AsString()] = tmpOSDb.AsString();
//System.Console.WriteLine("XXX " + urls[i * 2].AsString() + "=" + urls[(i * 2) + 1].AsString());
-
}
}
}
}
-
-
}
diff --git a/OpenSim/Framework/AvatarAppearance.cs b/OpenSim/Framework/AvatarAppearance.cs
index 77a7621a29..f1713a6a39 100644
--- a/OpenSim/Framework/AvatarAppearance.cs
+++ b/OpenSim/Framework/AvatarAppearance.cs
@@ -796,25 +796,33 @@ namespace OpenSim.Framework
///
public void Unpack(OSDMap data)
{
- if ((data != null) && (data["serial"] != null))
- m_serial = data["serial"].AsInteger();
- if ((data != null) && (data["height"] != null))
+ SetDefaultWearables();
+ SetDefaultTexture();
+ SetDefaultParams();
+ m_attachments = new Dictionary>();
+
+ if(data == null)
+ {
+ m_log.Warn("[AVATAR APPEARANCE]: data to unpack is null");
+ return;
+ }
+
+ OSD tmpOSD;
+ if (data.TryGetValue("serial", out tmpOSD))
+ m_serial = tmpOSD.AsInteger();
+ if (data.TryGetValue("height", out tmpOSD))
// m_avatarHeight = (float)data["height"].AsReal();
- SetSize(new Vector3(0.45f,0.6f, (float)data["height"].AsReal()));
+ SetSize(new Vector3(0.45f,0.6f, (float)tmpOSD.AsReal()));
try
{
// Wearables
- SetDefaultWearables();
- if ((data != null) && (data["wearables"] != null) && (data["wearables"]).Type == OSDType.Array)
+ if (data.TryGetValue("wearables", out tmpOSD) && (tmpOSD is OSDArray))
{
- OSDArray wears = (OSDArray)(data["wearables"]);
+ OSDArray wears = (OSDArray)tmpOSD;
+ m_wearables = new AvatarWearable[wears.Count];
- int count = wears.Count;
-
- m_wearables = new AvatarWearable[count];
-
- for (int i = 0; i < count; i++)
+ for (int i = 0; i < wears.Count; i++)
m_wearables[i] = new AvatarWearable((OSDArray)wears[i]);
}
else
@@ -823,15 +831,15 @@ namespace OpenSim.Framework
}
// Avatar Textures
- SetDefaultTexture();
- if ((data != null) && (data["textures"] != null) && (data["textures"]).Type == OSDType.Array)
+ if (data.TryGetValue("textures", out tmpOSD) && (tmpOSD is OSDArray))
{
- OSDArray textures = (OSDArray)(data["textures"]);
+ OSDArray textures = (OSDArray)tmpOSD;
for (int i = 0; i < AvatarAppearance.TEXTURE_COUNT && i < textures.Count; i++)
{
UUID textureID = AppearanceManager.DEFAULT_AVATAR_TEXTURE;
- if (textures[i] != null)
- textureID = textures[i].AsUUID();
+ tmpOSD = textures[i];
+ if (tmpOSD != null)
+ textureID = tmpOSD.AsUUID();
m_texture.CreateFace((uint)i).TextureID = new UUID(textureID);
}
}
@@ -840,18 +848,17 @@ namespace OpenSim.Framework
m_log.Warn("[AVATAR APPEARANCE]: failed to unpack textures");
}
- if ((data != null) && (data["bakedcache"] != null) && (data["bakedcache"]).Type == OSDType.Array)
+ if (data.TryGetValue("bakedcache", out tmpOSD) && (tmpOSD is OSDArray))
{
- OSDArray bakedOSDArray = (OSDArray)(data["bakedcache"]);
+ OSDArray bakedOSDArray = (OSDArray)tmpOSD;
m_cacheitems = WearableCacheItem.BakedFromOSD(bakedOSDArray);
}
// Visual Parameters
- SetDefaultParams();
- if ((data != null) && (data["visualparams"] != null))
+ if (data.TryGetValue("visualparams", out tmpOSD))
{
- if ((data["visualparams"].Type == OSDType.Binary) || (data["visualparams"].Type == OSDType.Array))
- m_visualparams = data["visualparams"].AsBinary();
+ if (tmpOSD is OSDBinary || tmpOSD is OSDArray)
+ m_visualparams = tmpOSD.AsBinary();
}
else
{
@@ -859,10 +866,9 @@ namespace OpenSim.Framework
}
// Attachments
- m_attachments = new Dictionary>();
- if ((data != null) && (data["attachments"] != null) && (data["attachments"]).Type == OSDType.Array)
+ if (data.TryGetValue("attachments", out tmpOSD) && tmpOSD is OSDArray)
{
- OSDArray attachs = (OSDArray)(data["attachments"]);
+ OSDArray attachs = (OSDArray)tmpOSD;
for (int i = 0; i < attachs.Count; i++)
{
AvatarAttachment att = new AvatarAttachment((OSDMap)attachs[i]);
diff --git a/OpenSim/Framework/AvatarAttachment.cs b/OpenSim/Framework/AvatarAttachment.cs
index 07dd385f28..d8a0ffc874 100644
--- a/OpenSim/Framework/AvatarAttachment.cs
+++ b/OpenSim/Framework/AvatarAttachment.cs
@@ -68,11 +68,18 @@ namespace OpenSim.Framework
public void Unpack(OSDMap args)
{
- if (args["point"] != null)
- AttachPoint = args["point"].AsInteger();
+ OSD tmpOSD;
+ if (args.TryGetValue("point", out tmpOSD))
+ AttachPoint = tmpOSD.AsInteger();
+ if (args.TryGetValue("item", out tmpOSD))
+ ItemID = tmpOSD.AsUUID();
+ else
+ ItemID = UUID.Zero;
- ItemID = (args["item"] != null) ? args["item"].AsUUID() : UUID.Zero;
- AssetID = (args["asset"] != null) ? args["asset"].AsUUID() : UUID.Zero;
+ if (args.TryGetValue("asset", out tmpOSD))
+ AssetID = tmpOSD.AsUUID();
+ else
+ AssetID = UUID.Zero;
}
}
}
diff --git a/OpenSim/Framework/AvatarWearable.cs b/OpenSim/Framework/AvatarWearable.cs
index fddd0f06ea..abf575948b 100644
--- a/OpenSim/Framework/AvatarWearable.cs
+++ b/OpenSim/Framework/AvatarWearable.cs
@@ -132,10 +132,12 @@ namespace OpenSim.Framework
public void Unpack(OSDArray args)
{
Clear();
-
+ OSD tmpOSDA, tmpOSDB;
foreach (OSDMap weardata in args)
{
- Add(weardata["item"].AsUUID(), weardata["asset"].AsUUID());
+ tmpOSDA = weardata["item"];
+ tmpOSDB = weardata["asset"];
+ Add(tmpOSDA.AsUUID(), tmpOSDB.AsUUID());
}
}
diff --git a/OpenSim/Framework/EntityTransferContext.cs b/OpenSim/Framework/EntityTransferContext.cs
index 860414edca..257c6d177b 100644
--- a/OpenSim/Framework/EntityTransferContext.cs
+++ b/OpenSim/Framework/EntityTransferContext.cs
@@ -58,13 +58,13 @@ namespace OpenSim.Framework
public void Unpack(OSD data)
{
OSDMap map = (OSDMap)data;
-
- if (map.ContainsKey("InboundVersion"))
- InboundVersion = (float)map["InboundVersion"].AsReal();
- if (map.ContainsKey("OutboundVersion"))
- OutboundVersion = (float)map["OutboundVersion"].AsReal();
- if (map.ContainsKey("WearablesCount"))
- WearablesCount = map["WearablesCount"].AsInteger();
+ OSD tmpOSD;
+ if (map.TryGetValue("InboundVersion", out tmpOSD))
+ InboundVersion = (float)tmpOSD.AsReal();
+ if (map.TryGetValue("OutboundVersion", out tmpOSD))
+ OutboundVersion = (float)tmpOSD.AsReal();
+ if (map.TryGetValue("WearablesCount", out tmpOSD))
+ WearablesCount = tmpOSD.AsInteger();
}
}
}
diff --git a/OpenSim/Framework/WearableCacheItem.cs b/OpenSim/Framework/WearableCacheItem.cs
index 427e149f69..84b9ee98e6 100644
--- a/OpenSim/Framework/WearableCacheItem.cs
+++ b/OpenSim/Framework/WearableCacheItem.cs
@@ -161,17 +161,20 @@ namespace OpenSim.Framework
public static WearableCacheItem[] BakedFromOSD(OSD pInput)
{
WearableCacheItem[] pcache = WearableCacheItem.GetDefaultCacheItem();
-
+ OSD tmpOSD;
if (pInput.Type == OSDType.Array)
{
OSDArray itemarray = (OSDArray)pInput;
foreach (OSDMap item in itemarray)
{
- int idx = (int)item["textureindex"].AsUInteger();
+ tmpOSD = item["textureindex"];
+ int idx = tmpOSD.AsInteger();
if (idx < 0 || idx > pcache.Length)
continue;
- pcache[idx].CacheId = item["cacheid"].AsUUID();
- pcache[idx].TextureID = item["textureid"].AsUUID();
+ tmpOSD = item["cacheid"];
+ pcache[idx].CacheId = tmpOSD.AsUUID();
+ tmpOSD = item["textureid"];
+ pcache[idx].TextureID = tmpOSD.AsUUID();
/*
if (item.ContainsKey("assetdata"))
{
diff --git a/OpenSim/Region/OptionalModules/Materials/MaterialsModule.cs b/OpenSim/Region/OptionalModules/Materials/MaterialsModule.cs
index 2aea7f9cb2..4a92120203 100644
--- a/OpenSim/Region/OptionalModules/Materials/MaterialsModule.cs
+++ b/OpenSim/Region/OptionalModules/Materials/MaterialsModule.cs
@@ -267,6 +267,7 @@ namespace OpenSim.Region.OptionalModules.Materials
if (matsArr == null)
return partchanged;
+ OSD tmpOSD;
foreach (OSD elemOsd in matsArr)
{
if (elemOsd != null && elemOsd is OSDMap)
@@ -278,7 +279,8 @@ namespace OpenSim.Region.OptionalModules.Materials
{
lock (materialslock)
{
- UUID id = matMap["ID"].AsUUID();
+ tmpOSD = matMap["ID"];
+ UUID id = tmpOSD.AsUUID();
if(m_Materials.ContainsKey(id))
continue;
@@ -459,12 +461,13 @@ namespace OpenSim.Region.OptionalModules.Materials
OSDMap resp = new OSDMap();
OSDArray respArr = new OSDArray();
+ OSD tmpOSD;
- if (req.ContainsKey("Zipped"))
+ if (req.TryGetValue("Zipped", out tmpOSD))
{
OSD osd = null;
- byte[] inBytes = req["Zipped"].AsBinary();
+ byte[] inBytes = tmpOSD.AsBinary();
try
{
@@ -531,12 +534,13 @@ namespace OpenSim.Region.OptionalModules.Materials
OSDArray respArr = new OSDArray();
+ OSD tmpOSD;
HashSet parts = new HashSet();
- if (req.ContainsKey("Zipped"))
+ if (req.TryGetValue("Zipped", out tmpOSD))
{
OSD osd = null;
- byte[] inBytes = req["Zipped"].AsBinary();
+ byte[] inBytes = tmpOSD.AsBinary();
try
{
@@ -546,145 +550,141 @@ namespace OpenSim.Region.OptionalModules.Materials
{
materialsFromViewer = osd as OSDMap;
- if (materialsFromViewer.ContainsKey("FullMaterialsPerFace"))
+ if (materialsFromViewer.TryGetValue("FullMaterialsPerFace", out tmpOSD) && (tmpOSD is OSDArray))
{
- OSD matsOsd = materialsFromViewer["FullMaterialsPerFace"];
- if (matsOsd is OSDArray)
+ OSDArray matsArr = tmpOSD as OSDArray;
+ try
{
- OSDArray matsArr = matsOsd as OSDArray;
-
- try
+ foreach (OSDMap matsMap in matsArr)
{
- foreach (OSDMap matsMap in matsArr)
+ uint primLocalID = 0;
+ try
{
- uint primLocalID = 0;
- try
- {
- primLocalID = matsMap["ID"].AsUInteger();
- }
- catch (Exception e)
- {
- m_log.Warn("[Materials]: cannot decode \"ID\" from matsMap: " + e.Message);
- continue;
- }
+ tmpOSD = matsMap["ID"];
+ primLocalID = tmpOSD.AsUInteger();
+ }
+ catch (Exception e)
+ {
+ m_log.Warn("[Materials]: cannot decode \"ID\" from matsMap: " + e.Message);
+ continue;
+ }
- SceneObjectPart sop = m_scene.GetSceneObjectPart(primLocalID);
- if (sop == null)
- {
- m_log.WarnFormat("[Materials]: SOP not found for localId: {0}", primLocalID.ToString());
- continue;
- }
+ SceneObjectPart sop = m_scene.GetSceneObjectPart(primLocalID);
+ if (sop == null)
+ {
+ m_log.WarnFormat("[Materials]: SOP not found for localId: {0}", primLocalID.ToString());
+ continue;
+ }
- if (!m_scene.Permissions.CanEditObject(sop.UUID, agentID))
- {
- m_log.WarnFormat("User {0} can't edit object {1} {2}", agentID, sop.Name, sop.UUID);
- continue;
- }
+ if (!m_scene.Permissions.CanEditObject(sop.UUID, agentID))
+ {
+ m_log.WarnFormat("User {0} can't edit object {1} {2}", agentID, sop.Name, sop.UUID);
+ continue;
+ }
- OSDMap mat = null;
- try
- {
- mat = matsMap["Material"] as OSDMap;
- }
- catch (Exception e)
- {
- m_log.Warn("[Materials]: cannot decode \"Material\" from matsMap: " + e.Message);
- continue;
- }
+ OSDMap mat = null;
+ try
+ {
+ mat = matsMap["Material"] as OSDMap;
+ }
+ catch (Exception e)
+ {
+ m_log.Warn("[Materials]: cannot decode \"Material\" from matsMap: " + e.Message);
+ continue;
+ }
- Primitive.TextureEntry te = new Primitive.TextureEntry(sop.Shape.TextureEntry, 0, sop.Shape.TextureEntry.Length);
- if (te == null)
- {
- m_log.WarnFormat("[Materials]: Error in TextureEntry for SOP {0} {1}", sop.Name, sop.UUID);
- continue;
- }
+ Primitive.TextureEntry te = new Primitive.TextureEntry(sop.Shape.TextureEntry, 0, sop.Shape.TextureEntry.Length);
+ if (te == null)
+ {
+ m_log.WarnFormat("[Materials]: Error in TextureEntry for SOP {0} {1}", sop.Name, sop.UUID);
+ continue;
+ }
- int face = -1;
- UUID oldid = UUID.Zero;
- Primitive.TextureEntryFace faceEntry = null;
- if (matsMap.ContainsKey("Face"))
- {
- face = matsMap["Face"].AsInteger();
- faceEntry = te.CreateFace((uint)face);
- }
- else
- faceEntry = te.DefaultTexture;
+ int face = -1;
+ UUID oldid = UUID.Zero;
+ Primitive.TextureEntryFace faceEntry = null;
+ if (matsMap.TryGetValue("Face", out tmpOSD))
+ {
+ face = tmpOSD.AsInteger();
+ faceEntry = te.CreateFace((uint)face);
+ }
+ else
+ faceEntry = te.DefaultTexture;
- if (faceEntry == null)
- continue;
+ if (faceEntry == null)
+ continue;
- UUID id;
- FaceMaterial newFaceMat = null;
- if (mat == null)
- {
- // This happens then the user removes a material from a prim
+ UUID id;
+ FaceMaterial newFaceMat = null;
+ if (mat == null)
+ {
+ // This happens then the user removes a material from a prim
+ id = UUID.Zero;
+ }
+ else
+ {
+ newFaceMat = new FaceMaterial(mat);
+ if(newFaceMat.DiffuseAlphaMode == 1
+ && newFaceMat.NormalMapID == UUID.Zero
+ && newFaceMat.SpecularMapID == UUID.Zero
+ )
id = UUID.Zero;
- }
else
{
- newFaceMat = new FaceMaterial(mat);
- if(newFaceMat.DiffuseAlphaMode == 1
- && newFaceMat.NormalMapID == UUID.Zero
- && newFaceMat.SpecularMapID == UUID.Zero
- )
- id = UUID.Zero;
+ newFaceMat.genID();
+ id = newFaceMat.ID;
+ }
+ }
+
+ oldid = faceEntry.MaterialID;
+
+ if(oldid == id)
+ continue;
+
+ if (faceEntry != null)
+ {
+ faceEntry.MaterialID = id;
+ //m_log.DebugFormat("[Materials]: in \"{0}\" {1}, setting material ID for face {2} to {3}", sop.Name, sop.UUID, face, id);
+ // We can't use sop.UpdateTextureEntry(te) because it filters, so do it manually
+ sop.Shape.TextureEntry = te.GetBytes(9);
+ }
+
+ if(oldid != UUID.Zero)
+ RemoveMaterial(oldid);
+
+ lock(materialslock)
+ {
+ if(id != UUID.Zero)
+ {
+ if (m_Materials.ContainsKey(id))
+ m_MaterialsRefCount[id]++;
else
{
- newFaceMat.genID();
- id = newFaceMat.ID;
+ m_Materials[id] = newFaceMat;
+ m_MaterialsRefCount[id] = 1;
+ m_changed[newFaceMat] = Util.GetTimeStamp();
}
}
-
- oldid = faceEntry.MaterialID;
-
- if(oldid == id)
- continue;
-
- if (faceEntry != null)
- {
- faceEntry.MaterialID = id;
- //m_log.DebugFormat("[Materials]: in \"{0}\" {1}, setting material ID for face {2} to {3}", sop.Name, sop.UUID, face, id);
- // We can't use sop.UpdateTextureEntry(te) because it filters, so do it manually
- sop.Shape.TextureEntry = te.GetBytes(9);
- }
-
- if(oldid != UUID.Zero)
- RemoveMaterial(oldid);
-
- lock(materialslock)
- {
- if(id != UUID.Zero)
- {
- if (m_Materials.ContainsKey(id))
- m_MaterialsRefCount[id]++;
- else
- {
- m_Materials[id] = newFaceMat;
- m_MaterialsRefCount[id] = 1;
- m_changed[newFaceMat] = Util.GetTimeStamp();
- }
- }
- }
-
- if(!parts.Contains(sop))
- parts.Add(sop);
}
- foreach(SceneObjectPart sop in parts)
- {
- if (sop.ParentGroup != null && !sop.ParentGroup.IsDeleted)
- {
- sop.TriggerScriptChangedEvent(Changed.TEXTURE);
- sop.ScheduleFullUpdate();
- sop.ParentGroup.HasGroupChanged = true;
- }
- }
+ if(!parts.Contains(sop))
+ parts.Add(sop);
}
- catch (Exception e)
+
+ foreach(SceneObjectPart sop in parts)
{
- m_log.Warn("[Materials]: exception processing received material ", e);
+ if (sop.ParentGroup != null && !sop.ParentGroup.IsDeleted)
+ {
+ sop.TriggerScriptChangedEvent(Changed.TEXTURE);
+ sop.ScheduleFullUpdate();
+ sop.ParentGroup.HasGroupChanged = true;
+ }
}
}
+ catch (Exception e)
+ {
+ m_log.Warn("[Materials]: exception processing received material ", e);
+ }
}
}
}
diff --git a/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs b/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs
index 1c1930aaf7..788bd3d057 100644
--- a/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs
+++ b/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs
@@ -115,15 +115,10 @@ namespace OpenSim.Server.Handlers.Simulation
return responsedata;
}
-
}
protected virtual void DoQueryAccess(Hashtable request, Hashtable responsedata, UUID agentID, UUID regionID)
{
- Culture.SetCurrentCulture();
-
- EntityTransferContext ctx = new EntityTransferContext();
-
if (m_SimulationService == null)
{
m_log.Debug("[AGENT HANDLER]: Agent QUERY called. Harmless but useless.");
@@ -134,33 +129,37 @@ namespace OpenSim.Server.Handlers.Simulation
return;
}
+ Culture.SetCurrentCulture();
+
// m_log.DebugFormat("[AGENT HANDLER]: Received QUERYACCESS with {0}", (string)request["body"]);
OSDMap args = Utils.GetOSDMap((string)request["body"]);
bool viaTeleport = true;
- if (args.ContainsKey("viaTeleport"))
- viaTeleport = args["viaTeleport"].AsBoolean();
+ OSD tmpOSD;
+ if (args.TryGetValue("viaTeleport",out tmpOSD))
+ viaTeleport = tmpOSD.AsBoolean();
Vector3 position = Vector3.Zero;
- if (args.ContainsKey("position"))
- position = Vector3.Parse(args["position"].AsString());
+ if (args.TryGetValue("position", out tmpOSD))
+ position = Vector3.Parse(tmpOSD.AsString());
string agentHomeURI = null;
- if (args.ContainsKey("agent_home_uri"))
- agentHomeURI = args["agent_home_uri"].AsString();
+ if (args.TryGetValue("agent_home_uri", out tmpOSD))
+ agentHomeURI = tmpOSD.AsString();
// Decode the legacy (string) version and extract the number
float theirVersion = 0f;
- if (args.ContainsKey("my_version"))
+ if (args.TryGetValue("my_version", out tmpOSD))
{
- string theirVersionStr = args["my_version"].AsString();
+ string theirVersionStr = tmpOSD.AsString();
string[] parts = theirVersionStr.Split(new char[] {'/'});
if (parts.Length > 1)
theirVersion = float.Parse(parts[1], Culture.FormatProvider);
}
- if (args.ContainsKey("context"))
- ctx.Unpack((OSDMap)args["context"]);
+ EntityTransferContext ctx = new EntityTransferContext();
+ if (args.TryGetValue("context", out tmpOSD) && tmpOSD is OSDMap)
+ ctx.Unpack((OSDMap)tmpOSD);
// Decode the new versioning data
float minVersionRequired = 0f;
@@ -168,15 +167,15 @@ namespace OpenSim.Server.Handlers.Simulation
float minVersionProvided = 0f;
float maxVersionProvided = 0f;
- if (args.ContainsKey("simulation_service_supported_min"))
- minVersionProvided = (float)args["simulation_service_supported_min"].AsReal();
- if (args.ContainsKey("simulation_service_supported_max"))
- maxVersionProvided = (float)args["simulation_service_supported_max"].AsReal();
+ if (args.TryGetValue("simulation_service_supported_min", out tmpOSD))
+ minVersionProvided = (float)tmpOSD.AsReal();
+ if (args.TryGetValue("simulation_service_supported_max", out tmpOSD))
+ maxVersionProvided = (float)tmpOSD.AsReal();
- if (args.ContainsKey("simulation_service_accepted_min"))
- minVersionRequired = (float)args["simulation_service_accepted_min"].AsReal();
- if (args.ContainsKey("simulation_service_accepted_max"))
- maxVersionRequired = (float)args["simulation_service_accepted_max"].AsReal();
+ if (args.TryGetValue("simulation_service_accepted_min", out tmpOSD))
+ minVersionRequired = (float)tmpOSD.AsReal();
+ if (args.TryGetValue("simulation_service_accepted_max", out tmpOSD))
+ maxVersionRequired = (float)tmpOSD.AsReal();
responsedata["int_response_code"] = HttpStatusCode.OK;
OSDMap resp = new OSDMap(3);
@@ -239,9 +238,9 @@ namespace OpenSim.Server.Handlers.Simulation
List features = new List();
- if (args.ContainsKey("features"))
+ if (args.TryGetValue("features", out tmpOSD) && tmpOSD is OSDArray)
{
- OSDArray array = (OSDArray)args["features"];
+ OSDArray array = (OSDArray)tmpOSD;
foreach (OSD o in array)
features.Add(new UUID(o.AsString()));
@@ -414,8 +413,6 @@ namespace OpenSim.Server.Handlers.Simulation
protected void DoAgentPost(Hashtable request, Hashtable responsedata, UUID id)
{
- EntityTransferContext ctx = new EntityTransferContext();
-
OSDMap args = Utils.GetOSDMap((string)request["body"]);
if (args == null)
{
@@ -424,8 +421,10 @@ namespace OpenSim.Server.Handlers.Simulation
return;
}
- if (args.ContainsKey("context"))
- ctx.Unpack((OSDMap)args["context"]);
+ OSD tmpOSD;
+ EntityTransferContext ctx = new EntityTransferContext();
+ if (args.TryGetValue("context", out tmpOSD) && tmpOSD is OSDMap)
+ ctx.Unpack((OSDMap)tmpOSD);
AgentDestinationData data = CreateAgentDestinationData();
UnpackData(args, data, request);
@@ -453,16 +452,19 @@ namespace OpenSim.Server.Handlers.Simulation
GridRegion source = null;
- if (args.ContainsKey("source_uuid"))
+ if (args.TryGetValue("source_uuid", out tmpOSD))
{
source = new GridRegion();
- source.RegionLocX = Int32.Parse(args["source_x"].AsString());
- source.RegionLocY = Int32.Parse(args["source_y"].AsString());
- source.RegionName = args["source_name"].AsString();
- source.RegionID = UUID.Parse(args["source_uuid"].AsString());
+ source.RegionID = UUID.Parse(tmpOSD.AsString());
+ tmpOSD = args["source_x"];
+ source.RegionLocX = Int32.Parse(tmpOSD.AsString());
+ tmpOSD = args["source_y"];
+ source.RegionLocY = Int32.Parse(tmpOSD.AsString());
+ tmpOSD = args["source_name"];
+ source.RegionName = tmpOSD.AsString();
- if (args.ContainsKey("source_server_uri"))
- source.RawServerURI = args["source_server_uri"].AsString();
+ if (args.TryGetValue("source_server_uri", out tmpOSD))
+ source.RawServerURI = tmpOSD.AsString();
else
source.RawServerURI = null;
}
@@ -493,21 +495,26 @@ namespace OpenSim.Server.Handlers.Simulation
protected virtual void UnpackData(OSDMap args, AgentDestinationData data, Hashtable request)
{
+ OSD tmpOSD;
// retrieve the input arguments
- if (args.ContainsKey("destination_x") && args["destination_x"] != null)
- Int32.TryParse(args["destination_x"].AsString(), out data.x);
+ if (args.TryGetValue("destination_x", out tmpOSD) && tmpOSD != null)
+ Int32.TryParse(tmpOSD.AsString(), out data.x);
else
m_log.WarnFormat(" -- request didn't have destination_x");
- if (args.ContainsKey("destination_y") && args["destination_y"] != null)
- Int32.TryParse(args["destination_y"].AsString(), out data.y);
+
+ if (args.TryGetValue("destination_y", out tmpOSD) && tmpOSD != null)
+ Int32.TryParse(tmpOSD.AsString(), out data.y);
else
m_log.WarnFormat(" -- request didn't have destination_y");
- if (args.ContainsKey("destination_uuid") && args["destination_uuid"] != null)
- UUID.TryParse(args["destination_uuid"].AsString(), out data.uuid);
- if (args.ContainsKey("destination_name") && args["destination_name"] != null)
- data.name = args["destination_name"].ToString();
- if (args.ContainsKey("teleport_flags") && args["teleport_flags"] != null)
- data.flags = args["teleport_flags"].AsUInteger();
+
+ if (args.TryGetValue("destination_uuid", out tmpOSD) && tmpOSD != null)
+ UUID.TryParse(tmpOSD.AsString(), out data.uuid);
+
+ if (args.TryGetValue("destination_name", out tmpOSD) && tmpOSD != null)
+ data.name = tmpOSD.ToString();
+
+ if (args.TryGetValue("teleport_flags", out tmpOSD) && tmpOSD != null)
+ data.flags = tmpOSD.AsUInteger();
}
protected virtual GridRegion ExtractGatekeeper(AgentDestinationData data)
@@ -674,7 +681,6 @@ namespace OpenSim.Server.Handlers.Simulation
protected void DoAgentPut(Hashtable request, Hashtable responsedata)
{
// TODO: Encode the ENtityTransferContext
- EntityTransferContext ctx = new EntityTransferContext();
OSDMap args = Utils.GetOSDMap((string)request["body"]);
if (args == null)
@@ -685,19 +691,21 @@ namespace OpenSim.Server.Handlers.Simulation
}
// retrieve the input arguments
+ OSD tmpOSD;
+ EntityTransferContext ctx = new EntityTransferContext();
int x = 0, y = 0;
UUID uuid = UUID.Zero;
string regionname = string.Empty;
- if (args.ContainsKey("destination_x") && args["destination_x"] != null)
- Int32.TryParse(args["destination_x"].AsString(), out x);
- if (args.ContainsKey("destination_y") && args["destination_y"] != null)
- Int32.TryParse(args["destination_y"].AsString(), out y);
- if (args.ContainsKey("destination_uuid") && args["destination_uuid"] != null)
- UUID.TryParse(args["destination_uuid"].AsString(), out uuid);
- if (args.ContainsKey("destination_name") && args["destination_name"] != null)
- regionname = args["destination_name"].ToString();
- if (args.ContainsKey("context"))
- ctx.Unpack((OSDMap)args["context"]);
+ if (args.TryGetValue("destination_x", out tmpOSD) && tmpOSD != null)
+ Int32.TryParse(tmpOSD.AsString(), out x);
+ if (args.TryGetValue("destination_y", out tmpOSD) && tmpOSD != null)
+ Int32.TryParse(tmpOSD.AsString(), out y);
+ if (args.TryGetValue("destination_uuid", out tmpOSD) && tmpOSD != null)
+ UUID.TryParse(tmpOSD.AsString(), out uuid);
+ if (args.TryGetValue("destination_name", out tmpOSD) && tmpOSD != null)
+ regionname = tmpOSD.ToString();
+ if (args.TryGetValue("context", out tmpOSD) && tmpOSD is OSDMap)
+ ctx.Unpack((OSDMap)tmpOSD);
GridRegion destination = new GridRegion();
destination.RegionID = uuid;
diff --git a/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs b/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs
index e15ac8c47b..b7dbb79abd 100644
--- a/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs
@@ -112,7 +112,7 @@ namespace OpenSim.Services.Connectors.Simulation
m_log.DebugFormat("[REMOTE SIMULATION CONNECTOR]: Creating agent at {0}", destination.ServerURI);
string uri = destination.ServerURI + AgentPath() + aCircuit.AgentID + "/";
-
+ OSD tmpOSD;
try
{
OSDMap args = aCircuit.PackAgentCircuitData(ctx);
@@ -120,27 +120,37 @@ namespace OpenSim.Services.Connectors.Simulation
PackData(args, source, aCircuit, destination, flags);
OSDMap result = WebUtil.PostToServiceCompressed(uri, args, 30000);
- bool success = result["success"].AsBoolean();
- if (success && result.ContainsKey("_Result"))
+ tmpOSD = result["success"];
+ bool success = tmpOSD.AsBoolean();
+ if (success && result.TryGetValue("_Result", out tmpOSD) && tmpOSD is OSDMap)
{
- OSDMap data = (OSDMap)result["_Result"];
+ OSDMap data = (OSDMap)tmpOSD;
- reason = data["reason"].AsString();
- success = data["success"].AsBoolean();
+ tmpOSD = data["reason"];
+ reason = tmpOSD.AsString();
+
+ tmpOSD = data["success"];
+ success = tmpOSD.AsBoolean();
return success;
}
// Try the old version, uncompressed
result = WebUtil.PostToService(uri, args, 30000, false);
- if (result["Success"].AsBoolean())
+ tmpOSD = result["success"];
+ success = tmpOSD.AsBoolean();
+ if (success)
{
- if (result.ContainsKey("_Result"))
+ if (result.TryGetValue("_Result", out tmpOSD) && tmpOSD is OSDMap)
{
- OSDMap data = (OSDMap)result["_Result"];
+ OSDMap data = (OSDMap)tmpOSD;
+
+ tmpOSD = data["reason"];
+ reason = tmpOSD.AsString();
+
+ tmpOSD = data["success"];
+ success = tmpOSD.AsBoolean();
- reason = data["reason"].AsString();
- success = data["success"].AsBoolean();
m_log.WarnFormat(
"[REMOTE SIMULATION CONNECTOR]: Remote simulator {0} did not accept compressed transfer, suggest updating it.", destination.RegionName);
return success;
@@ -312,34 +322,47 @@ namespace OpenSim.Services.Connectors.Simulation
if (agentHomeURI != null)
request.Add("agent_home_uri", OSD.FromString(agentHomeURI));
+ OSD tmpOSD;
try
{
OSDMap result = WebUtil.ServiceOSDRequest(uri, request, "QUERYACCESS", 30000, false, false, true);
- bool success = result["success"].AsBoolean();
- if (result.ContainsKey("_Result"))
+
+ tmpOSD = result["success"];
+ bool success = tmpOSD.AsBoolean();
+
+ bool has_Result = false;
+ if (result.TryGetValue("_Result", out tmpOSD))
{
- OSDMap data = (OSDMap)result["_Result"];
+ has_Result = true;
+ OSDMap data = (OSDMap)tmpOSD;
// FIXME: If there is a _Result map then it's the success key here that indicates the true success
// or failure, not the sibling result node.
- success = data["success"].AsBoolean();
+ //nte4.8 crap
+ tmpOSD = data["success"];
+ success = tmpOSD.AsBoolean();
- reason = data["reason"].AsString();
+ tmpOSD = data["reason"];
+ reason = tmpOSD.AsString();
// We will need to plumb this and start sing the outbound version as well
// TODO: lay the pipe for version plumbing
- if (data.ContainsKey("negotiated_inbound_version") && data["negotiated_inbound_version"] != null)
+ if (data.TryGetValue("negotiated_inbound_version", out tmpOSD) && tmpOSD != null)
{
- ctx.InboundVersion = (float)data["negotiated_inbound_version"].AsReal();
- ctx.OutboundVersion = (float)data["negotiated_outbound_version"].AsReal();
+ ctx.InboundVersion = (float)tmpOSD.AsReal();
+ tmpOSD = data["negotiated_outbound_version"];
+ ctx.OutboundVersion = (float)tmpOSD.AsReal();
}
- else if (data["version"] != null && data["version"].AsString() != string.Empty)
+ else if (data.TryGetValue("version", out tmpOSD) && tmpOSD != null)
{
- string versionString = data["version"].AsString();
- String[] parts = versionString.Split(new char[] {'/'});
- if (parts.Length > 1)
+ string versionString = tmpOSD.AsString();
+ if(versionString != string.Empty)
{
- ctx.InboundVersion = float.Parse(parts[1], Culture.FormatProvider);
- ctx.OutboundVersion = float.Parse(parts[1], Culture.FormatProvider);
+ String[] parts = versionString.Split(new char[] {'/'});
+ if (parts.Length > 1)
+ {
+ ctx.InboundVersion = float.Parse(parts[1], Culture.FormatProvider);
+ ctx.OutboundVersion = float.Parse(parts[1], Culture.FormatProvider);
+ }
}
}
@@ -352,11 +375,11 @@ namespace OpenSim.Services.Connectors.Simulation
{
// If we don't check this then OpenSimulator 0.7.3.1 and some period before will never see the
// actual failure message
- if (!result.ContainsKey("_Result"))
+ if (!has_Result)
{
- if (result.ContainsKey("Message"))
+ if (result.TryGetValue("Message", out tmpOSD))
{
- string message = result["Message"].AsString();
+ string message = tmpOSD.AsString();
if (message == "Service request failed: [MethodNotAllowed] MethodNotAllowed") // Old style region
{
m_log.Info("[REMOTE SIMULATION CONNECTOR]: The above web util error was caused by a TP to a sim that doesn't support QUERYACCESS and can be ignored");
@@ -376,9 +399,9 @@ namespace OpenSim.Services.Connectors.Simulation
featuresAvailable.Clear();
- if (result.ContainsKey("features"))
+ if (result.TryGetValue("features", out tmpOSD) && tmpOSD is OSDArray)
{
- OSDArray array = (OSDArray)result["features"];
+ OSDArray array = (OSDArray)tmpOSD;
foreach (OSD o in array)
featuresAvailable.Add(new UUID(o.AsString()));