diff options
Diffstat (limited to 'OpenSim/Client/MXP/PacketHandler/MXPPacketServer.cs')
-rw-r--r-- | OpenSim/Client/MXP/PacketHandler/MXPPacketServer.cs | 151 |
1 files changed, 87 insertions, 64 deletions
diff --git a/OpenSim/Client/MXP/PacketHandler/MXPPacketServer.cs b/OpenSim/Client/MXP/PacketHandler/MXPPacketServer.cs index 46d0594..4f77f2c 100644 --- a/OpenSim/Client/MXP/PacketHandler/MXPPacketServer.cs +++ b/OpenSim/Client/MXP/PacketHandler/MXPPacketServer.cs | |||
@@ -42,43 +42,43 @@ using OpenSim.Region.Framework.Scenes; | |||
42 | 42 | ||
43 | namespace OpenSim.Client.MXP.PacketHandler | 43 | namespace OpenSim.Client.MXP.PacketHandler |
44 | { | 44 | { |
45 | class MXPPacketServer | 45 | public class MXPPacketServer |
46 | { | 46 | { |
47 | internal static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 47 | internal static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
48 | 48 | ||
49 | private readonly List<MXPClientView> Clients = new List<MXPClientView>(); | ||
50 | private readonly Dictionary<UUID, Scene> Scenes; | ||
51 | |||
52 | #region Fields | 49 | #region Fields |
53 | 50 | ||
54 | private readonly Transmitter transmitter; | 51 | private readonly List<MXPClientView> m_clients = new List<MXPClientView>(); |
52 | private readonly Dictionary<UUID, Scene> m_scenes; | ||
53 | private readonly Transmitter m_transmitter; | ||
55 | 54 | ||
56 | private readonly Thread m_clientThread; | 55 | private readonly Thread m_clientThread; |
57 | 56 | ||
58 | private readonly IList<Session> sessions = new List<Session>(); | 57 | private readonly IList<Session> m_sessions = new List<Session>(); |
59 | private readonly IList<Session> sessionsToClient = new List<Session>(); | 58 | private readonly IList<Session> m_sessionsToClient = new List<Session>(); |
60 | private readonly IList<MXPClientView> sessionsToRemove = new List<MXPClientView>(); | 59 | private readonly IList<MXPClientView> m_sessionsToRemove = new List<MXPClientView>(); |
61 | 60 | ||
62 | private readonly String cloudUrl; | 61 | private readonly int m_port; |
63 | private readonly String programName; | 62 | private readonly String m_programName; |
64 | private readonly byte programMajorVersion; | 63 | private readonly byte m_programMajorVersion; |
65 | private readonly byte programMinorVersion; | 64 | private readonly byte m_programMinorVersion; |
66 | 65 | ||
67 | #endregion | 66 | #endregion |
68 | 67 | ||
69 | #region Constructors | 68 | #region Constructors |
70 | 69 | ||
71 | public MXPPacketServer(string cloudUrl, int port, Dictionary<UUID, Scene> scenes) | 70 | public MXPPacketServer(int port, Dictionary<UUID, Scene> scenes) |
72 | { | 71 | { |
73 | this.cloudUrl = cloudUrl; | 72 | this.m_port = port; |
73 | |||
74 | m_scenes = scenes; | ||
74 | 75 | ||
75 | Scenes = scenes; | ||
76 | 76 | ||
77 | programMinorVersion = 63; | 77 | m_programMinorVersion = 63; |
78 | programMajorVersion = 0; | 78 | m_programMajorVersion = 0; |
79 | programName = "OpenSimulator"; | 79 | m_programName = "OpenSimulator"; |
80 | 80 | ||
81 | transmitter = new Transmitter(port); | 81 | m_transmitter = new Transmitter(port); |
82 | 82 | ||
83 | m_clientThread = new Thread(StartListener); | 83 | m_clientThread = new Thread(StartListener); |
84 | m_clientThread.Name = "MXPThread"; | 84 | m_clientThread.Name = "MXPThread"; |
@@ -89,7 +89,9 @@ namespace OpenSim.Client.MXP.PacketHandler | |||
89 | 89 | ||
90 | public void StartListener() | 90 | public void StartListener() |
91 | { | 91 | { |
92 | transmitter.Startup(); | 92 | m_log.Info("[MXP ClientStack] Transmitter starting on UDP server port: " + m_port); |
93 | m_transmitter.Startup(); | ||
94 | m_log.Info("[MXP ClientStack] Transmitter started. MXP version: "+MxpConstants.ProtocolMajorVersion+"."+MxpConstants.ProtocolMinorVersion+" Source Revision: "+MxpConstants.ProtocolSourceRevision); | ||
93 | } | 95 | } |
94 | 96 | ||
95 | #endregion | 97 | #endregion |
@@ -103,7 +105,7 @@ namespace OpenSim.Client.MXP.PacketHandler | |||
103 | { | 105 | { |
104 | get | 106 | get |
105 | { | 107 | { |
106 | return transmitter.PendingSessionCount; | 108 | return m_transmitter.PendingSessionCount; |
107 | } | 109 | } |
108 | } | 110 | } |
109 | /// <summary> | 111 | /// <summary> |
@@ -113,7 +115,7 @@ namespace OpenSim.Client.MXP.PacketHandler | |||
113 | { | 115 | { |
114 | get | 116 | get |
115 | { | 117 | { |
116 | return sessions.Count; | 118 | return m_sessions.Count; |
117 | } | 119 | } |
118 | } | 120 | } |
119 | /// <summary> | 121 | /// <summary> |
@@ -123,7 +125,7 @@ namespace OpenSim.Client.MXP.PacketHandler | |||
123 | { | 125 | { |
124 | get | 126 | get |
125 | { | 127 | { |
126 | return transmitter != null && transmitter.IsAlive; | 128 | return m_transmitter != null && m_transmitter.IsAlive; |
127 | } | 129 | } |
128 | } | 130 | } |
129 | /// <summary> | 131 | /// <summary> |
@@ -133,7 +135,7 @@ namespace OpenSim.Client.MXP.PacketHandler | |||
133 | { | 135 | { |
134 | get | 136 | get |
135 | { | 137 | { |
136 | return transmitter != null ? transmitter.PacketsSent : 0; | 138 | return m_transmitter != null ? m_transmitter.PacketsSent : 0; |
137 | } | 139 | } |
138 | } | 140 | } |
139 | /// <summary> | 141 | /// <summary> |
@@ -143,7 +145,7 @@ namespace OpenSim.Client.MXP.PacketHandler | |||
143 | { | 145 | { |
144 | get | 146 | get |
145 | { | 147 | { |
146 | return transmitter != null ? transmitter.PacketsReceived : 0; | 148 | return m_transmitter != null ? m_transmitter.PacketsReceived : 0; |
147 | } | 149 | } |
148 | } | 150 | } |
149 | /// <summary> | 151 | /// <summary> |
@@ -153,7 +155,7 @@ namespace OpenSim.Client.MXP.PacketHandler | |||
153 | { | 155 | { |
154 | get | 156 | get |
155 | { | 157 | { |
156 | return transmitter != null ? transmitter.BytesReceived : 0; | 158 | return m_transmitter != null ? m_transmitter.BytesReceived : 0; |
157 | } | 159 | } |
158 | } | 160 | } |
159 | /// <summary> | 161 | /// <summary> |
@@ -163,7 +165,7 @@ namespace OpenSim.Client.MXP.PacketHandler | |||
163 | { | 165 | { |
164 | get | 166 | get |
165 | { | 167 | { |
166 | return transmitter != null ? transmitter.BytesSent : 0; | 168 | return m_transmitter != null ? m_transmitter.BytesSent : 0; |
167 | } | 169 | } |
168 | } | 170 | } |
169 | /// <summary> | 171 | /// <summary> |
@@ -173,7 +175,7 @@ namespace OpenSim.Client.MXP.PacketHandler | |||
173 | { | 175 | { |
174 | get | 176 | get |
175 | { | 177 | { |
176 | return transmitter != null ? transmitter.ReceiveRate : 0; | 178 | return m_transmitter != null ? m_transmitter.ReceiveRate : 0; |
177 | } | 179 | } |
178 | } | 180 | } |
179 | /// <summary> | 181 | /// <summary> |
@@ -183,7 +185,7 @@ namespace OpenSim.Client.MXP.PacketHandler | |||
183 | { | 185 | { |
184 | get | 186 | get |
185 | { | 187 | { |
186 | return transmitter != null ? transmitter.SendRate : 0; | 188 | return m_transmitter != null ? m_transmitter.SendRate : 0; |
187 | } | 189 | } |
188 | } | 190 | } |
189 | 191 | ||
@@ -207,18 +209,17 @@ namespace OpenSim.Client.MXP.PacketHandler | |||
207 | 209 | ||
208 | #endregion | 210 | #endregion |
209 | 211 | ||
210 | |||
211 | #region Processing | 212 | #region Processing |
212 | 213 | ||
213 | public void PrintDebugInformation() | 214 | public void PrintDebugInformation() |
214 | { | 215 | { |
215 | m_log.Info("[MXP ClientStack] Statistics report"); | 216 | m_log.Info("[MXP ClientStack] Statistics report"); |
216 | m_log.Info("Pending Sessions: " + PendingSessionCount); | 217 | m_log.Info("Pending Sessions: " + PendingSessionCount); |
217 | m_log.Info("Sessions: " + SessionCount + " (Clients: " + Clients.Count + " )"); | 218 | m_log.Info("Sessions: " + SessionCount + " (Clients: " + m_clients.Count + " )"); |
218 | m_log.Info("Transmitter Alive?: " + IsTransmitterAlive); | 219 | m_log.Info("Transmitter Alive?: " + IsTransmitterAlive); |
219 | m_log.Info("Packets Sent/Received: " + PacketsSent + " / " + PacketsReceived); | 220 | m_log.Info("Packets Sent/Received: " + PacketsSent + " / " + PacketsReceived); |
220 | m_log.Info("Bytes Sent/Received: " + BytesSent + " / " + BytesReceived); | 221 | m_log.Info("Bytes Sent/Received: " + BytesSent + " / " + BytesReceived); |
221 | m_log.Info("Send/Recieve Rate (bps): " + SendRate + " / " + ReceiveRate); | 222 | m_log.Info("Send/Receive Rate (bps): " + SendRate + " / " + ReceiveRate); |
222 | } | 223 | } |
223 | 224 | ||
224 | public void Process() | 225 | public void Process() |
@@ -229,22 +230,22 @@ namespace OpenSim.Client.MXP.PacketHandler | |||
229 | 230 | ||
230 | public void Clean() | 231 | public void Clean() |
231 | { | 232 | { |
232 | foreach (MXPClientView clientView in Clients) | 233 | foreach (MXPClientView clientView in m_clients) |
233 | { | 234 | { |
234 | if (clientView.Session.SessionState == SessionState.Disconnected) | 235 | if (clientView.Session.SessionState == SessionState.Disconnected) |
235 | { | 236 | { |
236 | sessionsToRemove.Add(clientView); | 237 | m_sessionsToRemove.Add(clientView); |
237 | } | 238 | } |
238 | } | 239 | } |
239 | 240 | ||
240 | foreach (MXPClientView clientView in sessionsToRemove) | 241 | foreach (MXPClientView clientView in m_sessionsToRemove) |
241 | { | 242 | { |
242 | clientView.Scene.RemoveClient(clientView.AgentId); | 243 | clientView.Scene.RemoveClient(clientView.AgentId); |
243 | Clients.Remove(clientView); | 244 | m_clients.Remove(clientView); |
244 | sessions.Remove(clientView.Session); | 245 | m_sessions.Remove(clientView.Session); |
245 | } | 246 | } |
246 | 247 | ||
247 | sessionsToRemove.Clear(); | 248 | m_sessionsToRemove.Clear(); |
248 | } | 249 | } |
249 | 250 | ||
250 | public bool AuthoriseUser(string participantName, string password, UUID sceneId, out UUID userId, out string firstName, out string lastName) | 251 | public bool AuthoriseUser(string participantName, string password, UUID sceneId, out UUID userId, out string firstName, out string lastName) |
@@ -253,7 +254,7 @@ namespace OpenSim.Client.MXP.PacketHandler | |||
253 | firstName = ""; | 254 | firstName = ""; |
254 | lastName = ""; | 255 | lastName = ""; |
255 | 256 | ||
256 | if (!Scenes.ContainsKey(sceneId)) | 257 | if (!m_scenes.ContainsKey(sceneId)) |
257 | { | 258 | { |
258 | m_log.Info("Login failed as region was not found: " + sceneId); | 259 | m_log.Info("Login failed as region was not found: " + sceneId); |
259 | return false; | 260 | return false; |
@@ -268,7 +269,7 @@ namespace OpenSim.Client.MXP.PacketHandler | |||
268 | firstName = nameParts[0]; | 269 | firstName = nameParts[0]; |
269 | lastName = nameParts[1]; | 270 | lastName = nameParts[1]; |
270 | 271 | ||
271 | UserProfileData userProfile = Scenes[sceneId].CommsManager.UserService.GetUserProfile(firstName, lastName); | 272 | UserProfileData userProfile = m_scenes[sceneId].CommsManager.UserService.GetUserProfile(firstName, lastName); |
272 | if (userProfile == null) | 273 | if (userProfile == null) |
273 | { | 274 | { |
274 | m_log.Info("Login failed as user was not found: " + participantName); | 275 | m_log.Info("Login failed as user was not found: " + participantName); |
@@ -288,17 +289,17 @@ namespace OpenSim.Client.MXP.PacketHandler | |||
288 | 289 | ||
289 | public void ProcessMessages() | 290 | public void ProcessMessages() |
290 | { | 291 | { |
291 | if (transmitter.PendingSessionCount > 0) | 292 | if (m_transmitter.PendingSessionCount > 0) |
292 | { | 293 | { |
293 | Session tmp = transmitter.AcceptPendingSession(); | 294 | Session tmp = m_transmitter.AcceptPendingSession(); |
294 | sessions.Add(tmp); | 295 | m_sessions.Add(tmp); |
295 | sessionsToClient.Add(tmp); | 296 | m_sessionsToClient.Add(tmp); |
296 | 297 | ||
297 | } | 298 | } |
298 | 299 | ||
299 | List<Session> tmpRemove = new List<Session>(); | 300 | List<Session> tmpRemove = new List<Session>(); |
300 | 301 | ||
301 | foreach (Session session in sessionsToClient) | 302 | foreach (Session session in m_sessionsToClient) |
302 | { | 303 | { |
303 | while (session.AvailableMessages > 0) | 304 | while (session.AvailableMessages > 0) |
304 | { | 305 | { |
@@ -313,13 +314,30 @@ namespace OpenSim.Client.MXP.PacketHandler | |||
313 | string firstName; | 314 | string firstName; |
314 | string lastName; | 315 | string lastName; |
315 | 316 | ||
317 | if (joinRequestMessage.BubbleId == Guid.Empty) | ||
318 | { | ||
319 | foreach (Scene scene in m_scenes.Values) | ||
320 | { | ||
321 | if (scene.RegionInfo.RegionName == joinRequestMessage.BubbleName) | ||
322 | { | ||
323 | m_log.Info("Resolved region by name: " + joinRequestMessage.BubbleName + " (" + scene.RegionInfo.RegionID+")"); | ||
324 | joinRequestMessage.BubbleId = scene.RegionInfo.RegionID.Guid; | ||
325 | } | ||
326 | } | ||
327 | } | ||
328 | |||
329 | if (joinRequestMessage.BubbleId == Guid.Empty) | ||
330 | { | ||
331 | m_log.Warn("Failed to resolve region by name: "+joinRequestMessage.BubbleName); | ||
332 | } | ||
333 | |||
316 | bool authorized = AuthoriseUser(joinRequestMessage.ParticipantName, | 334 | bool authorized = AuthoriseUser(joinRequestMessage.ParticipantName, |
317 | joinRequestMessage.ParticipantPassphrase, | 335 | joinRequestMessage.ParticipantPassphrase, |
318 | new UUID(joinRequestMessage.BubbleId), out userId, out firstName, out lastName); | 336 | new UUID(joinRequestMessage.BubbleId), out userId, out firstName, out lastName); |
319 | 337 | ||
320 | if (authorized) | 338 | if (authorized) |
321 | { | 339 | { |
322 | Scene target = Scenes[new UUID(joinRequestMessage.BubbleId)]; | 340 | Scene target = m_scenes[new UUID(joinRequestMessage.BubbleId)]; |
323 | 341 | ||
324 | UUID mxpSessionID = UUID.Random(); | 342 | UUID mxpSessionID = UUID.Random(); |
325 | 343 | ||
@@ -332,12 +350,15 @@ namespace OpenSim.Client.MXP.PacketHandler | |||
332 | MXPClientView client = new MXPClientView(session, mxpSessionID,userId, target, | 350 | MXPClientView client = new MXPClientView(session, mxpSessionID,userId, target, |
333 | firstName, lastName); | 351 | firstName, lastName); |
334 | m_log.Info("[MXP ClientStack] Created Client"); | 352 | m_log.Info("[MXP ClientStack] Created Client"); |
335 | Clients.Add(client); | 353 | m_clients.Add(client); |
336 | 354 | ||
337 | m_log.Info("[MXP ClientStack] Adding to Scene"); | 355 | m_log.Info("[MXP ClientStack] Adding to Scene"); |
338 | target.ClientManager.Add(client.CircuitCode, client); | 356 | target.ClientManager.Add(client.CircuitCode, client); |
339 | 357 | ||
340 | m_log.Info("[MXP ClientStack] Initialising..."); | 358 | m_log.Info("[MXP ClientStack] Initialising..."); |
359 | |||
360 | client.MXPSentSynchronizationBegin(m_scenes[new UUID(joinRequestMessage.BubbleId)].SceneContents.GetTotalObjectsCount()); | ||
361 | |||
341 | try | 362 | try |
342 | { | 363 | { |
343 | client.Start(); | 364 | client.Start(); |
@@ -365,10 +386,10 @@ namespace OpenSim.Client.MXP.PacketHandler | |||
365 | 386 | ||
366 | foreach (Session session in tmpRemove) | 387 | foreach (Session session in tmpRemove) |
367 | { | 388 | { |
368 | sessionsToClient.Remove(session); | 389 | m_sessionsToClient.Remove(session); |
369 | } | 390 | } |
370 | 391 | ||
371 | foreach (MXPClientView clientView in Clients) | 392 | foreach (MXPClientView clientView in m_clients) |
372 | { | 393 | { |
373 | int messagesProcessedCount = 0; | 394 | int messagesProcessedCount = 0; |
374 | Session session = clientView.Session; | 395 | Session session = clientView.Session; |
@@ -431,19 +452,24 @@ namespace OpenSim.Client.MXP.PacketHandler | |||
431 | typeof(JoinResponseMessage)); | 452 | typeof(JoinResponseMessage)); |
432 | 453 | ||
433 | joinResponseMessage.RequestMessageId = joinRequestMessage.MessageId; | 454 | joinResponseMessage.RequestMessageId = joinRequestMessage.MessageId; |
434 | joinResponseMessage.FailureCode = 0; | 455 | joinResponseMessage.FailureCode = MxpResponseCodes.SUCCESS; |
435 | 456 | ||
457 | joinResponseMessage.BubbleId = joinRequestMessage.BubbleId; | ||
436 | joinResponseMessage.ParticipantId = userId.Guid; | 458 | joinResponseMessage.ParticipantId = userId.Guid; |
437 | joinResponseMessage.CloudUrl = cloudUrl; | 459 | joinResponseMessage.AvatarId = userId.Guid; |
460 | joinResponseMessage.BubbleAssetCacheUrl = m_scenes[new UUID(joinRequestMessage.BubbleId)].CommsManager.NetworkServersInfo.AssetURL; | ||
438 | 461 | ||
439 | joinResponseMessage.BubbleName = Scenes[new UUID(joinRequestMessage.BubbleId)].RegionInfo.RegionName; | 462 | joinResponseMessage.BubbleName = m_scenes[new UUID(joinRequestMessage.BubbleId)].RegionInfo.RegionName; |
440 | 463 | ||
464 | joinResponseMessage.BubbleRange = 128; | ||
465 | joinResponseMessage.BubblePerceptionRange = 128 + 256; | ||
441 | joinResponseMessage.BubbleRealTime = 0; | 466 | joinResponseMessage.BubbleRealTime = 0; |
442 | joinResponseMessage.ProgramName = programName; | 467 | joinResponseMessage.ProgramName = m_programName; |
443 | joinResponseMessage.ProgramMajorVersion = programMajorVersion; | 468 | joinResponseMessage.ProgramMajorVersion = m_programMajorVersion; |
444 | joinResponseMessage.ProgramMinorVersion = programMinorVersion; | 469 | joinResponseMessage.ProgramMinorVersion = m_programMinorVersion; |
445 | joinResponseMessage.ProtocolMajorVersion = MxpConstants.ProtocolMajorVersion; | 470 | joinResponseMessage.ProtocolMajorVersion = MxpConstants.ProtocolMajorVersion; |
446 | joinResponseMessage.ProtocolMinorVersion = MxpConstants.ProtocolMinorVersion; | 471 | joinResponseMessage.ProtocolMinorVersion = MxpConstants.ProtocolMinorVersion; |
472 | joinResponseMessage.ProtocolSourceRevision = MxpConstants.ProtocolSourceRevision; | ||
447 | 473 | ||
448 | session.Send(joinResponseMessage); | 474 | session.Send(joinResponseMessage); |
449 | 475 | ||
@@ -455,18 +481,14 @@ namespace OpenSim.Client.MXP.PacketHandler | |||
455 | JoinResponseMessage joinResponseMessage = (JoinResponseMessage)MessageFactory.Current.ReserveMessage(typeof(JoinResponseMessage)); | 481 | JoinResponseMessage joinResponseMessage = (JoinResponseMessage)MessageFactory.Current.ReserveMessage(typeof(JoinResponseMessage)); |
456 | 482 | ||
457 | joinResponseMessage.RequestMessageId = joinRequestMessage.MessageId; | 483 | joinResponseMessage.RequestMessageId = joinRequestMessage.MessageId; |
458 | joinResponseMessage.FailureCode = 1; | 484 | joinResponseMessage.FailureCode = MxpResponseCodes.UNAUTHORIZED_OPERATION; |
459 | |||
460 | joinResponseMessage.CloudUrl = cloudUrl; | ||
461 | 485 | ||
462 | joinResponseMessage.BubbleName = "Declined OpenSim Region"; // Dont reveal anything about the sim in the disconnect notice | 486 | joinResponseMessage.ProgramName = m_programName; |
463 | 487 | joinResponseMessage.ProgramMajorVersion = m_programMajorVersion; | |
464 | joinResponseMessage.BubbleRealTime = 0; | 488 | joinResponseMessage.ProgramMinorVersion = m_programMinorVersion; |
465 | joinResponseMessage.ProgramName = programName; | ||
466 | joinResponseMessage.ProgramMajorVersion = programMajorVersion; | ||
467 | joinResponseMessage.ProgramMinorVersion = programMinorVersion; | ||
468 | joinResponseMessage.ProtocolMajorVersion = MxpConstants.ProtocolMajorVersion; | 489 | joinResponseMessage.ProtocolMajorVersion = MxpConstants.ProtocolMajorVersion; |
469 | joinResponseMessage.ProtocolMinorVersion = MxpConstants.ProtocolMinorVersion; | 490 | joinResponseMessage.ProtocolMinorVersion = MxpConstants.ProtocolMinorVersion; |
491 | joinResponseMessage.ProtocolSourceRevision = MxpConstants.ProtocolSourceRevision; | ||
470 | 492 | ||
471 | session.Send(joinResponseMessage); | 493 | session.Send(joinResponseMessage); |
472 | 494 | ||
@@ -474,5 +496,6 @@ namespace OpenSim.Client.MXP.PacketHandler | |||
474 | } | 496 | } |
475 | 497 | ||
476 | #endregion | 498 | #endregion |
499 | |||
477 | } | 500 | } |
478 | } | 501 | } |