diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim.Framework/UserProfileManager.cs | 469 |
1 files changed, 329 insertions, 140 deletions
diff --git a/OpenSim.Framework/UserProfileManager.cs b/OpenSim.Framework/UserProfileManager.cs index 22375bc..ef5ab71 100644 --- a/OpenSim.Framework/UserProfileManager.cs +++ b/OpenSim.Framework/UserProfileManager.cs | |||
@@ -32,164 +32,353 @@ namespace OpenSim.Framework.User | |||
32 | DefaultStartupMsg = message; | 32 | DefaultStartupMsg = message; |
33 | } | 33 | } |
34 | 34 | ||
35 | /* public virtual string ParseXMLRPC(string requestBody) | ||
36 | { | ||
37 | XmlRpcRequest request = (XmlRpcRequest)(new XmlRpcRequestDeserializer()).Deserialize(requestBody); | ||
38 | |||
39 | Hashtable requestData = (Hashtable)request.Params[0]; | ||
40 | switch (request.MethodName) | ||
41 | { | ||
42 | case "login_to_simulator":*/ | ||
43 | |||
35 | public virtual string ParseXMLRPC(string requestBody) | 44 | public virtual string ParseXMLRPC(string requestBody) |
36 | { | 45 | { |
46 | |||
37 | XmlRpcRequest request = (XmlRpcRequest)(new XmlRpcRequestDeserializer()).Deserialize(requestBody); | 47 | XmlRpcRequest request = (XmlRpcRequest)(new XmlRpcRequestDeserializer()).Deserialize(requestBody); |
38 | 48 | ||
39 | Hashtable requestData = (Hashtable)request.Params[0]; | ||
40 | switch (request.MethodName) | 49 | switch (request.MethodName) |
41 | { | 50 | { |
42 | case "login_to_simulator": | 51 | case "login_to_simulator": |
43 | bool GoodXML = (requestData.Contains("first") && requestData.Contains("last") && requestData.Contains("passwd")); | 52 | XmlRpcResponse response = XmlRpcLoginMethod(request); |
44 | bool GoodLogin = false; | ||
45 | string firstname = ""; | ||
46 | string lastname = ""; | ||
47 | string passwd = ""; | ||
48 | 53 | ||
49 | if (GoodXML) | 54 | return (Regex.Replace(XmlRpcResponseSerializer.Singleton.Serialize(response), "utf-16", "utf-8")); |
50 | { | 55 | } |
51 | firstname = (string)requestData["first"]; | 56 | |
52 | lastname = (string)requestData["last"]; | 57 | return ""; |
53 | passwd = (string)requestData["passwd"]; | 58 | } |
54 | GoodLogin = AuthenticateUser(firstname, lastname, passwd); | ||
55 | } | ||
56 | 59 | ||
60 | /* public XmlRpcResponse XmlRpcLoginMethod(XmlRpcRequest request) | ||
61 | { | ||
62 | XmlRpcResponse response = new XmlRpcResponse(); | ||
63 | Hashtable requestData = (Hashtable)request.Params[0]; | ||
57 | 64 | ||
58 | if (!(GoodXML && GoodLogin)) | 65 | bool GoodXML = (requestData.Contains("first") && requestData.Contains("last") && requestData.Contains("passwd")); |
59 | { | 66 | bool GoodLogin = false; |
60 | XmlRpcResponse LoginErrorResp = new XmlRpcResponse(); | 67 | string firstname = ""; |
61 | Hashtable ErrorRespData = new Hashtable(); | 68 | string lastname = ""; |
62 | ErrorRespData["reason"] = "key"; | 69 | string passwd = ""; |
63 | ErrorRespData["message"] = "Error connecting to grid. Please double check your login details and check with the grid owner if you are sure these are correct"; | ||
64 | ErrorRespData["login"] = "false"; | ||
65 | LoginErrorResp.Value = ErrorRespData; | ||
66 | return (Regex.Replace(XmlRpcResponseSerializer.Singleton.Serialize(LoginErrorResp), " encoding=\"utf-16\"", "")); | ||
67 | } | ||
68 | 70 | ||
69 | UserProfile TheUser = GetProfileByName(firstname, lastname); | 71 | if (GoodXML) |
72 | { | ||
73 | firstname = (string)requestData["first"]; | ||
74 | lastname = (string)requestData["last"]; | ||
75 | passwd = (string)requestData["passwd"]; | ||
76 | GoodLogin = AuthenticateUser(firstname, lastname, passwd); | ||
77 | } | ||
70 | 78 | ||
71 | /* | ||
72 | if (!((TheUser.CurrentSessionID == null) && (TheUser.CurrentSecureSessionID == null))) | ||
73 | { | ||
74 | XmlRpcResponse PresenceErrorResp = new XmlRpcResponse(); | ||
75 | Hashtable PresenceErrorRespData = new Hashtable(); | ||
76 | PresenceErrorRespData["reason"] = "presence"; | ||
77 | PresenceErrorRespData["message"] = "You appear to be already logged in, if this is not the case please wait for your session to timeout, if this takes longer than a few minutes please contact the grid owner"; | ||
78 | PresenceErrorRespData["login"] = "false"; | ||
79 | PresenceErrorResp.Value = PresenceErrorRespData; | ||
80 | return (Regex.Replace(XmlRpcResponseSerializer.Singleton.Serialize(PresenceErrorResp), " encoding=\"utf-16\"", "")); | ||
81 | 79 | ||
82 | }*/ | 80 | if (!(GoodXML && GoodLogin)) |
81 | { | ||
82 | XmlRpcResponse LoginErrorResp = new XmlRpcResponse(); | ||
83 | Hashtable ErrorRespData = new Hashtable(); | ||
84 | ErrorRespData["reason"] = "key"; | ||
85 | ErrorRespData["message"] = "Error connecting to grid. Please double check your login details and check with the grid owner if you are sure these are correct"; | ||
86 | ErrorRespData["login"] = "false"; | ||
87 | LoginErrorResp.Value = ErrorRespData; | ||
88 | return (Regex.Replace(XmlRpcResponseSerializer.Singleton.Serialize(LoginErrorResp), " encoding=\"utf-16\"", "")); | ||
89 | } | ||
83 | 90 | ||
84 | try | 91 | UserProfile TheUser = GetProfileByName(firstname, lastname); |
85 | { | ||
86 | LLUUID AgentID = TheUser.UUID; | ||
87 | TheUser.InitSessionData(); | ||
88 | // SimProfile SimInfo = new SimProfile(); | ||
89 | // SimInfo = SimInfo.LoadFromGrid(TheUser.homeregionhandle, GridURL, GridSendKey, GridRecvKey); | ||
90 | |||
91 | XmlRpcResponse LoginGoodResp = new XmlRpcResponse(); | ||
92 | Hashtable LoginGoodData = new Hashtable(); | ||
93 | |||
94 | Hashtable GlobalT = new Hashtable(); | ||
95 | GlobalT["sun_texture_id"] = "cce0f112-878f-4586-a2e2-a8f104bba271"; | ||
96 | GlobalT["cloud_texture_id"] = "fc4b9f0b-d008-45c6-96a4-01dd947ac621"; | ||
97 | GlobalT["moon_texture_id"] = "fc4b9f0b-d008-45c6-96a4-01dd947ac621"; | ||
98 | ArrayList GlobalTextures = new ArrayList(); | ||
99 | GlobalTextures.Add(GlobalT); | ||
100 | |||
101 | Hashtable LoginFlagsHash = new Hashtable(); | ||
102 | LoginFlagsHash["daylight_savings"] = "N"; | ||
103 | LoginFlagsHash["stipend_since_login"] = "N"; | ||
104 | LoginFlagsHash["gendered"] = "Y"; | ||
105 | LoginFlagsHash["ever_logged_in"] = "Y"; | ||
106 | ArrayList LoginFlags = new ArrayList(); | ||
107 | LoginFlags.Add(LoginFlagsHash); | ||
108 | |||
109 | Hashtable uiconfig = new Hashtable(); | ||
110 | uiconfig["allow_first_life"] = "Y"; | ||
111 | ArrayList ui_config = new ArrayList(); | ||
112 | ui_config.Add(uiconfig); | ||
113 | |||
114 | Hashtable ClassifiedCategoriesHash = new Hashtable(); | ||
115 | ClassifiedCategoriesHash["category_name"] = "bla bla"; | ||
116 | ClassifiedCategoriesHash["category_id"] = (Int32)1; | ||
117 | ArrayList ClassifiedCategories = new ArrayList(); | ||
118 | ClassifiedCategories.Add(ClassifiedCategoriesHash); | ||
119 | |||
120 | Console.WriteLine("copying inventory data to response"); | ||
121 | ArrayList AgentInventory = new ArrayList(); | ||
122 | foreach (InventoryFolder InvFolder in TheUser.Inventory.InventoryFolders.Values) | ||
123 | { | ||
124 | Hashtable TempHash = new Hashtable(); | ||
125 | TempHash["name"] = InvFolder.FolderName; | ||
126 | TempHash["parent_id"] = InvFolder.ParentID.ToStringHyphenated(); | ||
127 | TempHash["version"] = (Int32)InvFolder.Version; | ||
128 | TempHash["type_default"] = (Int32)InvFolder.DefaultType; | ||
129 | TempHash["folder_id"] = InvFolder.FolderID.ToStringHyphenated(); | ||
130 | AgentInventory.Add(TempHash); | ||
131 | } | ||
132 | |||
133 | Hashtable InventoryRootHash = new Hashtable(); | ||
134 | InventoryRootHash["folder_id"] = TheUser.Inventory.InventoryRoot.FolderID.ToStringHyphenated(); | ||
135 | ArrayList InventoryRoot = new ArrayList(); | ||
136 | InventoryRoot.Add(InventoryRootHash); | ||
137 | |||
138 | Hashtable InitialOutfitHash = new Hashtable(); | ||
139 | InitialOutfitHash["folder_name"] = "Nightclub Female"; | ||
140 | InitialOutfitHash["gender"] = "female"; | ||
141 | ArrayList InitialOutfit = new ArrayList(); | ||
142 | InitialOutfit.Add(InitialOutfitHash); | ||
143 | |||
144 | uint circode = (uint)(Util.RandomClass.Next()); | ||
145 | //TheUser.AddSimCircuit(circode, SimInfo.UUID); | ||
146 | |||
147 | LoginGoodData["last_name"] = TheUser.lastname ; | ||
148 | LoginGoodData["ui-config"] = ui_config; | ||
149 | LoginGoodData["sim_ip"] = "127.0.0.1"; //SimInfo.sim_ip.ToString(); | ||
150 | LoginGoodData["login-flags"] = LoginFlags; | ||
151 | LoginGoodData["global-textures"] = GlobalTextures; | ||
152 | LoginGoodData["classified_categories"] = ClassifiedCategories; | ||
153 | LoginGoodData["event_categories"] = new ArrayList(); | ||
154 | LoginGoodData["inventory-skeleton"] = AgentInventory; | ||
155 | LoginGoodData["inventory-skel-lib"] = new ArrayList(); | ||
156 | LoginGoodData["inventory-root"] = InventoryRoot; | ||
157 | LoginGoodData["event_notifications"] = new ArrayList(); | ||
158 | LoginGoodData["gestures"] = new ArrayList(); | ||
159 | LoginGoodData["inventory-lib-owner"] = new ArrayList(); | ||
160 | LoginGoodData["initial-outfit"] = InitialOutfit; | ||
161 | LoginGoodData["seconds_since_epoch"] = (Int32)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; | ||
162 | LoginGoodData["start_location"] = "last"; | ||
163 | LoginGoodData["home"] = "{'region_handle':[r" + (997 * 256).ToString() + ",r" + (996 * 256).ToString() + "], 'position':[r" + TheUser.homepos.X.ToString() + ",r" + TheUser.homepos.Y.ToString() + ",r" + TheUser.homepos.Z.ToString() + "], 'look_at':[r" + TheUser.homelookat.X.ToString() + ",r" + TheUser.homelookat.Y.ToString() + ",r" + TheUser.homelookat.Z.ToString() + "]}"; | ||
164 | LoginGoodData["message"] = DefaultStartupMsg; | ||
165 | LoginGoodData["first_name"] = TheUser.firstname ; | ||
166 | LoginGoodData["circuit_code"] = (Int32)circode; | ||
167 | LoginGoodData["sim_port"] = 9000; //(Int32)SimInfo.sim_port; | ||
168 | LoginGoodData["secure_session_id"] = TheUser.CurrentSecureSessionID.ToStringHyphenated(); | ||
169 | LoginGoodData["look_at"] = "\n[r" + TheUser.homelookat.X.ToString() + ",r" + TheUser.homelookat.Y.ToString() + ",r" + TheUser.homelookat.Z.ToString() + "]\n"; | ||
170 | LoginGoodData["agent_id"] = AgentID.ToStringHyphenated(); | ||
171 | LoginGoodData["region_y"] = (Int32) 996 * 256; // (Int32)SimInfo.RegionLocY * 256; | ||
172 | LoginGoodData["region_x"] = (Int32) 997 * 256; //SimInfo.RegionLocX * 256; | ||
173 | LoginGoodData["seed_capability"] = null; | ||
174 | LoginGoodData["agent_access"] = "M"; | ||
175 | LoginGoodData["session_id"] = TheUser.CurrentSessionID.ToStringHyphenated(); | ||
176 | LoginGoodData["login"] = "true"; | ||
177 | |||
178 | this.CustomiseResponse(ref LoginGoodData, TheUser); | ||
179 | LoginGoodResp.Value = LoginGoodData; | ||
180 | //TheUser.SendDataToSim(SimInfo); | ||
181 | return (Regex.Replace(XmlRpcResponseSerializer.Singleton.Serialize(LoginGoodResp), "utf-16", "utf-8")); | ||
182 | 92 | ||
183 | } | 93 | |
184 | catch (Exception E) | 94 | if (!((TheUser.CurrentSessionID == null) && (TheUser.CurrentSecureSessionID == null))) |
95 | { | ||
96 | XmlRpcResponse PresenceErrorResp = new XmlRpcResponse(); | ||
97 | Hashtable PresenceErrorRespData = new Hashtable(); | ||
98 | PresenceErrorRespData["reason"] = "presence"; | ||
99 | PresenceErrorRespData["message"] = "You appear to be already logged in, if this is not the case please wait for your session to timeout, if this takes longer than a few minutes please contact the grid owner"; | ||
100 | PresenceErrorRespData["login"] = "false"; | ||
101 | PresenceErrorResp.Value = PresenceErrorRespData; | ||
102 | return (Regex.Replace(XmlRpcResponseSerializer.Singleton.Serialize(PresenceErrorResp), " encoding=\"utf-16\"", "")); | ||
103 | |||
104 | } | ||
105 | |||
106 | try | ||
107 | { | ||
108 | LLUUID AgentID = TheUser.UUID; | ||
109 | TheUser.InitSessionData(); | ||
110 | // SimProfile SimInfo = new SimProfile(); | ||
111 | // SimInfo = SimInfo.LoadFromGrid(TheUser.homeregionhandle, GridURL, GridSendKey, GridRecvKey); | ||
112 | |||
113 | XmlRpcResponse LoginGoodResp = new XmlRpcResponse(); | ||
114 | Hashtable LoginGoodData = new Hashtable(); | ||
115 | |||
116 | Hashtable GlobalT = new Hashtable(); | ||
117 | GlobalT["sun_texture_id"] = "cce0f112-878f-4586-a2e2-a8f104bba271"; | ||
118 | GlobalT["cloud_texture_id"] = "fc4b9f0b-d008-45c6-96a4-01dd947ac621"; | ||
119 | GlobalT["moon_texture_id"] = "fc4b9f0b-d008-45c6-96a4-01dd947ac621"; | ||
120 | ArrayList GlobalTextures = new ArrayList(); | ||
121 | GlobalTextures.Add(GlobalT); | ||
122 | |||
123 | Hashtable LoginFlagsHash = new Hashtable(); | ||
124 | LoginFlagsHash["daylight_savings"] = "N"; | ||
125 | LoginFlagsHash["stipend_since_login"] = "N"; | ||
126 | LoginFlagsHash["gendered"] = "Y"; | ||
127 | LoginFlagsHash["ever_logged_in"] = "Y"; | ||
128 | ArrayList LoginFlags = new ArrayList(); | ||
129 | LoginFlags.Add(LoginFlagsHash); | ||
130 | |||
131 | Hashtable uiconfig = new Hashtable(); | ||
132 | uiconfig["allow_first_life"] = "Y"; | ||
133 | ArrayList ui_config = new ArrayList(); | ||
134 | ui_config.Add(uiconfig); | ||
135 | |||
136 | Hashtable ClassifiedCategoriesHash = new Hashtable(); | ||
137 | ClassifiedCategoriesHash["category_name"] = "bla bla"; | ||
138 | ClassifiedCategoriesHash["category_id"] = (Int32)1; | ||
139 | ArrayList ClassifiedCategories = new ArrayList(); | ||
140 | ClassifiedCategories.Add(ClassifiedCategoriesHash); | ||
141 | |||
142 | Console.WriteLine("copying inventory data to response"); | ||
143 | ArrayList AgentInventory = new ArrayList(); | ||
144 | foreach (InventoryFolder InvFolder in TheUser.Inventory.InventoryFolders.Values) | ||
145 | { | ||
146 | Hashtable TempHash = new Hashtable(); | ||
147 | TempHash["name"] = InvFolder.FolderName; | ||
148 | TempHash["parent_id"] = InvFolder.ParentID.ToStringHyphenated(); | ||
149 | TempHash["version"] = (Int32)InvFolder.Version; | ||
150 | TempHash["type_default"] = (Int32)InvFolder.DefaultType; | ||
151 | TempHash["folder_id"] = InvFolder.FolderID.ToStringHyphenated(); | ||
152 | AgentInventory.Add(TempHash); | ||
153 | } | ||
154 | |||
155 | Hashtable InventoryRootHash = new Hashtable(); | ||
156 | InventoryRootHash["folder_id"] = TheUser.Inventory.InventoryRoot.FolderID.ToStringHyphenated(); | ||
157 | ArrayList InventoryRoot = new ArrayList(); | ||
158 | InventoryRoot.Add(InventoryRootHash); | ||
159 | |||
160 | Hashtable InitialOutfitHash = new Hashtable(); | ||
161 | InitialOutfitHash["folder_name"] = "Nightclub Female"; | ||
162 | InitialOutfitHash["gender"] = "female"; | ||
163 | ArrayList InitialOutfit = new ArrayList(); | ||
164 | InitialOutfit.Add(InitialOutfitHash); | ||
165 | |||
166 | uint circode = (uint)(Util.RandomClass.Next()); | ||
167 | //TheUser.AddSimCircuit(circode, SimInfo.UUID); | ||
168 | |||
169 | LoginGoodData["last_name"] = TheUser.lastname ; | ||
170 | LoginGoodData["ui-config"] = ui_config; | ||
171 | LoginGoodData["sim_ip"] = "127.0.0.1"; //SimInfo.sim_ip.ToString(); | ||
172 | LoginGoodData["login-flags"] = LoginFlags; | ||
173 | LoginGoodData["global-textures"] = GlobalTextures; | ||
174 | LoginGoodData["classified_categories"] = ClassifiedCategories; | ||
175 | LoginGoodData["event_categories"] = new ArrayList(); | ||
176 | LoginGoodData["inventory-skeleton"] = AgentInventory; | ||
177 | LoginGoodData["inventory-skel-lib"] = new ArrayList(); | ||
178 | LoginGoodData["inventory-root"] = InventoryRoot; | ||
179 | LoginGoodData["event_notifications"] = new ArrayList(); | ||
180 | LoginGoodData["gestures"] = new ArrayList(); | ||
181 | LoginGoodData["inventory-lib-owner"] = new ArrayList(); | ||
182 | LoginGoodData["initial-outfit"] = InitialOutfit; | ||
183 | LoginGoodData["seconds_since_epoch"] = (Int32)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; | ||
184 | LoginGoodData["start_location"] = "last"; | ||
185 | LoginGoodData["home"] = "{'region_handle':[r" + (997 * 256).ToString() + ",r" + (996 * 256).ToString() + "], 'position':[r" + TheUser.homepos.X.ToString() + ",r" + TheUser.homepos.Y.ToString() + ",r" + TheUser.homepos.Z.ToString() + "], 'look_at':[r" + TheUser.homelookat.X.ToString() + ",r" + TheUser.homelookat.Y.ToString() + ",r" + TheUser.homelookat.Z.ToString() + "]}"; | ||
186 | LoginGoodData["message"] = DefaultStartupMsg; | ||
187 | LoginGoodData["first_name"] = TheUser.firstname ; | ||
188 | LoginGoodData["circuit_code"] = (Int32)circode; | ||
189 | LoginGoodData["sim_port"] = 9000; //(Int32)SimInfo.sim_port; | ||
190 | LoginGoodData["secure_session_id"] = TheUser.CurrentSecureSessionID.ToStringHyphenated(); | ||
191 | LoginGoodData["look_at"] = "\n[r" + TheUser.homelookat.X.ToString() + ",r" + TheUser.homelookat.Y.ToString() + ",r" + TheUser.homelookat.Z.ToString() + "]\n"; | ||
192 | LoginGoodData["agent_id"] = AgentID.ToStringHyphenated(); | ||
193 | LoginGoodData["region_y"] = (Int32) 996 * 256; // (Int32)SimInfo.RegionLocY * 256; | ||
194 | LoginGoodData["region_x"] = (Int32) 997 * 256; //SimInfo.RegionLocX * 256; | ||
195 | LoginGoodData["seed_capability"] = null; | ||
196 | LoginGoodData["agent_access"] = "M"; | ||
197 | LoginGoodData["session_id"] = TheUser.CurrentSessionID.ToStringHyphenated(); | ||
198 | LoginGoodData["login"] = "true"; | ||
199 | |||
200 | this.CustomiseResponse(ref LoginGoodData, TheUser); | ||
201 | LoginGoodResp.Value = LoginGoodData; | ||
202 | //TheUser.SendDataToSim(SimInfo); | ||
203 | return (Regex.Replace(XmlRpcResponseSerializer.Singleton.Serialize(LoginGoodResp), "utf-16", "utf-8")); | ||
204 | |||
205 | } | ||
206 | catch (Exception E) | ||
207 | { | ||
208 | Console.WriteLine(E.ToString()); | ||
209 | } | ||
210 | |||
211 | break; | ||
212 | } | ||
213 | |||
214 | return ""; | ||
215 | }*/ | ||
216 | |||
217 | public XmlRpcResponse XmlRpcLoginMethod(XmlRpcRequest request) | ||
218 | { | ||
219 | XmlRpcResponse response = new XmlRpcResponse(); | ||
220 | Hashtable requestData = (Hashtable)request.Params[0]; | ||
221 | |||
222 | bool GoodXML = (requestData.Contains("first") && requestData.Contains("last") && requestData.Contains("passwd")); | ||
223 | bool GoodLogin = false; | ||
224 | string firstname = ""; | ||
225 | string lastname = ""; | ||
226 | string passwd = ""; | ||
227 | |||
228 | if (GoodXML) | ||
229 | { | ||
230 | firstname = (string)requestData["first"]; | ||
231 | lastname = (string)requestData["last"]; | ||
232 | passwd = (string)requestData["passwd"]; | ||
233 | GoodLogin = AuthenticateUser(firstname, lastname, passwd); | ||
234 | } | ||
235 | |||
236 | |||
237 | if (!(GoodXML && GoodLogin)) | ||
238 | { | ||
239 | response = CreateErrorConnectingToGridResponse(); | ||
240 | } | ||
241 | else | ||
242 | { | ||
243 | UserProfile TheUser = GetProfileByName(firstname, lastname); | ||
244 | //we need to sort out how sessions are logged out , currently the sim tells the gridserver | ||
245 | //but if as this suggests the userserver handles it then please have the sim telling the userserver instead | ||
246 | //as it really makes things messy for sandbox mode | ||
247 | //if (!((TheUser.CurrentSessionID == null) && (TheUser.CurrentSecureSessionID == null))) | ||
248 | // { | ||
249 | // response = CreateAlreadyLoggedInResponse(); | ||
250 | // } | ||
251 | //else | ||
252 | //{ | ||
253 | try | ||
254 | { | ||
255 | Hashtable responseData = new Hashtable(); | ||
256 | |||
257 | LLUUID AgentID = TheUser.UUID; | ||
258 | TheUser.InitSessionData(); | ||
259 | // SimProfile SimInfo = new SimProfile(); | ||
260 | // SimInfo = SimInfo.LoadFromGrid(TheUser.homeregionhandle, GridURL, GridSendKey, GridRecvKey); | ||
261 | |||
262 | |||
263 | Hashtable GlobalT = new Hashtable(); | ||
264 | GlobalT["sun_texture_id"] = "cce0f112-878f-4586-a2e2-a8f104bba271"; | ||
265 | GlobalT["cloud_texture_id"] = "fc4b9f0b-d008-45c6-96a4-01dd947ac621"; | ||
266 | GlobalT["moon_texture_id"] = "fc4b9f0b-d008-45c6-96a4-01dd947ac621"; | ||
267 | ArrayList GlobalTextures = new ArrayList(); | ||
268 | GlobalTextures.Add(GlobalT); | ||
269 | |||
270 | Hashtable LoginFlagsHash = new Hashtable(); | ||
271 | LoginFlagsHash["daylight_savings"] = "N"; | ||
272 | LoginFlagsHash["stipend_since_login"] = "N"; | ||
273 | LoginFlagsHash["gendered"] = "Y"; | ||
274 | LoginFlagsHash["ever_logged_in"] = "Y"; | ||
275 | ArrayList LoginFlags = new ArrayList(); | ||
276 | LoginFlags.Add(LoginFlagsHash); | ||
277 | |||
278 | Hashtable uiconfig = new Hashtable(); | ||
279 | uiconfig["allow_first_life"] = "Y"; | ||
280 | ArrayList ui_config = new ArrayList(); | ||
281 | ui_config.Add(uiconfig); | ||
282 | |||
283 | Hashtable ClassifiedCategoriesHash = new Hashtable(); | ||
284 | ClassifiedCategoriesHash["category_name"] = "bla bla"; | ||
285 | ClassifiedCategoriesHash["category_id"] = (Int32)1; | ||
286 | ArrayList ClassifiedCategories = new ArrayList(); | ||
287 | ClassifiedCategories.Add(ClassifiedCategoriesHash); | ||
288 | |||
289 | ArrayList AgentInventory = new ArrayList(); | ||
290 | foreach (InventoryFolder InvFolder in TheUser.Inventory.InventoryFolders.Values) | ||
185 | { | 291 | { |
186 | Console.WriteLine(E.ToString()); | 292 | Hashtable TempHash = new Hashtable(); |
293 | TempHash["name"] = InvFolder.FolderName; | ||
294 | TempHash["parent_id"] = InvFolder.ParentID.ToStringHyphenated(); | ||
295 | TempHash["version"] = (Int32)InvFolder.Version; | ||
296 | TempHash["type_default"] = (Int32)InvFolder.DefaultType; | ||
297 | TempHash["folder_id"] = InvFolder.FolderID.ToStringHyphenated(); | ||
298 | AgentInventory.Add(TempHash); | ||
187 | } | 299 | } |
188 | 300 | ||
189 | break; | 301 | Hashtable InventoryRootHash = new Hashtable(); |
302 | InventoryRootHash["folder_id"] = TheUser.Inventory.InventoryRoot.FolderID.ToStringHyphenated(); | ||
303 | ArrayList InventoryRoot = new ArrayList(); | ||
304 | InventoryRoot.Add(InventoryRootHash); | ||
305 | |||
306 | Hashtable InitialOutfitHash = new Hashtable(); | ||
307 | InitialOutfitHash["folder_name"] = "Nightclub Female"; | ||
308 | InitialOutfitHash["gender"] = "female"; | ||
309 | ArrayList InitialOutfit = new ArrayList(); | ||
310 | InitialOutfit.Add(InitialOutfitHash); | ||
311 | |||
312 | uint circode = (uint)(Util.RandomClass.Next()); | ||
313 | //TheUser.AddSimCircuit(circode, SimInfo.UUID); | ||
314 | |||
315 | responseData["last_name"] = TheUser.lastname; | ||
316 | responseData["ui-config"] = ui_config; | ||
317 | responseData["sim_ip"] = "127.0.0.1"; //SimInfo.sim_ip.ToString(); | ||
318 | responseData["login-flags"] = LoginFlags; | ||
319 | responseData["global-textures"] = GlobalTextures; | ||
320 | responseData["classified_categories"] = ClassifiedCategories; | ||
321 | responseData["event_categories"] = new ArrayList(); | ||
322 | responseData["inventory-skeleton"] = AgentInventory; | ||
323 | responseData["inventory-skel-lib"] = new ArrayList(); | ||
324 | responseData["inventory-root"] = InventoryRoot; | ||
325 | responseData["event_notifications"] = new ArrayList(); | ||
326 | responseData["gestures"] = new ArrayList(); | ||
327 | responseData["inventory-lib-owner"] = new ArrayList(); | ||
328 | responseData["initial-outfit"] = InitialOutfit; | ||
329 | responseData["seconds_since_epoch"] = (Int32)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; | ||
330 | responseData["start_location"] = "last"; | ||
331 | responseData["home"] = "{'region_handle':[r" + (997 * 256).ToString() + ",r" + (996 * 256).ToString() + "], 'position':[r" + TheUser.homepos.X.ToString() + ",r" + TheUser.homepos.Y.ToString() + ",r" + TheUser.homepos.Z.ToString() + "], 'look_at':[r" + TheUser.homelookat.X.ToString() + ",r" + TheUser.homelookat.Y.ToString() + ",r" + TheUser.homelookat.Z.ToString() + "]}"; | ||
332 | responseData["message"] = DefaultStartupMsg; | ||
333 | responseData["first_name"] = TheUser.firstname; | ||
334 | responseData["circuit_code"] = (Int32)circode; | ||
335 | responseData["sim_port"] = 9000; //(Int32)SimInfo.sim_port; | ||
336 | responseData["secure_session_id"] = TheUser.CurrentSecureSessionID.ToStringHyphenated(); | ||
337 | responseData["look_at"] = "\n[r" + TheUser.homelookat.X.ToString() + ",r" + TheUser.homelookat.Y.ToString() + ",r" + TheUser.homelookat.Z.ToString() + "]\n"; | ||
338 | responseData["agent_id"] = AgentID.ToStringHyphenated(); | ||
339 | responseData["region_y"] = (Int32)996 * 256; // (Int32)SimInfo.RegionLocY * 256; | ||
340 | responseData["region_x"] = (Int32)997 * 256; //SimInfo.RegionLocX * 256; | ||
341 | responseData["seed_capability"] = null; | ||
342 | responseData["agent_access"] = "M"; | ||
343 | responseData["session_id"] = TheUser.CurrentSessionID.ToStringHyphenated(); | ||
344 | responseData["login"] = "true"; | ||
345 | |||
346 | this.CustomiseResponse(ref responseData, TheUser); | ||
347 | response.Value = responseData; | ||
348 | //TheUser.SendDataToSim(SimInfo); | ||
349 | |||
350 | |||
351 | |||
352 | } | ||
353 | catch (Exception E) | ||
354 | { | ||
355 | Console.WriteLine(E.ToString()); | ||
356 | } | ||
357 | //} | ||
190 | } | 358 | } |
359 | return response; | ||
360 | } | ||
191 | 361 | ||
192 | return ""; | 362 | private static XmlRpcResponse CreateErrorConnectingToGridResponse() |
363 | { | ||
364 | XmlRpcResponse response = new XmlRpcResponse(); | ||
365 | Hashtable ErrorRespData = new Hashtable(); | ||
366 | ErrorRespData["reason"] = "key"; | ||
367 | ErrorRespData["message"] = "Error connecting to grid. Please double check your login details and check with the grid owner if you are sure these are correct"; | ||
368 | ErrorRespData["login"] = "false"; | ||
369 | response.Value = ErrorRespData; | ||
370 | return response; | ||
371 | } | ||
372 | |||
373 | private static XmlRpcResponse CreateAlreadyLoggedInResponse() | ||
374 | { | ||
375 | XmlRpcResponse response = new XmlRpcResponse(); | ||
376 | Hashtable PresenceErrorRespData = new Hashtable(); | ||
377 | PresenceErrorRespData["reason"] = "presence"; | ||
378 | PresenceErrorRespData["message"] = "You appear to be already logged in, if this is not the case please wait for your session to timeout, if this takes longer than a few minutes please contact the grid owner"; | ||
379 | PresenceErrorRespData["login"] = "false"; | ||
380 | response.Value = PresenceErrorRespData; | ||
381 | return response; | ||
193 | } | 382 | } |
194 | 383 | ||
195 | public virtual void CustomiseResponse(ref Hashtable response, UserProfile theUser) | 384 | public virtual void CustomiseResponse(ref Hashtable response, UserProfile theUser) |
@@ -203,8 +392,8 @@ namespace OpenSim.Framework.User | |||
203 | response["home"] = "{'region_handle':[r" + (SimInfo.RegionLocX * 256).ToString() + ",r" + (SimInfo.RegionLocY * 256).ToString() + "], 'position':[r" + theUser.homepos.X.ToString() + ",r" + theUser.homepos.Y.ToString() + ",r" + theUser.homepos.Z.ToString() + "], 'look_at':[r" + theUser.homelookat.X.ToString() + ",r" + theUser.homelookat.Y.ToString() + ",r" + theUser.homelookat.Z.ToString() + "]}"; | 392 | response["home"] = "{'region_handle':[r" + (SimInfo.RegionLocX * 256).ToString() + ",r" + (SimInfo.RegionLocY * 256).ToString() + "], 'position':[r" + theUser.homepos.X.ToString() + ",r" + theUser.homepos.Y.ToString() + ",r" + theUser.homepos.Z.ToString() + "], 'look_at':[r" + theUser.homelookat.X.ToString() + ",r" + theUser.homelookat.Y.ToString() + ",r" + theUser.homelookat.Z.ToString() + "]}"; |
204 | response["sim_ip"] = SimInfo.sim_ip.ToString(); | 393 | response["sim_ip"] = SimInfo.sim_ip.ToString(); |
205 | response["sim_port"] = (Int32)SimInfo.sim_port; | 394 | response["sim_port"] = (Int32)SimInfo.sim_port; |
206 | response["region_y"] = (Int32) SimInfo.RegionLocY * 256; | 395 | response["region_y"] = (Int32)SimInfo.RegionLocY * 256; |
207 | response["region_x"] = (Int32) SimInfo.RegionLocX * 256; | 396 | response["region_x"] = (Int32)SimInfo.RegionLocX * 256; |
208 | 397 | ||
209 | //default is ogs user server, so let the sim know about the user via a XmlRpcRequest | 398 | //default is ogs user server, so let the sim know about the user via a XmlRpcRequest |
210 | Console.WriteLine(SimInfo.caps_url); | 399 | Console.WriteLine(SimInfo.caps_url); |