diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/OpenSim.RegionServer/ClientView.API.cs | 333 |
1 files changed, 195 insertions, 138 deletions
diff --git a/OpenSim/OpenSim.RegionServer/ClientView.API.cs b/OpenSim/OpenSim.RegionServer/ClientView.API.cs index b9773c6..3badec9 100644 --- a/OpenSim/OpenSim.RegionServer/ClientView.API.cs +++ b/OpenSim/OpenSim.RegionServer/ClientView.API.cs | |||
@@ -147,7 +147,7 @@ namespace OpenSim | |||
147 | 147 | ||
148 | handshake.RegionInfo.RegionFlags = (uint)regionInfo.estateSettings.regionFlags; | 148 | handshake.RegionInfo.RegionFlags = (uint)regionInfo.estateSettings.regionFlags; |
149 | 149 | ||
150 | handshake.RegionInfo.SimName = _enc.GetBytes(regionInfo.estateSettings.waterHeight + "\0"); | 150 | handshake.RegionInfo.SimName = _enc.GetBytes(regionInfo.RegionName + "\0"); |
151 | handshake.RegionInfo.SimOwner = regionInfo.MasterAvatarAssignedUUID; | 151 | handshake.RegionInfo.SimOwner = regionInfo.MasterAvatarAssignedUUID; |
152 | handshake.RegionInfo.TerrainBase0 = regionInfo.estateSettings.terrainBase0; | 152 | handshake.RegionInfo.TerrainBase0 = regionInfo.estateSettings.terrainBase0; |
153 | handshake.RegionInfo.TerrainBase1 = regionInfo.estateSettings.terrainBase1; | 153 | handshake.RegionInfo.TerrainBase1 = regionInfo.estateSettings.terrainBase1; |
@@ -266,6 +266,12 @@ namespace OpenSim | |||
266 | } | 266 | } |
267 | } | 267 | } |
268 | 268 | ||
269 | /// <summary> | ||
270 | /// | ||
271 | /// </summary> | ||
272 | /// <param name="neighbourHandle"></param> | ||
273 | /// <param name="neighbourIP"></param> | ||
274 | /// <param name="neighbourPort"></param> | ||
269 | public void InformClientOfNeighbour(ulong neighbourHandle, System.Net.IPAddress neighbourIP, ushort neighbourPort) | 275 | public void InformClientOfNeighbour(ulong neighbourHandle, System.Net.IPAddress neighbourIP, ushort neighbourPort) |
270 | { | 276 | { |
271 | EnableSimulatorPacket enablesimpacket = new EnableSimulatorPacket(); | 277 | EnableSimulatorPacket enablesimpacket = new EnableSimulatorPacket(); |
@@ -281,6 +287,10 @@ namespace OpenSim | |||
281 | OutPacket(enablesimpacket); | 287 | OutPacket(enablesimpacket); |
282 | } | 288 | } |
283 | 289 | ||
290 | /// <summary> | ||
291 | /// | ||
292 | /// </summary> | ||
293 | /// <returns></returns> | ||
284 | public AgentCircuitData RequestClientInfo() | 294 | public AgentCircuitData RequestClientInfo() |
285 | { | 295 | { |
286 | AgentCircuitData agentData = new AgentCircuitData(); | 296 | AgentCircuitData agentData = new AgentCircuitData(); |
@@ -383,70 +393,6 @@ namespace OpenSim | |||
383 | 393 | ||
384 | } | 394 | } |
385 | 395 | ||
386 | |||
387 | /// <summary> | ||
388 | /// | ||
389 | /// </summary> | ||
390 | /// <param name="objdata"></param> | ||
391 | protected void SetDefaultAvatarPacketValues(ref ObjectUpdatePacket.ObjectDataBlock objdata) | ||
392 | { | ||
393 | objdata.PSBlock = new byte[0]; | ||
394 | objdata.ExtraParams = new byte[1]; | ||
395 | objdata.MediaURL = new byte[0]; | ||
396 | objdata.NameValue = new byte[0]; | ||
397 | objdata.Text = new byte[0]; | ||
398 | objdata.TextColor = new byte[4]; | ||
399 | objdata.JointAxisOrAnchor = new LLVector3(0, 0, 0); | ||
400 | objdata.JointPivot = new LLVector3(0, 0, 0); | ||
401 | objdata.Material = 4; | ||
402 | objdata.TextureAnim = new byte[0]; | ||
403 | objdata.Sound = LLUUID.Zero; | ||
404 | LLObject.TextureEntry ntex = new LLObject.TextureEntry(new LLUUID("00000000-0000-0000-5005-000000000005")); | ||
405 | objdata.TextureEntry = ntex.ToBytes(); | ||
406 | objdata.State = 0; | ||
407 | objdata.Data = new byte[0]; | ||
408 | |||
409 | objdata.ObjectData = new byte[76]; | ||
410 | objdata.ObjectData[15] = 128; | ||
411 | objdata.ObjectData[16] = 63; | ||
412 | objdata.ObjectData[56] = 128; | ||
413 | objdata.ObjectData[61] = 102; | ||
414 | objdata.ObjectData[62] = 40; | ||
415 | objdata.ObjectData[63] = 61; | ||
416 | objdata.ObjectData[64] = 189; | ||
417 | } | ||
418 | |||
419 | /// <summary> | ||
420 | /// | ||
421 | /// </summary> | ||
422 | /// <returns></returns> | ||
423 | protected ObjectUpdatePacket.ObjectDataBlock CreateDefaultAvatarPacket() | ||
424 | { | ||
425 | libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock objdata = new ObjectUpdatePacket.ObjectDataBlock(); // new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock(data1, ref i); | ||
426 | |||
427 | SetDefaultAvatarPacketValues(ref objdata); | ||
428 | objdata.UpdateFlags = 61 + (9 << 8) + (130 << 16) + (16 << 24); | ||
429 | objdata.PathCurve = 16; | ||
430 | objdata.ProfileCurve = 1; | ||
431 | objdata.PathScaleX = 100; | ||
432 | objdata.PathScaleY = 100; | ||
433 | objdata.ParentID = 0; | ||
434 | objdata.OwnerID = LLUUID.Zero; | ||
435 | objdata.Scale = new LLVector3(1, 1, 1); | ||
436 | objdata.PCode = 47; | ||
437 | System.Text.Encoding enc = System.Text.Encoding.ASCII; | ||
438 | libsecondlife.LLVector3 pos = new LLVector3(objdata.ObjectData, 16); | ||
439 | pos.X = 100f; | ||
440 | objdata.ID = 8880000; | ||
441 | objdata.NameValue = enc.GetBytes("FirstName STRING RW SV Test \nLastName STRING RW SV User \0"); | ||
442 | libsecondlife.LLVector3 pos2 = new LLVector3(100f, 100f, 23f); | ||
443 | //objdata.FullID=user.AgentID; | ||
444 | byte[] pb = pos.GetBytes(); | ||
445 | Array.Copy(pb, 0, objdata.ObjectData, 16, pb.Length); | ||
446 | |||
447 | return objdata; | ||
448 | } | ||
449 | |||
450 | #endregion | 396 | #endregion |
451 | 397 | ||
452 | #region Primitive Packet/data Sending Methods | 398 | #region Primitive Packet/data Sending Methods |
@@ -521,78 +467,13 @@ namespace OpenSim | |||
521 | } | 467 | } |
522 | 468 | ||
523 | /// <summary> | 469 | /// <summary> |
524 | /// Create the ObjectDataBlock for a ObjectUpdatePacket (for a Primitive) | 470 | /// |
525 | /// </summary> | ||
526 | /// <param name="primData"></param> | ||
527 | /// <returns></returns> | ||
528 | protected ObjectUpdatePacket.ObjectDataBlock CreatePrimUpdateBlock(PrimData primData, LLUUID textureID) | ||
529 | { | ||
530 | ObjectUpdatePacket.ObjectDataBlock objupdate = new ObjectUpdatePacket.ObjectDataBlock(); | ||
531 | this.SetDefaultPrimPacketValues(objupdate); | ||
532 | objupdate.UpdateFlags = 32 + 65536 + 131072 + 256 + 4 + 8 + 2048 + 524288 + 268435456; | ||
533 | this.SetPrimPacketShapeData(objupdate, primData, textureID); | ||
534 | |||
535 | return objupdate; | ||
536 | } | ||
537 | |||
538 | /// <summary> | ||
539 | /// Set some default values in a ObjectUpdatePacket | ||
540 | /// </summary> | ||
541 | /// <param name="objdata"></param> | ||
542 | protected void SetDefaultPrimPacketValues(ObjectUpdatePacket.ObjectDataBlock objdata) | ||
543 | { | ||
544 | objdata.PSBlock = new byte[0]; | ||
545 | objdata.ExtraParams = new byte[1]; | ||
546 | objdata.MediaURL = new byte[0]; | ||
547 | objdata.NameValue = new byte[0]; | ||
548 | objdata.Text = new byte[0]; | ||
549 | objdata.TextColor = new byte[4]; | ||
550 | objdata.JointAxisOrAnchor = new LLVector3(0, 0, 0); | ||
551 | objdata.JointPivot = new LLVector3(0, 0, 0); | ||
552 | objdata.Material = 3; | ||
553 | objdata.TextureAnim = new byte[0]; | ||
554 | objdata.Sound = LLUUID.Zero; | ||
555 | objdata.State = 0; | ||
556 | objdata.Data = new byte[0]; | ||
557 | |||
558 | objdata.ObjectData = new byte[60]; | ||
559 | objdata.ObjectData[46] = 128; | ||
560 | objdata.ObjectData[47] = 63; | ||
561 | } | ||
562 | |||
563 | /// <summary> | ||
564 | /// Copy the data from a PrimData object to a ObjectUpdatePacket | ||
565 | /// </summary> | 471 | /// </summary> |
566 | /// <param name="objectData"></param> | 472 | /// <param name="regionHandle"></param> |
567 | /// <param name="primData"></param> | 473 | /// <param name="timeDilation"></param> |
568 | protected void SetPrimPacketShapeData(ObjectUpdatePacket.ObjectDataBlock objectData, PrimData primData, LLUUID textureID) | 474 | /// <param name="localID"></param> |
569 | { | 475 | /// <param name="position"></param> |
570 | LLObject.TextureEntry ntex = new LLObject.TextureEntry(textureID); | 476 | /// <param name="rotation"></param> |
571 | objectData.TextureEntry = ntex.ToBytes(); | ||
572 | objectData.OwnerID = primData.OwnerID; | ||
573 | objectData.PCode = primData.PCode; | ||
574 | objectData.PathBegin =primData.PathBegin; | ||
575 | objectData.PathEnd = primData.PathEnd; | ||
576 | objectData.PathScaleX = primData.PathScaleX; | ||
577 | objectData.PathScaleY = primData.PathScaleY; | ||
578 | objectData.PathShearX = primData.PathShearX; | ||
579 | objectData.PathShearY = primData.PathShearY; | ||
580 | objectData.PathSkew = primData.PathSkew; | ||
581 | objectData.ProfileBegin = primData.ProfileBegin; | ||
582 | objectData.ProfileEnd = primData.ProfileEnd; | ||
583 | objectData.Scale = primData.Scale; | ||
584 | objectData.PathCurve = primData.PathCurve; | ||
585 | objectData.ProfileCurve = primData.ProfileCurve; | ||
586 | objectData.ParentID = primData.ParentID; | ||
587 | objectData.ProfileHollow = primData.ProfileHollow; | ||
588 | objectData.PathRadiusOffset = primData.PathRadiusOffset; | ||
589 | objectData.PathRevolutions = primData.PathRevolutions; | ||
590 | objectData.PathTaperX = primData.PathTaperX; | ||
591 | objectData.PathTaperY = primData.PathTaperY; | ||
592 | objectData.PathTwist = primData.PathTwist; | ||
593 | objectData.PathTwistBegin = primData.PathTwistBegin; | ||
594 | } | ||
595 | |||
596 | public void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, LLQuaternion rotation) | 477 | public void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, LLQuaternion rotation) |
597 | { | 478 | { |
598 | ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket(); | 479 | ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket(); |
@@ -604,6 +485,12 @@ namespace OpenSim | |||
604 | this.OutPacket(terse); | 485 | this.OutPacket(terse); |
605 | } | 486 | } |
606 | 487 | ||
488 | #endregion | ||
489 | |||
490 | #endregion | ||
491 | |||
492 | #region Helper Methods | ||
493 | |||
607 | /// <summary> | 494 | /// <summary> |
608 | /// | 495 | /// |
609 | /// </summary> | 496 | /// </summary> |
@@ -625,7 +512,7 @@ namespace OpenSim | |||
625 | bytes[i++] = (byte)((ID >> 24) % 256); | 512 | bytes[i++] = (byte)((ID >> 24) % 256); |
626 | bytes[i++] = 0; | 513 | bytes[i++] = 0; |
627 | bytes[i++] = 0; | 514 | bytes[i++] = 0; |
628 | 515 | ||
629 | byte[] pb = position.GetBytes(); | 516 | byte[] pb = position.GetBytes(); |
630 | Array.Copy(pb, 0, bytes, i, pb.Length); | 517 | Array.Copy(pb, 0, bytes, i, pb.Length); |
631 | i += 12; | 518 | i += 12; |
@@ -674,8 +561,178 @@ namespace OpenSim | |||
674 | dat.Data = bytes; | 561 | dat.Data = bytes; |
675 | return dat; | 562 | return dat; |
676 | } | 563 | } |
677 | #endregion | ||
678 | 564 | ||
565 | |||
566 | /// <summary> | ||
567 | /// Create the ObjectDataBlock for a ObjectUpdatePacket (for a Primitive) | ||
568 | /// </summary> | ||
569 | /// <param name="primData"></param> | ||
570 | /// <returns></returns> | ||
571 | protected ObjectUpdatePacket.ObjectDataBlock CreatePrimUpdateBlock(PrimData primData, LLUUID textureID) | ||
572 | { | ||
573 | ObjectUpdatePacket.ObjectDataBlock objupdate = new ObjectUpdatePacket.ObjectDataBlock(); | ||
574 | this.SetDefaultPrimPacketValues(objupdate); | ||
575 | objupdate.UpdateFlags = 32 + 65536 + 131072 + 256 + 4 + 8 + 2048 + 524288 + 268435456; | ||
576 | this.SetPrimPacketShapeData(objupdate, primData, textureID); | ||
577 | |||
578 | return objupdate; | ||
579 | } | ||
580 | |||
581 | /// <summary> | ||
582 | /// Copy the data from a PrimData object to a ObjectUpdatePacket | ||
583 | /// </summary> | ||
584 | /// <param name="objectData"></param> | ||
585 | /// <param name="primData"></param> | ||
586 | protected void SetPrimPacketShapeData(ObjectUpdatePacket.ObjectDataBlock objectData, PrimData primData, LLUUID textureID) | ||
587 | { | ||
588 | LLObject.TextureEntry ntex = new LLObject.TextureEntry(textureID); | ||
589 | objectData.TextureEntry = ntex.ToBytes(); | ||
590 | objectData.OwnerID = primData.OwnerID; | ||
591 | objectData.PCode = primData.PCode; | ||
592 | objectData.PathBegin = primData.PathBegin; | ||
593 | objectData.PathEnd = primData.PathEnd; | ||
594 | objectData.PathScaleX = primData.PathScaleX; | ||
595 | objectData.PathScaleY = primData.PathScaleY; | ||
596 | objectData.PathShearX = primData.PathShearX; | ||
597 | objectData.PathShearY = primData.PathShearY; | ||
598 | objectData.PathSkew = primData.PathSkew; | ||
599 | objectData.ProfileBegin = primData.ProfileBegin; | ||
600 | objectData.ProfileEnd = primData.ProfileEnd; | ||
601 | objectData.Scale = primData.Scale; | ||
602 | objectData.PathCurve = primData.PathCurve; | ||
603 | objectData.ProfileCurve = primData.ProfileCurve; | ||
604 | objectData.ParentID = primData.ParentID; | ||
605 | objectData.ProfileHollow = primData.ProfileHollow; | ||
606 | objectData.PathRadiusOffset = primData.PathRadiusOffset; | ||
607 | objectData.PathRevolutions = primData.PathRevolutions; | ||
608 | objectData.PathTaperX = primData.PathTaperX; | ||
609 | objectData.PathTaperY = primData.PathTaperY; | ||
610 | objectData.PathTwist = primData.PathTwist; | ||
611 | objectData.PathTwistBegin = primData.PathTwistBegin; | ||
612 | } | ||
613 | |||
614 | /// <summary> | ||
615 | /// Set some default values in a ObjectUpdatePacket | ||
616 | /// </summary> | ||
617 | /// <param name="objdata"></param> | ||
618 | protected void SetDefaultPrimPacketValues(ObjectUpdatePacket.ObjectDataBlock objdata) | ||
619 | { | ||
620 | objdata.PSBlock = new byte[0]; | ||
621 | objdata.ExtraParams = new byte[1]; | ||
622 | objdata.MediaURL = new byte[0]; | ||
623 | objdata.NameValue = new byte[0]; | ||
624 | objdata.Text = new byte[0]; | ||
625 | objdata.TextColor = new byte[4]; | ||
626 | objdata.JointAxisOrAnchor = new LLVector3(0, 0, 0); | ||
627 | objdata.JointPivot = new LLVector3(0, 0, 0); | ||
628 | objdata.Material = 3; | ||
629 | objdata.TextureAnim = new byte[0]; | ||
630 | objdata.Sound = LLUUID.Zero; | ||
631 | objdata.State = 0; | ||
632 | objdata.Data = new byte[0]; | ||
633 | |||
634 | objdata.ObjectData = new byte[60]; | ||
635 | objdata.ObjectData[46] = 128; | ||
636 | objdata.ObjectData[47] = 63; | ||
637 | } | ||
638 | |||
639 | |||
640 | /// <summary> | ||
641 | /// | ||
642 | /// </summary> | ||
643 | /// <returns></returns> | ||
644 | protected ObjectUpdatePacket.ObjectDataBlock CreateDefaultAvatarPacket() | ||
645 | { | ||
646 | libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock objdata = new ObjectUpdatePacket.ObjectDataBlock(); // new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock(data1, ref i); | ||
647 | |||
648 | SetDefaultAvatarPacketValues(ref objdata); | ||
649 | objdata.UpdateFlags = 61 + (9 << 8) + (130 << 16) + (16 << 24); | ||
650 | objdata.PathCurve = 16; | ||
651 | objdata.ProfileCurve = 1; | ||
652 | objdata.PathScaleX = 100; | ||
653 | objdata.PathScaleY = 100; | ||
654 | objdata.ParentID = 0; | ||
655 | objdata.OwnerID = LLUUID.Zero; | ||
656 | objdata.Scale = new LLVector3(1, 1, 1); | ||
657 | objdata.PCode = 47; | ||
658 | System.Text.Encoding enc = System.Text.Encoding.ASCII; | ||
659 | libsecondlife.LLVector3 pos = new LLVector3(objdata.ObjectData, 16); | ||
660 | pos.X = 100f; | ||
661 | objdata.ID = 8880000; | ||
662 | objdata.NameValue = enc.GetBytes("FirstName STRING RW SV Test \nLastName STRING RW SV User \0"); | ||
663 | libsecondlife.LLVector3 pos2 = new LLVector3(100f, 100f, 23f); | ||
664 | //objdata.FullID=user.AgentID; | ||
665 | byte[] pb = pos.GetBytes(); | ||
666 | Array.Copy(pb, 0, objdata.ObjectData, 16, pb.Length); | ||
667 | |||
668 | return objdata; | ||
669 | } | ||
670 | |||
671 | /// <summary> | ||
672 | /// | ||
673 | /// </summary> | ||
674 | /// <param name="objdata"></param> | ||
675 | protected void SetDefaultAvatarPacketValues(ref ObjectUpdatePacket.ObjectDataBlock objdata) | ||
676 | { | ||
677 | objdata.PSBlock = new byte[0]; | ||
678 | objdata.ExtraParams = new byte[1]; | ||
679 | objdata.MediaURL = new byte[0]; | ||
680 | objdata.NameValue = new byte[0]; | ||
681 | objdata.Text = new byte[0]; | ||
682 | objdata.TextColor = new byte[4]; | ||
683 | objdata.JointAxisOrAnchor = new LLVector3(0, 0, 0); | ||
684 | objdata.JointPivot = new LLVector3(0, 0, 0); | ||
685 | objdata.Material = 4; | ||
686 | objdata.TextureAnim = new byte[0]; | ||
687 | objdata.Sound = LLUUID.Zero; | ||
688 | LLObject.TextureEntry ntex = new LLObject.TextureEntry(new LLUUID("00000000-0000-0000-5005-000000000005")); | ||
689 | objdata.TextureEntry = ntex.ToBytes(); | ||
690 | objdata.State = 0; | ||
691 | objdata.Data = new byte[0]; | ||
692 | |||
693 | objdata.ObjectData = new byte[76]; | ||
694 | objdata.ObjectData[15] = 128; | ||
695 | objdata.ObjectData[16] = 63; | ||
696 | objdata.ObjectData[56] = 128; | ||
697 | objdata.ObjectData[61] = 102; | ||
698 | objdata.ObjectData[62] = 40; | ||
699 | objdata.ObjectData[63] = 61; | ||
700 | objdata.ObjectData[64] = 189; | ||
701 | } | ||
702 | |||
703 | /// <summary> | ||
704 | /// | ||
705 | /// </summary> | ||
706 | /// <param name="addPacket"></param> | ||
707 | /// <returns></returns> | ||
708 | protected PrimData CreatePrimFromObjectAdd(ObjectAddPacket addPacket) | ||
709 | { | ||
710 | PrimData PData = new PrimData(); | ||
711 | PData.CreationDate = (Int32)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; | ||
712 | PData.PCode = addPacket.ObjectData.PCode; | ||
713 | PData.PathBegin = addPacket.ObjectData.PathBegin; | ||
714 | PData.PathEnd = addPacket.ObjectData.PathEnd; | ||
715 | PData.PathScaleX = addPacket.ObjectData.PathScaleX; | ||
716 | PData.PathScaleY = addPacket.ObjectData.PathScaleY; | ||
717 | PData.PathShearX = addPacket.ObjectData.PathShearX; | ||
718 | PData.PathShearY = addPacket.ObjectData.PathShearY; | ||
719 | PData.PathSkew = addPacket.ObjectData.PathSkew; | ||
720 | PData.ProfileBegin = addPacket.ObjectData.ProfileBegin; | ||
721 | PData.ProfileEnd = addPacket.ObjectData.ProfileEnd; | ||
722 | PData.Scale = addPacket.ObjectData.Scale; | ||
723 | PData.PathCurve = addPacket.ObjectData.PathCurve; | ||
724 | PData.ProfileCurve = addPacket.ObjectData.ProfileCurve; | ||
725 | PData.ParentID = 0; | ||
726 | PData.ProfileHollow = addPacket.ObjectData.ProfileHollow; | ||
727 | PData.PathRadiusOffset = addPacket.ObjectData.PathRadiusOffset; | ||
728 | PData.PathRevolutions = addPacket.ObjectData.PathRevolutions; | ||
729 | PData.PathTaperX = addPacket.ObjectData.PathTaperX; | ||
730 | PData.PathTaperY = addPacket.ObjectData.PathTaperY; | ||
731 | PData.PathTwist = addPacket.ObjectData.PathTwist; | ||
732 | PData.PathTwistBegin = addPacket.ObjectData.PathTwistBegin; | ||
733 | |||
734 | return PData; | ||
735 | } | ||
679 | #endregion | 736 | #endregion |
680 | 737 | ||
681 | } | 738 | } |