private Hashtable GetObjectPhysicsData(UUID agentID, Hashtable mDhttpMethod) { OSDMap rm = (OSDMap)OSDParser.DeserializeLLSDXml((string)mDhttpMethod["requestbody"]); OSDArray keys = (OSDArray)rm["object_ids"]; IEventQueueService eqs = m_scene.RequestModuleInterface <IEventQueueService>(); if (eqs != null) { #if (!ISWIN) List <ISceneChildEntity> list = new List <ISceneChildEntity>(); foreach (OSD key in keys) { list.Add(m_scene.GetSceneObjectPart(key.AsUUID())); } eqs.ObjectPhysicsProperties(list.ToArray(), agentID, m_scene.RegionInfo.RegionHandle); #else eqs.ObjectPhysicsProperties(keys.Select(key => m_scene.GetSceneObjectPart(key.AsUUID())).ToArray(), agentID, m_scene.RegionInfo.RegionHandle); #endif } //Send back data Hashtable responsedata = new Hashtable(); responsedata["int_response_code"] = 200; //501; //410; //404; responsedata["content_type"] = "text/plain"; responsedata["keepalive"] = false; responsedata["str_response_string"] = ""; return(responsedata); }
private void UpdateGesture(UUID userID, UUID itemID, bool enabled) { OSDArray gestures = FetchGestures(userID); OSDArray newGestures = new OSDArray(); #if (!ISWIN) foreach (OSD t in gestures) { UUID gesture = t.AsUUID(); if (gesture != itemID) { newGestures.Add(OSD.FromUUID(gesture)); } } #else foreach (UUID gesture in gestures.Select(t => t.AsUUID()).Where(gesture => gesture != itemID)) { newGestures.Add(OSD.FromUUID(gesture)); } #endif if (enabled) { newGestures.Add(OSD.FromUUID(itemID)); } SaveGestures(userID, newGestures); }
public void ReadXml(string rawXml) { using (StringReader sr = new StringReader(rawXml)) { using (XmlTextReader xtr = new XmlTextReader(sr)) { xtr.MoveToContent(); string type = xtr.GetAttribute("type"); //MainConsole.Instance.DebugFormat("[MOAP]: Loaded media texture entry with type {0}", type); if (type != MEDIA_TEXTURE_TYPE) { return; } xtr.ReadStartElement("OSMedia"); OSDArray osdMeArray = (OSDArray)OSDParser.DeserializeLLSDXml(xtr.ReadInnerXml()); foreach ( MediaEntry me in osdMeArray.Select( osdMe => (osdMe is OSDMap ? MediaEntry.FromOSD(osdMe) : new MediaEntry()))) { Add(me); } xtr.ReadEndElement(); } } }
private byte[] GetObjectPhysicsData(UUID agentID, Stream request) { OSDMap rm = (OSDMap)OSDParser.DeserializeLLSDXml(request); OSDArray keys = (OSDArray)rm["object_ids"]; IEventQueueService eqs = m_scene.RequestModuleInterface <IEventQueueService>(); if (eqs != null) { #if (!ISWIN) List <ISceneChildEntity> list = new List <ISceneChildEntity>(); foreach (OSD key in keys) { list.Add(m_scene.GetSceneObjectPart(key.AsUUID())); } eqs.ObjectPhysicsProperties(list.ToArray(), agentID, m_scene.RegionInfo.RegionHandle); #else eqs.ObjectPhysicsProperties(keys.Select(key => m_scene.GetSceneObjectPart(key.AsUUID())).ToArray(), agentID, m_scene.RegionInfo.RegionHandle); #endif } //Send back data return(new byte[0]); }
private byte[] GetObjectPhysicsData(UUID agentID, Stream request) { OSDMap rm = (OSDMap)OSDParser.DeserializeLLSDXml(HttpServerHandlerHelpers.ReadFully(request)); OSDArray keys = (OSDArray)rm["object_ids"]; IEventQueueService eqs = m_scene.RequestModuleInterface <IEventQueueService>(); if (eqs != null) { eqs.ObjectPhysicsProperties(keys.Select(key => m_scene.GetSceneObjectPart(key.AsUUID())).ToArray(), agentID, m_scene.RegionInfo.RegionID); } //Send back data return(new byte[0]); }
public List <UserAccount> GetUserAccounts(UUID scopeID, string query) { List <UserAccount> accounts = new List <UserAccount>(); MainConsole.Instance.DebugFormat("[SIMIAN ACCOUNT CONNECTOR]: Searching for user accounts with name query " + query); NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "GetUsers" }, { "NameQuery", query } }; OSDMap response = WebUtils.PostToService(m_serverUrl, requestArgs); if (response["Success"].AsBoolean()) { OSDArray array = response["Users"] as OSDArray; if (array != null && array.Count > 0) { #if (!ISWIN) for (int i = 0; i < array.Count; i++) { UserAccount account = ResponseToUserAccount(array[i] as OSDMap); if (account != null) { accounts.Add(account); } } #else accounts.AddRange(array.Select(t => ResponseToUserAccount(t as OSDMap)).Where(account => account != null)); #endif } else { MainConsole.Instance.Warn( "[SIMIAN ACCOUNT CONNECTOR]: Account search failed, response data was in an invalid format"); } } else { MainConsole.Instance.Warn("[SIMIAN ACCOUNT CONNECTOR]: Failed to search for account data by name " + query); } return(accounts); }
public string[] GetAgentsLocations(string requestor, string[] userIDs) { List <string> urls = m_registry.RequestModuleInterface <IConfigurationService>().FindValueOf("AgentInfoServerURI"); List <string> retVal = new List <string>(userIDs.Length); foreach (string url in urls) { OSDMap request = new OSDMap(); OSDArray requestArray = new OSDArray(); foreach (string t in userIDs) { requestArray.Add(t); } request["userIDs"] = requestArray; request["requestor"] = requestor; request["Method"] = "GetAgentsLocations"; OSDMap result = WebUtils.PostToService(url, request, true, false); try { OSD r = OSDParser.DeserializeJson(result["_RawResult"]); if (r is OSDMap) { OSDMap innerresult = (OSDMap)r; OSDArray resultArray = (OSDArray)innerresult["Result"]; #if (!ISWIN) foreach (OSD o in resultArray) { retVal.Add(o.AsString()); } #else retVal.AddRange(resultArray.Select(o => o.AsString())); #endif } } catch { //Bad request, just leave it } } return(retVal.ToArray()); }
public List <GridRegion> GetRegionsByName(UUID scopeID, string name, int maxNumber) { List <GridRegion> foundRegions = new List <GridRegion>(); NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "GetScenes" }, { "NameQuery", name }, { "Enabled", "1" } }; if (maxNumber > 0) { requestArgs["MaxNumber"] = maxNumber.ToString(); } OSDMap response = WebUtils.PostToService(m_serverUrl, requestArgs); if (response["Success"].AsBoolean()) { OSDArray array = response["Scenes"] as OSDArray; if (array != null) { #if (!ISWIN) for (int i = 0; i < array.Count; i++) { GridRegion region = ResponseToGridRegion(array[i] as OSDMap); if (region != null) { foundRegions.Add(region); } } #else foundRegions.AddRange(array.Select(t => ResponseToGridRegion(t as OSDMap)).Where(region => region != null)); #endif } } return(foundRegions); }
public List <GridRegion> GetRegionRange(UUID scopeID, int xmin, int xmax, int ymin, int ymax) { List <GridRegion> foundRegions = new List <GridRegion>(); Vector3d minPosition = new Vector3d(xmin, ymin, 0.0); Vector3d maxPosition = new Vector3d(xmax, ymax, 4096.0); NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "GetScenes" }, { "MinPosition", minPosition.ToString() }, { "MaxPosition", maxPosition.ToString() }, { "Enabled", "1" } }; OSDMap response = WebUtils.PostToService(m_serverUrl, requestArgs); if (response["Success"].AsBoolean()) { OSDArray array = response["Scenes"] as OSDArray; if (array != null) { #if (!ISWIN) for (int i = 0; i < array.Count; i++) { GridRegion region = ResponseToGridRegion(array[i] as OSDMap); if (region != null) { foundRegions.Add(region); } } #else foundRegions.AddRange(array.Select(t => ResponseToGridRegion(t as OSDMap)).Where(region => region != null)); #endif } } return(foundRegions); }
///<summary> ///</summary> ///<param name = "assetID"></param> ///<param name = "inventoryItem"></param> ///<param name = "data"></param> public UUID UploadCompleteHandler(string assetName, string assetDescription, UUID assetID, UUID inventoryItem, UUID parentFolder, byte[] data, string inventoryType, string assetType, uint everyone_mask, uint group_mask, uint next_owner_mask) { sbyte assType = 0; sbyte inType = 0; if (inventoryType == "sound") { inType = 1; assType = 1; } else if (inventoryType == "animation") { inType = 19; assType = 20; } else if (inventoryType == "snapshot") { inType = 15; assType = 0; } else if (inventoryType == "wearable") { inType = 18; switch (assetType) { case "bodypart": assType = 13; break; case "clothing": assType = 5; break; } } else if (inventoryType == "object") { inType = (sbyte)InventoryType.Object; assType = (sbyte)AssetType.Object; List <Vector3> positions = new List <Vector3>(); List <Quaternion> rotations = new List <Quaternion>(); OSDMap request = (OSDMap)OSDParser.DeserializeLLSDXml(data); OSDArray instance_list = (OSDArray)request["instance_list"]; OSDArray mesh_list = (OSDArray)request["mesh_list"]; OSDArray texture_list = (OSDArray)request["texture_list"]; SceneObjectGroup grp = null; List <UUID> textures = new List <UUID>(); #if (!ISWIN) for (int i = 0; i < texture_list.Count; i++) { AssetBase textureAsset = new AssetBase(UUID.Random(), assetName, AssetType.Texture, m_service.AgentID); textureAsset.Data = texture_list[i].AsBinary(); textureAsset.ID = m_assetService.Store(textureAsset); textures.Add(textureAsset.ID); } #else foreach (AssetBase textureAsset in texture_list.Select(t => new AssetBase(UUID.Random(), assetName, AssetType.Texture, m_service.AgentID) { Data = t.AsBinary() })) { textureAsset.ID = m_assetService.Store(textureAsset); textures.Add(textureAsset.ID); } #endif InventoryFolderBase meshFolder = m_inventoryService.GetFolderForType(m_service.AgentID, InventoryType.Mesh, AssetType.Mesh); for (int i = 0; i < mesh_list.Count; i++) { PrimitiveBaseShape pbs = PrimitiveBaseShape.CreateBox(); Primitive.TextureEntry textureEntry = new Primitive.TextureEntry(Primitive.TextureEntry.WHITE_TEXTURE); OSDMap inner_instance_list = (OSDMap)instance_list[i]; OSDArray face_list = (OSDArray)inner_instance_list["face_list"]; for (uint face = 0; face < face_list.Count; face++) { OSDMap faceMap = (OSDMap)face_list[(int)face]; Primitive.TextureEntryFace f = pbs.Textures.CreateFace(face); if (faceMap.ContainsKey("fullbright")) { f.Fullbright = faceMap["fullbright"].AsBoolean(); } if (faceMap.ContainsKey("diffuse_color")) { f.RGBA = faceMap["diffuse_color"].AsColor4(); } int textureNum = faceMap["image"].AsInteger(); float imagerot = faceMap["imagerot"].AsInteger(); float offsets = (float)faceMap["offsets"].AsReal(); float offsett = (float)faceMap["offsett"].AsReal(); float scales = (float)faceMap["scales"].AsReal(); float scalet = (float)faceMap["scalet"].AsReal(); if (imagerot != 0) { f.Rotation = imagerot; } if (offsets != 0) { f.OffsetU = offsets; } if (offsett != 0) { f.OffsetV = offsett; } if (scales != 0) { f.RepeatU = scales; } if (scalet != 0) { f.RepeatV = scalet; } f.TextureID = textures.Count > textureNum ? textures[textureNum] : Primitive.TextureEntry.WHITE_TEXTURE; textureEntry.FaceTextures[face] = f; } pbs.TextureEntry = textureEntry.GetBytes(); AssetBase meshAsset = new AssetBase(UUID.Random(), assetName, AssetType.Mesh, m_service.AgentID) { Data = mesh_list[i].AsBinary() }; meshAsset.ID = m_assetService.Store(meshAsset); if (meshFolder == null) { m_inventoryService.CreateUserInventory(m_service.AgentID, false); meshFolder = m_inventoryService.GetFolderForType(m_service.AgentID, InventoryType.Mesh, AssetType.Mesh); } InventoryItemBase itemBase = new InventoryItemBase(UUID.Random(), m_service.AgentID) { AssetType = (sbyte)AssetType.Mesh, AssetID = meshAsset.ID, CreatorId = m_service.AgentID.ToString(), Folder = meshFolder.ID, InvType = (int)InventoryType.Texture, Name = "(Mesh) - " + assetName, CurrentPermissions = (uint)PermissionMask.All, BasePermissions = (uint)PermissionMask.All, EveryOnePermissions = everyone_mask, GroupPermissions = group_mask, NextPermissions = next_owner_mask }; //Bad... but whatever m_inventoryService.AddItem(itemBase); pbs.SculptEntry = true; pbs.SculptTexture = meshAsset.ID; pbs.SculptType = (byte)SculptType.Mesh; pbs.SculptData = meshAsset.Data; Vector3 position = inner_instance_list["position"].AsVector3(); Vector3 scale = inner_instance_list["scale"].AsVector3(); Quaternion rotation = inner_instance_list["rotation"].AsQuaternion(); int physicsShapeType = inner_instance_list["physics_shape_type"].AsInteger(); int material = inner_instance_list["material"].AsInteger(); int mesh = inner_instance_list["mesh"].AsInteger(); UUID owner_id = m_service.AgentID; IScene fakeScene = new Scene(); fakeScene.AddModuleInterfaces(m_service.Registry.GetInterfaces()); SceneObjectPart prim = new SceneObjectPart(owner_id, pbs, position, Quaternion.Identity, Vector3.Zero, assetName, fakeScene) { Scale = scale, AbsolutePosition = position }; rotations.Add(rotation); positions.Add(position); prim.UUID = UUID.Random(); prim.CreatorID = owner_id; prim.OwnerID = owner_id; prim.GroupID = UUID.Zero; prim.LastOwnerID = prim.OwnerID; prim.CreationDate = Util.UnixTimeSinceEpoch(); prim.Name = assetName; prim.Description = ""; prim.PhysicsType = (byte)physicsShapeType; prim.BaseMask = (uint)PermissionMask.All; prim.EveryoneMask = everyone_mask; prim.NextOwnerMask = next_owner_mask; prim.GroupMask = group_mask; prim.OwnerMask = (uint)PermissionMask.All; if (grp == null) { grp = new SceneObjectGroup(prim, fakeScene); } else { grp.AddChild(prim, i + 1); } grp.RootPart.IsAttachment = false; } if (grp.ChildrenList.Count > 1) //Fix first link # { grp.RootPart.LinkNum++; } Vector3 rootPos = positions[0]; grp.SetAbsolutePosition(false, rootPos); for (int i = 0; i < positions.Count; i++) { Vector3 offset = positions[i] - rootPos; grp.ChildrenList[i].SetOffsetPosition(offset); Vector3 abs = grp.ChildrenList[i].AbsolutePosition; Vector3 currentPos = positions[i]; } //grp.Rotation = rotations[0]; for (int i = 0; i < rotations.Count; i++) { if (i != 0) { grp.ChildrenList[i].SetRotationOffset(false, rotations[i], false); } } grp.UpdateGroupRotationR(rotations[0]); data = Encoding.ASCII.GetBytes(grp.ToXml2()); } AssetBase asset = new AssetBase(assetID, assetName, (AssetType)assType, m_service.AgentID) { Data = data }; asset.ID = m_assetService.Store(asset); assetID = asset.ID; InventoryItemBase item = new InventoryItemBase { Owner = m_service.AgentID, CreatorId = m_service.AgentID.ToString(), ID = inventoryItem, AssetID = asset.ID, Description = assetDescription, Name = assetName, AssetType = assType, InvType = inType, Folder = parentFolder, CurrentPermissions = (uint)PermissionMask.All, BasePermissions = (uint)PermissionMask.All, EveryOnePermissions = everyone_mask, NextPermissions = next_owner_mask, GroupPermissions = group_mask, CreationDate = Util.UnixTimeSinceEpoch() }; m_inventoryService.AddItem(item); return(assetID); }
private byte[] ProcessEnqueueEQMMessage(OSDMap request) { OSDMap response = new OSDMap(); response["success"] = false; try { UUID agentID = request["AgentID"].AsUUID(); ulong regionHandle = m_ourRegionHandle == 0 ? request["RegionHandle"].AsULong() : m_ourRegionHandle; OSDArray events = new OSDArray(); if (request.ContainsKey("Events") && request["Events"].Type == OSDType.Array) events = (OSDArray) request["Events"]; #if (!ISWIN) List<OSD> OSDEvents = new List<OSD>(); foreach (OSD ev in events) OSDEvents.Add(OSDParser.DeserializeLLSDXml(ev.AsString())); #else List<OSD> OSDEvents = events.Select(ev => OSDParser.DeserializeLLSDXml(ev.AsString())).ToList(); #endif IClientCapsService clientCaps = m_capsService.GetClientCapsService(agentID); if (clientCaps != null) { IRegionClientCapsService regionClient = clientCaps.GetCapsService(regionHandle); if (regionClient != null) { bool enqueueResult = false; foreach (OSD ev in OSDEvents) { enqueueResult = m_eventQueueService.Enqueue(ev, agentID, regionHandle); if (!enqueueResult) //Break if one fails break; } response["success"] = enqueueResult; } else MainConsole.Instance.Error("[EQMHandler]: ERROR IN THE HANDLER, FAILED TO FIND CLIENT'S REGION"); } else { MainConsole.Instance.Error("[EQMHandler]: ERROR IN THE HANDLER, FAILED TO FIND CLIENT, IWC/HG OR BOT?"); bool enqueueResult = false; foreach (OSD ev in OSDEvents) { enqueueResult = m_eventQueueService.Enqueue(ev, agentID, regionHandle); if (!enqueueResult) //Break if one fails break; } response["success"] = enqueueResult; } } catch (Exception ex) { MainConsole.Instance.Error("[EQMHandler]: ERROR IN THE HANDLER: " + ex); response = new OSDMap(); response["success"] = false; } string resp = OSDParser.SerializeJsonString(response); if (resp == "") return MainServer.BlankResponse; return Util.UTF8.GetBytes(resp); }
private byte[] ProcessEnqueueEQMMessage(OSDMap request) { OSDMap response = new OSDMap(); response["success"] = false; try { UUID agentID = request["AgentID"].AsUUID(); ulong regionHandle = m_ourRegionHandle == 0 ? request["RegionHandle"].AsULong() : m_ourRegionHandle; OSDArray events = new OSDArray(); if (request.ContainsKey("Events") && request["Events"].Type == OSDType.Array) { events = (OSDArray)request["Events"]; } #if (!ISWIN) List <OSD> OSDEvents = new List <OSD>(); foreach (OSD ev in events) { OSDEvents.Add(OSDParser.DeserializeLLSDXml(ev.AsString())); } #else List <OSD> OSDEvents = events.Select(ev => OSDParser.DeserializeLLSDXml(ev.AsString())).ToList(); #endif IClientCapsService clientCaps = m_capsService.GetClientCapsService(agentID); if (clientCaps != null) { IRegionClientCapsService regionClient = clientCaps.GetCapsService(regionHandle); if (regionClient != null) { bool enqueueResult = false; foreach (OSD ev in OSDEvents) { enqueueResult = m_eventQueueService.Enqueue(ev, agentID, regionHandle); if (!enqueueResult) //Break if one fails { break; } } response["success"] = enqueueResult; } else { MainConsole.Instance.Error("[EQMHandler]: ERROR IN THE HANDLER, FAILED TO FIND CLIENT'S REGION"); } } else { MainConsole.Instance.Error("[EQMHandler]: ERROR IN THE HANDLER, FAILED TO FIND CLIENT, IWC?"); bool enqueueResult = false; foreach (OSD ev in OSDEvents) { enqueueResult = m_eventQueueService.Enqueue(ev, agentID, regionHandle); if (!enqueueResult) //Break if one fails { break; } } response["success"] = enqueueResult; } } catch (Exception ex) { MainConsole.Instance.Error("[EQMHandler]: ERROR IN THE HANDLER: " + ex); response = new OSDMap(); response["success"] = false; } string resp = OSDParser.SerializeJsonString(response); if (resp == "") { return(new byte[0]); } return(Util.UTF8.GetBytes(resp)); }
public override void FromOSD(OSDMap v) { OSDMap values = (OSDMap)v; EstateID = (uint)values["EstateID"].AsInteger(); EstateName = values["EstateName"].AsString(); AbuseEmailToEstateOwner = values["AbuseEmailToEstateOwner"].AsBoolean(); DenyAnonymous = values["DenyAnonymous"].AsBoolean(); ResetHomeOnTeleport = values["ResetHomeOnTeleport"].AsBoolean(); FixedSun = values["FixedSun"].AsBoolean(); DenyTransacted = values["DenyTransacted"].AsBoolean(); BlockDwell = values["BlockDwell"].AsBoolean(); DenyIdentified = values["DenyIdentified"].AsBoolean(); AllowVoice = values["AllowVoice"].AsBoolean(); UseGlobalTime = values["UseGlobalTime"].AsBoolean(); PricePerMeter = values["PricePerMeter"].AsInteger(); TaxFree = values["TaxFree"].AsBoolean(); AllowDirectTeleport = values["AllowDirectTeleport"].AsBoolean(); RedirectGridX = values["RedirectGridX"].AsInteger(); RedirectGridY = values["RedirectGridY"].AsInteger(); ParentEstateID = (uint)values["ParentEstateID"].AsInteger(); SunPosition = values["SunPosition"].AsReal(); EstateSkipScripts = values["EstateSkipScripts"].AsBoolean(); BillableFactor = (float)values["BillableFactor"].AsReal(); PublicAccess = values["PublicAccess"].AsBoolean(); AbuseEmail = values["AbuseEmail"].AsString(); EstateOwner = values["EstateOwner"].AsUUID(); AllowLandmark = values["AllowLandmark"].AsBoolean(); AllowParcelChanges = values["AllowParcelChanges"].AsBoolean(); AllowSetHome = values["AllowSetHome"].AsBoolean(); DenyMinors = values["DenyMinors"].AsBoolean(); OSDArray Managers = values["EstateManagers"] as OSDArray; if (Managers != null) { #if (!ISWIN) List <UUID> list = new List <UUID>(); foreach (OSD id in Managers) { list.Add(id.AsUUID()); } EstateManagers = list.ToArray(); #else EstateManagers = Managers.Select(id => id.AsUUID()).ToArray(); #endif } OSDArray Ban = values["EstateBans"] as OSDArray; if (Ban != null) { List <EstateBan> NewBan = new List <EstateBan>(); foreach (OSD BannedUser in Ban) { EstateBan ban = new EstateBan(); ban.FromOSD(BannedUser); NewBan.Add(ban); } EstateBans = NewBan.ToArray(); } OSDArray Access = values["EstateAccess"] as OSDArray; if (Access != null) { #if (!ISWIN) List <UUID> list1 = new List <UUID>(); foreach (OSD uuid in Access) { list1.Add(uuid.AsUUID()); } EstateAccess = list1.ToArray(); #else EstateAccess = Access.Select(uuid => uuid.AsUUID()).ToArray(); #endif } OSDArray Groups = values["EstateGroups"] as OSDArray; if (Groups != null) { #if (!ISWIN) List <UUID> list2 = new List <UUID>(); foreach (OSD uuid in Groups) { list2.Add(uuid.AsUUID()); } EstateGroups = list2.ToArray(); #else EstateGroups = Groups.Select(uuid => uuid.AsUUID()).ToArray(); #endif } }