protected virtual void DoObjectPut(Hashtable request, Hashtable responsedata, UUID regionID) { OSDMap args = WebUtils.GetOSDMap((string) request["body"]); if (args == null) { responsedata["int_response_code"] = 400; responsedata["str_response_string"] = "false"; return; } // retrieve the input arguments 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(); GridRegion destination = new GridRegion {RegionID = uuid, RegionLocX = x, RegionLocY = y, RegionName = regionname}; UUID userID = UUID.Zero, itemID = UUID.Zero; if (args.ContainsKey("userid") && args["userid"] != null) userID = args["userid"].AsUUID(); if (args.ContainsKey("itemid") && args["itemid"] != null) itemID = args["itemid"].AsUUID(); // This is the meaning of PUT object bool result = m_SimulationService.CreateObject(destination, userID, itemID); responsedata["int_response_code"] = 200; responsedata["str_response_string"] = result.ToString(); }
protected void DoAgentDelete(Hashtable request, Hashtable responsedata, UUID id, string action, UUID regionID) { MainConsole.Instance.Debug(" >>> DoDelete action:" + action + "; RegionID:" + regionID); GridRegion destination = new GridRegion {RegionID = regionID}; if (action.Equals("release")) { object[] o = new object[2]; o[0] = id; o[1] = destination; //This is an OpenSim event... fire an event so that the OpenSim compat handlers can grab it m_registry.RequestModuleInterface<ISimulationBase>().EventManager.FireGenericEventHandler( "ReleaseAgent", o); } else m_SimulationService.CloseAgent(destination, id); responsedata["int_response_code"] = HttpStatusCode.OK; OSDMap map = new OSDMap(); map["Agent"] = id; responsedata["str_response_string"] = OSDParser.SerializeJsonString(map); MainConsole.Instance.Debug("[AGENT HANDLER]: Agent Released/Deleted."); }
protected virtual void DoObjectPost(Hashtable request, Hashtable responsedata, UUID regionID) { OSDMap args = WebUtils.GetOSDMap((string) request["body"]); if (args == null) { responsedata["int_response_code"] = 400; responsedata["str_response_string"] = "false"; return; } // retrieve the input arguments 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(); GridRegion destination = new GridRegion {RegionID = uuid, RegionLocX = x, RegionLocY = y, RegionName = regionname}; string sogXmlStr = ""; if (args.ContainsKey("sog") && args["sog"] != null) sogXmlStr = args["sog"].AsString(); ISceneEntity sog = null; try { //MainConsole.Instance.DebugFormat("[OBJECT HANDLER]: received {0}", sogXmlStr); IRegionSerialiserModule mod = m_SimulationService.Scene.RequestModuleInterface<IRegionSerialiserModule>(); if (mod != null) sog = mod.DeserializeGroupFromXml2(sogXmlStr, m_SimulationService.Scene); } catch (Exception ex) { MainConsole.Instance.InfoFormat("[OBJECT HANDLER]: exception on deserializing scene object {0}", ex); responsedata["int_response_code"] = HttpStatusCode.BadRequest; responsedata["str_response_string"] = "Bad request"; return; } bool result = false; if (sog == null) { MainConsole.Instance.ErrorFormat("[OBJECT HANDLER]: error on deserializing scene object as the object was null!"); responsedata["int_response_code"] = HttpStatusCode.OK; responsedata["str_response_string"] = result.ToString(); } try { // This is the meaning of POST object result = m_SimulationService.CreateObject(destination, sog); } catch (Exception e) { MainConsole.Instance.DebugFormat("[OBJECT HANDLER]: Exception in CreateObject: {0}", e.StackTrace); } responsedata["int_response_code"] = HttpStatusCode.OK; responsedata["str_response_string"] = result.ToString(); }
protected virtual void DoAgentGet(Hashtable request, Hashtable responsedata, UUID id, UUID regionID, bool agentIsLeaving) { if (m_SimulationService == null) { MainConsole.Instance.Debug("[AGENT HANDLER]: Agent GET called. Harmless but useless."); responsedata["content_type"] = "application/json"; responsedata["int_response_code"] = HttpStatusCode.NotImplemented; responsedata["str_response_string"] = string.Empty; return; } GridRegion destination = new GridRegion {RegionID = regionID}; AgentData agent = null; AgentCircuitData circuitData; bool result = m_SimulationService.RetrieveAgent(destination, id, agentIsLeaving, out agent, out circuitData); OSDMap map = new OSDMap(); string strBuffer = ""; if (result) { if (agent != null) // just to make sure { map["AgentData"] = agent.Pack(); map["CircuitData"] = circuitData.PackAgentCircuitData(); try { strBuffer = OSDParser.SerializeJsonString(map); } catch (Exception e) { MainConsole.Instance.WarnFormat("[AGENT HANDLER]: Exception thrown on serialization of DoAgentGet: {0}", e); responsedata["int_response_code"] = HttpStatusCode.InternalServerError; // ignore. buffer will be empty, caller should check. } } else { map = new OSDMap(); map["Result"] = "Internal error"; } } else { map = new OSDMap(); map["Result"] = "Not Found"; } strBuffer = OSDParser.SerializeJsonString(map); responsedata["content_type"] = "application/json"; responsedata["int_response_code"] = HttpStatusCode.OK; responsedata["str_response_string"] = strBuffer; }
// subclasses can override this protected virtual bool UpdateAgent(GridRegion destination, AgentData agent) { return m_SimulationService.UpdateAgent(destination, agent); }
protected void DoAgentPut(Hashtable request, Hashtable responsedata) { OSDMap args = WebUtils.GetOSDMap((string) request["body"]); if (args == null) { responsedata["int_response_code"] = HttpStatusCode.BadRequest; responsedata["str_response_string"] = "Bad request"; return; } // retrieve the input arguments 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(); GridRegion destination = new GridRegion {RegionID = uuid, RegionLocX = x, RegionLocY = y, RegionName = regionname}; string messageType; if (args["message_type"] != null) messageType = args["message_type"].AsString(); else { MainConsole.Instance.Warn("[AGENT HANDLER]: Agent Put Message Type not found. "); messageType = "AgentData"; } bool result = true; if ("AgentData".Equals(messageType)) { AgentData agent = new AgentData(); try { agent.Unpack(args); } catch (Exception ex) { MainConsole.Instance.InfoFormat("[AGENT HANDLER]: exception on unpacking ChildAgentUpdate message {0}", ex); responsedata["int_response_code"] = HttpStatusCode.BadRequest; responsedata["str_response_string"] = "Bad request"; return; } //agent.Dump(); // This is one of the meanings of PUT agent result = UpdateAgent(destination, agent); } else if ("AgentPosition".Equals(messageType)) { AgentPosition agent = new AgentPosition(); try { agent.Unpack(args); } catch (Exception ex) { MainConsole.Instance.InfoFormat("[AGENT HANDLER]: exception on unpacking ChildAgentUpdate message {0}", ex); return; } //agent.Dump(); // This is one of the meanings of PUT agent result = m_SimulationService.UpdateAgent(destination, agent); } OSDMap resp = new OSDMap(); resp["Updated"] = result; responsedata["int_response_code"] = HttpStatusCode.OK; responsedata["str_response_string"] = OSDParser.SerializeJsonString(resp); }
// subclasses can override this protected virtual bool CreateAgent(GridRegion destination, AgentCircuitData aCircuit, uint teleportFlags, AgentData agent, out int requestedUDPPort, out string reason) { return m_SimulationService.CreateAgent(destination, aCircuit, teleportFlags, agent, out requestedUDPPort, out reason); }
protected void DoAgentPost(Hashtable request, Hashtable responsedata, UUID id) { OSDMap args = WebUtils.GetOSDMap((string) request["body"]); if (args == null) { responsedata["int_response_code"] = HttpStatusCode.BadRequest; responsedata["str_response_string"] = "Bad request"; return; } // retrieve the input arguments int x = 0, y = 0; UUID uuid = UUID.Zero; string regionname = string.Empty; uint teleportFlags = 0; if (args.ContainsKey("destination_x") && args["destination_x"] != null) Int32.TryParse(args["destination_x"].AsString(), out x); else MainConsole.Instance.WarnFormat(" -- request didn't have destination_x"); if (args.ContainsKey("destination_y") && args["destination_y"] != null) Int32.TryParse(args["destination_y"].AsString(), out y); else MainConsole.Instance.WarnFormat(" -- request didn't have destination_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("teleport_flags") && args["teleport_flags"] != null) teleportFlags = args["teleport_flags"].AsUInteger(); AgentData agent = null; if (args.ContainsKey("agent_data") && args["agent_data"] != null) { try { OSDMap agentDataMap = (OSDMap) args["agent_data"]; agent = new AgentData(); agent.Unpack(agentDataMap); } catch (Exception ex) { MainConsole.Instance.InfoFormat("[AGENT HANDLER]: exception on unpacking ChildCreate message {0}", ex); } } GridRegion destination = new GridRegion {RegionID = uuid, RegionLocX = x, RegionLocY = y, RegionName = regionname}; AgentCircuitData aCircuit = new AgentCircuitData(); try { aCircuit.UnpackAgentCircuitData(args); } catch (Exception ex) { MainConsole.Instance.InfoFormat("[AGENT HANDLER]: exception on unpacking ChildCreate message {0}", ex); responsedata["int_response_code"] = HttpStatusCode.BadRequest; responsedata["str_response_string"] = "Bad request"; return; } OSDMap resp = new OSDMap(3); string reason = String.Empty; int requestedUDPPort = 0; // This is the meaning of POST agent bool result = CreateAgent(destination, aCircuit, teleportFlags, agent, out requestedUDPPort, out reason); resp["reason"] = reason; resp["requestedUDPPort"] = requestedUDPPort; resp["success"] = OSD.FromBoolean(result); // Let's also send out the IP address of the caller back to the caller (HG 1.5) resp["your_ip"] = OSD.FromString(GetCallerIP(request)); // TODO: add reason if not String.Empty? responsedata["int_response_code"] = HttpStatusCode.OK; responsedata["str_response_string"] = OSDParser.SerializeJsonString(resp); }