diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Server/Handlers/Presence/PresenceServerPostHandler.cs | 152 |
1 files changed, 144 insertions, 8 deletions
diff --git a/OpenSim/Server/Handlers/Presence/PresenceServerPostHandler.cs b/OpenSim/Server/Handlers/Presence/PresenceServerPostHandler.cs index d914d32..b02c2ed 100644 --- a/OpenSim/Server/Handlers/Presence/PresenceServerPostHandler.cs +++ b/OpenSim/Server/Handlers/Presence/PresenceServerPostHandler.cs | |||
@@ -78,8 +78,18 @@ namespace OpenSim.Server.Handlers.Presence | |||
78 | 78 | ||
79 | switch (method) | 79 | switch (method) |
80 | { | 80 | { |
81 | case "login": | ||
82 | return LoginAgent(request); | ||
83 | case "logout": | ||
84 | return LogoutAgent(request); | ||
85 | case "logoutregion": | ||
86 | return LogoutRegionAgents(request); | ||
81 | case "report": | 87 | case "report": |
82 | return Report(request); | 88 | return Report(request); |
89 | case "getagent": | ||
90 | return GetAgent(request); | ||
91 | case "getagents": | ||
92 | return GetAgents(request); | ||
83 | } | 93 | } |
84 | m_log.DebugFormat("[PRESENCE HANDLER]: unknown method request: {0}", method); | 94 | m_log.DebugFormat("[PRESENCE HANDLER]: unknown method request: {0}", method); |
85 | } | 95 | } |
@@ -92,28 +102,154 @@ namespace OpenSim.Server.Handlers.Presence | |||
92 | 102 | ||
93 | } | 103 | } |
94 | 104 | ||
105 | byte[] LoginAgent(Dictionary<string, object> request) | ||
106 | { | ||
107 | UUID principal = UUID.Zero; | ||
108 | UUID session = UUID.Zero; | ||
109 | UUID ssession = UUID.Zero; | ||
110 | |||
111 | if (!request.ContainsKey("PrincipalID") || !request.ContainsKey("SessionID")) | ||
112 | return FailureResult(); | ||
113 | |||
114 | if (!UUID.TryParse(request["PrincipalID"].ToString(), out principal)) | ||
115 | return FailureResult(); | ||
116 | |||
117 | if (!UUID.TryParse(request["SessionID"].ToString(), out session)) | ||
118 | return FailureResult(); | ||
119 | |||
120 | if (request.ContainsKey("SecureSessionID")) | ||
121 | // If it's malformed, we go on with a Zero on it | ||
122 | UUID.TryParse(request["SecureSessionID"].ToString(), out ssession); | ||
123 | |||
124 | if (m_PresenceService.LoginAgent(principal, session, ssession)) | ||
125 | return SuccessResult(); | ||
126 | |||
127 | return FailureResult(); | ||
128 | } | ||
129 | |||
130 | byte[] LogoutAgent(Dictionary<string, object> request) | ||
131 | { | ||
132 | UUID session = UUID.Zero; | ||
133 | |||
134 | if (!request.ContainsKey("SessionID")) | ||
135 | return FailureResult(); | ||
136 | |||
137 | if (!UUID.TryParse(request["SessionID"].ToString(), out session)) | ||
138 | return FailureResult(); | ||
139 | |||
140 | if (m_PresenceService.LogoutAgent(session)) | ||
141 | return SuccessResult(); | ||
142 | |||
143 | return FailureResult(); | ||
144 | } | ||
145 | |||
146 | byte[] LogoutRegionAgents(Dictionary<string, object> request) | ||
147 | { | ||
148 | UUID region = UUID.Zero; | ||
149 | |||
150 | if (!request.ContainsKey("RegionID")) | ||
151 | return FailureResult(); | ||
152 | |||
153 | if (!UUID.TryParse(request["RegionID"].ToString(), out region)) | ||
154 | return FailureResult(); | ||
155 | |||
156 | if (m_PresenceService.LogoutRegionAgents(region)) | ||
157 | return SuccessResult(); | ||
158 | |||
159 | return FailureResult(); | ||
160 | } | ||
161 | |||
95 | byte[] Report(Dictionary<string, object> request) | 162 | byte[] Report(Dictionary<string, object> request) |
96 | { | 163 | { |
97 | PresenceInfo info = new PresenceInfo(); | 164 | UUID session = UUID.Zero; |
165 | UUID region = UUID.Zero; | ||
166 | Vector3 position = new Vector3(128, 128, 70); | ||
167 | Vector3 look = Vector3.Zero; | ||
98 | 168 | ||
99 | if (!request.ContainsKey("PrincipalID") || !request.ContainsKey("RegionID")) | 169 | if (!request.ContainsKey("SessionID") || !request.ContainsKey("RegionID")) |
100 | return FailureResult(); | 170 | return FailureResult(); |
101 | 171 | ||
102 | if (!UUID.TryParse(request["PrincipalID"].ToString(), | 172 | if (!UUID.TryParse(request["SessionID"].ToString(), out session)) |
103 | out info.PrincipalID)) | ||
104 | return FailureResult(); | 173 | return FailureResult(); |
105 | 174 | ||
106 | if (!UUID.TryParse(request["RegionID"].ToString(), | 175 | if (!UUID.TryParse(request["RegionID"].ToString(), out region)) |
107 | out info.RegionID)) | ||
108 | return FailureResult(); | 176 | return FailureResult(); |
109 | 177 | ||
178 | if (request.ContainsKey("position")) | ||
179 | Vector3.TryParse(request["position"].ToString(), out position); | ||
110 | 180 | ||
111 | // if (m_PresenceService.ReportAgent(info)) | 181 | if (request.ContainsKey("lookAt")) |
112 | // return SuccessResult(); | 182 | Vector3.TryParse(request["lookAt"].ToString(), out look); |
183 | |||
184 | if (m_PresenceService.ReportAgent(session, region, position, look)) | ||
185 | return SuccessResult(); | ||
113 | 186 | ||
114 | return FailureResult(); | 187 | return FailureResult(); |
115 | } | 188 | } |
116 | 189 | ||
190 | byte[] GetAgent(Dictionary<string, object> request) | ||
191 | { | ||
192 | UUID session = UUID.Zero; | ||
193 | |||
194 | if (!request.ContainsKey("SessionID")) | ||
195 | return FailureResult(); | ||
196 | |||
197 | if (!UUID.TryParse(request["SessionID"].ToString(), out session)) | ||
198 | return FailureResult(); | ||
199 | |||
200 | PresenceInfo pinfo = m_PresenceService.GetAgent(session); | ||
201 | |||
202 | Dictionary<string, object> result = new Dictionary<string, object>(); | ||
203 | if (pinfo == null) | ||
204 | result["result"] = "null"; | ||
205 | else | ||
206 | result["result"] = pinfo.ToKeyValuePairs(); | ||
207 | |||
208 | string xmlString = ServerUtils.BuildXmlResponse(result); | ||
209 | //m_log.DebugFormat("[GRID HANDLER]: resp string: {0}", xmlString); | ||
210 | UTF8Encoding encoding = new UTF8Encoding(); | ||
211 | return encoding.GetBytes(xmlString); | ||
212 | } | ||
213 | |||
214 | byte[] GetAgents(Dictionary<string, object> request) | ||
215 | { | ||
216 | |||
217 | string[] userIDs; | ||
218 | |||
219 | if (!request.ContainsKey("uuids")) | ||
220 | return FailureResult(); | ||
221 | |||
222 | if (!(request["uuids"] is List<string>)) | ||
223 | { | ||
224 | m_log.DebugFormat("[PRESENCE HANDLER]: GetAgents input argument was of unexpected type {0}", request["uuids"].GetType().ToString()); | ||
225 | return FailureResult(); | ||
226 | } | ||
227 | |||
228 | userIDs = ((List<string>)request["uuids"]).ToArray(); | ||
229 | |||
230 | PresenceInfo[] pinfos = m_PresenceService.GetAgents(userIDs); | ||
231 | |||
232 | Dictionary<string, object> result = new Dictionary<string, object>(); | ||
233 | if ((pinfos == null) || ((pinfos != null) && (pinfos.Length == 0))) | ||
234 | result["result"] = "null"; | ||
235 | else | ||
236 | { | ||
237 | int i = 0; | ||
238 | foreach (PresenceInfo pinfo in pinfos) | ||
239 | { | ||
240 | Dictionary<string, object> rinfoDict = pinfo.ToKeyValuePairs(); | ||
241 | result["presence" + i] = rinfoDict; | ||
242 | i++; | ||
243 | } | ||
244 | } | ||
245 | |||
246 | string xmlString = ServerUtils.BuildXmlResponse(result); | ||
247 | //m_log.DebugFormat("[GRID HANDLER]: resp string: {0}", xmlString); | ||
248 | UTF8Encoding encoding = new UTF8Encoding(); | ||
249 | return encoding.GetBytes(xmlString); | ||
250 | } | ||
251 | |||
252 | |||
117 | private byte[] SuccessResult() | 253 | private byte[] SuccessResult() |
118 | { | 254 | { |
119 | XmlDocument doc = new XmlDocument(); | 255 | XmlDocument doc = new XmlDocument(); |