aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenGridServices.GridServer
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenGridServices.GridServer/GridHttp.cs110
-rw-r--r--OpenGridServices.GridServer/OpenGridServices.GridServer.exe.build96
2 files changed, 139 insertions, 67 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
diff --git a/OpenGridServices.GridServer/OpenGridServices.GridServer.exe.build b/OpenGridServices.GridServer/OpenGridServices.GridServer.exe.build
index 90eaf1f..111e2f7 100644
--- a/OpenGridServices.GridServer/OpenGridServices.GridServer.exe.build
+++ b/OpenGridServices.GridServer/OpenGridServices.GridServer.exe.build
@@ -1,48 +1,48 @@
1<?xml version="1.0" ?> 1<?xml version="1.0" ?>
2<project name="OpenGridServices.GridServer" default="build"> 2<project name="OpenGridServices.GridServer" default="build">
3 <target name="build"> 3 <target name="build">
4 <echo message="Build Directory is ${project::get-base-directory()}/${build.dir}" /> 4 <echo message="Build Directory is ${project::get-base-directory()}/${build.dir}" />
5 <mkdir dir="${project::get-base-directory()}/${build.dir}" /> 5 <mkdir dir="${project::get-base-directory()}/${build.dir}" />
6 <copy todir="${project::get-base-directory()}/${build.dir}"> 6 <copy todir="${project::get-base-directory()}/${build.dir}">
7 <fileset basedir="${project::get-base-directory()}"> 7 <fileset basedir="${project::get-base-directory()}">
8 </fileset> 8 </fileset>
9 </copy> 9 </copy>
10 <csc target="exe" debug="${build.debug}" unsafe="False" define="TRACE;DEBUG" output="${project::get-base-directory()}/${build.dir}/${project::get-name()}.exe"> 10 <csc target="exe" debug="${build.debug}" unsafe="False" define="TRACE" output="${project::get-base-directory()}/${build.dir}/${project::get-name()}.exe">
11 <resources prefix="OpenGridServices.GridServer" dynamicprefix="true" > 11 <resources prefix="OpenGridServices.GridServer" dynamicprefix="true" >
12 </resources> 12 </resources>
13 <sources failonempty="true"> 13 <sources failonempty="true">
14 <include name="GridHttp.cs" /> 14 <include name="GridHttp.cs" />
15 <include name="Main.cs" /> 15 <include name="Main.cs" />
16 <include name="SimProfiles.cs" /> 16 <include name="SimProfiles.cs" />
17 <include name="Properties/AssemblyInfo.cs" /> 17 <include name="Properties/AssemblyInfo.cs" />
18 </sources> 18 </sources>
19 <references basedir="${project::get-base-directory()}"> 19 <references basedir="${project::get-base-directory()}">
20 <lib> 20 <lib>
21 <include name="${project::get-base-directory()}" /> 21 <include name="${project::get-base-directory()}" />
22 <include name="${project::get-base-directory()}/${build.dir}" /> 22 <include name="${project::get-base-directory()}/${build.dir}" />
23 </lib> 23 </lib>
24 <include name="System.dll" /> 24 <include name="System.dll" />
25 <include name="System.Data.dll" /> 25 <include name="System.Data.dll" />
26 <include name="System.Xml.dll" /> 26 <include name="System.Xml.dll" />
27 <include name="../bin/OpenSim.Framework.dll" /> 27 <include name="../bin/OpenSim.Framework.dll" />
28 <include name="../bin/OpenSim.Framework.Console.dll" /> 28 <include name="../bin/OpenSim.Framework.Console.dll" />
29 <include name="../bin/libsecondlife.dll" /> 29 <include name="../bin/libsecondlife.dll" />
30 <include name="../bin/Db4objects.Db4o.dll" /> 30 <include name="../bin/Db4objects.Db4o.dll" />
31 </references> 31 </references>
32 </csc> 32 </csc>
33 <echo message="Copying from [${project::get-base-directory()}/${build.dir}/] to [${project::get-base-directory()}/../bin/" /> 33 <echo message="Copying from [${project::get-base-directory()}/${build.dir}/] to [${project::get-base-directory()}/../bin/" />
34 <mkdir dir="${project::get-base-directory()}/../bin/"/> 34 <mkdir dir="${project::get-base-directory()}/../bin/"/>
35 <copy todir="${project::get-base-directory()}/../bin/"> 35 <copy todir="${project::get-base-directory()}/../bin/">
36 <fileset basedir="${project::get-base-directory()}/${build.dir}/" > 36 <fileset basedir="${project::get-base-directory()}/${build.dir}/" >
37 <include name="*.dll"/> 37 <include name="*.dll"/>
38 <include name="*.exe"/> 38 <include name="*.exe"/>
39 </fileset> 39 </fileset>
40 </copy> 40 </copy>
41 </target> 41 </target>
42 <target name="clean"> 42 <target name="clean">
43 <delete dir="${bin.dir}" failonerror="false" /> 43 <delete dir="${bin.dir}" failonerror="false" />
44 <delete dir="${obj.dir}" failonerror="false" /> 44 <delete dir="${obj.dir}" failonerror="false" />
45 </target> 45 </target>
46 <target name="doc" description="Creates documentation."> 46 <target name="doc" description="Creates documentation.">
47 </target> 47 </target>
48</project> 48</project>