aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenGridServices.GridServer/GridHttp.cs
diff options
context:
space:
mode:
authorgareth2007-04-11 08:51:39 +0000
committergareth2007-04-11 08:51:39 +0000
commit950389a2633034fa8ff93dfa97dc14db46d40efc (patch)
treedc3b3b79cf90c40eb06be9bfff5cad7f366b6de5 /OpenGridServices.GridServer/GridHttp.cs
parent* nant building again (diff)
downloadopensim-SC_OLD-950389a2633034fa8ff93dfa97dc14db46d40efc.zip
opensim-SC_OLD-950389a2633034fa8ff93dfa97dc14db46d40efc.tar.gz
opensim-SC_OLD-950389a2633034fa8ff93dfa97dc14db46d40efc.tar.bz2
opensim-SC_OLD-950389a2633034fa8ff93dfa97dc14db46d40efc.tar.xz
Added POST handler for /sims/ in the grid server
Removed asset/user config in grid mode in the region server Added "create user" command in the user server console Begun buggy code to send sim details to the grid at startup Drank whole pack of red bull in one night and made stupid jokes in SVN logs and C# comments
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