From e985e05a5ad7df4c5f01763dfe6b82cc1b37ab83 Mon Sep 17 00:00:00 2001
From: gareth
Date: Mon, 2 Apr 2007 00:48:25 +0000
Subject: Added new REST protocol (partially complete) Made sim profiles load
from DB Updated build files for grid server Added sim login
---
OpenGridServices.GridServer/GridHttp.cs | 152 ++++++++++++++++++++------------
1 file changed, 96 insertions(+), 56 deletions(-)
(limited to 'OpenGridServices.GridServer/GridHttp.cs')
diff --git a/OpenGridServices.GridServer/GridHttp.cs b/OpenGridServices.GridServer/GridHttp.cs
index c9cda61..33e1e71 100644
--- a/OpenGridServices.GridServer/GridHttp.cs
+++ b/OpenGridServices.GridServer/GridHttp.cs
@@ -56,8 +56,13 @@ namespace OpenGridServices.GridServer
MainConsole.Instance.WriteLine("GridHttp.cs:StartHTTP() - Spawned main thread OK");
Listener = new HttpListener();
- Listener.Prefixes.Add("http://+:8001/gridserver/");
+ Listener.Prefixes.Add("http://+:8001/sims/");
+ Listener.Prefixes.Add("http://+:8001/gods/");
+ Listener.Prefixes.Add("http://+:8001/highestuuid/");
+ Listener.Prefixes.Add("http://+:8001/uuidblocks/");
Listener.Start();
+
+ MainConsole.Instance.WriteLine("GridHttp.cs:StartHTTP() - Successfully bound to port 8001");
HttpListenerContext context;
while(true) {
@@ -66,72 +71,105 @@ namespace OpenGridServices.GridServer
}
}
- static string ParseXMLRPC(string requestBody) {
+ static string ParseXMLRPC(string requestBody, string referrer) {
try{
- XmlRpcRequest request = (XmlRpcRequest)(new XmlRpcRequestDeserializer()).Deserialize(requestBody);
+ XmlRpcRequest request = (XmlRpcRequest)(new XmlRpcRequestDeserializer()).Deserialize(requestBody);
- Hashtable requestData = (Hashtable)request.Params[0];
- switch(request.MethodName) {
- case "get_sim_info":
- ulong req_handle=(ulong)Convert.ToInt64(requestData["region_handle"]);
- SimProfileBase TheSim = OpenGrid_Main.thegrid._regionmanager.GetProfileByHandle(req_handle);
- string RecvKey="";
- string caller=(string)requestData["caller"];
- switch(caller) {
- case "userserver":
- RecvKey=OpenGrid_Main.thegrid.UserRecvKey;
- break;
- case "assetserver":
- RecvKey=OpenGrid_Main.thegrid.AssetRecvKey;
- break;
- }
- if((TheSim!=null) && (string)requestData["authkey"]==RecvKey) {
- XmlRpcResponse SimInfoResp = new XmlRpcResponse();
- Hashtable SimInfoData = new Hashtable();
- SimInfoData["UUID"]=TheSim.UUID.ToString();
- SimInfoData["regionhandle"]=TheSim.regionhandle.ToString();
- SimInfoData["regionname"]=TheSim.regionname;
- SimInfoData["sim_ip"]=TheSim.sim_ip;
- SimInfoData["sim_port"]=TheSim.sim_port.ToString();
- SimInfoData["caps_url"]=TheSim.caps_url;
- SimInfoData["RegionLocX"]=TheSim.RegionLocX.ToString();
- SimInfoData["RegionLocY"]=TheSim.RegionLocY.ToString();
- SimInfoData["sendkey"]=TheSim.sendkey;
- SimInfoData["recvkey"]=TheSim.recvkey;
- SimInfoResp.Value=SimInfoData;
- return(Regex.Replace(XmlRpcResponseSerializer.Singleton.Serialize(SimInfoResp),"utf-16","utf-8"));
- } else {
- XmlRpcResponse SimErrorResp = new XmlRpcResponse();
- Hashtable SimErrorData = new Hashtable();
- SimErrorData["error"]="sim not found";
- SimErrorResp.Value=SimErrorData;
- return(XmlRpcResponseSerializer.Singleton.Serialize(SimErrorResp));
- }
- break;
- }
+ Hashtable requestData = (Hashtable)request.Params[0];
+ switch(request.MethodName) {
+ case "simulator_login":
+ if(!(referrer=="simulator")) {
+ XmlRpcResponse ErrorResp = new XmlRpcResponse();
+ Hashtable ErrorRespData = new Hashtable();
+ ErrorRespData["error"]="Only simulators can login with this method";
+ ErrorResp.Value=ErrorRespData;
+ return(Regex.Replace(XmlRpcResponseSerializer.Singleton.Serialize(ErrorResp),"utf-16","utf-8"));
+ }
+
+ if(!((string)requestData["authkey"]==OpenGrid_Main.thegrid.SimRecvKey)) {
+ XmlRpcResponse ErrorResp = new XmlRpcResponse();
+ Hashtable ErrorRespData = new Hashtable();
+ ErrorRespData["error"]="invalid key";
+ ErrorResp.Value=ErrorRespData;
+ return(Regex.Replace(XmlRpcResponseSerializer.Singleton.Serialize(ErrorResp),"utf-16","utf-8"));
+ }
+
+ SimProfileBase TheSim = OpenGrid_Main.thegrid._regionmanager.GetProfileByLLUUID(new LLUUID((string)requestData["UUID"]));
+ XmlRpcResponse SimLoginResp = new XmlRpcResponse();
+ Hashtable SimLoginRespData = new Hashtable();
+
+ ArrayList SimNeighboursData = new ArrayList();
+
+ SimProfileBase neighbour;
+ Hashtable NeighbourBlock;
+ for(int x=-1; x<2; x++) for(int y=-1; y<2; y++) {
+ if(OpenGrid_Main.thegrid._regionmanager.GetProfileByHandle(Helpers.UIntsToLong((uint)((TheSim.RegionLocX+x)*256), (uint)(TheSim.RegionLocY+y)*256))!=null) {
+ neighbour=OpenGrid_Main.thegrid._regionmanager.GetProfileByHandle(Helpers.UIntsToLong((uint)((TheSim.RegionLocX+x)*256), (uint)(TheSim.RegionLocY+y)*256));
+ NeighbourBlock = new Hashtable();
+ NeighbourBlock["sim_ip"] = neighbour.sim_ip;
+ NeighbourBlock["sim_port"] = neighbour.sim_port.ToString();
+ NeighbourBlock["region_locx"] = neighbour.RegionLocX.ToString();
+ NeighbourBlock["region_locy"] = neighbour.RegionLocY.ToString();
+ NeighbourBlock["UUID"] = neighbour.UUID.ToString();
+ SimNeighboursData.Add(NeighbourBlock);
+ }
+ }
+
+
+ SimLoginRespData["region_locx"]=TheSim.RegionLocX.ToString();
+ SimLoginRespData["region_locy"]=TheSim.RegionLocY.ToString();
+ SimLoginRespData["regionname"]=TheSim.regionname;
+ SimLoginRespData["estate_id"]="1";
+ SimLoginRespData["neighbours"]=SimNeighboursData;
+ SimLoginRespData["asset_url"]=OpenGrid_Main.thegrid.DefaultAssetServer;
+ SimLoginRespData["asset_sendkey"]=OpenGrid_Main.thegrid.AssetSendKey;
+ SimLoginRespData["asset_recvkey"]=OpenGrid_Main.thegrid.AssetRecvKey;
+ SimLoginRespData["user_url"]=OpenGrid_Main.thegrid.DefaultUserServer;
+ SimLoginRespData["user_sendkey"]=OpenGrid_Main.thegrid.UserSendKey;
+ SimLoginRespData["user_recvkey"]=OpenGrid_Main.thegrid.UserRecvKey;
+ SimLoginRespData["authkey"]=OpenGrid_Main.thegrid.SimSendKey;
+ SimLoginResp.Value=SimLoginRespData;
+ return(Regex.Replace(XmlRpcResponseSerializer.Singleton.Serialize(SimLoginResp),"utf-16","utf-8"));
+ break;
+ }
} catch(Exception e) {
Console.WriteLine(e.ToString());
}
return "";
}
- static string ParseREST(string requestBody, string requestURL) {
+ static string ParseREST(string requestBody, string requestURL, string HTTPmethod) {
char[] splitter = {'/'};
string[] rest_params = requestURL.Split(splitter);
- string req_type = rest_params[1]; // First part of the URL is the type of request -
- switch(req_type) {
- case "regions":
- ulong regionhandle = (ulong)Convert.ToInt64(rest_params[2]); // get usersessions/sessionid
- switch(rest_params[3]) {
- case "neighbours":
- return OpenGrid_Main.thegrid._regionmanager.GetXMLNeighbours(regionhandle);
- break;
+ string req_type = rest_params[0]; // First part of the URL is the type of request -
+ string respstring;
+ switch(req_type) {
+ case "sims":
+ LLUUID UUID = new LLUUID((string)rest_params[1]);
+ SimProfileBase TheSim = OpenGrid_Main.thegrid._regionmanager.GetProfileByLLUUID(UUID);
+ if(!(TheSim==null)) {
+ switch(HTTPmethod) {
+ case "GET":
+ respstring="" + OpenGrid_Main.thegrid.SimSendKey + "";
+ respstring+="";
+ respstring+="" + TheSim.UUID.ToString() + "";
+ respstring+="" + TheSim.regionname + "";
+ respstring+="" + TheSim.sim_ip + "";
+ respstring+="" + TheSim.sim_port.ToString() + "";
+ respstring+="" + TheSim.RegionLocX.ToString() + "";
+ respstring+="" + TheSim.RegionLocY.ToString() + "";
+ respstring+="1";
+ respstring+="";
+ break;
+ }
}
- return "OK";
break;
- }
+ case "highestuuid":
+
+ break;
+ }
return "";
-
+
}
@@ -152,18 +190,20 @@ namespace OpenGridServices.GridServer
body.Close();
reader.Close();
+ // TODO: AUTHENTICATION!!!!!!!!! MUST ADD!!!!!!!!!! SCRIPT KIDDIES LOVE LACK OF IT!!!!!!!!!!
+
string responseString="";
switch(request.ContentType) {
case "text/xml":
// must be XML-RPC, so pass to the XML-RPC parser
- responseString=ParseXMLRPC(requestBody);
+ responseString=ParseXMLRPC(requestBody,request.Headers["Referer"]);
response.AddHeader("Content-type","text/xml");
break;
case null:
// must be REST or invalid crap, so pass to the REST parser
- responseString=ParseREST(request.Url.OriginalString,requestBody);
+ responseString=ParseREST(request.Url.OriginalString,requestBody,request.HttpMethod);
break;
}
--
cgit v1.1