aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenGridServices.GridServer/GridHttp.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenGridServices.GridServer/GridHttp.cs')
-rw-r--r--OpenGridServices.GridServer/GridHttp.cs110
1 files changed, 91 insertions, 19 deletions
diff --git a/OpenGridServices.GridServer/GridHttp.cs b/OpenGridServices.GridServer/GridHttp.cs
index 4bc9ef0..ed56b63 100644
--- a/OpenGridServices.GridServer/GridHttp.cs
+++ b/OpenGridServices.GridServer/GridHttp.cs
@@ -57,6 +57,7 @@ namespace OpenGridServices.GridServer
57 MainConsole.Instance.WriteLine("GridHttp.cs:StartHTTP() - Spawned main thread OK"); 57 MainConsole.Instance.WriteLine("GridHttp.cs:StartHTTP() - Spawned main thread OK");
58 Listener = new HttpListener(); 58 Listener = new HttpListener();
59 59
60 Listener.Prefixes.Add("http://+:8001/");
60 Listener.Prefixes.Add("http://+:8001/sims/"); 61 Listener.Prefixes.Add("http://+:8001/sims/");
61 Listener.Prefixes.Add("http://+:8001/gods/"); 62 Listener.Prefixes.Add("http://+:8001/gods/");
62 Listener.Prefixes.Add("http://+:8001/highestuuid/"); 63 Listener.Prefixes.Add("http://+:8001/highestuuid/");
@@ -79,23 +80,30 @@ namespace OpenGridServices.GridServer
79 Hashtable requestData = (Hashtable)request.Params[0]; 80 Hashtable requestData = (Hashtable)request.Params[0];
80 switch(request.MethodName) { 81 switch(request.MethodName) {
81 case "simulator_login": 82 case "simulator_login":
82 if(!(referrer=="simulator")) { 83
84 /*if(!((string)requestData["authkey"]==OpenGrid_Main.thegrid.SimRecvKey)) {
83 XmlRpcResponse ErrorResp = new XmlRpcResponse(); 85 XmlRpcResponse ErrorResp = new XmlRpcResponse();
84 Hashtable ErrorRespData = new Hashtable(); 86 Hashtable ErrorRespData = new Hashtable();
85 ErrorRespData["error"]="Only simulators can login with this method"; 87 ErrorRespData["error"]="invalid key";
86 ErrorResp.Value=ErrorRespData; 88 ErrorResp.Value=ErrorRespData;
87 return(Regex.Replace(XmlRpcResponseSerializer.Singleton.Serialize(ErrorResp),"utf-16","utf-8")); 89 return(Regex.Replace(XmlRpcResponseSerializer.Singleton.Serialize(ErrorResp),"utf-16","utf-8"));
88 } 90 }*/
89 91 SimProfileBase TheSim = null;
90 if(!((string)requestData["authkey"]==OpenGrid_Main.thegrid.SimRecvKey)) { 92
93 if(requestData.ContainsKey("UUID")) {
94 TheSim = OpenGrid_Main.thegrid._regionmanager.GetProfileByLLUUID(new LLUUID((string)requestData["UUID"]));
95 } else if (requestData.ContainsKey("region_handle")){
96 TheSim = OpenGrid_Main.thegrid._regionmanager.GetProfileByHandle((ulong)Convert.ToUInt64(requestData["region_handle"]));
97 }
98
99 if(TheSim==null) {
91 XmlRpcResponse ErrorResp = new XmlRpcResponse(); 100 XmlRpcResponse ErrorResp = new XmlRpcResponse();
92 Hashtable ErrorRespData = new Hashtable(); 101 Hashtable ErrorRespData = new Hashtable();
93 ErrorRespData["error"]="invalid key"; 102 ErrorRespData["error"]="sim not found";
94 ErrorResp.Value=ErrorRespData; 103 ErrorResp.Value=ErrorRespData;
95 return(Regex.Replace(XmlRpcResponseSerializer.Singleton.Serialize(ErrorResp),"utf-16","utf-8")); 104 return(Regex.Replace(XmlRpcResponseSerializer.Singleton.Serialize(ErrorResp),"utf-16","utf-8"));
96 } 105 }
97 106
98 SimProfileBase TheSim = OpenGrid_Main.thegrid._regionmanager.GetProfileByLLUUID(new LLUUID((string)requestData["UUID"]));
99 XmlRpcResponse SimLoginResp = new XmlRpcResponse(); 107 XmlRpcResponse SimLoginResp = new XmlRpcResponse();
100 Hashtable SimLoginRespData = new Hashtable(); 108 Hashtable SimLoginRespData = new Hashtable();
101 109
@@ -115,7 +123,8 @@ namespace OpenGridServices.GridServer
115 SimNeighboursData.Add(NeighbourBlock); 123 SimNeighboursData.Add(NeighbourBlock);
116 } 124 }
117 } 125 }
118 126
127 SimLoginRespData["UUID"]=TheSim.UUID;
119 SimLoginRespData["region_locx"]=TheSim.RegionLocX.ToString(); 128 SimLoginRespData["region_locx"]=TheSim.RegionLocX.ToString();
120 SimLoginRespData["region_locy"]=TheSim.RegionLocY.ToString(); 129 SimLoginRespData["region_locy"]=TheSim.RegionLocY.ToString();
121 SimLoginRespData["regionname"]=TheSim.regionname; 130 SimLoginRespData["regionname"]=TheSim.regionname;
@@ -138,15 +147,24 @@ namespace OpenGridServices.GridServer
138 return ""; 147 return "";
139 } 148 }
140 149
141 static string ParseREST(string requestBody, string requestURL, string HTTPmethod) { 150 static string ParseREST(string requestURL, string requestBody, string HTTPmethod) {
142 char[] splitter = {'/'}; 151 char[] splitter = {'/'};
143 string[] rest_params = requestURL.Split(splitter); 152 string[] rest_params = requestURL.Split(splitter);
144 string req_type = rest_params[0]; // First part of the URL is the type of request - 153 string req_type = rest_params[0]; // First part of the URL is the type of request -
145 string respstring; 154 string respstring="";
155 SimProfileBase TheSim;
156 Console.WriteLine(req_type);
146 switch(req_type) { 157 switch(req_type) {
147 case "sims": 158 case "regions":
159 // DIRTY HACK ALERT
160 Console.WriteLine("/regions/ accessed");
161 TheSim=OpenGrid_Main.thegrid._regionmanager.GetProfileByHandle((ulong)Convert.ToUInt64(rest_params[1]));
162 respstring=ParseREST("/regions/" + rest_params[1], requestBody, HTTPmethod);
163 break;
164
165 case "sims":
148 LLUUID UUID = new LLUUID((string)rest_params[1]); 166 LLUUID UUID = new LLUUID((string)rest_params[1]);
149 SimProfileBase TheSim = OpenGrid_Main.thegrid._regionmanager.GetProfileByLLUUID(UUID); 167 TheSim = OpenGrid_Main.thegrid._regionmanager.GetProfileByLLUUID(UUID);
150 if(!(TheSim==null)) { 168 if(!(TheSim==null)) {
151 switch(HTTPmethod) { 169 switch(HTTPmethod) {
152 case "GET": 170 case "GET":
@@ -162,18 +180,67 @@ namespace OpenGridServices.GridServer
162 respstring+="</sim>"; 180 respstring+="</sim>";
163 break; 181 break;
164 case "POST": 182 case "POST":
183 Console.WriteLine("Updating sim details.....");
165 XmlDocument doc = new XmlDocument(); 184 XmlDocument doc = new XmlDocument();
166 doc.LoadXml(requestBody); 185 doc.LoadXml(requestBody);
167 XmlNode authkeynode = doc.FirstChild; 186 XmlNode authkeynode = doc.FirstChild;
168 if (authkeynode.Name != "authkey") 187 if (authkeynode.Name != "authkey") {
169 respstring = "<error>bad XML - expected authkey tag</error>"; 188 respstring = "ERROR! bad XML - expected authkey tag";
189 return respstring;
190 }
170 XmlNode simnode = doc.ChildNodes[1]; 191 XmlNode simnode = doc.ChildNodes[1];
171 if (simnode.Name != "sim") 192 if (simnode.Name != "sim") {
172 respstring = "<error>bad XML - expected sim tag</error>"; 193 respstring = "ERROR! bad XML - expected sim tag";
194 return respstring;
195 }
196 if (authkeynode.Name != OpenGrid_Main.thegrid.SimRecvKey) {
197 respstring = "ERROR! invalid key";
198 return respstring;
199 }
200
201 if (TheSim==null) {
202 respstring="ERROR! sim not found";
203 return respstring;
204 } else {
205 for(int i=0; i<= simnode.ChildNodes.Count; i++) {
206 switch(simnode.ChildNodes[i].Name) {
207 case "uuid":
208 // should a sim be able to update it's own UUID? To be decided
209 // watch next week for the exciting conclusion in "the adventures of OpenGridServices.GridServer/GridHttp.cs:ParseREST() at line 190!
210 break; // and line 190's arch-enemy - THE BREAK STATEMENT! OH NOES!!!!! (this code written at 6:57AM, no sleep, lots of caffeine)
211
212 case "regionname":
213 TheSim.regionname=simnode.ChildNodes[i].InnerText;
214 break;
215
216 case "sim_ip":
217 TheSim.sim_ip=simnode.ChildNodes[i].InnerText;
218 break;
219
220 case "sim_port":
221 TheSim.sim_port=Convert.ToUInt32(simnode.ChildNodes[i].InnerText);
222 break;
223
224 case "region_locx":
225 TheSim.RegionLocX=Convert.ToUInt32((string)simnode.ChildNodes[i].InnerText);
226 TheSim.regionhandle=Helpers.UIntsToLong((TheSim.RegionLocX * 256), (TheSim.RegionLocY * 256));
227 break;
228
229 case "region_locy":
230 TheSim.RegionLocY=Convert.ToUInt32((string)simnode.ChildNodes[i].InnerText);
231 TheSim.regionhandle=Helpers.UIntsToLong((TheSim.RegionLocX * 256), (TheSim.RegionLocY * 256));
232 break;
233 }
234 }
235 respstring="OK";
236 }
237
238
173 239
174 break; 240 break;
175 } 241 }
176 } 242 }
243 return respstring;
177 break; 244 break;
178 } 245 }
179 return ""; 246 return "";
@@ -209,9 +276,14 @@ namespace OpenGridServices.GridServer
209 response.AddHeader("Content-type","text/xml"); 276 response.AddHeader("Content-type","text/xml");
210 break; 277 break;
211 278
279 case "text/plaintext":
280 // must be REST
281 responseString=ParseREST(request.RawUrl,requestBody,request.HttpMethod);
282 break;
283
212 case null: 284 case null:
213 // must be REST or invalid crap, so pass to the REST parser 285 // must be REST or invalid crap, so pass to the REST parser
214 responseString=ParseREST(request.Url.OriginalString,requestBody,request.HttpMethod); 286 responseString=ParseREST(request.RawUrl,requestBody,request.HttpMethod);
215 break; 287 break;
216 } 288 }
217 289