diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Client/MXP/ClientStack/MXPClientView.cs | 139 | ||||
-rw-r--r-- | OpenSim/Client/MXP/MXPModule.cs | 52 | ||||
-rw-r--r-- | OpenSim/Client/MXP/MXPUtil.cs | 2 | ||||
-rw-r--r-- | OpenSim/Client/MXP/PacketHandler/MXPPacketServer.cs | 151 | ||||
-rw-r--r-- | bin/MXP.dll | bin | 110592 -> 114688 bytes | |||
-rw-r--r-- | bin/MXP.pdb | bin | 364032 -> 382464 bytes |
6 files changed, 202 insertions, 142 deletions
diff --git a/OpenSim/Client/MXP/ClientStack/MXPClientView.cs b/OpenSim/Client/MXP/ClientStack/MXPClientView.cs index 383ae07..5d08eb0 100644 --- a/OpenSim/Client/MXP/ClientStack/MXPClientView.cs +++ b/OpenSim/Client/MXP/ClientStack/MXPClientView.cs | |||
@@ -41,6 +41,7 @@ using Packet=OpenMetaverse.Packets.Packet; | |||
41 | using MXP.Extentions.OpenMetaverseFragments.Proto; | 41 | using MXP.Extentions.OpenMetaverseFragments.Proto; |
42 | using MXP.Util; | 42 | using MXP.Util; |
43 | using MXP.Fragments; | 43 | using MXP.Fragments; |
44 | using MXP.Common.Proto; | ||
44 | 45 | ||
45 | namespace OpenSim.Client.MXP.ClientStack | 46 | namespace OpenSim.Client.MXP.ClientStack |
46 | { | 47 | { |
@@ -64,9 +65,10 @@ namespace OpenSim.Client.MXP.ClientStack | |||
64 | private readonly IScene m_scene; | 65 | private readonly IScene m_scene; |
65 | private readonly string m_firstName; | 66 | private readonly string m_firstName; |
66 | private readonly string m_lastName; | 67 | private readonly string m_lastName; |
68 | private int m_objectsToSynchronize = 0; | ||
69 | private int m_objectsSynchronized = -1; | ||
67 | 70 | ||
68 | private Vector3 m_startPosition=new Vector3(128f, 128f, 128f); | 71 | private Vector3 m_startPosition=new Vector3(128f, 128f, 128f); |
69 | //private int m_debugLevel; | ||
70 | #endregion | 72 | #endregion |
71 | 73 | ||
72 | #region Properties | 74 | #region Properties |
@@ -181,7 +183,7 @@ namespace OpenSim.Client.MXP.ClientStack | |||
181 | } | 183 | } |
182 | else | 184 | else |
183 | { | 185 | { |
184 | m_log.Warn("[MXP] Received messaged unhandled: " + message); | 186 | m_log.Warn("[MXP ClientStack] Received messaged unhandled: " + message); |
185 | } | 187 | } |
186 | } | 188 | } |
187 | 189 | ||
@@ -249,7 +251,13 @@ namespace OpenSim.Client.MXP.ClientStack | |||
249 | 251 | ||
250 | if (avatarExt.Body != null) | 252 | if (avatarExt.Body != null) |
251 | { | 253 | { |
252 | agentUpdate.HeadRotation = FromOmQuaternion(avatarExt.Body.HeadOrientation); | 254 | foreach(OmBipedBoneOrientation boneOrientation in avatarExt.Body.BipedBoneOrientations) |
255 | { | ||
256 | if (boneOrientation.Bone == OmBipedBones.Head) | ||
257 | { | ||
258 | agentUpdate.HeadRotation = FromOmQuaternion(boneOrientation.Orientation); | ||
259 | } | ||
260 | } | ||
253 | } | 261 | } |
254 | else | 262 | else |
255 | { | 263 | { |
@@ -295,7 +303,7 @@ namespace OpenSim.Client.MXP.ClientStack | |||
295 | private void MXPSendPrimitive(uint localID, UUID ownerID, Vector3 acc, Vector3 rvel, PrimitiveBaseShape primShape, Vector3 pos, UUID objectID, Vector3 vel, Quaternion rotation, uint flags, string text, byte[] textColor, uint parentID, byte[] particleSystem, byte clickAction, byte material, byte[] textureanim) | 303 | private void MXPSendPrimitive(uint localID, UUID ownerID, Vector3 acc, Vector3 rvel, PrimitiveBaseShape primShape, Vector3 pos, UUID objectID, Vector3 vel, Quaternion rotation, uint flags, string text, byte[] textColor, uint parentID, byte[] particleSystem, byte clickAction, byte material, byte[] textureanim) |
296 | { | 304 | { |
297 | String typeName = ToOmType(primShape.PCode); | 305 | String typeName = ToOmType(primShape.PCode); |
298 | m_log.Info("[MXP] Transmitting Primitive" + typeName); | 306 | m_log.Info("[MXP ClientStack] Transmitting Primitive" + typeName); |
299 | 307 | ||
300 | PerceptionEventMessage pe = new PerceptionEventMessage(); | 308 | PerceptionEventMessage pe = new PerceptionEventMessage(); |
301 | 309 | ||
@@ -307,16 +315,16 @@ namespace OpenSim.Client.MXP.ClientStack | |||
307 | pe.ObjectFragment.OwnerId = ownerID.Guid; | 315 | pe.ObjectFragment.OwnerId = ownerID.Guid; |
308 | pe.ObjectFragment.TypeId = Guid.Empty; | 316 | pe.ObjectFragment.TypeId = Guid.Empty; |
309 | pe.ObjectFragment.TypeName = typeName; | 317 | pe.ObjectFragment.TypeName = typeName; |
310 | pe.ObjectFragment.Acceleration = new float[] { acc.X, acc.Y, acc.Z }; | 318 | pe.ObjectFragment.Acceleration = ToOmVector(acc); |
311 | pe.ObjectFragment.AngularAcceleration = new float[4]; | 319 | pe.ObjectFragment.AngularAcceleration=new MsdQuaternion4f(); |
312 | pe.ObjectFragment.AngularVelocity = new float[] { rvel.X, rvel.Y, rvel.Z, 0.0f }; | 320 | pe.ObjectFragment.AngularVelocity = ToOmQuaternion(rvel); |
313 | pe.ObjectFragment.BoundingSphereRadius = primShape.Scale.Length(); | 321 | pe.ObjectFragment.BoundingSphereRadius = primShape.Scale.Length(); |
314 | 322 | ||
315 | pe.ObjectFragment.Location = new float[] { pos.X, pos.Y, pos.Z }; | 323 | pe.ObjectFragment.Location = ToOmVector(pos); |
316 | 324 | ||
317 | pe.ObjectFragment.Mass = 1.0f; | 325 | pe.ObjectFragment.Mass = 1.0f; |
318 | pe.ObjectFragment.Orientation = new float[] { rotation.X, rotation.Y, rotation.Z, rotation.W }; | 326 | pe.ObjectFragment.Orientation = ToOmQuaternion(rotation); |
319 | pe.ObjectFragment.Velocity = new float[] { vel.X, vel.Y, vel.Z }; | 327 | pe.ObjectFragment.Velocity =ToOmVector(vel); |
320 | 328 | ||
321 | OmSlPrimitiveExt ext = new OmSlPrimitiveExt(); | 329 | OmSlPrimitiveExt ext = new OmSlPrimitiveExt(); |
322 | 330 | ||
@@ -360,11 +368,23 @@ namespace OpenSim.Client.MXP.ClientStack | |||
360 | pe.SetExtension<OmSlPrimitiveExt>(ext); | 368 | pe.SetExtension<OmSlPrimitiveExt>(ext); |
361 | 369 | ||
362 | Session.Send(pe); | 370 | Session.Send(pe); |
371 | |||
372 | if (m_objectsSynchronized != -1) | ||
373 | { | ||
374 | m_objectsSynchronized++; | ||
375 | |||
376 | if (m_objectsToSynchronize >= m_objectsSynchronized) | ||
377 | { | ||
378 | SynchronizationEndEventMessage synchronizationEndEventMessage = new SynchronizationEndEventMessage(); | ||
379 | Session.Send(synchronizationEndEventMessage); | ||
380 | m_objectsSynchronized = -1; | ||
381 | } | ||
382 | } | ||
363 | } | 383 | } |
364 | 384 | ||
365 | public void MXPSendAvatarData(string participantName, UUID ownerID, UUID parentId, UUID avatarID, uint avatarLocalID, Vector3 position, Quaternion rotation) | 385 | public void MXPSendAvatarData(string participantName, UUID ownerID, UUID parentId, UUID avatarID, uint avatarLocalID, Vector3 position, Quaternion rotation) |
366 | { | 386 | { |
367 | m_log.Info("[MXP] Transmitting Avatar Data " + participantName); | 387 | m_log.Info("[MXP ClientStack] Transmitting Avatar Data " + participantName); |
368 | 388 | ||
369 | PerceptionEventMessage pe = new PerceptionEventMessage(); | 389 | PerceptionEventMessage pe = new PerceptionEventMessage(); |
370 | 390 | ||
@@ -376,23 +396,23 @@ namespace OpenSim.Client.MXP.ClientStack | |||
376 | pe.ObjectFragment.OwnerId = ownerID.Guid; | 396 | pe.ObjectFragment.OwnerId = ownerID.Guid; |
377 | pe.ObjectFragment.TypeId = Guid.Empty; | 397 | pe.ObjectFragment.TypeId = Guid.Empty; |
378 | pe.ObjectFragment.TypeName = "Avatar"; | 398 | pe.ObjectFragment.TypeName = "Avatar"; |
379 | pe.ObjectFragment.Acceleration = new float[3]; | 399 | pe.ObjectFragment.Acceleration = new MsdVector3f(); |
380 | pe.ObjectFragment.AngularAcceleration = new float[4]; | 400 | pe.ObjectFragment.AngularAcceleration = new MsdQuaternion4f(); |
381 | pe.ObjectFragment.AngularVelocity = new float[4]; | 401 | pe.ObjectFragment.AngularVelocity = new MsdQuaternion4f(); |
382 | pe.ObjectFragment.BoundingSphereRadius = 1; // TODO Fill in appropriate value | 402 | pe.ObjectFragment.BoundingSphereRadius = 1; // TODO Fill in appropriate value |
383 | 403 | ||
384 | pe.ObjectFragment.Location = new float[] { position.X, position.Y, position.Z }; | 404 | pe.ObjectFragment.Location = ToOmVector(position); |
385 | 405 | ||
386 | pe.ObjectFragment.Mass = 1.0f; // TODO Fill in appropriate value | 406 | pe.ObjectFragment.Mass = 1.0f; // TODO Fill in appropriate value |
387 | pe.ObjectFragment.Orientation = new float[] { rotation.X, rotation.Y, rotation.Z, rotation.W }; | 407 | pe.ObjectFragment.Orientation = ToOmQuaternion(rotation); |
388 | pe.ObjectFragment.Velocity = new float[3]; | 408 | pe.ObjectFragment.Velocity = new MsdVector3f(); |
389 | 409 | ||
390 | Session.Send(pe); | 410 | Session.Send(pe); |
391 | } | 411 | } |
392 | 412 | ||
393 | public void MXPSendTerrain(float[] map) | 413 | public void MXPSendTerrain(float[] map) |
394 | { | 414 | { |
395 | m_log.Info("[MXP] Transmitting terrain for " + m_scene.RegionInfo.RegionName); | 415 | m_log.Info("[MXP ClientStack] Transmitting terrain for " + m_scene.RegionInfo.RegionName); |
396 | 416 | ||
397 | PerceptionEventMessage pe = new PerceptionEventMessage(); | 417 | PerceptionEventMessage pe = new PerceptionEventMessage(); |
398 | 418 | ||
@@ -404,16 +424,16 @@ namespace OpenSim.Client.MXP.ClientStack | |||
404 | pe.ObjectFragment.OwnerId = m_scene.RegionInfo.MasterAvatarAssignedUUID.Guid; | 424 | pe.ObjectFragment.OwnerId = m_scene.RegionInfo.MasterAvatarAssignedUUID.Guid; |
405 | pe.ObjectFragment.TypeId = Guid.Empty; | 425 | pe.ObjectFragment.TypeId = Guid.Empty; |
406 | pe.ObjectFragment.TypeName = "Terrain"; | 426 | pe.ObjectFragment.TypeName = "Terrain"; |
407 | pe.ObjectFragment.Acceleration = new float[3]; | 427 | pe.ObjectFragment.Acceleration = new MsdVector3f(); |
408 | pe.ObjectFragment.AngularAcceleration = new float[4]; | 428 | pe.ObjectFragment.AngularAcceleration = new MsdQuaternion4f(); |
409 | pe.ObjectFragment.AngularVelocity = new float[4]; | 429 | pe.ObjectFragment.AngularVelocity = new MsdQuaternion4f(); |
410 | pe.ObjectFragment.BoundingSphereRadius = 1; // TODO Fill in appropriate value | 430 | pe.ObjectFragment.BoundingSphereRadius = 1; // TODO Fill in appropriate value |
411 | 431 | ||
412 | pe.ObjectFragment.Location = new float[] { 0, 0, 0 }; | 432 | pe.ObjectFragment.Location = new MsdVector3f(); |
413 | 433 | ||
414 | pe.ObjectFragment.Mass = 1.0f; // TODO Fill in appropriate value | 434 | pe.ObjectFragment.Mass = 1.0f; // TODO Fill in appropriate value |
415 | pe.ObjectFragment.Orientation = new float[] { 0, 0, 0, 0 }; | 435 | pe.ObjectFragment.Orientation = new MsdQuaternion4f(); |
416 | pe.ObjectFragment.Velocity = new float[3]; | 436 | pe.ObjectFragment.Velocity = new MsdVector3f(); |
417 | 437 | ||
418 | OmBitmapTerrainExt terrainExt = new OmBitmapTerrainExt(); | 438 | OmBitmapTerrainExt terrainExt = new OmBitmapTerrainExt(); |
419 | terrainExt.Width = 256; | 439 | terrainExt.Width = 256; |
@@ -421,37 +441,68 @@ namespace OpenSim.Client.MXP.ClientStack | |||
421 | terrainExt.WaterLevel = (float) m_scene.RegionInfo.RegionSettings.WaterHeight; | 441 | terrainExt.WaterLevel = (float) m_scene.RegionInfo.RegionSettings.WaterHeight; |
422 | terrainExt.Offset = 0; | 442 | terrainExt.Offset = 0; |
423 | terrainExt.Scale = 10; | 443 | terrainExt.Scale = 10; |
424 | terrainExt.HeightMap = CompressionUtil.CompressHeightMap(map, 0, 10); | 444 | terrainExt.HeightMap = CompressUtil.CompressHeightMap(map, 0, 10); |
425 | 445 | ||
426 | pe.SetExtension<OmBitmapTerrainExt>(terrainExt); | 446 | pe.SetExtension<OmBitmapTerrainExt>(terrainExt); |
427 | 447 | ||
428 | Session.Send(pe); | 448 | Session.Send(pe); |
429 | } | 449 | } |
430 | 450 | ||
451 | public void MXPSentSynchronizationBegin(int objectCount) | ||
452 | { | ||
453 | m_objectsToSynchronize = objectCount; | ||
454 | m_objectsSynchronized = 0; | ||
455 | SynchronizationBeginEventMessage synchronizationBeginEventMessage = new SynchronizationBeginEventMessage(); | ||
456 | synchronizationBeginEventMessage.ObjectCount = (uint)objectCount; | ||
457 | Session.Send(synchronizationBeginEventMessage); | ||
458 | } | ||
459 | |||
431 | #endregion | 460 | #endregion |
432 | 461 | ||
433 | #region MXP Conversions | 462 | #region MXP Conversions |
434 | 463 | ||
435 | private OmVector3f ToOmVector(Vector3 value) | 464 | private MsdVector3f ToOmVector(Vector3 value) |
465 | { | ||
466 | MsdVector3f encodedValue = new MsdVector3f(); | ||
467 | encodedValue.X = value.X; | ||
468 | encodedValue.Y = value.Y; | ||
469 | encodedValue.Z = value.Z; | ||
470 | return encodedValue; | ||
471 | } | ||
472 | |||
473 | private MsdQuaternion4f ToOmQuaternion(Vector3 value) | ||
474 | { | ||
475 | Quaternion quaternion=Quaternion.CreateFromEulers(value); | ||
476 | MsdQuaternion4f encodedValue = new MsdQuaternion4f(); | ||
477 | encodedValue.X = quaternion.X; | ||
478 | encodedValue.Y = quaternion.Y; | ||
479 | encodedValue.Z = quaternion.Z; | ||
480 | encodedValue.W = quaternion.W; | ||
481 | return encodedValue; | ||
482 | } | ||
483 | |||
484 | private MsdQuaternion4f ToOmQuaternion(Quaternion value) | ||
436 | { | 485 | { |
437 | OmVector3f encodedValue = new OmVector3f(); | 486 | MsdQuaternion4f encodedValue = new MsdQuaternion4f(); |
438 | encodedValue.X = value.X; | 487 | encodedValue.X = value.X; |
439 | encodedValue.Y = value.Y; | 488 | encodedValue.Y = value.Y; |
440 | encodedValue.Z = value.Z; | 489 | encodedValue.Z = value.Z; |
490 | encodedValue.W = value.W; | ||
441 | return encodedValue; | 491 | return encodedValue; |
442 | } | 492 | } |
443 | 493 | ||
444 | private Vector3 FromOmVector(OmVector3f vector) | 494 | private Vector3 FromOmVector(MsdVector3f vector) |
445 | { | 495 | { |
446 | return new Vector3(vector.X, vector.Y, vector.Z); | 496 | return new Vector3(vector.X, vector.Y, vector.Z); |
447 | } | 497 | } |
448 | 498 | ||
499 | |||
449 | private Vector3 FromOmVector(float[] vector) | 500 | private Vector3 FromOmVector(float[] vector) |
450 | { | 501 | { |
451 | return new Vector3(vector[0], vector[1], vector[2]); | 502 | return new Vector3(vector[0], vector[1], vector[2]); |
452 | } | 503 | } |
453 | 504 | ||
454 | private Quaternion FromOmQuaternion(OmQuaternion4f quaternion) | 505 | private Quaternion FromOmQuaternion(MsdQuaternion4f quaternion) |
455 | { | 506 | { |
456 | return new Quaternion(quaternion.X, quaternion.Y, quaternion.Z, quaternion.W); | 507 | return new Quaternion(quaternion.X, quaternion.Y, quaternion.Z, quaternion.W); |
457 | } | 508 | } |
@@ -461,9 +512,9 @@ namespace OpenSim.Client.MXP.ClientStack | |||
461 | return new Quaternion(quaternion[0], quaternion[1], quaternion[2], quaternion[3]); | 512 | return new Quaternion(quaternion[0], quaternion[1], quaternion[2], quaternion[3]); |
462 | } | 513 | } |
463 | 514 | ||
464 | private OmColor4f ToOmColor(byte[] value) | 515 | private MsdColor4f ToOmColor(byte[] value) |
465 | { | 516 | { |
466 | OmColor4f encodedValue = new OmColor4f(); | 517 | MsdColor4f encodedValue = new MsdColor4f(); |
467 | encodedValue.R = value[0]; | 518 | encodedValue.R = value[0]; |
468 | encodedValue.G = value[1]; | 519 | encodedValue.G = value[1]; |
469 | encodedValue.B = value[2]; | 520 | encodedValue.B = value[2]; |
@@ -750,18 +801,6 @@ namespace OpenSim.Client.MXP.ClientStack | |||
750 | public void Start() | 801 | public void Start() |
751 | { | 802 | { |
752 | Scene.AddNewClient(this); | 803 | Scene.AddNewClient(this); |
753 | /*foreach (ScenePresence presence in ((Scene)Scene).GetScenePresences()) | ||
754 | { | ||
755 | if (presence.Appearance!=null) | ||
756 | { | ||
757 | AvatarAppearance avatar = presence.Appearance; | ||
758 | if (presence.Appearance.Owner == m_userID) | ||
759 | { | ||
760 | MXPSendAvatarData(m_firstName + " " + m_lastName, presence.Appearance.Owner, UUID.Zero, presence.UUID, presence.LocalId, presence.AbsolutePosition, presence.Rotation); | ||
761 | } | ||
762 | } | ||
763 | }*/ | ||
764 | |||
765 | } | 804 | } |
766 | 805 | ||
767 | public void Stop() | 806 | public void Stop() |
@@ -799,7 +838,7 @@ namespace OpenSim.Client.MXP.ClientStack | |||
799 | 838 | ||
800 | public void SendRegionHandshake(RegionInfo regionInfo, RegionHandshakeArgs args) | 839 | public void SendRegionHandshake(RegionInfo regionInfo, RegionHandshakeArgs args) |
801 | { | 840 | { |
802 | m_log.Info("[MXP] Completing Handshake to Region"); | 841 | m_log.Info("[MXP ClientStack] Completing Handshake to Region"); |
803 | 842 | ||
804 | if (OnRegionHandShakeReply != null) | 843 | if (OnRegionHandShakeReply != null) |
805 | { | 844 | { |
@@ -820,9 +859,8 @@ namespace OpenSim.Client.MXP.ClientStack | |||
820 | chatActionEvent.ActionFragment.ActionName = "Chat"; | 859 | chatActionEvent.ActionFragment.ActionName = "Chat"; |
821 | chatActionEvent.ActionFragment.SourceObjectId = fromAgentID.Guid; | 860 | chatActionEvent.ActionFragment.SourceObjectId = fromAgentID.Guid; |
822 | chatActionEvent.ActionFragment.ObservationRadius = 180.0f; | 861 | chatActionEvent.ActionFragment.ObservationRadius = 180.0f; |
823 | chatActionEvent.ActionFragment.ActionPayloadDialect = "TEXT"; | 862 | chatActionEvent.ActionFragment.ExtensionDialect = "TEXT"; |
824 | chatActionEvent.SetPayloadData(Encoding.UTF8.GetBytes(message)); | 863 | chatActionEvent.SetPayloadData(Encoding.UTF8.GetBytes(message)); |
825 | chatActionEvent.ActionFragment.ActionPayloadLength = (uint)chatActionEvent.GetPayloadData().Length; | ||
826 | 864 | ||
827 | Session.Send(chatActionEvent); | 865 | Session.Send(chatActionEvent); |
828 | } | 866 | } |
@@ -938,8 +976,8 @@ namespace OpenSim.Client.MXP.ClientStack | |||
938 | { | 976 | { |
939 | MovementEventMessage me = new MovementEventMessage(); | 977 | MovementEventMessage me = new MovementEventMessage(); |
940 | me.ObjectIndex = localID; | 978 | me.ObjectIndex = localID; |
941 | me.Location = new float[] { position.X, position.Y, position.Z }; | 979 | me.Location =ToOmVector(position); |
942 | me.Orientation = new float[] { rotation.X, rotation.Y, rotation.Z, rotation.W }; | 980 | me.Orientation = ToOmQuaternion(rotation); |
943 | 981 | ||
944 | Session.Send(me); | 982 | Session.Send(me); |
945 | } | 983 | } |
@@ -973,9 +1011,8 @@ namespace OpenSim.Client.MXP.ClientStack | |||
973 | { | 1011 | { |
974 | MovementEventMessage me = new MovementEventMessage(); | 1012 | MovementEventMessage me = new MovementEventMessage(); |
975 | me.ObjectIndex = localID; | 1013 | me.ObjectIndex = localID; |
976 | me.Location = new float[] {position.X, position.Y, position.Z}; | 1014 | me.Location = ToOmVector(position); |
977 | me.Orientation = new float[] {rotation.X, rotation.Y, rotation.Z, rotation.W}; | 1015 | me.Orientation = ToOmQuaternion(rotation); |
978 | |||
979 | Session.Send(me); | 1016 | Session.Send(me); |
980 | } | 1017 | } |
981 | 1018 | ||
diff --git a/OpenSim/Client/MXP/MXPModule.cs b/OpenSim/Client/MXP/MXPModule.cs index 581239f..e0891ca 100644 --- a/OpenSim/Client/MXP/MXPModule.cs +++ b/OpenSim/Client/MXP/MXPModule.cs | |||
@@ -40,65 +40,64 @@ namespace OpenSim.Client.MXP | |||
40 | { | 40 | { |
41 | public class MXPModule : IRegionModule | 41 | public class MXPModule : IRegionModule |
42 | { | 42 | { |
43 | private int mxp_Port = 1253; | ||
44 | //private double mxp_BubbleRadius = 181.01933598375616624661615669884; // Radius of a sphere big enough to encapsulate a 256x256 square | ||
45 | 43 | ||
46 | private readonly Timer ticker = new Timer(100); | 44 | private int m_port = 1253; |
45 | //private int m_ticks = 0; | ||
46 | private bool m_shutdown = false; | ||
47 | 47 | ||
48 | private int ticks; | 48 | private IConfigSource m_config; |
49 | private bool shutdown = false; | 49 | private readonly Timer m_ticker = new Timer(100); |
50 | 50 | private readonly Dictionary<UUID, Scene> m_scenes = new Dictionary<UUID, Scene>(); | |
51 | private IConfigSource config; | ||
52 | |||
53 | private readonly Dictionary<UUID,Scene> m_scenes = new Dictionary<UUID, Scene>(); | ||
54 | |||
55 | private MXPPacketServer server; | ||
56 | 51 | ||
52 | private MXPPacketServer m_server; | ||
57 | 53 | ||
58 | public void Initialise(Scene scene, IConfigSource source) | 54 | public void Initialise(Scene scene, IConfigSource source) |
59 | { | 55 | { |
60 | if (!m_scenes.ContainsKey(scene.RegionInfo.RegionID)) | 56 | if (!m_scenes.ContainsKey(scene.RegionInfo.RegionID)) |
61 | m_scenes.Add(scene.RegionInfo.RegionID, scene); | 57 | m_scenes.Add(scene.RegionInfo.RegionID, scene); |
62 | config = source; | 58 | |
59 | m_config = source; | ||
63 | } | 60 | } |
64 | 61 | ||
65 | public void PostInitialise() | 62 | public void PostInitialise() |
66 | { | 63 | { |
67 | if (config.Configs["MXP"] != null) | 64 | if (m_config.Configs["MXP"] != null) |
68 | { | 65 | { |
69 | IConfig con = config.Configs["MXP"]; | 66 | IConfig con = m_config.Configs["MXP"]; |
70 | 67 | ||
71 | if (!con.GetBoolean("Enabled", false)) | 68 | if (!con.GetBoolean("Enabled", false)) |
72 | return; | 69 | return; |
73 | 70 | ||
74 | mxp_Port = con.GetInt("Port", mxp_Port); | 71 | m_port = con.GetInt("Port", m_port); |
75 | 72 | ||
76 | server = new MXPPacketServer("http://null", mxp_Port, m_scenes); | 73 | m_server = new MXPPacketServer(m_port, m_scenes); |
77 | 74 | ||
78 | ticker.AutoReset = false; | 75 | m_ticker.AutoReset = false; |
79 | ticker.Elapsed += ticker_Elapsed; | 76 | m_ticker.Elapsed += ticker_Elapsed; |
80 | 77 | ||
81 | ticker.Start(); | 78 | m_ticker.Start(); |
82 | } | 79 | } |
83 | } | 80 | } |
84 | 81 | ||
85 | void ticker_Elapsed(object sender, ElapsedEventArgs e) | 82 | void ticker_Elapsed(object sender, ElapsedEventArgs e) |
86 | { | 83 | { |
87 | server.Process(); | 84 | m_server.Process(); |
88 | 85 | ||
89 | if (!shutdown) | 86 | if (!m_shutdown) |
90 | ticker.Start(); | 87 | m_ticker.Start(); |
91 | 88 | ||
92 | if (++ticks % 100 == 0) | 89 | // Commenting this at because of the excess flood to log. |
90 | // TODO: Add ini file option. | ||
91 | /*if (++ticks % 100 == 0) | ||
93 | { | 92 | { |
94 | server.PrintDebugInformation(); | 93 | server.PrintDebugInformation(); |
95 | } | 94 | }*/ |
96 | } | 95 | } |
97 | 96 | ||
98 | public void Close() | 97 | public void Close() |
99 | { | 98 | { |
100 | shutdown = true; | 99 | m_shutdown = true; |
101 | ticker.Stop(); | 100 | m_ticker.Stop(); |
102 | } | 101 | } |
103 | 102 | ||
104 | public string Name | 103 | public string Name |
@@ -110,5 +109,6 @@ namespace OpenSim.Client.MXP | |||
110 | { | 109 | { |
111 | get { return true; } | 110 | get { return true; } |
112 | } | 111 | } |
112 | |||
113 | } | 113 | } |
114 | } | 114 | } |
diff --git a/OpenSim/Client/MXP/MXPUtil.cs b/OpenSim/Client/MXP/MXPUtil.cs index cbf2eac..3387145 100644 --- a/OpenSim/Client/MXP/MXPUtil.cs +++ b/OpenSim/Client/MXP/MXPUtil.cs | |||
@@ -32,7 +32,7 @@ using OpenMetaverse; | |||
32 | 32 | ||
33 | namespace OpenSim.Client.MXP | 33 | namespace OpenSim.Client.MXP |
34 | { | 34 | { |
35 | static class MXPUtil | 35 | public static class MXPUtil |
36 | { | 36 | { |
37 | public static string GenerateMXPURL(string server, int port, UUID bubbleID, Vector3 location) | 37 | public static string GenerateMXPURL(string server, int port, UUID bubbleID, Vector3 location) |
38 | { | 38 | { |
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 | } |
diff --git a/bin/MXP.dll b/bin/MXP.dll index 026ca99..99e90c8 100644 --- a/bin/MXP.dll +++ b/bin/MXP.dll | |||
Binary files differ | |||
diff --git a/bin/MXP.pdb b/bin/MXP.pdb index 5fa85f2..deadeef 100644 --- a/bin/MXP.pdb +++ b/bin/MXP.pdb | |||
Binary files differ | |||