diff --git a/libsecondlife/Types.cs b/libsecondlife/Types.cs index 43299c38..c7ed42b0 100644 --- a/libsecondlife/Types.cs +++ b/libsecondlife/Types.cs @@ -79,12 +79,8 @@ namespace libsecondlife /// Beginning offset in the array public LLUUID(byte[] source, int pos) { - UUID = new Guid( - (source[pos + 0] << 24) | (source[pos + 1] << 16) | (source[pos + 2] << 8) | source[pos + 3], - (short)((source[pos + 4] << 8) | source[pos + 5]), - (short)((source[pos + 6] << 8) | source[pos + 7]), - source[pos + 8], source[pos + 9], source[pos + 10], source[pos + 11], - source[pos + 12], source[pos + 13], source[pos + 14], source[pos + 15]); + UUID = LLUUID.Zero.UUID; + FromBytes(source, pos); } /// @@ -101,6 +97,21 @@ namespace libsecondlife #region Public Methods + /// + /// + /// + /// + /// + public void FromBytes(byte[] source, int pos) + { + UUID = new Guid( + (source[pos + 0] << 24) | (source[pos + 1] << 16) | (source[pos + 2] << 8) | source[pos + 3], + (short)((source[pos + 4] << 8) | source[pos + 5]), + (short)((source[pos + 6] << 8) | source[pos + 7]), + source[pos + 8], source[pos + 9], source[pos + 10], source[pos + 11], + source[pos + 12], source[pos + 13], source[pos + 14], source[pos + 15]); + } + /// /// IComparable.CompareTo implementation. /// @@ -499,6 +510,9 @@ namespace libsecondlife /// Z value public float Z; + // Used for little to big endian conversion on big endian architectures + private byte[] conversionBuffer; + #region Constructors /// @@ -507,6 +521,7 @@ namespace libsecondlife /// Single-precision vector to copy public LLVector3(LLVector3 vector) { + conversionBuffer = null; X = vector.X; Y = vector.Y; Z = vector.Z; @@ -519,6 +534,7 @@ namespace libsecondlife /// A double-precision vector public LLVector3(LLVector3d vector) { + conversionBuffer = null; X = (float)vector.X; Y = (float)vector.Y; Z = (float)vector.Z; @@ -531,26 +547,10 @@ namespace libsecondlife /// Beginning position in the byte array public LLVector3(byte[] byteArray, int pos) { - if (!BitConverter.IsLittleEndian) - { - byte[] newArray = new byte[12]; - Buffer.BlockCopy(byteArray, pos, newArray, 0, 12); - - Array.Reverse(newArray, 0, 4); - Array.Reverse(newArray, 4, 4); - Array.Reverse(newArray, 8, 4); - - X = BitConverter.ToSingle(newArray, 0); - Y = BitConverter.ToSingle(newArray, 4); - Z = BitConverter.ToSingle(newArray, 8); - } - else - { - X = BitConverter.ToSingle(byteArray, pos); - Y = BitConverter.ToSingle(byteArray, pos + 4); - Z = BitConverter.ToSingle(byteArray, pos + 8); - } - } + conversionBuffer = null; + X = Y = Z = 0; + FromBytes(byteArray, pos); + } /// /// Constructor, builds a vector for individual float values @@ -560,6 +560,7 @@ namespace libsecondlife /// Z value public LLVector3(float x, float y, float z) { + conversionBuffer = null; X = x; Y = y; Z = z; @@ -569,6 +570,38 @@ namespace libsecondlife #region Public Methods + /// + /// Builds a vector from a byte array + /// + /// Byte array containing a 12 byte vector + /// Beginning position in the byte array + public void FromBytes(byte[] byteArray, int pos) + { + if (!BitConverter.IsLittleEndian) + { + // Big endian architecture + if (conversionBuffer == null) + conversionBuffer = new byte[12]; + + Buffer.BlockCopy(byteArray, pos, conversionBuffer, 0, 12); + + Array.Reverse(conversionBuffer, 0, 4); + Array.Reverse(conversionBuffer, 4, 4); + Array.Reverse(conversionBuffer, 8, 4); + + X = BitConverter.ToSingle(conversionBuffer, 0); + Y = BitConverter.ToSingle(conversionBuffer, 4); + Z = BitConverter.ToSingle(conversionBuffer, 8); + } + else + { + // Little endian architecture + X = BitConverter.ToSingle(byteArray, pos); + Y = BitConverter.ToSingle(byteArray, pos + 4); + Z = BitConverter.ToSingle(byteArray, pos + 8); + } + } + /// /// Test if this vector is composed of all finite numbers /// @@ -884,6 +917,9 @@ namespace libsecondlife /// Z value public double Z; + // Used for little to big endian conversion on big endian architectures + private byte[] conversionBuffer; + #region Constructors /// @@ -894,6 +930,7 @@ namespace libsecondlife /// public LLVector3d(double x, double y, double z) { + conversionBuffer = null; X = x; Y = y; Z = z; @@ -905,6 +942,7 @@ namespace libsecondlife /// public LLVector3d(LLVector3 llv3) { + conversionBuffer = null; X = llv3.X; Y = llv3.Y; Z = llv3.Z; @@ -917,31 +955,47 @@ namespace libsecondlife /// public LLVector3d(byte[] byteArray, int pos) { - if (!BitConverter.IsLittleEndian) - { - byte[] newArray = new byte[24]; - Buffer.BlockCopy(byteArray, pos, newArray, 0, 24); - - Array.Reverse(newArray, 0, 8); - Array.Reverse(newArray, 8, 8); - Array.Reverse(newArray, 16, 8); - - X = BitConverter.ToDouble(newArray, 0); - Y = BitConverter.ToDouble(newArray, 8); - Z = BitConverter.ToDouble(newArray, 16); - } - else - { - X = BitConverter.ToDouble(byteArray, pos); - Y = BitConverter.ToDouble(byteArray, pos + 8); - Z = BitConverter.ToDouble(byteArray, pos + 16); - } + conversionBuffer = null; + X = Y = Z = 0; + FromBytes(byteArray, pos); } #endregion Constructors #region Public Methods + /// + /// + /// + /// + /// + public void FromBytes(byte[] byteArray, int pos) + { + if (!BitConverter.IsLittleEndian) + { + // Big endian architecture + if (conversionBuffer == null) + conversionBuffer = new byte[24]; + + Buffer.BlockCopy(byteArray, pos, conversionBuffer, 0, 24); + + Array.Reverse(conversionBuffer, 0, 8); + Array.Reverse(conversionBuffer, 8, 8); + Array.Reverse(conversionBuffer, 16, 8); + + X = BitConverter.ToDouble(conversionBuffer, 0); + Y = BitConverter.ToDouble(conversionBuffer, 8); + Z = BitConverter.ToDouble(conversionBuffer, 16); + } + else + { + // Little endian architecture + X = BitConverter.ToDouble(byteArray, pos); + Y = BitConverter.ToDouble(byteArray, pos + 8); + Z = BitConverter.ToDouble(byteArray, pos + 16); + } + } + /// /// /// @@ -1085,6 +1139,9 @@ namespace libsecondlife /// public float S; + // Used for little to big endian conversion on big endian architectures + private byte[] conversionBuffer; + #region Constructors /// @@ -1096,6 +1153,7 @@ namespace libsecondlife /// S value public LLVector4(float x, float y, float z, float s) { + conversionBuffer = null; X = x; Y = y; Z = z; @@ -1109,23 +1167,43 @@ namespace libsecondlife /// public LLVector4(byte[] byteArray, int pos) { + conversionBuffer = null; + X = Y = Z = S = 0; + FromBytes(byteArray, pos); + } + + #endregion Constructors + + #region Public Methods + + /// + /// + /// + /// + /// + public void FromBytes(byte[] byteArray, int pos) + { if (!BitConverter.IsLittleEndian) { - byte[] newArray = new byte[16]; - Buffer.BlockCopy(byteArray, pos, newArray, 0, 16); + // Big endian architecture + if (conversionBuffer == null) + conversionBuffer = new byte[16]; - Array.Reverse(newArray, 0, 4); - Array.Reverse(newArray, 4, 4); - Array.Reverse(newArray, 8, 4); - Array.Reverse(newArray, 12, 4); + Buffer.BlockCopy(byteArray, pos, conversionBuffer, 0, 16); - X = BitConverter.ToSingle(newArray, 0); - Y = BitConverter.ToSingle(newArray, 4); - Z = BitConverter.ToSingle(newArray, 8); - S = BitConverter.ToSingle(newArray, 12); + Array.Reverse(conversionBuffer, 0, 4); + Array.Reverse(conversionBuffer, 4, 4); + Array.Reverse(conversionBuffer, 8, 4); + Array.Reverse(conversionBuffer, 12, 4); + + X = BitConverter.ToSingle(conversionBuffer, 0); + Y = BitConverter.ToSingle(conversionBuffer, 4); + Z = BitConverter.ToSingle(conversionBuffer, 8); + S = BitConverter.ToSingle(conversionBuffer, 12); } else { + // Little endian architecture X = BitConverter.ToSingle(byteArray, pos); Y = BitConverter.ToSingle(byteArray, pos + 4); Z = BitConverter.ToSingle(byteArray, pos + 8); @@ -1133,10 +1211,6 @@ namespace libsecondlife } } - #endregion Constructors - - #region Public Methods - /// /// /// @@ -1532,10 +1606,13 @@ namespace libsecondlife /// W value public float W; + // Used for little to big endian conversion on big endian architectures + private byte[] conversionBuffer; + #region Constructors /// - /// Build a quaternion object from a byte array + /// Constructor, builds a quaternion object from a byte array /// /// The source byte array /// Offset in the byte array to start reading at @@ -1544,56 +1621,9 @@ namespace libsecondlife /// be read. public LLQuaternion(byte[] byteArray, int pos, bool normalized) { - if (!normalized) - { - if (!BitConverter.IsLittleEndian) - { - byte[] newArray = new byte[16]; - Buffer.BlockCopy(byteArray, pos, newArray, 0, 16); - - Array.Reverse(newArray, 0, 4); - Array.Reverse(newArray, 4, 4); - Array.Reverse(newArray, 8, 4); - Array.Reverse(newArray, 12, 4); - - X = BitConverter.ToSingle(newArray, 0); - Y = BitConverter.ToSingle(newArray, 4); - Z = BitConverter.ToSingle(newArray, 8); - W = BitConverter.ToSingle(newArray, 12); - } - else - { - X = BitConverter.ToSingle(byteArray, pos); - Y = BitConverter.ToSingle(byteArray, pos + 4); - Z = BitConverter.ToSingle(byteArray, pos + 8); - W = BitConverter.ToSingle(byteArray, pos + 12); - } - } - else - { - if (!BitConverter.IsLittleEndian) - { - byte[] newArray = new byte[12]; - Buffer.BlockCopy(byteArray, pos, newArray, 0, 12); - - Array.Reverse(newArray, 0, 4); - Array.Reverse(newArray, 4, 4); - Array.Reverse(newArray, 8, 4); - - X = BitConverter.ToSingle(newArray, 0); - Y = BitConverter.ToSingle(newArray, 4); - Z = BitConverter.ToSingle(newArray, 8); - } - else - { - X = BitConverter.ToSingle(byteArray, pos); - Y = BitConverter.ToSingle(byteArray, pos + 4); - Z = BitConverter.ToSingle(byteArray, pos + 8); - } - - float xyzsum = 1 - X * X - Y * Y - Z * Z; - W = (xyzsum > 0) ? (float)Math.Sqrt(xyzsum) : 0; - } + conversionBuffer = null; + X = Y = Z = W = 0; + FromBytes(byteArray, pos, normalized); } /// @@ -1604,6 +1634,7 @@ namespace libsecondlife /// Z value from -1.0 to 1.0 public LLQuaternion(float x, float y, float z) { + conversionBuffer = null; X = x; Y = y; Z = z; @@ -1621,6 +1652,7 @@ namespace libsecondlife /// W value public LLQuaternion(float x, float y, float z, float w) { + conversionBuffer = null; X = x; Y = y; Z = z; @@ -1634,6 +1666,8 @@ namespace libsecondlife /// Vector value public LLQuaternion(float angle, LLVector3 vector) { + conversionBuffer = null; + vector = LLVector3.Norm(vector); angle *= 0.5f; @@ -1652,6 +1686,76 @@ namespace libsecondlife #region Public Methods + /// + /// Builds a quaternion object from a byte array + /// + /// The source byte array + /// Offset in the byte array to start reading at + /// Whether the source data is normalized or + /// not. If this is true 12 bytes will be read, otherwise 16 bytes will + /// be read. + public void FromBytes(byte[] byteArray, int pos, bool normalized) + { + if (!normalized) + { + if (!BitConverter.IsLittleEndian) + { + // Big endian architecture + if (conversionBuffer == null) + conversionBuffer = new byte[16]; + + Buffer.BlockCopy(byteArray, pos, conversionBuffer, 0, 16); + + Array.Reverse(conversionBuffer, 0, 4); + Array.Reverse(conversionBuffer, 4, 4); + Array.Reverse(conversionBuffer, 8, 4); + Array.Reverse(conversionBuffer, 12, 4); + + X = BitConverter.ToSingle(conversionBuffer, 0); + Y = BitConverter.ToSingle(conversionBuffer, 4); + Z = BitConverter.ToSingle(conversionBuffer, 8); + W = BitConverter.ToSingle(conversionBuffer, 12); + } + else + { + // Little endian architecture + X = BitConverter.ToSingle(byteArray, pos); + Y = BitConverter.ToSingle(byteArray, pos + 4); + Z = BitConverter.ToSingle(byteArray, pos + 8); + W = BitConverter.ToSingle(byteArray, pos + 12); + } + } + else + { + if (!BitConverter.IsLittleEndian) + { + // Big endian architecture + if (conversionBuffer == null) + conversionBuffer = new byte[16]; + + Buffer.BlockCopy(byteArray, pos, conversionBuffer, 0, 12); + + Array.Reverse(conversionBuffer, 0, 4); + Array.Reverse(conversionBuffer, 4, 4); + Array.Reverse(conversionBuffer, 8, 4); + + X = BitConverter.ToSingle(conversionBuffer, 0); + Y = BitConverter.ToSingle(conversionBuffer, 4); + Z = BitConverter.ToSingle(conversionBuffer, 8); + } + else + { + // Little endian architecture + X = BitConverter.ToSingle(byteArray, pos); + Y = BitConverter.ToSingle(byteArray, pos + 4); + Z = BitConverter.ToSingle(byteArray, pos + 8); + } + + float xyzsum = 1 - X * X - Y * Y - Z * Z; + W = (xyzsum > 0) ? (float)Math.Sqrt(xyzsum) : 0; + } + } + /// /// Normalize this quaternion and serialize it to a byte array /// diff --git a/libsecondlife/_Packets_.cs b/libsecondlife/_Packets_.cs index ca61211f..78490817 100644 --- a/libsecondlife/_Packets_.cs +++ b/libsecondlife/_Packets_.cs @@ -113,6 +113,8 @@ namespace libsecondlife.Packets /// Array containing all the appended ACKs of this packet public uint[] AckList; + public abstract void FromBytes(byte[] bytes, ref int pos, ref int packetEnd); + /// /// Convert the AckList to a byte array, used for packet serializing /// @@ -226,6 +228,11 @@ namespace libsecondlife.Packets /// /// public LowHeader(byte[] bytes, ref int pos, ref int packetEnd) + { + FromBytes(bytes, ref pos, ref packetEnd); + } + + override public void FromBytes(byte[] bytes, ref int pos, ref int packetEnd) { if (bytes.Length < 10) { throw new MalformedDataException(); } Data = new byte[10]; @@ -290,6 +297,11 @@ namespace libsecondlife.Packets /// /// public MediumHeader(byte[] bytes, ref int pos, ref int packetEnd) + { + FromBytes(bytes, ref pos, ref packetEnd); + } + + override public void FromBytes(byte[] bytes, ref int pos, ref int packetEnd) { if (bytes.Length < 8) { throw new MalformedDataException(); } Data = new byte[8]; @@ -340,6 +352,11 @@ namespace libsecondlife.Packets /// /// public HighHeader(byte[] bytes, ref int pos, ref int packetEnd) + { + FromBytes(bytes, ref pos, ref packetEnd); + } + + override public void FromBytes(byte[] bytes, ref int pos, ref int packetEnd) { if (bytes.Length < 7) { throw new MalformedDataException(); } Data = new byte[7]; @@ -760,7 +777,9 @@ namespace libsecondlife.Packets { public abstract Header Header { get; set; } public abstract PacketType Type { get; } - internal int TickCount; + public abstract void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer); + public abstract void FromBytes(Header header, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer); + public int TickCount; public abstract byte[] ToBytes(); public static PacketType GetType(ushort id, PacketFrequency frequency) @@ -1177,6 +1196,431 @@ namespace libsecondlife.Packets return PacketType.Default; } + public static PacketType GetType(byte[] bytes, int packetEnd, byte[] zeroBuffer) + { + ushort id; PacketFrequency freq; + int i = 0, end = packetEnd; + Header header = Header.BuildHeader(bytes, ref i, ref end); + if (header.Zerocoded) + { + end = Helpers.ZeroDecode(bytes, end + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + + if (bytes[6] == 0xFF) + { + if (bytes[7] == 0xFF) + { + id = (ushort)((bytes[8] << 8) + bytes[9]); freq = PacketFrequency.Low; + } + else + { + id = (ushort)bytes[7]; freq = PacketFrequency.Medium; + } + } + else + { + id = (ushort)bytes[6]; freq = PacketFrequency.High; + } + return GetType(id, freq); + } + + public static Packet BuildPacket(PacketType type) + { + if(type == PacketType.StartPingCheck) return new StartPingCheckPacket(); + if(type == PacketType.CompletePingCheck) return new CompletePingCheckPacket(); + if(type == PacketType.AgentUpdate) return new AgentUpdatePacket(); + if(type == PacketType.AgentAnimation) return new AgentAnimationPacket(); + if(type == PacketType.AgentRequestSit) return new AgentRequestSitPacket(); + if(type == PacketType.AgentSit) return new AgentSitPacket(); + if(type == PacketType.RequestImage) return new RequestImagePacket(); + if(type == PacketType.ImageData) return new ImageDataPacket(); + if(type == PacketType.ImagePacket) return new ImagePacketPacket(); + if(type == PacketType.LayerData) return new LayerDataPacket(); + if(type == PacketType.ObjectUpdate) return new ObjectUpdatePacket(); + if(type == PacketType.ObjectUpdateCompressed) return new ObjectUpdateCompressedPacket(); + if(type == PacketType.ObjectUpdateCached) return new ObjectUpdateCachedPacket(); + if(type == PacketType.ImprovedTerseObjectUpdate) return new ImprovedTerseObjectUpdatePacket(); + if(type == PacketType.KillObject) return new KillObjectPacket(); + if(type == PacketType.TransferPacket) return new TransferPacketPacket(); + if(type == PacketType.SendXferPacket) return new SendXferPacketPacket(); + if(type == PacketType.ConfirmXferPacket) return new ConfirmXferPacketPacket(); + if(type == PacketType.AvatarAnimation) return new AvatarAnimationPacket(); + if(type == PacketType.AvatarSitResponse) return new AvatarSitResponsePacket(); + if(type == PacketType.CameraConstraint) return new CameraConstraintPacket(); + if(type == PacketType.ParcelProperties) return new ParcelPropertiesPacket(); + if(type == PacketType.ChildAgentUpdate) return new ChildAgentUpdatePacket(); + if(type == PacketType.ChildAgentAlive) return new ChildAgentAlivePacket(); + if(type == PacketType.ChildAgentPositionUpdate) return new ChildAgentPositionUpdatePacket(); + if(type == PacketType.SoundTrigger) return new SoundTriggerPacket(); + if(type == PacketType.ObjectAdd) return new ObjectAddPacket(); + if(type == PacketType.MultipleObjectUpdate) return new MultipleObjectUpdatePacket(); + if(type == PacketType.RequestMultipleObjects) return new RequestMultipleObjectsPacket(); + if(type == PacketType.ObjectPosition) return new ObjectPositionPacket(); + if(type == PacketType.RequestObjectPropertiesFamily) return new RequestObjectPropertiesFamilyPacket(); + if(type == PacketType.CoarseLocationUpdate) return new CoarseLocationUpdatePacket(); + if(type == PacketType.CrossedRegion) return new CrossedRegionPacket(); + if(type == PacketType.ConfirmEnableSimulator) return new ConfirmEnableSimulatorPacket(); + if(type == PacketType.ObjectProperties) return new ObjectPropertiesPacket(); + if(type == PacketType.ObjectPropertiesFamily) return new ObjectPropertiesFamilyPacket(); + if(type == PacketType.ParcelPropertiesRequest) return new ParcelPropertiesRequestPacket(); + if(type == PacketType.AttachedSound) return new AttachedSoundPacket(); + if(type == PacketType.AttachedSoundGainChange) return new AttachedSoundGainChangePacket(); + if(type == PacketType.PreloadSound) return new PreloadSoundPacket(); + if(type == PacketType.ViewerEffect) return new ViewerEffectPacket(); + if(type == PacketType.TestMessage) return new TestMessagePacket(); + if(type == PacketType.UseCircuitCode) return new UseCircuitCodePacket(); + if(type == PacketType.TelehubInfo) return new TelehubInfoPacket(); + if(type == PacketType.EconomyDataRequest) return new EconomyDataRequestPacket(); + if(type == PacketType.EconomyData) return new EconomyDataPacket(); + if(type == PacketType.AvatarPickerRequest) return new AvatarPickerRequestPacket(); + if(type == PacketType.AvatarPickerReply) return new AvatarPickerReplyPacket(); + if(type == PacketType.PlacesQuery) return new PlacesQueryPacket(); + if(type == PacketType.PlacesReply) return new PlacesReplyPacket(); + if(type == PacketType.DirFindQuery) return new DirFindQueryPacket(); + if(type == PacketType.DirPlacesQuery) return new DirPlacesQueryPacket(); + if(type == PacketType.DirPlacesReply) return new DirPlacesReplyPacket(); + if(type == PacketType.DirPeopleReply) return new DirPeopleReplyPacket(); + if(type == PacketType.DirEventsReply) return new DirEventsReplyPacket(); + if(type == PacketType.DirGroupsReply) return new DirGroupsReplyPacket(); + if(type == PacketType.DirClassifiedQuery) return new DirClassifiedQueryPacket(); + if(type == PacketType.DirClassifiedReply) return new DirClassifiedReplyPacket(); + if(type == PacketType.AvatarClassifiedReply) return new AvatarClassifiedReplyPacket(); + if(type == PacketType.ClassifiedInfoRequest) return new ClassifiedInfoRequestPacket(); + if(type == PacketType.ClassifiedInfoReply) return new ClassifiedInfoReplyPacket(); + if(type == PacketType.ClassifiedInfoUpdate) return new ClassifiedInfoUpdatePacket(); + if(type == PacketType.ClassifiedDelete) return new ClassifiedDeletePacket(); + if(type == PacketType.ClassifiedGodDelete) return new ClassifiedGodDeletePacket(); + if(type == PacketType.DirLandQuery) return new DirLandQueryPacket(); + if(type == PacketType.DirLandReply) return new DirLandReplyPacket(); + if(type == PacketType.DirPopularQuery) return new DirPopularQueryPacket(); + if(type == PacketType.DirPopularReply) return new DirPopularReplyPacket(); + if(type == PacketType.ParcelInfoRequest) return new ParcelInfoRequestPacket(); + if(type == PacketType.ParcelInfoReply) return new ParcelInfoReplyPacket(); + if(type == PacketType.ParcelObjectOwnersRequest) return new ParcelObjectOwnersRequestPacket(); + if(type == PacketType.ParcelObjectOwnersReply) return new ParcelObjectOwnersReplyPacket(); + if(type == PacketType.GroupNoticesListRequest) return new GroupNoticesListRequestPacket(); + if(type == PacketType.GroupNoticesListReply) return new GroupNoticesListReplyPacket(); + if(type == PacketType.GroupNoticeRequest) return new GroupNoticeRequestPacket(); + if(type == PacketType.TeleportRequest) return new TeleportRequestPacket(); + if(type == PacketType.TeleportLocationRequest) return new TeleportLocationRequestPacket(); + if(type == PacketType.TeleportLocal) return new TeleportLocalPacket(); + if(type == PacketType.TeleportLandmarkRequest) return new TeleportLandmarkRequestPacket(); + if(type == PacketType.TeleportProgress) return new TeleportProgressPacket(); + if(type == PacketType.TeleportFinish) return new TeleportFinishPacket(); + if(type == PacketType.StartLure) return new StartLurePacket(); + if(type == PacketType.TeleportLureRequest) return new TeleportLureRequestPacket(); + if(type == PacketType.TeleportCancel) return new TeleportCancelPacket(); + if(type == PacketType.TeleportStart) return new TeleportStartPacket(); + if(type == PacketType.TeleportFailed) return new TeleportFailedPacket(); + if(type == PacketType.Undo) return new UndoPacket(); + if(type == PacketType.Redo) return new RedoPacket(); + if(type == PacketType.UndoLand) return new UndoLandPacket(); + if(type == PacketType.AgentPause) return new AgentPausePacket(); + if(type == PacketType.AgentResume) return new AgentResumePacket(); + if(type == PacketType.ChatFromViewer) return new ChatFromViewerPacket(); + if(type == PacketType.AgentThrottle) return new AgentThrottlePacket(); + if(type == PacketType.AgentFOV) return new AgentFOVPacket(); + if(type == PacketType.AgentHeightWidth) return new AgentHeightWidthPacket(); + if(type == PacketType.AgentSetAppearance) return new AgentSetAppearancePacket(); + if(type == PacketType.AgentQuitCopy) return new AgentQuitCopyPacket(); + if(type == PacketType.ImageNotInDatabase) return new ImageNotInDatabasePacket(); + if(type == PacketType.RebakeAvatarTextures) return new RebakeAvatarTexturesPacket(); + if(type == PacketType.SetAlwaysRun) return new SetAlwaysRunPacket(); + if(type == PacketType.ObjectDelete) return new ObjectDeletePacket(); + if(type == PacketType.ObjectDuplicate) return new ObjectDuplicatePacket(); + if(type == PacketType.ObjectDuplicateOnRay) return new ObjectDuplicateOnRayPacket(); + if(type == PacketType.ObjectScale) return new ObjectScalePacket(); + if(type == PacketType.ObjectRotation) return new ObjectRotationPacket(); + if(type == PacketType.ObjectFlagUpdate) return new ObjectFlagUpdatePacket(); + if(type == PacketType.ObjectClickAction) return new ObjectClickActionPacket(); + if(type == PacketType.ObjectImage) return new ObjectImagePacket(); + if(type == PacketType.ObjectMaterial) return new ObjectMaterialPacket(); + if(type == PacketType.ObjectShape) return new ObjectShapePacket(); + if(type == PacketType.ObjectExtraParams) return new ObjectExtraParamsPacket(); + if(type == PacketType.ObjectOwner) return new ObjectOwnerPacket(); + if(type == PacketType.ObjectGroup) return new ObjectGroupPacket(); + if(type == PacketType.ObjectBuy) return new ObjectBuyPacket(); + if(type == PacketType.BuyObjectInventory) return new BuyObjectInventoryPacket(); + if(type == PacketType.DerezContainer) return new DerezContainerPacket(); + if(type == PacketType.ObjectPermissions) return new ObjectPermissionsPacket(); + if(type == PacketType.ObjectSaleInfo) return new ObjectSaleInfoPacket(); + if(type == PacketType.ObjectName) return new ObjectNamePacket(); + if(type == PacketType.ObjectDescription) return new ObjectDescriptionPacket(); + if(type == PacketType.ObjectCategory) return new ObjectCategoryPacket(); + if(type == PacketType.ObjectSelect) return new ObjectSelectPacket(); + if(type == PacketType.ObjectDeselect) return new ObjectDeselectPacket(); + if(type == PacketType.ObjectAttach) return new ObjectAttachPacket(); + if(type == PacketType.ObjectDetach) return new ObjectDetachPacket(); + if(type == PacketType.ObjectDrop) return new ObjectDropPacket(); + if(type == PacketType.ObjectLink) return new ObjectLinkPacket(); + if(type == PacketType.ObjectDelink) return new ObjectDelinkPacket(); + if(type == PacketType.ObjectGrab) return new ObjectGrabPacket(); + if(type == PacketType.ObjectGrabUpdate) return new ObjectGrabUpdatePacket(); + if(type == PacketType.ObjectDeGrab) return new ObjectDeGrabPacket(); + if(type == PacketType.ObjectSpinStart) return new ObjectSpinStartPacket(); + if(type == PacketType.ObjectSpinUpdate) return new ObjectSpinUpdatePacket(); + if(type == PacketType.ObjectSpinStop) return new ObjectSpinStopPacket(); + if(type == PacketType.ObjectExportSelected) return new ObjectExportSelectedPacket(); + if(type == PacketType.ModifyLand) return new ModifyLandPacket(); + if(type == PacketType.VelocityInterpolateOn) return new VelocityInterpolateOnPacket(); + if(type == PacketType.VelocityInterpolateOff) return new VelocityInterpolateOffPacket(); + if(type == PacketType.StateSave) return new StateSavePacket(); + if(type == PacketType.ReportAutosaveCrash) return new ReportAutosaveCrashPacket(); + if(type == PacketType.SimWideDeletes) return new SimWideDeletesPacket(); + if(type == PacketType.TrackAgent) return new TrackAgentPacket(); + if(type == PacketType.ViewerStats) return new ViewerStatsPacket(); + if(type == PacketType.ScriptAnswerYes) return new ScriptAnswerYesPacket(); + if(type == PacketType.UserReport) return new UserReportPacket(); + if(type == PacketType.AlertMessage) return new AlertMessagePacket(); + if(type == PacketType.AgentAlertMessage) return new AgentAlertMessagePacket(); + if(type == PacketType.MeanCollisionAlert) return new MeanCollisionAlertPacket(); + if(type == PacketType.ViewerFrozenMessage) return new ViewerFrozenMessagePacket(); + if(type == PacketType.HealthMessage) return new HealthMessagePacket(); + if(type == PacketType.ChatFromSimulator) return new ChatFromSimulatorPacket(); + if(type == PacketType.SimStats) return new SimStatsPacket(); + if(type == PacketType.RequestRegionInfo) return new RequestRegionInfoPacket(); + if(type == PacketType.RegionInfo) return new RegionInfoPacket(); + if(type == PacketType.GodUpdateRegionInfo) return new GodUpdateRegionInfoPacket(); + if(type == PacketType.NearestLandingRegionUpdated) return new NearestLandingRegionUpdatedPacket(); + if(type == PacketType.RegionHandshake) return new RegionHandshakePacket(); + if(type == PacketType.RegionHandshakeReply) return new RegionHandshakeReplyPacket(); + if(type == PacketType.SimulatorViewerTimeMessage) return new SimulatorViewerTimeMessagePacket(); + if(type == PacketType.EnableSimulator) return new EnableSimulatorPacket(); + if(type == PacketType.DisableSimulator) return new DisableSimulatorPacket(); + if(type == PacketType.TransferRequest) return new TransferRequestPacket(); + if(type == PacketType.TransferInfo) return new TransferInfoPacket(); + if(type == PacketType.TransferAbort) return new TransferAbortPacket(); + if(type == PacketType.RequestXfer) return new RequestXferPacket(); + if(type == PacketType.AbortXfer) return new AbortXferPacket(); + if(type == PacketType.AvatarAppearance) return new AvatarAppearancePacket(); + if(type == PacketType.SetFollowCamProperties) return new SetFollowCamPropertiesPacket(); + if(type == PacketType.ClearFollowCamProperties) return new ClearFollowCamPropertiesPacket(); + if(type == PacketType.RequestPayPrice) return new RequestPayPricePacket(); + if(type == PacketType.PayPriceReply) return new PayPriceReplyPacket(); + if(type == PacketType.KickUser) return new KickUserPacket(); + if(type == PacketType.KickUserAck) return new KickUserAckPacket(); + if(type == PacketType.GodKickUser) return new GodKickUserPacket(); + if(type == PacketType.EjectUser) return new EjectUserPacket(); + if(type == PacketType.FreezeUser) return new FreezeUserPacket(); + if(type == PacketType.AvatarPropertiesRequest) return new AvatarPropertiesRequestPacket(); + if(type == PacketType.AvatarPropertiesReply) return new AvatarPropertiesReplyPacket(); + if(type == PacketType.AvatarInterestsReply) return new AvatarInterestsReplyPacket(); + if(type == PacketType.AvatarGroupsReply) return new AvatarGroupsReplyPacket(); + if(type == PacketType.AvatarPropertiesUpdate) return new AvatarPropertiesUpdatePacket(); + if(type == PacketType.AvatarInterestsUpdate) return new AvatarInterestsUpdatePacket(); + if(type == PacketType.AvatarNotesReply) return new AvatarNotesReplyPacket(); + if(type == PacketType.AvatarNotesUpdate) return new AvatarNotesUpdatePacket(); + if(type == PacketType.AvatarPicksReply) return new AvatarPicksReplyPacket(); + if(type == PacketType.EventInfoRequest) return new EventInfoRequestPacket(); + if(type == PacketType.EventInfoReply) return new EventInfoReplyPacket(); + if(type == PacketType.EventNotificationAddRequest) return new EventNotificationAddRequestPacket(); + if(type == PacketType.EventNotificationRemoveRequest) return new EventNotificationRemoveRequestPacket(); + if(type == PacketType.EventGodDelete) return new EventGodDeletePacket(); + if(type == PacketType.PickInfoReply) return new PickInfoReplyPacket(); + if(type == PacketType.PickInfoUpdate) return new PickInfoUpdatePacket(); + if(type == PacketType.PickDelete) return new PickDeletePacket(); + if(type == PacketType.PickGodDelete) return new PickGodDeletePacket(); + if(type == PacketType.ScriptQuestion) return new ScriptQuestionPacket(); + if(type == PacketType.ScriptControlChange) return new ScriptControlChangePacket(); + if(type == PacketType.ScriptDialog) return new ScriptDialogPacket(); + if(type == PacketType.ScriptDialogReply) return new ScriptDialogReplyPacket(); + if(type == PacketType.ForceScriptControlRelease) return new ForceScriptControlReleasePacket(); + if(type == PacketType.RevokePermissions) return new RevokePermissionsPacket(); + if(type == PacketType.LoadURL) return new LoadURLPacket(); + if(type == PacketType.ScriptTeleportRequest) return new ScriptTeleportRequestPacket(); + if(type == PacketType.ParcelOverlay) return new ParcelOverlayPacket(); + if(type == PacketType.ParcelPropertiesRequestByID) return new ParcelPropertiesRequestByIDPacket(); + if(type == PacketType.ParcelPropertiesUpdate) return new ParcelPropertiesUpdatePacket(); + if(type == PacketType.ParcelReturnObjects) return new ParcelReturnObjectsPacket(); + if(type == PacketType.ParcelSetOtherCleanTime) return new ParcelSetOtherCleanTimePacket(); + if(type == PacketType.ParcelDisableObjects) return new ParcelDisableObjectsPacket(); + if(type == PacketType.ParcelSelectObjects) return new ParcelSelectObjectsPacket(); + if(type == PacketType.EstateCovenantRequest) return new EstateCovenantRequestPacket(); + if(type == PacketType.EstateCovenantReply) return new EstateCovenantReplyPacket(); + if(type == PacketType.ForceObjectSelect) return new ForceObjectSelectPacket(); + if(type == PacketType.ParcelBuyPass) return new ParcelBuyPassPacket(); + if(type == PacketType.ParcelDeedToGroup) return new ParcelDeedToGroupPacket(); + if(type == PacketType.ParcelReclaim) return new ParcelReclaimPacket(); + if(type == PacketType.ParcelClaim) return new ParcelClaimPacket(); + if(type == PacketType.ParcelJoin) return new ParcelJoinPacket(); + if(type == PacketType.ParcelDivide) return new ParcelDividePacket(); + if(type == PacketType.ParcelRelease) return new ParcelReleasePacket(); + if(type == PacketType.ParcelBuy) return new ParcelBuyPacket(); + if(type == PacketType.ParcelGodForceOwner) return new ParcelGodForceOwnerPacket(); + if(type == PacketType.ParcelAccessListRequest) return new ParcelAccessListRequestPacket(); + if(type == PacketType.ParcelAccessListReply) return new ParcelAccessListReplyPacket(); + if(type == PacketType.ParcelAccessListUpdate) return new ParcelAccessListUpdatePacket(); + if(type == PacketType.ParcelDwellRequest) return new ParcelDwellRequestPacket(); + if(type == PacketType.ParcelDwellReply) return new ParcelDwellReplyPacket(); + if(type == PacketType.ParcelGodMarkAsContent) return new ParcelGodMarkAsContentPacket(); + if(type == PacketType.ViewerStartAuction) return new ViewerStartAuctionPacket(); + if(type == PacketType.UUIDNameRequest) return new UUIDNameRequestPacket(); + if(type == PacketType.UUIDNameReply) return new UUIDNameReplyPacket(); + if(type == PacketType.UUIDGroupNameRequest) return new UUIDGroupNameRequestPacket(); + if(type == PacketType.UUIDGroupNameReply) return new UUIDGroupNameReplyPacket(); + if(type == PacketType.ChildAgentDying) return new ChildAgentDyingPacket(); + if(type == PacketType.ChildAgentUnknown) return new ChildAgentUnknownPacket(); + if(type == PacketType.GetScriptRunning) return new GetScriptRunningPacket(); + if(type == PacketType.ScriptRunningReply) return new ScriptRunningReplyPacket(); + if(type == PacketType.SetScriptRunning) return new SetScriptRunningPacket(); + if(type == PacketType.ScriptReset) return new ScriptResetPacket(); + if(type == PacketType.ScriptSensorRequest) return new ScriptSensorRequestPacket(); + if(type == PacketType.ScriptSensorReply) return new ScriptSensorReplyPacket(); + if(type == PacketType.CompleteAgentMovement) return new CompleteAgentMovementPacket(); + if(type == PacketType.AgentMovementComplete) return new AgentMovementCompletePacket(); + if(type == PacketType.LogoutRequest) return new LogoutRequestPacket(); + if(type == PacketType.LogoutReply) return new LogoutReplyPacket(); + if(type == PacketType.ImprovedInstantMessage) return new ImprovedInstantMessagePacket(); + if(type == PacketType.RetrieveInstantMessages) return new RetrieveInstantMessagesPacket(); + if(type == PacketType.FindAgent) return new FindAgentPacket(); + if(type == PacketType.RequestGodlikePowers) return new RequestGodlikePowersPacket(); + if(type == PacketType.GrantGodlikePowers) return new GrantGodlikePowersPacket(); + if(type == PacketType.GodlikeMessage) return new GodlikeMessagePacket(); + if(type == PacketType.EstateOwnerMessage) return new EstateOwnerMessagePacket(); + if(type == PacketType.GenericMessage) return new GenericMessagePacket(); + if(type == PacketType.MuteListRequest) return new MuteListRequestPacket(); + if(type == PacketType.UpdateMuteListEntry) return new UpdateMuteListEntryPacket(); + if(type == PacketType.RemoveMuteListEntry) return new RemoveMuteListEntryPacket(); + if(type == PacketType.CopyInventoryFromNotecard) return new CopyInventoryFromNotecardPacket(); + if(type == PacketType.UpdateInventoryItem) return new UpdateInventoryItemPacket(); + if(type == PacketType.UpdateCreateInventoryItem) return new UpdateCreateInventoryItemPacket(); + if(type == PacketType.MoveInventoryItem) return new MoveInventoryItemPacket(); + if(type == PacketType.CopyInventoryItem) return new CopyInventoryItemPacket(); + if(type == PacketType.RemoveInventoryItem) return new RemoveInventoryItemPacket(); + if(type == PacketType.ChangeInventoryItemFlags) return new ChangeInventoryItemFlagsPacket(); + if(type == PacketType.SaveAssetIntoInventory) return new SaveAssetIntoInventoryPacket(); + if(type == PacketType.CreateInventoryFolder) return new CreateInventoryFolderPacket(); + if(type == PacketType.UpdateInventoryFolder) return new UpdateInventoryFolderPacket(); + if(type == PacketType.MoveInventoryFolder) return new MoveInventoryFolderPacket(); + if(type == PacketType.RemoveInventoryFolder) return new RemoveInventoryFolderPacket(); + if(type == PacketType.FetchInventoryDescendents) return new FetchInventoryDescendentsPacket(); + if(type == PacketType.InventoryDescendents) return new InventoryDescendentsPacket(); + if(type == PacketType.FetchInventory) return new FetchInventoryPacket(); + if(type == PacketType.FetchInventoryReply) return new FetchInventoryReplyPacket(); + if(type == PacketType.BulkUpdateInventory) return new BulkUpdateInventoryPacket(); + if(type == PacketType.RequestInventoryAsset) return new RequestInventoryAssetPacket(); + if(type == PacketType.InventoryAssetResponse) return new InventoryAssetResponsePacket(); + if(type == PacketType.RemoveInventoryObjects) return new RemoveInventoryObjectsPacket(); + if(type == PacketType.PurgeInventoryDescendents) return new PurgeInventoryDescendentsPacket(); + if(type == PacketType.UpdateTaskInventory) return new UpdateTaskInventoryPacket(); + if(type == PacketType.RemoveTaskInventory) return new RemoveTaskInventoryPacket(); + if(type == PacketType.MoveTaskInventory) return new MoveTaskInventoryPacket(); + if(type == PacketType.RequestTaskInventory) return new RequestTaskInventoryPacket(); + if(type == PacketType.ReplyTaskInventory) return new ReplyTaskInventoryPacket(); + if(type == PacketType.DeRezObject) return new DeRezObjectPacket(); + if(type == PacketType.DeRezAck) return new DeRezAckPacket(); + if(type == PacketType.RezObject) return new RezObjectPacket(); + if(type == PacketType.RezObjectFromNotecard) return new RezObjectFromNotecardPacket(); + if(type == PacketType.AcceptFriendship) return new AcceptFriendshipPacket(); + if(type == PacketType.DeclineFriendship) return new DeclineFriendshipPacket(); + if(type == PacketType.FormFriendship) return new FormFriendshipPacket(); + if(type == PacketType.TerminateFriendship) return new TerminateFriendshipPacket(); + if(type == PacketType.OfferCallingCard) return new OfferCallingCardPacket(); + if(type == PacketType.AcceptCallingCard) return new AcceptCallingCardPacket(); + if(type == PacketType.DeclineCallingCard) return new DeclineCallingCardPacket(); + if(type == PacketType.RezScript) return new RezScriptPacket(); + if(type == PacketType.CreateInventoryItem) return new CreateInventoryItemPacket(); + if(type == PacketType.CreateLandmarkForEvent) return new CreateLandmarkForEventPacket(); + if(type == PacketType.RegionHandleRequest) return new RegionHandleRequestPacket(); + if(type == PacketType.RegionIDAndHandleReply) return new RegionIDAndHandleReplyPacket(); + if(type == PacketType.MoneyTransferRequest) return new MoneyTransferRequestPacket(); + if(type == PacketType.MoneyBalanceRequest) return new MoneyBalanceRequestPacket(); + if(type == PacketType.MoneyBalanceReply) return new MoneyBalanceReplyPacket(); + if(type == PacketType.RoutedMoneyBalanceReply) return new RoutedMoneyBalanceReplyPacket(); + if(type == PacketType.ActivateGestures) return new ActivateGesturesPacket(); + if(type == PacketType.DeactivateGestures) return new DeactivateGesturesPacket(); + if(type == PacketType.MuteListUpdate) return new MuteListUpdatePacket(); + if(type == PacketType.UseCachedMuteList) return new UseCachedMuteListPacket(); + if(type == PacketType.GrantUserRights) return new GrantUserRightsPacket(); + if(type == PacketType.ChangeUserRights) return new ChangeUserRightsPacket(); + if(type == PacketType.OnlineNotification) return new OnlineNotificationPacket(); + if(type == PacketType.OfflineNotification) return new OfflineNotificationPacket(); + if(type == PacketType.SetStartLocationRequest) return new SetStartLocationRequestPacket(); + if(type == PacketType.AssetUploadRequest) return new AssetUploadRequestPacket(); + if(type == PacketType.AssetUploadComplete) return new AssetUploadCompletePacket(); + if(type == PacketType.CreateGroupRequest) return new CreateGroupRequestPacket(); + if(type == PacketType.CreateGroupReply) return new CreateGroupReplyPacket(); + if(type == PacketType.UpdateGroupInfo) return new UpdateGroupInfoPacket(); + if(type == PacketType.GroupRoleChanges) return new GroupRoleChangesPacket(); + if(type == PacketType.JoinGroupRequest) return new JoinGroupRequestPacket(); + if(type == PacketType.JoinGroupReply) return new JoinGroupReplyPacket(); + if(type == PacketType.EjectGroupMemberRequest) return new EjectGroupMemberRequestPacket(); + if(type == PacketType.EjectGroupMemberReply) return new EjectGroupMemberReplyPacket(); + if(type == PacketType.LeaveGroupRequest) return new LeaveGroupRequestPacket(); + if(type == PacketType.LeaveGroupReply) return new LeaveGroupReplyPacket(); + if(type == PacketType.InviteGroupRequest) return new InviteGroupRequestPacket(); + if(type == PacketType.GroupProfileRequest) return new GroupProfileRequestPacket(); + if(type == PacketType.GroupProfileReply) return new GroupProfileReplyPacket(); + if(type == PacketType.GroupAccountSummaryRequest) return new GroupAccountSummaryRequestPacket(); + if(type == PacketType.GroupAccountSummaryReply) return new GroupAccountSummaryReplyPacket(); + if(type == PacketType.GroupAccountDetailsRequest) return new GroupAccountDetailsRequestPacket(); + if(type == PacketType.GroupAccountDetailsReply) return new GroupAccountDetailsReplyPacket(); + if(type == PacketType.GroupAccountTransactionsRequest) return new GroupAccountTransactionsRequestPacket(); + if(type == PacketType.GroupAccountTransactionsReply) return new GroupAccountTransactionsReplyPacket(); + if(type == PacketType.GroupActiveProposalsRequest) return new GroupActiveProposalsRequestPacket(); + if(type == PacketType.GroupActiveProposalItemReply) return new GroupActiveProposalItemReplyPacket(); + if(type == PacketType.GroupVoteHistoryRequest) return new GroupVoteHistoryRequestPacket(); + if(type == PacketType.GroupVoteHistoryItemReply) return new GroupVoteHistoryItemReplyPacket(); + if(type == PacketType.StartGroupProposal) return new StartGroupProposalPacket(); + if(type == PacketType.GroupProposalBallot) return new GroupProposalBallotPacket(); + if(type == PacketType.GroupMembersRequest) return new GroupMembersRequestPacket(); + if(type == PacketType.GroupMembersReply) return new GroupMembersReplyPacket(); + if(type == PacketType.ActivateGroup) return new ActivateGroupPacket(); + if(type == PacketType.SetGroupContribution) return new SetGroupContributionPacket(); + if(type == PacketType.SetGroupAcceptNotices) return new SetGroupAcceptNoticesPacket(); + if(type == PacketType.GroupRoleDataRequest) return new GroupRoleDataRequestPacket(); + if(type == PacketType.GroupRoleDataReply) return new GroupRoleDataReplyPacket(); + if(type == PacketType.GroupRoleMembersRequest) return new GroupRoleMembersRequestPacket(); + if(type == PacketType.GroupRoleMembersReply) return new GroupRoleMembersReplyPacket(); + if(type == PacketType.GroupTitlesRequest) return new GroupTitlesRequestPacket(); + if(type == PacketType.GroupTitlesReply) return new GroupTitlesReplyPacket(); + if(type == PacketType.GroupTitleUpdate) return new GroupTitleUpdatePacket(); + if(type == PacketType.GroupRoleUpdate) return new GroupRoleUpdatePacket(); + if(type == PacketType.LiveHelpGroupRequest) return new LiveHelpGroupRequestPacket(); + if(type == PacketType.LiveHelpGroupReply) return new LiveHelpGroupReplyPacket(); + if(type == PacketType.AgentWearablesRequest) return new AgentWearablesRequestPacket(); + if(type == PacketType.AgentWearablesUpdate) return new AgentWearablesUpdatePacket(); + if(type == PacketType.AgentIsNowWearing) return new AgentIsNowWearingPacket(); + if(type == PacketType.AgentCachedTexture) return new AgentCachedTexturePacket(); + if(type == PacketType.AgentCachedTextureResponse) return new AgentCachedTextureResponsePacket(); + if(type == PacketType.AgentDataUpdateRequest) return new AgentDataUpdateRequestPacket(); + if(type == PacketType.AgentDataUpdate) return new AgentDataUpdatePacket(); + if(type == PacketType.GroupDataUpdate) return new GroupDataUpdatePacket(); + if(type == PacketType.AgentGroupDataUpdate) return new AgentGroupDataUpdatePacket(); + if(type == PacketType.AgentDropGroup) return new AgentDropGroupPacket(); + if(type == PacketType.CreateTrustedCircuit) return new CreateTrustedCircuitPacket(); + if(type == PacketType.DenyTrustedCircuit) return new DenyTrustedCircuitPacket(); + if(type == PacketType.RequestTrustedCircuit) return new RequestTrustedCircuitPacket(); + if(type == PacketType.RezSingleAttachmentFromInv) return new RezSingleAttachmentFromInvPacket(); + if(type == PacketType.RezMultipleAttachmentsFromInv) return new RezMultipleAttachmentsFromInvPacket(); + if(type == PacketType.DetachAttachmentIntoInv) return new DetachAttachmentIntoInvPacket(); + if(type == PacketType.CreateNewOutfitAttachments) return new CreateNewOutfitAttachmentsPacket(); + if(type == PacketType.UserInfoRequest) return new UserInfoRequestPacket(); + if(type == PacketType.UserInfoReply) return new UserInfoReplyPacket(); + if(type == PacketType.UpdateUserInfo) return new UpdateUserInfoPacket(); + if(type == PacketType.InitiateDownload) return new InitiateDownloadPacket(); + if(type == PacketType.SystemMessage) return new SystemMessagePacket(); + if(type == PacketType.MapLayerRequest) return new MapLayerRequestPacket(); + if(type == PacketType.MapLayerReply) return new MapLayerReplyPacket(); + if(type == PacketType.MapBlockRequest) return new MapBlockRequestPacket(); + if(type == PacketType.MapNameRequest) return new MapNameRequestPacket(); + if(type == PacketType.MapBlockReply) return new MapBlockReplyPacket(); + if(type == PacketType.MapItemRequest) return new MapItemRequestPacket(); + if(type == PacketType.MapItemReply) return new MapItemReplyPacket(); + if(type == PacketType.SendPostcard) return new SendPostcardPacket(); + if(type == PacketType.ParcelMediaCommandMessage) return new ParcelMediaCommandMessagePacket(); + if(type == PacketType.ParcelMediaUpdate) return new ParcelMediaUpdatePacket(); + if(type == PacketType.LandStatRequest) return new LandStatRequestPacket(); + if(type == PacketType.LandStatReply) return new LandStatReplyPacket(); + if(type == PacketType.Error) return new ErrorPacket(); + if(type == PacketType.PacketAck) return new PacketAckPacket(); + if(type == PacketType.OpenCircuit) return new OpenCircuitPacket(); + if(type == PacketType.CloseCircuit) return new CloseCircuitPacket(); + return null; + + } + public static Packet BuildPacket(byte[] bytes, ref int packetEnd, byte[] zeroBuffer) { ushort id; PacketFrequency freq; @@ -1625,6 +2069,11 @@ namespace libsecondlife.Packets public TestBlock1Block() { } public TestBlock1Block(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -1670,6 +2119,11 @@ namespace libsecondlife.Packets public NeighborBlockBlock() { } public NeighborBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -1725,23 +2179,50 @@ namespace libsecondlife.Packets NeighborBlock = new NeighborBlockBlock[4]; } - public TestMessagePacket(byte[] bytes, ref int i) + public TestMessagePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - TestBlock1 = new TestBlock1Block(bytes, ref i); - NeighborBlock = new NeighborBlockBlock[4]; - for (int j = 0; j < 4; j++) - { NeighborBlock[j] = new NeighborBlockBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public TestMessagePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + TestBlock1.FromBytes(bytes, ref i); + if(NeighborBlock.Length < 4) { + NeighborBlock = new NeighborBlockBlock[4]; + for(int j = 0; j < 4; j++) NeighborBlock[j] = new NeighborBlockBlock(); + } + for (int j = 0; j < 4; j++) + { NeighborBlock[j].FromBytes(bytes, ref i); } + } + + public TestMessagePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - TestBlock1 = new TestBlock1Block(bytes, ref i); - NeighborBlock = new NeighborBlockBlock[4]; + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + TestBlock1.FromBytes(bytes, ref i); + if(NeighborBlock.Length < 4) { + NeighborBlock = new NeighborBlockBlock[4]; + for(int j = 0; j < 4; j++) NeighborBlock[j] = new NeighborBlockBlock(); + } for (int j = 0; j < 4; j++) - { NeighborBlock[j] = new NeighborBlockBlock(bytes, ref i); } + { NeighborBlock[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -1792,12 +2273,17 @@ namespace libsecondlife.Packets public CircuitCodeBlock() { } public CircuitCodeBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { Code = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - SessionID = new LLUUID(bytes, i); i += 16; - ID = new LLUUID(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; + ID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -1839,17 +2325,38 @@ namespace libsecondlife.Packets CircuitCode = new CircuitCodeBlock(); } - public UseCircuitCodePacket(byte[] bytes, ref int i) + public UseCircuitCodePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - CircuitCode = new CircuitCodeBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public UseCircuitCodePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + CircuitCode.FromBytes(bytes, ref i); + } + + public UseCircuitCodePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - CircuitCode = new CircuitCodeBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + CircuitCode.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -1907,16 +2414,21 @@ namespace libsecondlife.Packets public TelehubBlockBlock() { } public TelehubBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - ObjectID = new LLUUID(bytes, i); i += 16; + ObjectID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _objectname = new byte[length]; Buffer.BlockCopy(bytes, i, _objectname, 0, length); i += length; - TelehubPos = new LLVector3(bytes, i); i += 12; - TelehubRot = new LLQuaternion(bytes, i, true); i += 12; + TelehubPos.FromBytes(bytes, i); i += 12; + TelehubRot.FromBytes(bytes, i, true); i += 12; } catch (Exception) { @@ -1962,10 +2474,15 @@ namespace libsecondlife.Packets public SpawnPointBlockBlock() { } public SpawnPointBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - SpawnPointPos = new LLVector3(bytes, i); i += 12; + SpawnPointPos.FromBytes(bytes, i); i += 12; } catch (Exception) { @@ -2002,25 +2519,52 @@ namespace libsecondlife.Packets SpawnPointBlock = new SpawnPointBlockBlock[0]; } - public TelehubInfoPacket(byte[] bytes, ref int i) + public TelehubInfoPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - TelehubBlock = new TelehubBlockBlock(bytes, ref i); - int count = (int)bytes[i++]; - SpawnPointBlock = new SpawnPointBlockBlock[count]; - for (int j = 0; j < count; j++) - { SpawnPointBlock[j] = new SpawnPointBlockBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public TelehubInfoPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + TelehubBlock.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(SpawnPointBlock.Length < count) { + SpawnPointBlock = new SpawnPointBlockBlock[count]; + for(int j = 0; j < count; j++) SpawnPointBlock[j] = new SpawnPointBlockBlock(); + } + for (int j = 0; j < count; j++) + { SpawnPointBlock[j].FromBytes(bytes, ref i); } + } + + public TelehubInfoPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - TelehubBlock = new TelehubBlockBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + TelehubBlock.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - SpawnPointBlock = new SpawnPointBlockBlock[count]; + if(SpawnPointBlock.Length < count) { + SpawnPointBlock = new SpawnPointBlockBlock[count]; + for(int j = 0; j < count; j++) SpawnPointBlock[j] = new SpawnPointBlockBlock(); + } for (int j = 0; j < count; j++) - { SpawnPointBlock[j] = new SpawnPointBlockBlock(bytes, ref i); } + { SpawnPointBlock[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -2067,15 +2611,36 @@ namespace libsecondlife.Packets Header.Reliable = true; } - public EconomyDataRequestPacket(byte[] bytes, ref int i) + public EconomyDataRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); + FromBytes(bytes, ref i, ref packetEnd, null); } - public EconomyDataRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + } + + public EconomyDataRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } } public override byte[] ToBytes() @@ -2132,6 +2697,11 @@ namespace libsecondlife.Packets public InfoBlock() { } public InfoBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -2270,17 +2840,38 @@ namespace libsecondlife.Packets Info = new InfoBlock(); } - public EconomyDataPacket(byte[] bytes, ref int i) + public EconomyDataPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - Info = new InfoBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public EconomyDataPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Info.FromBytes(bytes, ref i); + } + + public EconomyDataPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - Info = new InfoBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Info.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -2325,12 +2916,17 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; - QueryID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; + QueryID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -2383,6 +2979,11 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -2428,19 +3029,40 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public AvatarPickerRequestPacket(byte[] bytes, ref int i) + public AvatarPickerRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public AvatarPickerRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + } + + public AvatarPickerRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -2486,11 +3108,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - QueryID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + QueryID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -2554,11 +3181,16 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - AvatarID = new LLUUID(bytes, i); i += 16; + AvatarID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _firstname = new byte[length]; Buffer.BlockCopy(bytes, i, _firstname, 0, length); i += length; @@ -2610,25 +3242,52 @@ namespace libsecondlife.Packets Data = new DataBlock[0]; } - public AvatarPickerReplyPacket(byte[] bytes, ref int i) + public AvatarPickerReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - Data = new DataBlock[count]; - for (int j = 0; j < count; j++) - { Data[j] = new DataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public AvatarPickerReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(Data.Length < count) { + Data = new DataBlock[count]; + for(int j = 0; j < count; j++) Data[j] = new DataBlock(); + } + for (int j = 0; j < count; j++) + { Data[j].FromBytes(bytes, ref i); } + } + + public AvatarPickerReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - Data = new DataBlock[count]; + if(Data.Length < count) { + Data = new DataBlock[count]; + for(int j = 0; j < count; j++) Data[j] = new DataBlock(); + } for (int j = 0; j < count; j++) - { Data[j] = new DataBlock(bytes, ref i); } + { Data[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -2681,12 +3340,17 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; - QueryID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; + QueryID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -2727,10 +3391,15 @@ namespace libsecondlife.Packets public TransactionDataBlock() { } public TransactionDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - TransactionID = new LLUUID(bytes, i); i += 16; + TransactionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -2793,6 +3462,11 @@ namespace libsecondlife.Packets public QueryDataBlock() { } public QueryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -2857,21 +3531,42 @@ namespace libsecondlife.Packets QueryData = new QueryDataBlock(); } - public PlacesQueryPacket(byte[] bytes, ref int i) + public PlacesQueryPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - TransactionData = new TransactionDataBlock(bytes, ref i); - QueryData = new QueryDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public PlacesQueryPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + TransactionData.FromBytes(bytes, ref i); + QueryData.FromBytes(bytes, ref i); + } + + public PlacesQueryPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - TransactionData = new TransactionDataBlock(bytes, ref i); - QueryData = new QueryDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + TransactionData.FromBytes(bytes, ref i); + QueryData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -2919,11 +3614,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - QueryID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + QueryID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -2962,10 +3662,15 @@ namespace libsecondlife.Packets public TransactionDataBlock() { } public TransactionDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - TransactionID = new LLUUID(bytes, i); i += 16; + TransactionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -3048,11 +3753,16 @@ namespace libsecondlife.Packets public QueryDataBlock() { } public QueryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - OwnerID = new LLUUID(bytes, i); i += 16; + OwnerID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _name = new byte[length]; Buffer.BlockCopy(bytes, i, _name, 0, length); i += length; @@ -3071,7 +3781,7 @@ namespace libsecondlife.Packets length = (ushort)bytes[i++]; _simname = new byte[length]; Buffer.BlockCopy(bytes, i, _simname, 0, length); i += length; - SnapshotID = new LLUUID(bytes, i); i += 16; + SnapshotID.FromBytes(bytes, i); i += 16; if (!BitConverter.IsLittleEndian) Array.Reverse(bytes, i, 4); Dwell = BitConverter.ToSingle(bytes, i); i += 4; Price = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); @@ -3164,27 +3874,54 @@ namespace libsecondlife.Packets QueryData = new QueryDataBlock[0]; } - public PlacesReplyPacket(byte[] bytes, ref int i) + public PlacesReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - TransactionData = new TransactionDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - QueryData = new QueryDataBlock[count]; - for (int j = 0; j < count; j++) - { QueryData[j] = new QueryDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public PlacesReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + TransactionData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(QueryData.Length < count) { + QueryData = new QueryDataBlock[count]; + for(int j = 0; j < count; j++) QueryData[j] = new QueryDataBlock(); + } + for (int j = 0; j < count; j++) + { QueryData[j].FromBytes(bytes, ref i); } + } + + public PlacesReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - TransactionData = new TransactionDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + TransactionData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - QueryData = new QueryDataBlock[count]; + if(QueryData.Length < count) { + QueryData = new QueryDataBlock[count]; + for(int j = 0; j < count; j++) QueryData[j] = new QueryDataBlock(); + } for (int j = 0; j < count; j++) - { QueryData[j] = new QueryDataBlock(bytes, ref i); } + { QueryData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -3238,11 +3975,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -3296,11 +4038,16 @@ namespace libsecondlife.Packets public QueryDataBlock() { } public QueryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - QueryID = new LLUUID(bytes, i); i += 16; + QueryID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _querytext = new byte[length]; Buffer.BlockCopy(bytes, i, _querytext, 0, length); i += length; @@ -3357,19 +4104,40 @@ namespace libsecondlife.Packets QueryData = new QueryDataBlock(); } - public DirFindQueryPacket(byte[] bytes, ref int i) + public DirFindQueryPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - QueryData = new QueryDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public DirFindQueryPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + QueryData.FromBytes(bytes, ref i); + } + + public DirFindQueryPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - QueryData = new QueryDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + QueryData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -3415,11 +4183,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -3486,11 +4259,16 @@ namespace libsecondlife.Packets public QueryDataBlock() { } public QueryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - QueryID = new LLUUID(bytes, i); i += 16; + QueryID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _querytext = new byte[length]; Buffer.BlockCopy(bytes, i, _querytext, 0, length); i += length; @@ -3558,19 +4336,40 @@ namespace libsecondlife.Packets QueryData = new QueryDataBlock(); } - public DirPlacesQueryPacket(byte[] bytes, ref int i) + public DirPlacesQueryPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - QueryData = new QueryDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public DirPlacesQueryPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + QueryData.FromBytes(bytes, ref i); + } + + public DirPlacesQueryPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - QueryData = new QueryDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + QueryData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -3615,10 +4414,15 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -3655,10 +4459,15 @@ namespace libsecondlife.Packets public QueryDataBlock() { } public QueryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - QueryID = new LLUUID(bytes, i); i += 16; + QueryID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -3711,11 +4520,16 @@ namespace libsecondlife.Packets public QueryRepliesBlock() { } public QueryRepliesBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - ParcelID = new LLUUID(bytes, i); i += 16; + ParcelID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _name = new byte[length]; Buffer.BlockCopy(bytes, i, _name, 0, length); i += length; @@ -3775,33 +4589,66 @@ namespace libsecondlife.Packets QueryReplies = new QueryRepliesBlock[0]; } - public DirPlacesReplyPacket(byte[] bytes, ref int i) + public DirPlacesReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - QueryData = new QueryDataBlock[count]; - for (int j = 0; j < count; j++) - { QueryData[j] = new QueryDataBlock(bytes, ref i); } - count = (int)bytes[i++]; - QueryReplies = new QueryRepliesBlock[count]; - for (int j = 0; j < count; j++) - { QueryReplies[j] = new QueryRepliesBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public DirPlacesReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(QueryData.Length < count) { + QueryData = new QueryDataBlock[count]; + for(int j = 0; j < count; j++) QueryData[j] = new QueryDataBlock(); + } + for (int j = 0; j < count; j++) + { QueryData[j].FromBytes(bytes, ref i); } + count = (int)bytes[i++]; + if(QueryReplies.Length < count) { + QueryReplies = new QueryRepliesBlock[count]; + for(int j = 0; j < count; j++) QueryReplies[j] = new QueryRepliesBlock(); + } + for (int j = 0; j < count; j++) + { QueryReplies[j].FromBytes(bytes, ref i); } + } + + public DirPlacesReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - QueryData = new QueryDataBlock[count]; + if(QueryData.Length < count) { + QueryData = new QueryDataBlock[count]; + for(int j = 0; j < count; j++) QueryData[j] = new QueryDataBlock(); + } for (int j = 0; j < count; j++) - { QueryData[j] = new QueryDataBlock(bytes, ref i); } + { QueryData[j].FromBytes(bytes, ref i); } count = (int)bytes[i++]; - QueryReplies = new QueryRepliesBlock[count]; + if(QueryReplies.Length < count) { + QueryReplies = new QueryRepliesBlock[count]; + for(int j = 0; j < count; j++) QueryReplies[j] = new QueryRepliesBlock(); + } for (int j = 0; j < count; j++) - { QueryReplies[j] = new QueryRepliesBlock(bytes, ref i); } + { QueryReplies[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -3860,10 +4707,15 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -3900,10 +4752,15 @@ namespace libsecondlife.Packets public QueryDataBlock() { } public QueryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - QueryID = new LLUUID(bytes, i); i += 16; + QueryID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -3979,11 +4836,16 @@ namespace libsecondlife.Packets public QueryRepliesBlock() { } public QueryRepliesBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _firstname = new byte[length]; Buffer.BlockCopy(bytes, i, _firstname, 0, length); i += length; @@ -4055,27 +4917,54 @@ namespace libsecondlife.Packets QueryReplies = new QueryRepliesBlock[0]; } - public DirPeopleReplyPacket(byte[] bytes, ref int i) + public DirPeopleReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - QueryData = new QueryDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - QueryReplies = new QueryRepliesBlock[count]; - for (int j = 0; j < count; j++) - { QueryReplies[j] = new QueryRepliesBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public DirPeopleReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + QueryData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(QueryReplies.Length < count) { + QueryReplies = new QueryRepliesBlock[count]; + for(int j = 0; j < count; j++) QueryReplies[j] = new QueryRepliesBlock(); + } + for (int j = 0; j < count; j++) + { QueryReplies[j].FromBytes(bytes, ref i); } + } + + public DirPeopleReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - QueryData = new QueryDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + QueryData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - QueryReplies = new QueryRepliesBlock[count]; + if(QueryReplies.Length < count) { + QueryReplies = new QueryRepliesBlock[count]; + for(int j = 0; j < count; j++) QueryReplies[j] = new QueryRepliesBlock(); + } for (int j = 0; j < count; j++) - { QueryReplies[j] = new QueryRepliesBlock(bytes, ref i); } + { QueryReplies[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -4128,10 +5017,15 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -4168,10 +5062,15 @@ namespace libsecondlife.Packets public QueryDataBlock() { } public QueryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - QueryID = new LLUUID(bytes, i); i += 16; + QueryID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -4236,11 +5135,16 @@ namespace libsecondlife.Packets public QueryRepliesBlock() { } public QueryRepliesBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - OwnerID = new LLUUID(bytes, i); i += 16; + OwnerID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _name = new byte[length]; Buffer.BlockCopy(bytes, i, _name, 0, length); i += length; @@ -4313,27 +5217,54 @@ namespace libsecondlife.Packets QueryReplies = new QueryRepliesBlock[0]; } - public DirEventsReplyPacket(byte[] bytes, ref int i) + public DirEventsReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - QueryData = new QueryDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - QueryReplies = new QueryRepliesBlock[count]; - for (int j = 0; j < count; j++) - { QueryReplies[j] = new QueryRepliesBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public DirEventsReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + QueryData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(QueryReplies.Length < count) { + QueryReplies = new QueryRepliesBlock[count]; + for(int j = 0; j < count; j++) QueryReplies[j] = new QueryRepliesBlock(); + } + for (int j = 0; j < count; j++) + { QueryReplies[j].FromBytes(bytes, ref i); } + } + + public DirEventsReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - QueryData = new QueryDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + QueryData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - QueryReplies = new QueryRepliesBlock[count]; + if(QueryReplies.Length < count) { + QueryReplies = new QueryRepliesBlock[count]; + for(int j = 0; j < count; j++) QueryReplies[j] = new QueryRepliesBlock(); + } for (int j = 0; j < count; j++) - { QueryReplies[j] = new QueryRepliesBlock(bytes, ref i); } + { QueryReplies[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -4386,10 +5317,15 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -4426,10 +5362,15 @@ namespace libsecondlife.Packets public QueryDataBlock() { } public QueryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - QueryID = new LLUUID(bytes, i); i += 16; + QueryID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -4481,11 +5422,16 @@ namespace libsecondlife.Packets public QueryRepliesBlock() { } public QueryRepliesBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - GroupID = new LLUUID(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _groupname = new byte[length]; Buffer.BlockCopy(bytes, i, _groupname, 0, length); i += length; @@ -4545,27 +5491,54 @@ namespace libsecondlife.Packets QueryReplies = new QueryRepliesBlock[0]; } - public DirGroupsReplyPacket(byte[] bytes, ref int i) + public DirGroupsReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - QueryData = new QueryDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - QueryReplies = new QueryRepliesBlock[count]; - for (int j = 0; j < count; j++) - { QueryReplies[j] = new QueryRepliesBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public DirGroupsReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + QueryData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(QueryReplies.Length < count) { + QueryReplies = new QueryRepliesBlock[count]; + for(int j = 0; j < count; j++) QueryReplies[j] = new QueryRepliesBlock(); + } + for (int j = 0; j < count; j++) + { QueryReplies[j].FromBytes(bytes, ref i); } + } + + public DirGroupsReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - QueryData = new QueryDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + QueryData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - QueryReplies = new QueryRepliesBlock[count]; + if(QueryReplies.Length < count) { + QueryReplies = new QueryRepliesBlock[count]; + for(int j = 0; j < count; j++) QueryReplies[j] = new QueryRepliesBlock(); + } for (int j = 0; j < count; j++) - { QueryReplies[j] = new QueryRepliesBlock(bytes, ref i); } + { QueryReplies[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -4619,11 +5592,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -4678,11 +5656,16 @@ namespace libsecondlife.Packets public QueryDataBlock() { } public QueryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - QueryID = new LLUUID(bytes, i); i += 16; + QueryID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _querytext = new byte[length]; Buffer.BlockCopy(bytes, i, _querytext, 0, length); i += length; @@ -4745,19 +5728,40 @@ namespace libsecondlife.Packets QueryData = new QueryDataBlock(); } - public DirClassifiedQueryPacket(byte[] bytes, ref int i) + public DirClassifiedQueryPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - QueryData = new QueryDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public DirClassifiedQueryPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + QueryData.FromBytes(bytes, ref i); + } + + public DirClassifiedQueryPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - QueryData = new QueryDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + QueryData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -4802,10 +5806,15 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -4842,10 +5851,15 @@ namespace libsecondlife.Packets public QueryDataBlock() { } public QueryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - QueryID = new LLUUID(bytes, i); i += 16; + QueryID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -4899,11 +5913,16 @@ namespace libsecondlife.Packets public QueryRepliesBlock() { } public QueryRepliesBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - ClassifiedID = new LLUUID(bytes, i); i += 16; + ClassifiedID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _name = new byte[length]; Buffer.BlockCopy(bytes, i, _name, 0, length); i += length; @@ -4971,27 +5990,54 @@ namespace libsecondlife.Packets QueryReplies = new QueryRepliesBlock[0]; } - public DirClassifiedReplyPacket(byte[] bytes, ref int i) + public DirClassifiedReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - QueryData = new QueryDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - QueryReplies = new QueryRepliesBlock[count]; - for (int j = 0; j < count; j++) - { QueryReplies[j] = new QueryRepliesBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public DirClassifiedReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + QueryData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(QueryReplies.Length < count) { + QueryReplies = new QueryRepliesBlock[count]; + for(int j = 0; j < count; j++) QueryReplies[j] = new QueryRepliesBlock(); + } + for (int j = 0; j < count; j++) + { QueryReplies[j].FromBytes(bytes, ref i); } + } + + public DirClassifiedReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - QueryData = new QueryDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + QueryData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - QueryReplies = new QueryRepliesBlock[count]; + if(QueryReplies.Length < count) { + QueryReplies = new QueryRepliesBlock[count]; + for(int j = 0; j < count; j++) QueryReplies[j] = new QueryRepliesBlock(); + } for (int j = 0; j < count; j++) - { QueryReplies[j] = new QueryRepliesBlock(bytes, ref i); } + { QueryReplies[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -5045,11 +6091,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - TargetID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + TargetID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -5101,11 +6152,16 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - ClassifiedID = new LLUUID(bytes, i); i += 16; + ClassifiedID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _name = new byte[length]; Buffer.BlockCopy(bytes, i, _name, 0, length); i += length; @@ -5149,25 +6205,52 @@ namespace libsecondlife.Packets Data = new DataBlock[0]; } - public AvatarClassifiedReplyPacket(byte[] bytes, ref int i) + public AvatarClassifiedReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - Data = new DataBlock[count]; - for (int j = 0; j < count; j++) - { Data[j] = new DataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public AvatarClassifiedReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(Data.Length < count) { + Data = new DataBlock[count]; + for(int j = 0; j < count; j++) Data[j] = new DataBlock(); + } + for (int j = 0; j < count; j++) + { Data[j].FromBytes(bytes, ref i); } + } + + public AvatarClassifiedReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - Data = new DataBlock[count]; + if(Data.Length < count) { + Data = new DataBlock[count]; + for(int j = 0; j < count; j++) Data[j] = new DataBlock(); + } for (int j = 0; j < count; j++) - { Data[j] = new DataBlock(bytes, ref i); } + { Data[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -5219,11 +6302,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -5262,10 +6350,15 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ClassifiedID = new LLUUID(bytes, i); i += 16; + ClassifiedID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -5302,19 +6395,40 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public ClassifiedInfoRequestPacket(byte[] bytes, ref int i) + public ClassifiedInfoRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ClassifiedInfoRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + } + + public ClassifiedInfoRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -5359,10 +6473,15 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -5458,12 +6577,17 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - ClassifiedID = new LLUUID(bytes, i); i += 16; - CreatorID = new LLUUID(bytes, i); i += 16; + ClassifiedID.FromBytes(bytes, i); i += 16; + CreatorID.FromBytes(bytes, i); i += 16; CreationDate = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); ExpirationDate = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); Category = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); @@ -5473,13 +6597,13 @@ namespace libsecondlife.Packets length = (ushort)(bytes[i++] + (bytes[i++] << 8)); _desc = new byte[length]; Buffer.BlockCopy(bytes, i, _desc, 0, length); i += length; - ParcelID = new LLUUID(bytes, i); i += 16; + ParcelID.FromBytes(bytes, i); i += 16; ParentEstate = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - SnapshotID = new LLUUID(bytes, i); i += 16; + SnapshotID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _simname = new byte[length]; Buffer.BlockCopy(bytes, i, _simname, 0, length); i += length; - PosGlobal = new LLVector3d(bytes, i); i += 24; + PosGlobal.FromBytes(bytes, i); i += 24; length = (ushort)bytes[i++]; _parcelname = new byte[length]; Buffer.BlockCopy(bytes, i, _parcelname, 0, length); i += length; @@ -5577,19 +6701,40 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public ClassifiedInfoReplyPacket(byte[] bytes, ref int i) + public ClassifiedInfoReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ClassifiedInfoReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + } + + public ClassifiedInfoReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -5635,11 +6780,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -5710,11 +6860,16 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - ClassifiedID = new LLUUID(bytes, i); i += 16; + ClassifiedID.FromBytes(bytes, i); i += 16; Category = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); length = (ushort)bytes[i++]; _name = new byte[length]; @@ -5722,10 +6877,10 @@ namespace libsecondlife.Packets length = (ushort)(bytes[i++] + (bytes[i++] << 8)); _desc = new byte[length]; Buffer.BlockCopy(bytes, i, _desc, 0, length); i += length; - ParcelID = new LLUUID(bytes, i); i += 16; + ParcelID.FromBytes(bytes, i); i += 16; ParentEstate = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - SnapshotID = new LLUUID(bytes, i); i += 16; - PosGlobal = new LLVector3d(bytes, i); i += 24; + SnapshotID.FromBytes(bytes, i); i += 16; + PosGlobal.FromBytes(bytes, i); i += 24; ClassifiedFlags = (byte)bytes[i++]; PriceForListing = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } @@ -5798,19 +6953,40 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public ClassifiedInfoUpdatePacket(byte[] bytes, ref int i) + public ClassifiedInfoUpdatePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ClassifiedInfoUpdatePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + } + + public ClassifiedInfoUpdatePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -5856,11 +7032,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -5899,10 +7080,15 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ClassifiedID = new LLUUID(bytes, i); i += 16; + ClassifiedID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -5939,19 +7125,40 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public ClassifiedDeletePacket(byte[] bytes, ref int i) + public ClassifiedDeletePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ClassifiedDeletePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + } + + public ClassifiedDeletePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -5997,11 +7204,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -6041,11 +7253,16 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ClassifiedID = new LLUUID(bytes, i); i += 16; - QueryID = new LLUUID(bytes, i); i += 16; + ClassifiedID.FromBytes(bytes, i); i += 16; + QueryID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -6084,19 +7301,40 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public ClassifiedGodDeletePacket(byte[] bytes, ref int i) + public ClassifiedGodDeletePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ClassifiedGodDeletePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + } + + public ClassifiedGodDeletePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -6142,11 +7380,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -6190,10 +7433,15 @@ namespace libsecondlife.Packets public QueryDataBlock() { } public QueryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - QueryID = new LLUUID(bytes, i); i += 16; + QueryID.FromBytes(bytes, i); i += 16; QueryFlags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); SearchType = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); Price = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); @@ -6260,19 +7508,40 @@ namespace libsecondlife.Packets QueryData = new QueryDataBlock(); } - public DirLandQueryPacket(byte[] bytes, ref int i) + public DirLandQueryPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - QueryData = new QueryDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public DirLandQueryPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + QueryData.FromBytes(bytes, ref i); + } + + public DirLandQueryPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - QueryData = new QueryDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + QueryData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -6317,10 +7586,15 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -6357,10 +7631,15 @@ namespace libsecondlife.Packets public QueryDataBlock() { } public QueryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - QueryID = new LLUUID(bytes, i); i += 16; + QueryID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -6414,11 +7693,16 @@ namespace libsecondlife.Packets public QueryRepliesBlock() { } public QueryRepliesBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - ParcelID = new LLUUID(bytes, i); i += 16; + ParcelID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _name = new byte[length]; Buffer.BlockCopy(bytes, i, _name, 0, length); i += length; @@ -6483,27 +7767,54 @@ namespace libsecondlife.Packets QueryReplies = new QueryRepliesBlock[0]; } - public DirLandReplyPacket(byte[] bytes, ref int i) + public DirLandReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - QueryData = new QueryDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - QueryReplies = new QueryRepliesBlock[count]; - for (int j = 0; j < count; j++) - { QueryReplies[j] = new QueryRepliesBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public DirLandReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + QueryData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(QueryReplies.Length < count) { + QueryReplies = new QueryRepliesBlock[count]; + for(int j = 0; j < count; j++) QueryReplies[j] = new QueryRepliesBlock(); + } + for (int j = 0; j < count; j++) + { QueryReplies[j].FromBytes(bytes, ref i); } + } + + public DirLandReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - QueryData = new QueryDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + QueryData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - QueryReplies = new QueryRepliesBlock[count]; + if(QueryReplies.Length < count) { + QueryReplies = new QueryRepliesBlock[count]; + for(int j = 0; j < count; j++) QueryReplies[j] = new QueryRepliesBlock(); + } for (int j = 0; j < count; j++) - { QueryReplies[j] = new QueryRepliesBlock(bytes, ref i); } + { QueryReplies[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -6557,11 +7868,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -6601,10 +7917,15 @@ namespace libsecondlife.Packets public QueryDataBlock() { } public QueryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - QueryID = new LLUUID(bytes, i); i += 16; + QueryID.FromBytes(bytes, i); i += 16; QueryFlags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -6647,19 +7968,40 @@ namespace libsecondlife.Packets QueryData = new QueryDataBlock(); } - public DirPopularQueryPacket(byte[] bytes, ref int i) + public DirPopularQueryPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - QueryData = new QueryDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public DirPopularQueryPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + QueryData.FromBytes(bytes, ref i); + } + + public DirPopularQueryPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - QueryData = new QueryDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + QueryData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -6704,10 +8046,15 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -6744,10 +8091,15 @@ namespace libsecondlife.Packets public QueryDataBlock() { } public QueryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - QueryID = new LLUUID(bytes, i); i += 16; + QueryID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -6798,11 +8150,16 @@ namespace libsecondlife.Packets public QueryRepliesBlock() { } public QueryRepliesBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - ParcelID = new LLUUID(bytes, i); i += 16; + ParcelID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _name = new byte[length]; Buffer.BlockCopy(bytes, i, _name, 0, length); i += length; @@ -6856,27 +8213,54 @@ namespace libsecondlife.Packets QueryReplies = new QueryRepliesBlock[0]; } - public DirPopularReplyPacket(byte[] bytes, ref int i) + public DirPopularReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - QueryData = new QueryDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - QueryReplies = new QueryRepliesBlock[count]; - for (int j = 0; j < count; j++) - { QueryReplies[j] = new QueryRepliesBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public DirPopularReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + QueryData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(QueryReplies.Length < count) { + QueryReplies = new QueryRepliesBlock[count]; + for(int j = 0; j < count; j++) QueryReplies[j] = new QueryRepliesBlock(); + } + for (int j = 0; j < count; j++) + { QueryReplies[j].FromBytes(bytes, ref i); } + } + + public DirPopularReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - QueryData = new QueryDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + QueryData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - QueryReplies = new QueryRepliesBlock[count]; + if(QueryReplies.Length < count) { + QueryReplies = new QueryRepliesBlock[count]; + for(int j = 0; j < count; j++) QueryReplies[j] = new QueryRepliesBlock(); + } for (int j = 0; j < count; j++) - { QueryReplies[j] = new QueryRepliesBlock(bytes, ref i); } + { QueryReplies[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -6930,11 +8314,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -6973,10 +8362,15 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ParcelID = new LLUUID(bytes, i); i += 16; + ParcelID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -7013,19 +8407,40 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public ParcelInfoRequestPacket(byte[] bytes, ref int i) + public ParcelInfoRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ParcelInfoRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + } + + public ParcelInfoRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -7070,10 +8485,15 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -7158,12 +8578,17 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - ParcelID = new LLUUID(bytes, i); i += 16; - OwnerID = new LLUUID(bytes, i); i += 16; + ParcelID.FromBytes(bytes, i); i += 16; + OwnerID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _name = new byte[length]; Buffer.BlockCopy(bytes, i, _name, 0, length); i += length; @@ -7182,7 +8607,7 @@ namespace libsecondlife.Packets length = (ushort)bytes[i++]; _simname = new byte[length]; Buffer.BlockCopy(bytes, i, _simname, 0, length); i += length; - SnapshotID = new LLUUID(bytes, i); i += 16; + SnapshotID.FromBytes(bytes, i); i += 16; if (!BitConverter.IsLittleEndian) Array.Reverse(bytes, i, 4); Dwell = BitConverter.ToSingle(bytes, i); i += 4; SalePrice = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); @@ -7281,19 +8706,40 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public ParcelInfoReplyPacket(byte[] bytes, ref int i) + public ParcelInfoReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ParcelInfoReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + } + + public ParcelInfoReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -7339,11 +8785,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -7382,6 +8833,11 @@ namespace libsecondlife.Packets public ParcelDataBlock() { } public ParcelDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -7425,19 +8881,40 @@ namespace libsecondlife.Packets ParcelData = new ParcelDataBlock(); } - public ParcelObjectOwnersRequestPacket(byte[] bytes, ref int i) + public ParcelObjectOwnersRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - ParcelData = new ParcelDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ParcelObjectOwnersRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ParcelData.FromBytes(bytes, ref i); + } + + public ParcelObjectOwnersRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - ParcelData = new ParcelDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ParcelData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -7485,10 +8962,15 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - OwnerID = new LLUUID(bytes, i); i += 16; + OwnerID.FromBytes(bytes, i); i += 16; IsGroupOwned = (bytes[i++] != 0) ? (bool)true : (bool)false; Count = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); OnlineStatus = (bytes[i++] != 0) ? (bool)true : (bool)false; @@ -7535,23 +9017,50 @@ namespace libsecondlife.Packets Data = new DataBlock[0]; } - public ParcelObjectOwnersReplyPacket(byte[] bytes, ref int i) + public ParcelObjectOwnersReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - int count = (int)bytes[i++]; - Data = new DataBlock[count]; - for (int j = 0; j < count; j++) - { Data[j] = new DataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ParcelObjectOwnersReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + int count = (int)bytes[i++]; + if(Data.Length < count) { + Data = new DataBlock[count]; + for(int j = 0; j < count; j++) Data[j] = new DataBlock(); + } + for (int j = 0; j < count; j++) + { Data[j].FromBytes(bytes, ref i); } + } + + public ParcelObjectOwnersReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } int count = (int)bytes[i++]; - Data = new DataBlock[count]; + if(Data.Length < count) { + Data = new DataBlock[count]; + for(int j = 0; j < count; j++) Data[j] = new DataBlock(); + } for (int j = 0; j < count; j++) - { Data[j] = new DataBlock(bytes, ref i); } + { Data[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -7601,11 +9110,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -7644,10 +9158,15 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - GroupID = new LLUUID(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -7684,19 +9203,40 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public GroupNoticesListRequestPacket(byte[] bytes, ref int i) + public GroupNoticesListRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public GroupNoticesListRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + } + + public GroupNoticesListRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -7742,11 +9282,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -7813,11 +9358,16 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - NoticeID = new LLUUID(bytes, i); i += 16; + NoticeID.FromBytes(bytes, i); i += 16; Timestamp = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); length = (ushort)(bytes[i++] + (bytes[i++] << 8)); _fromname = new byte[length]; @@ -7884,25 +9434,52 @@ namespace libsecondlife.Packets Data = new DataBlock[0]; } - public GroupNoticesListReplyPacket(byte[] bytes, ref int i) + public GroupNoticesListReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - Data = new DataBlock[count]; - for (int j = 0; j < count; j++) - { Data[j] = new DataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public GroupNoticesListReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(Data.Length < count) { + Data = new DataBlock[count]; + for(int j = 0; j < count; j++) Data[j] = new DataBlock(); + } + for (int j = 0; j < count; j++) + { Data[j].FromBytes(bytes, ref i); } + } + + public GroupNoticesListReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - Data = new DataBlock[count]; + if(Data.Length < count) { + Data = new DataBlock[count]; + for(int j = 0; j < count; j++) Data[j] = new DataBlock(); + } for (int j = 0; j < count; j++) - { Data[j] = new DataBlock(bytes, ref i); } + { Data[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -7954,11 +9531,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -7997,10 +9579,15 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - GroupNoticeID = new LLUUID(bytes, i); i += 16; + GroupNoticeID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -8037,19 +9624,40 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public GroupNoticeRequestPacket(byte[] bytes, ref int i) + public GroupNoticeRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public GroupNoticeRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + } + + public GroupNoticeRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -8095,11 +9703,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -8140,12 +9753,17 @@ namespace libsecondlife.Packets public InfoBlock() { } public InfoBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - RegionID = new LLUUID(bytes, i); i += 16; - Position = new LLVector3(bytes, i); i += 12; - LookAt = new LLVector3(bytes, i); i += 12; + RegionID.FromBytes(bytes, i); i += 16; + Position.FromBytes(bytes, i); i += 12; + LookAt.FromBytes(bytes, i); i += 12; } catch (Exception) { @@ -8186,19 +9804,40 @@ namespace libsecondlife.Packets Info = new InfoBlock(); } - public TeleportRequestPacket(byte[] bytes, ref int i) + public TeleportRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Info = new InfoBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public TeleportRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Info.FromBytes(bytes, ref i); + } + + public TeleportRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Info = new InfoBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Info.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -8244,11 +9883,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -8289,12 +9933,17 @@ namespace libsecondlife.Packets public InfoBlock() { } public InfoBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { RegionHandle = (ulong)((ulong)bytes[i++] + ((ulong)bytes[i++] << 8) + ((ulong)bytes[i++] << 16) + ((ulong)bytes[i++] << 24) + ((ulong)bytes[i++] << 32) + ((ulong)bytes[i++] << 40) + ((ulong)bytes[i++] << 48) + ((ulong)bytes[i++] << 56)); - Position = new LLVector3(bytes, i); i += 12; - LookAt = new LLVector3(bytes, i); i += 12; + Position.FromBytes(bytes, i); i += 12; + LookAt.FromBytes(bytes, i); i += 12; } catch (Exception) { @@ -8342,19 +9991,40 @@ namespace libsecondlife.Packets Info = new InfoBlock(); } - public TeleportLocationRequestPacket(byte[] bytes, ref int i) + public TeleportLocationRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Info = new InfoBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public TeleportLocationRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Info.FromBytes(bytes, ref i); + } + + public TeleportLocationRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Info = new InfoBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Info.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -8403,13 +10073,18 @@ namespace libsecondlife.Packets public InfoBlock() { } public InfoBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; LocationID = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - Position = new LLVector3(bytes, i); i += 12; - LookAt = new LLVector3(bytes, i); i += 12; + Position.FromBytes(bytes, i); i += 12; + LookAt.FromBytes(bytes, i); i += 12; TeleportFlags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -8459,17 +10134,38 @@ namespace libsecondlife.Packets Info = new InfoBlock(); } - public TeleportLocalPacket(byte[] bytes, ref int i) + public TeleportLocalPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - Info = new InfoBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public TeleportLocalPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Info.FromBytes(bytes, ref i); + } + + public TeleportLocalPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - Info = new InfoBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Info.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -8514,12 +10210,17 @@ namespace libsecondlife.Packets public InfoBlock() { } public InfoBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; - LandmarkID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; + LandmarkID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -8558,17 +10259,38 @@ namespace libsecondlife.Packets Info = new InfoBlock(); } - public TeleportLandmarkRequestPacket(byte[] bytes, ref int i) + public TeleportLandmarkRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - Info = new InfoBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public TeleportLandmarkRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Info.FromBytes(bytes, ref i); + } + + public TeleportLandmarkRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - Info = new InfoBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Info.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -8611,10 +10333,15 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -8664,6 +10391,11 @@ namespace libsecondlife.Packets public InfoBlock() { } public InfoBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -8715,19 +10447,40 @@ namespace libsecondlife.Packets Info = new InfoBlock(); } - public TeleportProgressPacket(byte[] bytes, ref int i) + public TeleportProgressPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Info = new InfoBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public TeleportProgressPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Info.FromBytes(bytes, ref i); + } + + public TeleportProgressPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Info = new InfoBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Info.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -8791,11 +10544,16 @@ namespace libsecondlife.Packets public InfoBlock() { } public InfoBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; LocationID = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); SimIP = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); SimPort = (ushort)((bytes[i++] << 8) + bytes[i++]); @@ -8874,17 +10632,38 @@ namespace libsecondlife.Packets Info = new InfoBlock(); } - public TeleportFinishPacket(byte[] bytes, ref int i) + public TeleportFinishPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - Info = new InfoBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public TeleportFinishPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Info.FromBytes(bytes, ref i); + } + + public TeleportFinishPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - Info = new InfoBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Info.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -8928,11 +10707,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -8984,6 +10768,11 @@ namespace libsecondlife.Packets public InfoBlock() { } public InfoBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -9032,10 +10821,15 @@ namespace libsecondlife.Packets public TargetDataBlock() { } public TargetDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - TargetID = new LLUUID(bytes, i); i += 16; + TargetID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -9074,27 +10868,54 @@ namespace libsecondlife.Packets TargetData = new TargetDataBlock[0]; } - public StartLurePacket(byte[] bytes, ref int i) + public StartLurePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Info = new InfoBlock(bytes, ref i); - int count = (int)bytes[i++]; - TargetData = new TargetDataBlock[count]; - for (int j = 0; j < count; j++) - { TargetData[j] = new TargetDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public StartLurePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Info.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(TargetData.Length < count) { + TargetData = new TargetDataBlock[count]; + for(int j = 0; j < count; j++) TargetData[j] = new TargetDataBlock(); + } + for (int j = 0; j < count; j++) + { TargetData[j].FromBytes(bytes, ref i); } + } + + public StartLurePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Info = new InfoBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Info.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - TargetData = new TargetDataBlock[count]; + if(TargetData.Length < count) { + TargetData = new TargetDataBlock[count]; + for(int j = 0; j < count; j++) TargetData[j] = new TargetDataBlock(); + } for (int j = 0; j < count; j++) - { TargetData[j] = new TargetDataBlock(bytes, ref i); } + { TargetData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -9150,12 +10971,17 @@ namespace libsecondlife.Packets public InfoBlock() { } public InfoBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; - LureID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; + LureID.FromBytes(bytes, i); i += 16; TeleportFlags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -9200,17 +11026,38 @@ namespace libsecondlife.Packets Info = new InfoBlock(); } - public TeleportLureRequestPacket(byte[] bytes, ref int i) + public TeleportLureRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - Info = new InfoBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public TeleportLureRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Info.FromBytes(bytes, ref i); + } + + public TeleportLureRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - Info = new InfoBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Info.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -9254,11 +11101,16 @@ namespace libsecondlife.Packets public InfoBlock() { } public InfoBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -9295,17 +11147,38 @@ namespace libsecondlife.Packets Info = new InfoBlock(); } - public TeleportCancelPacket(byte[] bytes, ref int i) + public TeleportCancelPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - Info = new InfoBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public TeleportCancelPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Info.FromBytes(bytes, ref i); + } + + public TeleportCancelPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - Info = new InfoBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Info.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -9348,6 +11221,11 @@ namespace libsecondlife.Packets public InfoBlock() { } public InfoBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -9389,17 +11267,38 @@ namespace libsecondlife.Packets Info = new InfoBlock(); } - public TeleportStartPacket(byte[] bytes, ref int i) + public TeleportStartPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - Info = new InfoBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public TeleportStartPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Info.FromBytes(bytes, ref i); + } + + public TeleportStartPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - Info = new InfoBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Info.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -9455,11 +11354,16 @@ namespace libsecondlife.Packets public InfoBlock() { } public InfoBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _reason = new byte[length]; Buffer.BlockCopy(bytes, i, _reason, 0, length); i += length; @@ -9501,17 +11405,38 @@ namespace libsecondlife.Packets Info = new InfoBlock(); } - public TeleportFailedPacket(byte[] bytes, ref int i) + public TeleportFailedPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - Info = new InfoBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public TeleportFailedPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Info.FromBytes(bytes, ref i); + } + + public TeleportFailedPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - Info = new InfoBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Info.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -9556,12 +11481,17 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -9602,10 +11532,15 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ObjectID = new LLUUID(bytes, i); i += 16; + ObjectID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -9642,25 +11577,52 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public UndoPacket(byte[] bytes, ref int i) + public UndoPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public UndoPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public UndoPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -9713,12 +11675,17 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -9759,10 +11726,15 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ObjectID = new LLUUID(bytes, i); i += 16; + ObjectID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -9799,25 +11771,52 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public RedoPacket(byte[] bytes, ref int i) + public RedoPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public RedoPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public RedoPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -9869,11 +11868,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -9910,17 +11914,38 @@ namespace libsecondlife.Packets AgentData = new AgentDataBlock(); } - public UndoLandPacket(byte[] bytes, ref int i) + public UndoLandPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public UndoLandPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + } + + public UndoLandPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -9965,11 +11990,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; SerialNum = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -10012,17 +12042,38 @@ namespace libsecondlife.Packets AgentData = new AgentDataBlock(); } - public AgentPausePacket(byte[] bytes, ref int i) + public AgentPausePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public AgentPausePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + } + + public AgentPausePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -10067,11 +12118,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; SerialNum = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -10114,17 +12170,38 @@ namespace libsecondlife.Packets AgentData = new AgentDataBlock(); } - public AgentResumePacket(byte[] bytes, ref int i) + public AgentResumePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public AgentResumePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + } + + public AgentResumePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -10168,11 +12245,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -10225,6 +12307,11 @@ namespace libsecondlife.Packets public ChatDataBlock() { } public ChatDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -10281,19 +12368,40 @@ namespace libsecondlife.Packets ChatData = new ChatDataBlock(); } - public ChatFromViewerPacket(byte[] bytes, ref int i) + public ChatFromViewerPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - ChatData = new ChatDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ChatFromViewerPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ChatData.FromBytes(bytes, ref i); + } + + public ChatFromViewerPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - ChatData = new ChatDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ChatData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -10340,11 +12448,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; CircuitCode = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -10402,6 +12515,11 @@ namespace libsecondlife.Packets public ThrottleBlock() { } public ThrottleBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -10453,19 +12571,40 @@ namespace libsecondlife.Packets Throttle = new ThrottleBlock(); } - public AgentThrottlePacket(byte[] bytes, ref int i) + public AgentThrottlePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Throttle = new ThrottleBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public AgentThrottlePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Throttle.FromBytes(bytes, ref i); + } + + public AgentThrottlePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Throttle = new ThrottleBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Throttle.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -10512,11 +12651,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; CircuitCode = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -10562,6 +12706,11 @@ namespace libsecondlife.Packets public FOVBlockBlock() { } public FOVBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -10612,19 +12761,40 @@ namespace libsecondlife.Packets FOVBlock = new FOVBlockBlock(); } - public AgentFOVPacket(byte[] bytes, ref int i) + public AgentFOVPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - FOVBlock = new FOVBlockBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public AgentFOVPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + FOVBlock.FromBytes(bytes, ref i); + } + + public AgentFOVPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - FOVBlock = new FOVBlockBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + FOVBlock.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -10671,11 +12841,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; CircuitCode = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -10722,6 +12897,11 @@ namespace libsecondlife.Packets public HeightWidthBlockBlock() { } public HeightWidthBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -10773,19 +12953,40 @@ namespace libsecondlife.Packets HeightWidthBlock = new HeightWidthBlockBlock(); } - public AgentHeightWidthPacket(byte[] bytes, ref int i) + public AgentHeightWidthPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - HeightWidthBlock = new HeightWidthBlockBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public AgentHeightWidthPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + HeightWidthBlock.FromBytes(bytes, ref i); + } + + public AgentHeightWidthPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - HeightWidthBlock = new HeightWidthBlockBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + HeightWidthBlock.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -10833,13 +13034,18 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; SerialNum = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - Size = new LLVector3(bytes, i); i += 12; + Size.FromBytes(bytes, i); i += 12; } catch (Exception) { @@ -10886,10 +13092,15 @@ namespace libsecondlife.Packets public WearableDataBlock() { } public WearableDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - CacheID = new LLUUID(bytes, i); i += 16; + CacheID.FromBytes(bytes, i); i += 16; TextureIndex = (byte)bytes[i++]; } catch (Exception) @@ -10941,6 +13152,11 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -10987,6 +13203,11 @@ namespace libsecondlife.Packets public VisualParamBlock() { } public VisualParamBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -11031,35 +13252,68 @@ namespace libsecondlife.Packets VisualParam = new VisualParamBlock[0]; } - public AgentSetAppearancePacket(byte[] bytes, ref int i) + public AgentSetAppearancePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - WearableData = new WearableDataBlock[count]; - for (int j = 0; j < count; j++) - { WearableData[j] = new WearableDataBlock(bytes, ref i); } - ObjectData = new ObjectDataBlock(bytes, ref i); - count = (int)bytes[i++]; - VisualParam = new VisualParamBlock[count]; - for (int j = 0; j < count; j++) - { VisualParam[j] = new VisualParamBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public AgentSetAppearancePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(WearableData.Length < count) { + WearableData = new WearableDataBlock[count]; + for(int j = 0; j < count; j++) WearableData[j] = new WearableDataBlock(); + } + for (int j = 0; j < count; j++) + { WearableData[j].FromBytes(bytes, ref i); } + ObjectData.FromBytes(bytes, ref i); + count = (int)bytes[i++]; + if(VisualParam.Length < count) { + VisualParam = new VisualParamBlock[count]; + for(int j = 0; j < count; j++) VisualParam[j] = new VisualParamBlock(); + } + for (int j = 0; j < count; j++) + { VisualParam[j].FromBytes(bytes, ref i); } + } + + public AgentSetAppearancePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - WearableData = new WearableDataBlock[count]; + if(WearableData.Length < count) { + WearableData = new WearableDataBlock[count]; + for(int j = 0; j < count; j++) WearableData[j] = new WearableDataBlock(); + } for (int j = 0; j < count; j++) - { WearableData[j] = new WearableDataBlock(bytes, ref i); } - ObjectData = new ObjectDataBlock(bytes, ref i); + { WearableData[j].FromBytes(bytes, ref i); } + ObjectData.FromBytes(bytes, ref i); count = (int)bytes[i++]; - VisualParam = new VisualParamBlock[count]; + if(VisualParam.Length < count) { + VisualParam = new VisualParamBlock[count]; + for(int j = 0; j < count; j++) VisualParam[j] = new VisualParamBlock(); + } for (int j = 0; j < count; j++) - { VisualParam[j] = new VisualParamBlock(bytes, ref i); } + { VisualParam[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -11121,11 +13375,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -11164,6 +13423,11 @@ namespace libsecondlife.Packets public FuseBlockBlock() { } public FuseBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -11207,19 +13471,40 @@ namespace libsecondlife.Packets FuseBlock = new FuseBlockBlock(); } - public AgentQuitCopyPacket(byte[] bytes, ref int i) + public AgentQuitCopyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - FuseBlock = new FuseBlockBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public AgentQuitCopyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + FuseBlock.FromBytes(bytes, ref i); + } + + public AgentQuitCopyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - FuseBlock = new FuseBlockBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + FuseBlock.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -11264,10 +13549,15 @@ namespace libsecondlife.Packets public ImageIDBlock() { } public ImageIDBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ID = new LLUUID(bytes, i); i += 16; + ID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -11302,17 +13592,38 @@ namespace libsecondlife.Packets ImageID = new ImageIDBlock(); } - public ImageNotInDatabasePacket(byte[] bytes, ref int i) + public ImageNotInDatabasePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - ImageID = new ImageIDBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ImageNotInDatabasePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + ImageID.FromBytes(bytes, ref i); + } + + public ImageNotInDatabasePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - ImageID = new ImageIDBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + ImageID.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -11355,10 +13666,15 @@ namespace libsecondlife.Packets public TextureDataBlock() { } public TextureDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - TextureID = new LLUUID(bytes, i); i += 16; + TextureID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -11393,17 +13709,38 @@ namespace libsecondlife.Packets TextureData = new TextureDataBlock(); } - public RebakeAvatarTexturesPacket(byte[] bytes, ref int i) + public RebakeAvatarTexturesPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - TextureData = new TextureDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public RebakeAvatarTexturesPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + TextureData.FromBytes(bytes, ref i); + } + + public RebakeAvatarTexturesPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - TextureData = new TextureDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + TextureData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -11448,11 +13785,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; AlwaysRun = (bytes[i++] != 0) ? (bool)true : (bool)false; } catch (Exception) @@ -11492,17 +13834,38 @@ namespace libsecondlife.Packets AgentData = new AgentDataBlock(); } - public SetAlwaysRunPacket(byte[] bytes, ref int i) + public SetAlwaysRunPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public SetAlwaysRunPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + } + + public SetAlwaysRunPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -11547,11 +13910,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; Force = (bytes[i++] != 0) ? (bool)true : (bool)false; } catch (Exception) @@ -11593,6 +13961,11 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -11636,25 +14009,52 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public ObjectDeletePacket(byte[] bytes, ref int i) + public ObjectDeletePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectDeletePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public ObjectDeletePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -11707,12 +14107,17 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -11754,10 +14159,15 @@ namespace libsecondlife.Packets public SharedDataBlock() { } public SharedDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - Offset = new LLVector3(bytes, i); i += 12; + Offset.FromBytes(bytes, i); i += 12; DuplicateFlags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -11800,6 +14210,11 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -11845,27 +14260,54 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public ObjectDuplicatePacket(byte[] bytes, ref int i) + public ObjectDuplicatePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - SharedData = new SharedDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectDuplicatePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + SharedData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public ObjectDuplicatePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - SharedData = new SharedDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + SharedData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -11928,19 +14370,24 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; - RayStart = new LLVector3(bytes, i); i += 12; - RayEnd = new LLVector3(bytes, i); i += 12; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; + RayStart.FromBytes(bytes, i); i += 12; + RayEnd.FromBytes(bytes, i); i += 12; BypassRaycast = (bytes[i++] != 0) ? (bool)true : (bool)false; RayEndIsIntersection = (bytes[i++] != 0) ? (bool)true : (bool)false; CopyCenters = (bytes[i++] != 0) ? (bool)true : (bool)false; CopyRotates = (bytes[i++] != 0) ? (bool)true : (bool)false; - RayTargetID = new LLUUID(bytes, i); i += 16; + RayTargetID.FromBytes(bytes, i); i += 16; DuplicateFlags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -12001,6 +14448,11 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -12044,25 +14496,52 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public ObjectDuplicateOnRayPacket(byte[] bytes, ref int i) + public ObjectDuplicateOnRayPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectDuplicateOnRayPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public ObjectDuplicateOnRayPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -12114,11 +14593,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -12158,11 +14642,16 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { ObjectLocalID = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - Scale = new LLVector3(bytes, i); i += 12; + Scale.FromBytes(bytes, i); i += 12; } catch (Exception) { @@ -12204,25 +14693,52 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public ObjectScalePacket(byte[] bytes, ref int i) + public ObjectScalePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectScalePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public ObjectScalePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -12274,11 +14790,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -12318,11 +14839,16 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { ObjectLocalID = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - Rotation = new LLQuaternion(bytes, i, true); i += 12; + Rotation.FromBytes(bytes, i, true); i += 12; } catch (Exception) { @@ -12364,25 +14890,52 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public ObjectRotationPacket(byte[] bytes, ref int i) + public ObjectRotationPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectRotationPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public ObjectRotationPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -12439,11 +14992,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; ObjectLocalID = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); UsePhysics = (bytes[i++] != 0) ? (bool)true : (bool)false; IsTemporary = (bytes[i++] != 0) ? (bool)true : (bool)false; @@ -12498,17 +15056,38 @@ namespace libsecondlife.Packets AgentData = new AgentDataBlock(); } - public ObjectFlagUpdatePacket(byte[] bytes, ref int i) + public ObjectFlagUpdatePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectFlagUpdatePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + } + + public ObjectFlagUpdatePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -12552,11 +15131,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -12596,6 +15180,11 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -12642,25 +15231,52 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public ObjectClickActionPacket(byte[] bytes, ref int i) + public ObjectClickActionPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectClickActionPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public ObjectClickActionPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -12712,11 +15328,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -12780,6 +15401,11 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -12840,25 +15466,52 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public ObjectImagePacket(byte[] bytes, ref int i) + public ObjectImagePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectImagePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public ObjectImagePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -12910,11 +15563,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -12954,6 +15612,11 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -13000,25 +15663,52 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public ObjectMaterialPacket(byte[] bytes, ref int i) + public ObjectMaterialPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectMaterialPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public ObjectMaterialPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -13070,11 +15760,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -13131,6 +15826,11 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -13233,25 +15933,52 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public ObjectShapePacket(byte[] bytes, ref int i) + public ObjectShapePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectShapePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public ObjectShapePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -13303,11 +16030,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -13362,6 +16094,11 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -13426,25 +16163,52 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public ObjectExtraParamsPacket(byte[] bytes, ref int i) + public ObjectExtraParamsPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectExtraParamsPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public ObjectExtraParamsPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -13496,11 +16260,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -13541,12 +16310,17 @@ namespace libsecondlife.Packets public HeaderDataBlock() { } public HeaderDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { Override = (bytes[i++] != 0) ? (bool)true : (bool)false; - OwnerID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + OwnerID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -13587,6 +16361,11 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -13632,27 +16411,54 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public ObjectOwnerPacket(byte[] bytes, ref int i) + public ObjectOwnerPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - HeaderData = new HeaderDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectOwnerPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + HeaderData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public ObjectOwnerPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - HeaderData = new HeaderDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + HeaderData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -13707,12 +16513,17 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -13753,6 +16564,11 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -13796,25 +16612,52 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public ObjectGroupPacket(byte[] bytes, ref int i) + public ObjectGroupPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectGroupPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public ObjectGroupPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -13868,13 +16711,18 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; - CategoryID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; + CategoryID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -13919,6 +16767,11 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -13971,25 +16824,52 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public ObjectBuyPacket(byte[] bytes, ref int i) + public ObjectBuyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectBuyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public ObjectBuyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -14041,11 +16921,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -14086,12 +16971,17 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ObjectID = new LLUUID(bytes, i); i += 16; - ItemID = new LLUUID(bytes, i); i += 16; - FolderID = new LLUUID(bytes, i); i += 16; + ObjectID.FromBytes(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; + FolderID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -14132,19 +17022,40 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public BuyObjectInventoryPacket(byte[] bytes, ref int i) + public BuyObjectInventoryPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public BuyObjectInventoryPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + } + + public BuyObjectInventoryPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -14190,10 +17101,15 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ObjectID = new LLUUID(bytes, i); i += 16; + ObjectID.FromBytes(bytes, i); i += 16; Delete = (bytes[i++] != 0) ? (bool)true : (bool)false; } catch (Exception) @@ -14231,17 +17147,38 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public DerezContainerPacket(byte[] bytes, ref int i) + public DerezContainerPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public DerezContainerPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Data.FromBytes(bytes, ref i); + } + + public DerezContainerPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -14285,11 +17222,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -14328,6 +17270,11 @@ namespace libsecondlife.Packets public HeaderDataBlock() { } public HeaderDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -14371,6 +17318,11 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -14428,27 +17380,54 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public ObjectPermissionsPacket(byte[] bytes, ref int i) + public ObjectPermissionsPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - HeaderData = new HeaderDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectPermissionsPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + HeaderData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public ObjectPermissionsPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - HeaderData = new HeaderDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + HeaderData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -14502,11 +17481,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -14547,6 +17531,11 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -14599,25 +17588,52 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public ObjectSaleInfoPacket(byte[] bytes, ref int i) + public ObjectSaleInfoPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectSaleInfoPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public ObjectSaleInfoPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -14669,11 +17685,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -14725,6 +17746,11 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -14776,25 +17802,52 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public ObjectNamePacket(byte[] bytes, ref int i) + public ObjectNamePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectNamePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public ObjectNamePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -14846,11 +17899,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -14902,6 +17960,11 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -14953,25 +18016,52 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public ObjectDescriptionPacket(byte[] bytes, ref int i) + public ObjectDescriptionPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectDescriptionPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public ObjectDescriptionPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -15023,11 +18113,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -15067,6 +18162,11 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -15116,25 +18216,52 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public ObjectCategoryPacket(byte[] bytes, ref int i) + public ObjectCategoryPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectCategoryPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public ObjectCategoryPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -15186,11 +18313,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -15229,6 +18361,11 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -15272,25 +18409,52 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public ObjectSelectPacket(byte[] bytes, ref int i) + public ObjectSelectPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectSelectPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public ObjectSelectPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -15342,11 +18506,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -15385,6 +18554,11 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -15428,25 +18602,52 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public ObjectDeselectPacket(byte[] bytes, ref int i) + public ObjectDeselectPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectDeselectPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public ObjectDeselectPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -15499,11 +18700,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; AttachmentPoint = (byte)bytes[i++]; } catch (Exception) @@ -15546,11 +18752,16 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { ObjectLocalID = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - Rotation = new LLQuaternion(bytes, i, true); i += 12; + Rotation.FromBytes(bytes, i, true); i += 12; } catch (Exception) { @@ -15592,25 +18803,52 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public ObjectAttachPacket(byte[] bytes, ref int i) + public ObjectAttachPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectAttachPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public ObjectAttachPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -15662,11 +18900,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -15705,6 +18948,11 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -15748,25 +18996,52 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public ObjectDetachPacket(byte[] bytes, ref int i) + public ObjectDetachPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectDetachPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public ObjectDetachPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -15818,11 +19093,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -15861,6 +19141,11 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -15904,25 +19189,52 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public ObjectDropPacket(byte[] bytes, ref int i) + public ObjectDropPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectDropPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public ObjectDropPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -15974,11 +19286,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -16017,6 +19334,11 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -16060,25 +19382,52 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public ObjectLinkPacket(byte[] bytes, ref int i) + public ObjectLinkPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectLinkPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public ObjectLinkPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -16130,11 +19479,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -16173,6 +19527,11 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -16216,25 +19575,52 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public ObjectDelinkPacket(byte[] bytes, ref int i) + public ObjectDelinkPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectDelinkPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public ObjectDelinkPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -16286,11 +19672,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -16330,11 +19721,16 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { LocalID = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - GrabOffset = new LLVector3(bytes, i); i += 12; + GrabOffset.FromBytes(bytes, i); i += 12; } catch (Exception) { @@ -16376,19 +19772,40 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock(); } - public ObjectGrabPacket(byte[] bytes, ref int i) + public ObjectGrabPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - ObjectData = new ObjectDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectGrabPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ObjectData.FromBytes(bytes, ref i); + } + + public ObjectGrabPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - ObjectData = new ObjectDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ObjectData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -16434,11 +19851,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -16480,12 +19902,17 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ObjectID = new LLUUID(bytes, i); i += 16; - GrabOffsetInitial = new LLVector3(bytes, i); i += 12; - GrabPosition = new LLVector3(bytes, i); i += 12; + ObjectID.FromBytes(bytes, i); i += 16; + GrabOffsetInitial.FromBytes(bytes, i); i += 12; + GrabPosition.FromBytes(bytes, i); i += 12; TimeSinceLast = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -16532,19 +19959,40 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock(); } - public ObjectGrabUpdatePacket(byte[] bytes, ref int i) + public ObjectGrabUpdatePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - ObjectData = new ObjectDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectGrabUpdatePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ObjectData.FromBytes(bytes, ref i); + } + + public ObjectGrabUpdatePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - ObjectData = new ObjectDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ObjectData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -16590,11 +20038,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -16633,6 +20086,11 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -16676,19 +20134,40 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock(); } - public ObjectDeGrabPacket(byte[] bytes, ref int i) + public ObjectDeGrabPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - ObjectData = new ObjectDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectDeGrabPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ObjectData.FromBytes(bytes, ref i); + } + + public ObjectDeGrabPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - ObjectData = new ObjectDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ObjectData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -16734,11 +20213,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -16777,10 +20261,15 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ObjectID = new LLUUID(bytes, i); i += 16; + ObjectID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -16817,19 +20306,40 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock(); } - public ObjectSpinStartPacket(byte[] bytes, ref int i) + public ObjectSpinStartPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - ObjectData = new ObjectDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectSpinStartPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ObjectData.FromBytes(bytes, ref i); + } + + public ObjectSpinStartPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - ObjectData = new ObjectDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ObjectData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -16875,11 +20385,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -16919,11 +20434,16 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ObjectID = new LLUUID(bytes, i); i += 16; - Rotation = new LLQuaternion(bytes, i, true); i += 12; + ObjectID.FromBytes(bytes, i); i += 16; + Rotation.FromBytes(bytes, i, true); i += 12; } catch (Exception) { @@ -16962,19 +20482,40 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock(); } - public ObjectSpinUpdatePacket(byte[] bytes, ref int i) + public ObjectSpinUpdatePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - ObjectData = new ObjectDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectSpinUpdatePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ObjectData.FromBytes(bytes, ref i); + } + + public ObjectSpinUpdatePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - ObjectData = new ObjectDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ObjectData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -17020,11 +20561,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -17063,10 +20609,15 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ObjectID = new LLUUID(bytes, i); i += 16; + ObjectID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -17103,19 +20654,40 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock(); } - public ObjectSpinStopPacket(byte[] bytes, ref int i) + public ObjectSpinStopPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - ObjectData = new ObjectDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectSpinStopPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ObjectData.FromBytes(bytes, ref i); + } + + public ObjectSpinStopPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - ObjectData = new ObjectDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ObjectData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -17162,11 +20734,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - RequestID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + RequestID.FromBytes(bytes, i); i += 16; VolumeDetail = (short)(bytes[i++] + (bytes[i++] << 8)); } catch (Exception) @@ -17209,10 +20786,15 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ObjectID = new LLUUID(bytes, i); i += 16; + ObjectID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -17249,25 +20831,52 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public ObjectExportSelectedPacket(byte[] bytes, ref int i) + public ObjectExportSelectedPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectExportSelectedPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public ObjectExportSelectedPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -17319,11 +20928,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -17365,6 +20979,11 @@ namespace libsecondlife.Packets public ModifyBlockBlock() { } public ModifyBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -17425,6 +21044,11 @@ namespace libsecondlife.Packets public ParcelDataBlock() { } public ParcelDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -17495,27 +21119,54 @@ namespace libsecondlife.Packets ParcelData = new ParcelDataBlock[0]; } - public ModifyLandPacket(byte[] bytes, ref int i) + public ModifyLandPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - ModifyBlock = new ModifyBlockBlock(bytes, ref i); - int count = (int)bytes[i++]; - ParcelData = new ParcelDataBlock[count]; - for (int j = 0; j < count; j++) - { ParcelData[j] = new ParcelDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ModifyLandPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ModifyBlock.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ParcelData.Length < count) { + ParcelData = new ParcelDataBlock[count]; + for(int j = 0; j < count; j++) ParcelData[j] = new ParcelDataBlock(); + } + for (int j = 0; j < count; j++) + { ParcelData[j].FromBytes(bytes, ref i); } + } + + public ModifyLandPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - ModifyBlock = new ModifyBlockBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ModifyBlock.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ParcelData = new ParcelDataBlock[count]; + if(ParcelData.Length < count) { + ParcelData = new ParcelDataBlock[count]; + for(int j = 0; j < count; j++) ParcelData[j] = new ParcelDataBlock(); + } for (int j = 0; j < count; j++) - { ParcelData[j] = new ParcelDataBlock(bytes, ref i); } + { ParcelData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -17569,11 +21220,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -17610,17 +21266,38 @@ namespace libsecondlife.Packets AgentData = new AgentDataBlock(); } - public VelocityInterpolateOnPacket(byte[] bytes, ref int i) + public VelocityInterpolateOnPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public VelocityInterpolateOnPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + } + + public VelocityInterpolateOnPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -17664,11 +21341,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -17705,17 +21387,38 @@ namespace libsecondlife.Packets AgentData = new AgentDataBlock(); } - public VelocityInterpolateOffPacket(byte[] bytes, ref int i) + public VelocityInterpolateOffPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public VelocityInterpolateOffPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + } + + public VelocityInterpolateOffPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -17759,11 +21462,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -17814,6 +21522,11 @@ namespace libsecondlife.Packets public DataBlockBlock() { } public DataBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -17859,19 +21572,40 @@ namespace libsecondlife.Packets DataBlock = new DataBlockBlock(); } - public StateSavePacket(byte[] bytes, ref int i) + public StateSavePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - DataBlock = new DataBlockBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public StateSavePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + DataBlock.FromBytes(bytes, ref i); + } + + public StateSavePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - DataBlock = new DataBlockBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + DataBlock.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -17917,6 +21651,11 @@ namespace libsecondlife.Packets public AutosaveDataBlock() { } public AutosaveDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -17964,17 +21703,38 @@ namespace libsecondlife.Packets AutosaveData = new AutosaveDataBlock(); } - public ReportAutosaveCrashPacket(byte[] bytes, ref int i) + public ReportAutosaveCrashPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AutosaveData = new AutosaveDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ReportAutosaveCrashPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AutosaveData.FromBytes(bytes, ref i); + } + + public ReportAutosaveCrashPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AutosaveData = new AutosaveDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AutosaveData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -18018,11 +21778,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -18062,10 +21827,15 @@ namespace libsecondlife.Packets public DataBlockBlock() { } public DataBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - TargetID = new LLUUID(bytes, i); i += 16; + TargetID.FromBytes(bytes, i); i += 16; Flags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -18108,19 +21878,40 @@ namespace libsecondlife.Packets DataBlock = new DataBlockBlock(); } - public SimWideDeletesPacket(byte[] bytes, ref int i) + public SimWideDeletesPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - DataBlock = new DataBlockBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public SimWideDeletesPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + DataBlock.FromBytes(bytes, ref i); + } + + public SimWideDeletesPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - DataBlock = new DataBlockBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + DataBlock.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -18166,11 +21957,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -18209,10 +22005,15 @@ namespace libsecondlife.Packets public TargetDataBlock() { } public TargetDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - PreyID = new LLUUID(bytes, i); i += 16; + PreyID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -18249,19 +22050,40 @@ namespace libsecondlife.Packets TargetData = new TargetDataBlock(); } - public TrackAgentPacket(byte[] bytes, ref int i) + public TrackAgentPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - TargetData = new TargetDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public TrackAgentPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + TargetData.FromBytes(bytes, ref i); + } + + public TrackAgentPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - TargetData = new TargetDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + TargetData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -18354,12 +22176,17 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; IP = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); StartTime = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); if (!BitConverter.IsLittleEndian) Array.Reverse(bytes, i, 4); @@ -18481,6 +22308,11 @@ namespace libsecondlife.Packets public DownloadTotalsBlock() { } public DownloadTotalsBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -18539,6 +22371,11 @@ namespace libsecondlife.Packets public NetStatsBlock() { } public NetStatsBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -18605,6 +22442,11 @@ namespace libsecondlife.Packets public FailStatsBlock() { } public FailStatsBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -18679,6 +22521,11 @@ namespace libsecondlife.Packets public MiscStatsBlock() { } public MiscStatsBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -18735,35 +22582,68 @@ namespace libsecondlife.Packets MiscStats = new MiscStatsBlock[0]; } - public ViewerStatsPacket(byte[] bytes, ref int i) + public ViewerStatsPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - DownloadTotals = new DownloadTotalsBlock(bytes, ref i); - NetStats = new NetStatsBlock[2]; - for (int j = 0; j < 2; j++) - { NetStats[j] = new NetStatsBlock(bytes, ref i); } - FailStats = new FailStatsBlock(bytes, ref i); - int count = (int)bytes[i++]; - MiscStats = new MiscStatsBlock[count]; - for (int j = 0; j < count; j++) - { MiscStats[j] = new MiscStatsBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ViewerStatsPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + DownloadTotals.FromBytes(bytes, ref i); + if(NetStats.Length < 2) { + NetStats = new NetStatsBlock[2]; + for(int j = 0; j < 2; j++) NetStats[j] = new NetStatsBlock(); + } + for (int j = 0; j < 2; j++) + { NetStats[j].FromBytes(bytes, ref i); } + FailStats.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(MiscStats.Length < count) { + MiscStats = new MiscStatsBlock[count]; + for(int j = 0; j < count; j++) MiscStats[j] = new MiscStatsBlock(); + } + for (int j = 0; j < count; j++) + { MiscStats[j].FromBytes(bytes, ref i); } + } + + public ViewerStatsPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - DownloadTotals = new DownloadTotalsBlock(bytes, ref i); - NetStats = new NetStatsBlock[2]; + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + DownloadTotals.FromBytes(bytes, ref i); + if(NetStats.Length < 2) { + NetStats = new NetStatsBlock[2]; + for(int j = 0; j < 2; j++) NetStats[j] = new NetStatsBlock(); + } for (int j = 0; j < 2; j++) - { NetStats[j] = new NetStatsBlock(bytes, ref i); } - FailStats = new FailStatsBlock(bytes, ref i); + { NetStats[j].FromBytes(bytes, ref i); } + FailStats.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - MiscStats = new MiscStatsBlock[count]; + if(MiscStats.Length < count) { + MiscStats = new MiscStatsBlock[count]; + for(int j = 0; j < count; j++) MiscStats[j] = new MiscStatsBlock(); + } for (int j = 0; j < count; j++) - { MiscStats[j] = new MiscStatsBlock(bytes, ref i); } + { MiscStats[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -18825,11 +22705,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -18870,11 +22755,16 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - TaskID = new LLUUID(bytes, i); i += 16; - ItemID = new LLUUID(bytes, i); i += 16; + TaskID.FromBytes(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; Questions = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -18919,19 +22809,40 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public ScriptAnswerYesPacket(byte[] bytes, ref int i) + public ScriptAnswerYesPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ScriptAnswerYesPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + } + + public ScriptAnswerYesPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -18977,11 +22888,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -19076,21 +22992,26 @@ namespace libsecondlife.Packets public ReportDataBlock() { } public ReportDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { ReportType = (byte)bytes[i++]; Category = (byte)bytes[i++]; - Position = new LLVector3(bytes, i); i += 12; + Position.FromBytes(bytes, i); i += 12; CheckFlags = (byte)bytes[i++]; - ScreenshotID = new LLUUID(bytes, i); i += 16; - ObjectID = new LLUUID(bytes, i); i += 16; - AbuserID = new LLUUID(bytes, i); i += 16; + ScreenshotID.FromBytes(bytes, i); i += 16; + ObjectID.FromBytes(bytes, i); i += 16; + AbuserID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _abuseregionname = new byte[length]; Buffer.BlockCopy(bytes, i, _abuseregionname, 0, length); i += length; - AbuseRegionID = new LLUUID(bytes, i); i += 16; + AbuseRegionID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _summary = new byte[length]; Buffer.BlockCopy(bytes, i, _summary, 0, length); i += length; @@ -19170,19 +23091,40 @@ namespace libsecondlife.Packets ReportData = new ReportDataBlock(); } - public UserReportPacket(byte[] bytes, ref int i) + public UserReportPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - ReportData = new ReportDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public UserReportPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ReportData.FromBytes(bytes, ref i); + } + + public UserReportPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - ReportData = new ReportDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ReportData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -19239,6 +23181,11 @@ namespace libsecondlife.Packets public AlertDataBlock() { } public AlertDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -19282,17 +23229,38 @@ namespace libsecondlife.Packets AlertData = new AlertDataBlock(); } - public AlertMessagePacket(byte[] bytes, ref int i) + public AlertMessagePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AlertData = new AlertDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public AlertMessagePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AlertData.FromBytes(bytes, ref i); + } + + public AlertMessagePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AlertData = new AlertDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AlertData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -19335,10 +23303,15 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -19388,6 +23361,11 @@ namespace libsecondlife.Packets public AlertDataBlock() { } public AlertDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -19436,19 +23414,40 @@ namespace libsecondlife.Packets AlertData = new AlertDataBlock(); } - public AgentAlertMessagePacket(byte[] bytes, ref int i) + public AgentAlertMessagePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - AlertData = new AlertDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public AgentAlertMessagePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + AlertData.FromBytes(bytes, ref i); + } + + public AgentAlertMessagePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - AlertData = new AlertDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + AlertData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -19497,11 +23496,16 @@ namespace libsecondlife.Packets public MeanCollisionBlock() { } public MeanCollisionBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - Victim = new LLUUID(bytes, i); i += 16; - Perp = new LLUUID(bytes, i); i += 16; + Victim.FromBytes(bytes, i); i += 16; + Perp.FromBytes(bytes, i); i += 16; Time = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); if (!BitConverter.IsLittleEndian) Array.Reverse(bytes, i, 4); Mag = BitConverter.ToSingle(bytes, i); i += 4; @@ -19554,23 +23558,50 @@ namespace libsecondlife.Packets MeanCollision = new MeanCollisionBlock[0]; } - public MeanCollisionAlertPacket(byte[] bytes, ref int i) + public MeanCollisionAlertPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - int count = (int)bytes[i++]; - MeanCollision = new MeanCollisionBlock[count]; - for (int j = 0; j < count; j++) - { MeanCollision[j] = new MeanCollisionBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public MeanCollisionAlertPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + int count = (int)bytes[i++]; + if(MeanCollision.Length < count) { + MeanCollision = new MeanCollisionBlock[count]; + for(int j = 0; j < count; j++) MeanCollision[j] = new MeanCollisionBlock(); + } + for (int j = 0; j < count; j++) + { MeanCollision[j].FromBytes(bytes, ref i); } + } + + public MeanCollisionAlertPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } int count = (int)bytes[i++]; - MeanCollision = new MeanCollisionBlock[count]; + if(MeanCollision.Length < count) { + MeanCollision = new MeanCollisionBlock[count]; + for(int j = 0; j < count; j++) MeanCollision[j] = new MeanCollisionBlock(); + } for (int j = 0; j < count; j++) - { MeanCollision[j] = new MeanCollisionBlock(bytes, ref i); } + { MeanCollision[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -19619,6 +23650,11 @@ namespace libsecondlife.Packets public FrozenDataBlock() { } public FrozenDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -19657,17 +23693,38 @@ namespace libsecondlife.Packets FrozenData = new FrozenDataBlock(); } - public ViewerFrozenMessagePacket(byte[] bytes, ref int i) + public ViewerFrozenMessagePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - FrozenData = new FrozenDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ViewerFrozenMessagePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + FrozenData.FromBytes(bytes, ref i); + } + + public ViewerFrozenMessagePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - FrozenData = new FrozenDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + FrozenData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -19710,6 +23767,11 @@ namespace libsecondlife.Packets public HealthDataBlock() { } public HealthDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -19752,17 +23814,38 @@ namespace libsecondlife.Packets HealthData = new HealthDataBlock(); } - public HealthMessagePacket(byte[] bytes, ref int i) + public HealthMessagePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - HealthData = new HealthDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public HealthMessagePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + HealthData.FromBytes(bytes, ref i); + } + + public HealthMessagePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - HealthData = new HealthDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + HealthData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -19835,6 +23918,11 @@ namespace libsecondlife.Packets public ChatDataBlock() { } public ChatDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -19842,12 +23930,12 @@ namespace libsecondlife.Packets length = (ushort)bytes[i++]; _fromname = new byte[length]; Buffer.BlockCopy(bytes, i, _fromname, 0, length); i += length; - SourceID = new LLUUID(bytes, i); i += 16; - OwnerID = new LLUUID(bytes, i); i += 16; + SourceID.FromBytes(bytes, i); i += 16; + OwnerID.FromBytes(bytes, i); i += 16; SourceType = (byte)bytes[i++]; ChatType = (byte)bytes[i++]; Audible = (byte)bytes[i++]; - Position = new LLVector3(bytes, i); i += 12; + Position.FromBytes(bytes, i); i += 12; length = (ushort)(bytes[i++] + (bytes[i++] << 8)); _message = new byte[length]; Buffer.BlockCopy(bytes, i, _message, 0, length); i += length; @@ -19905,17 +23993,38 @@ namespace libsecondlife.Packets ChatData = new ChatDataBlock(); } - public ChatFromSimulatorPacket(byte[] bytes, ref int i) + public ChatFromSimulatorPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - ChatData = new ChatDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ChatFromSimulatorPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + ChatData.FromBytes(bytes, ref i); + } + + public ChatFromSimulatorPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - ChatData = new ChatDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + ChatData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -19961,6 +24070,11 @@ namespace libsecondlife.Packets public RegionBlock() { } public RegionBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -20023,6 +24137,11 @@ namespace libsecondlife.Packets public StatBlock() { } public StatBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -20073,25 +24192,52 @@ namespace libsecondlife.Packets Stat = new StatBlock[0]; } - public SimStatsPacket(byte[] bytes, ref int i) + public SimStatsPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - Region = new RegionBlock(bytes, ref i); - int count = (int)bytes[i++]; - Stat = new StatBlock[count]; - for (int j = 0; j < count; j++) - { Stat[j] = new StatBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public SimStatsPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Region.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(Stat.Length < count) { + Stat = new StatBlock[count]; + for(int j = 0; j < count; j++) Stat[j] = new StatBlock(); + } + for (int j = 0; j < count; j++) + { Stat[j].FromBytes(bytes, ref i); } + } + + public SimStatsPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - Region = new RegionBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Region.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - Stat = new StatBlock[count]; + if(Stat.Length < count) { + Stat = new StatBlock[count]; + for(int j = 0; j < count; j++) Stat[j] = new StatBlock(); + } for (int j = 0; j < count; j++) - { Stat[j] = new StatBlock(bytes, ref i); } + { Stat[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -20143,11 +24289,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -20184,17 +24335,38 @@ namespace libsecondlife.Packets AgentData = new AgentDataBlock(); } - public RequestRegionInfoPacket(byte[] bytes, ref int i) + public RequestRegionInfoPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public RequestRegionInfoPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + } + + public RequestRegionInfoPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -20238,11 +24410,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -20308,6 +24485,11 @@ namespace libsecondlife.Packets public RegionInfoBlock() { } public RegionInfoBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -20436,19 +24618,40 @@ namespace libsecondlife.Packets RegionInfo = new RegionInfoBlock(); } - public RegionInfoPacket(byte[] bytes, ref int i) + public RegionInfoPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - RegionInfo = new RegionInfoBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public RegionInfoPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + RegionInfo.FromBytes(bytes, ref i); + } + + public RegionInfoPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - RegionInfo = new RegionInfoBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + RegionInfo.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -20494,11 +24697,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -20556,6 +24764,11 @@ namespace libsecondlife.Packets public RegionInfoBlock() { } public RegionInfoBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -20645,19 +24858,40 @@ namespace libsecondlife.Packets RegionInfo = new RegionInfoBlock(); } - public GodUpdateRegionInfoPacket(byte[] bytes, ref int i) + public GodUpdateRegionInfoPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - RegionInfo = new RegionInfoBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public GodUpdateRegionInfoPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + RegionInfo.FromBytes(bytes, ref i); + } + + public GodUpdateRegionInfoPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - RegionInfo = new RegionInfoBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + RegionInfo.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -20702,6 +24936,11 @@ namespace libsecondlife.Packets public RegionDataBlock() { } public RegionDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -20747,17 +24986,38 @@ namespace libsecondlife.Packets RegionData = new RegionDataBlock(); } - public NearestLandingRegionUpdatedPacket(byte[] bytes, ref int i) + public NearestLandingRegionUpdatedPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - RegionData = new RegionDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public NearestLandingRegionUpdatedPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + RegionData.FromBytes(bytes, ref i); + } + + public NearestLandingRegionUpdatedPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - RegionData = new RegionDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + RegionData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -20835,6 +25095,11 @@ namespace libsecondlife.Packets public RegionInfoBlock() { } public RegionInfoBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -20844,21 +25109,21 @@ namespace libsecondlife.Packets length = (ushort)bytes[i++]; _simname = new byte[length]; Buffer.BlockCopy(bytes, i, _simname, 0, length); i += length; - SimOwner = new LLUUID(bytes, i); i += 16; + SimOwner.FromBytes(bytes, i); i += 16; IsEstateManager = (bytes[i++] != 0) ? (bool)true : (bool)false; if (!BitConverter.IsLittleEndian) Array.Reverse(bytes, i, 4); WaterHeight = BitConverter.ToSingle(bytes, i); i += 4; if (!BitConverter.IsLittleEndian) Array.Reverse(bytes, i, 4); BillableFactor = BitConverter.ToSingle(bytes, i); i += 4; - CacheID = new LLUUID(bytes, i); i += 16; - TerrainBase0 = new LLUUID(bytes, i); i += 16; - TerrainBase1 = new LLUUID(bytes, i); i += 16; - TerrainBase2 = new LLUUID(bytes, i); i += 16; - TerrainBase3 = new LLUUID(bytes, i); i += 16; - TerrainDetail0 = new LLUUID(bytes, i); i += 16; - TerrainDetail1 = new LLUUID(bytes, i); i += 16; - TerrainDetail2 = new LLUUID(bytes, i); i += 16; - TerrainDetail3 = new LLUUID(bytes, i); i += 16; + CacheID.FromBytes(bytes, i); i += 16; + TerrainBase0.FromBytes(bytes, i); i += 16; + TerrainBase1.FromBytes(bytes, i); i += 16; + TerrainBase2.FromBytes(bytes, i); i += 16; + TerrainBase3.FromBytes(bytes, i); i += 16; + TerrainDetail0.FromBytes(bytes, i); i += 16; + TerrainDetail1.FromBytes(bytes, i); i += 16; + TerrainDetail2.FromBytes(bytes, i); i += 16; + TerrainDetail3.FromBytes(bytes, i); i += 16; if (!BitConverter.IsLittleEndian) Array.Reverse(bytes, i, 4); TerrainStartHeight00 = BitConverter.ToSingle(bytes, i); i += 4; if (!BitConverter.IsLittleEndian) Array.Reverse(bytes, i, 4); @@ -20984,10 +25249,15 @@ namespace libsecondlife.Packets public RegionInfo2Block() { } public RegionInfo2Block(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - RegionID = new LLUUID(bytes, i); i += 16; + RegionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -21024,19 +25294,40 @@ namespace libsecondlife.Packets RegionInfo2 = new RegionInfo2Block(); } - public RegionHandshakePacket(byte[] bytes, ref int i) + public RegionHandshakePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - RegionInfo = new RegionInfoBlock(bytes, ref i); - RegionInfo2 = new RegionInfo2Block(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public RegionHandshakePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + RegionInfo.FromBytes(bytes, ref i); + RegionInfo2.FromBytes(bytes, ref i); + } + + public RegionHandshakePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - RegionInfo = new RegionInfoBlock(bytes, ref i); - RegionInfo2 = new RegionInfo2Block(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + RegionInfo.FromBytes(bytes, ref i); + RegionInfo2.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -21082,11 +25373,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -21125,6 +25421,11 @@ namespace libsecondlife.Packets public RegionInfoBlock() { } public RegionInfoBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -21168,19 +25469,40 @@ namespace libsecondlife.Packets RegionInfo = new RegionInfoBlock(); } - public RegionHandshakeReplyPacket(byte[] bytes, ref int i) + public RegionHandshakeReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - RegionInfo = new RegionInfoBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public RegionHandshakeReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + RegionInfo.FromBytes(bytes, ref i); + } + + public RegionHandshakeReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - RegionInfo = new RegionInfoBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + RegionInfo.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -21230,16 +25552,21 @@ namespace libsecondlife.Packets public TimeInfoBlock() { } public TimeInfoBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { UsecSinceStart = (ulong)((ulong)bytes[i++] + ((ulong)bytes[i++] << 8) + ((ulong)bytes[i++] << 16) + ((ulong)bytes[i++] << 24) + ((ulong)bytes[i++] << 32) + ((ulong)bytes[i++] << 40) + ((ulong)bytes[i++] << 48) + ((ulong)bytes[i++] << 56)); SecPerDay = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); SecPerYear = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - SunDirection = new LLVector3(bytes, i); i += 12; + SunDirection.FromBytes(bytes, i); i += 12; if (!BitConverter.IsLittleEndian) Array.Reverse(bytes, i, 4); SunPhase = BitConverter.ToSingle(bytes, i); i += 4; - SunAngVelocity = new LLVector3(bytes, i); i += 12; + SunAngVelocity.FromBytes(bytes, i); i += 12; } catch (Exception) { @@ -21300,17 +25627,38 @@ namespace libsecondlife.Packets TimeInfo = new TimeInfoBlock(); } - public SimulatorViewerTimeMessagePacket(byte[] bytes, ref int i) + public SimulatorViewerTimeMessagePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - TimeInfo = new TimeInfoBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public SimulatorViewerTimeMessagePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + TimeInfo.FromBytes(bytes, ref i); + } + + public SimulatorViewerTimeMessagePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - TimeInfo = new TimeInfoBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + TimeInfo.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -21355,6 +25703,11 @@ namespace libsecondlife.Packets public SimulatorInfoBlock() { } public SimulatorInfoBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -21410,17 +25763,38 @@ namespace libsecondlife.Packets SimulatorInfo = new SimulatorInfoBlock(); } - public EnableSimulatorPacket(byte[] bytes, ref int i) + public EnableSimulatorPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - SimulatorInfo = new SimulatorInfoBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public EnableSimulatorPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + SimulatorInfo.FromBytes(bytes, ref i); + } + + public EnableSimulatorPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - SimulatorInfo = new SimulatorInfoBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + SimulatorInfo.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -21459,15 +25833,36 @@ namespace libsecondlife.Packets Header.Reliable = true; } - public DisableSimulatorPacket(byte[] bytes, ref int i) + public DisableSimulatorPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); + FromBytes(bytes, ref i, ref packetEnd, null); } - public DisableSimulatorPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + } + + public DisableSimulatorPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } } public override byte[] ToBytes() @@ -21524,11 +25919,16 @@ namespace libsecondlife.Packets public TransferInfoBlock() { } public TransferInfoBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - TransferID = new LLUUID(bytes, i); i += 16; + TransferID.FromBytes(bytes, i); i += 16; ChannelType = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); SourceType = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); if (!BitConverter.IsLittleEndian) Array.Reverse(bytes, i, 4); @@ -21590,17 +25990,38 @@ namespace libsecondlife.Packets TransferInfo = new TransferInfoBlock(); } - public TransferRequestPacket(byte[] bytes, ref int i) + public TransferRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - TransferInfo = new TransferInfoBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public TransferRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + TransferInfo.FromBytes(bytes, ref i); + } + + public TransferRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - TransferInfo = new TransferInfoBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + TransferInfo.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -21660,11 +26081,16 @@ namespace libsecondlife.Packets public TransferInfoBlock() { } public TransferInfoBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - TransferID = new LLUUID(bytes, i); i += 16; + TransferID.FromBytes(bytes, i); i += 16; ChannelType = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); TargetType = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); Status = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); @@ -21731,17 +26157,38 @@ namespace libsecondlife.Packets TransferInfo = new TransferInfoBlock(); } - public TransferInfoPacket(byte[] bytes, ref int i) + public TransferInfoPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - TransferInfo = new TransferInfoBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public TransferInfoPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + TransferInfo.FromBytes(bytes, ref i); + } + + public TransferInfoPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - TransferInfo = new TransferInfoBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + TransferInfo.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -21785,10 +26232,15 @@ namespace libsecondlife.Packets public TransferInfoBlock() { } public TransferInfoBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - TransferID = new LLUUID(bytes, i); i += 16; + TransferID.FromBytes(bytes, i); i += 16; ChannelType = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -21829,17 +26281,38 @@ namespace libsecondlife.Packets TransferInfo = new TransferInfoBlock(); } - public TransferAbortPacket(byte[] bytes, ref int i) + public TransferAbortPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - TransferInfo = new TransferInfoBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public TransferAbortPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + TransferInfo.FromBytes(bytes, ref i); + } + + public TransferAbortPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - TransferInfo = new TransferInfoBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + TransferInfo.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -21900,6 +26373,11 @@ namespace libsecondlife.Packets public XferIDBlock() { } public XferIDBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -21911,7 +26389,7 @@ namespace libsecondlife.Packets FilePath = (byte)bytes[i++]; DeleteOnCompletion = (bytes[i++] != 0) ? (bool)true : (bool)false; UseBigPackets = (bytes[i++] != 0) ? (bool)true : (bool)false; - VFileID = new LLUUID(bytes, i); i += 16; + VFileID.FromBytes(bytes, i); i += 16; VFileType = (short)(bytes[i++] + (bytes[i++] << 8)); } catch (Exception) @@ -21970,17 +26448,38 @@ namespace libsecondlife.Packets XferID = new XferIDBlock(); } - public RequestXferPacket(byte[] bytes, ref int i) + public RequestXferPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - XferID = new XferIDBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public RequestXferPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + XferID.FromBytes(bytes, ref i); + } + + public RequestXferPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - XferID = new XferIDBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + XferID.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -22024,6 +26523,11 @@ namespace libsecondlife.Packets public XferIDBlock() { } public XferIDBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -22075,17 +26579,38 @@ namespace libsecondlife.Packets XferID = new XferIDBlock(); } - public AbortXferPacket(byte[] bytes, ref int i) + public AbortXferPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - XferID = new XferIDBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public AbortXferPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + XferID.FromBytes(bytes, ref i); + } + + public AbortXferPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - XferID = new XferIDBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + XferID.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -22129,10 +26654,15 @@ namespace libsecondlife.Packets public SenderBlock() { } public SenderBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ID = new LLUUID(bytes, i); i += 16; + ID.FromBytes(bytes, i); i += 16; IsTrial = (bytes[i++] != 0) ? (bool)true : (bool)false; } catch (Exception) @@ -22184,6 +26714,11 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -22230,6 +26765,11 @@ namespace libsecondlife.Packets public VisualParamBlock() { } public VisualParamBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -22272,27 +26812,54 @@ namespace libsecondlife.Packets VisualParam = new VisualParamBlock[0]; } - public AvatarAppearancePacket(byte[] bytes, ref int i) + public AvatarAppearancePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - Sender = new SenderBlock(bytes, ref i); - ObjectData = new ObjectDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - VisualParam = new VisualParamBlock[count]; - for (int j = 0; j < count; j++) - { VisualParam[j] = new VisualParamBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public AvatarAppearancePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Sender.FromBytes(bytes, ref i); + ObjectData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(VisualParam.Length < count) { + VisualParam = new VisualParamBlock[count]; + for(int j = 0; j < count; j++) VisualParam[j] = new VisualParamBlock(); + } + for (int j = 0; j < count; j++) + { VisualParam[j].FromBytes(bytes, ref i); } + } + + public AvatarAppearancePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - Sender = new SenderBlock(bytes, ref i); - ObjectData = new ObjectDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Sender.FromBytes(bytes, ref i); + ObjectData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - VisualParam = new VisualParamBlock[count]; + if(VisualParam.Length < count) { + VisualParam = new VisualParamBlock[count]; + for(int j = 0; j < count; j++) VisualParam[j] = new VisualParamBlock(); + } for (int j = 0; j < count; j++) - { VisualParam[j] = new VisualParamBlock(bytes, ref i); } + { VisualParam[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -22345,10 +26912,15 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ObjectID = new LLUUID(bytes, i); i += 16; + ObjectID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -22386,6 +26958,11 @@ namespace libsecondlife.Packets public CameraPropertyBlock() { } public CameraPropertyBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -22436,25 +27013,52 @@ namespace libsecondlife.Packets CameraProperty = new CameraPropertyBlock[0]; } - public SetFollowCamPropertiesPacket(byte[] bytes, ref int i) + public SetFollowCamPropertiesPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - ObjectData = new ObjectDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - CameraProperty = new CameraPropertyBlock[count]; - for (int j = 0; j < count; j++) - { CameraProperty[j] = new CameraPropertyBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public SetFollowCamPropertiesPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + ObjectData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(CameraProperty.Length < count) { + CameraProperty = new CameraPropertyBlock[count]; + for(int j = 0; j < count; j++) CameraProperty[j] = new CameraPropertyBlock(); + } + for (int j = 0; j < count; j++) + { CameraProperty[j].FromBytes(bytes, ref i); } + } + + public SetFollowCamPropertiesPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - ObjectData = new ObjectDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + ObjectData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - CameraProperty = new CameraPropertyBlock[count]; + if(CameraProperty.Length < count) { + CameraProperty = new CameraPropertyBlock[count]; + for(int j = 0; j < count; j++) CameraProperty[j] = new CameraPropertyBlock(); + } for (int j = 0; j < count; j++) - { CameraProperty[j] = new CameraPropertyBlock(bytes, ref i); } + { CameraProperty[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -22505,10 +27109,15 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ObjectID = new LLUUID(bytes, i); i += 16; + ObjectID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -22543,17 +27152,38 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock(); } - public ClearFollowCamPropertiesPacket(byte[] bytes, ref int i) + public ClearFollowCamPropertiesPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - ObjectData = new ObjectDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ClearFollowCamPropertiesPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + ObjectData.FromBytes(bytes, ref i); + } + + public ClearFollowCamPropertiesPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - ObjectData = new ObjectDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + ObjectData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -22596,10 +27226,15 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ObjectID = new LLUUID(bytes, i); i += 16; + ObjectID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -22634,17 +27269,38 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock(); } - public RequestPayPricePacket(byte[] bytes, ref int i) + public RequestPayPricePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - ObjectData = new ObjectDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public RequestPayPricePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + ObjectData.FromBytes(bytes, ref i); + } + + public RequestPayPricePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - ObjectData = new ObjectDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + ObjectData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -22688,10 +27344,15 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ObjectID = new LLUUID(bytes, i); i += 16; + ObjectID.FromBytes(bytes, i); i += 16; DefaultPayPrice = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -22734,6 +27395,11 @@ namespace libsecondlife.Packets public ButtonDataBlock() { } public ButtonDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -22777,25 +27443,52 @@ namespace libsecondlife.Packets ButtonData = new ButtonDataBlock[0]; } - public PayPriceReplyPacket(byte[] bytes, ref int i) + public PayPriceReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - ObjectData = new ObjectDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ButtonData = new ButtonDataBlock[count]; - for (int j = 0; j < count; j++) - { ButtonData[j] = new ButtonDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public PayPriceReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + ObjectData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ButtonData.Length < count) { + ButtonData = new ButtonDataBlock[count]; + for(int j = 0; j < count; j++) ButtonData[j] = new ButtonDataBlock(); + } + for (int j = 0; j < count; j++) + { ButtonData[j].FromBytes(bytes, ref i); } + } + + public PayPriceReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - ObjectData = new ObjectDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + ObjectData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ButtonData = new ButtonDataBlock[count]; + if(ButtonData.Length < count) { + ButtonData = new ButtonDataBlock[count]; + for(int j = 0; j < count; j++) ButtonData[j] = new ButtonDataBlock(); + } for (int j = 0; j < count; j++) - { ButtonData[j] = new ButtonDataBlock(bytes, ref i); } + { ButtonData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -22847,6 +27540,11 @@ namespace libsecondlife.Packets public TargetBlockBlock() { } public TargetBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -22908,12 +27606,17 @@ namespace libsecondlife.Packets public UserInfoBlock() { } public UserInfoBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; length = (ushort)(bytes[i++] + (bytes[i++] << 8)); _reason = new byte[length]; Buffer.BlockCopy(bytes, i, _reason, 0, length); i += length; @@ -22960,19 +27663,40 @@ namespace libsecondlife.Packets UserInfo = new UserInfoBlock(); } - public KickUserPacket(byte[] bytes, ref int i) + public KickUserPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - TargetBlock = new TargetBlockBlock(bytes, ref i); - UserInfo = new UserInfoBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public KickUserPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + TargetBlock.FromBytes(bytes, ref i); + UserInfo.FromBytes(bytes, ref i); + } + + public KickUserPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - TargetBlock = new TargetBlockBlock(bytes, ref i); - UserInfo = new UserInfoBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + TargetBlock.FromBytes(bytes, ref i); + UserInfo.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -23018,10 +27742,15 @@ namespace libsecondlife.Packets public UserInfoBlock() { } public UserInfoBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - SessionID = new LLUUID(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; Flags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -23062,17 +27791,38 @@ namespace libsecondlife.Packets UserInfo = new UserInfoBlock(); } - public KickUserAckPacket(byte[] bytes, ref int i) + public KickUserAckPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - UserInfo = new UserInfoBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public KickUserAckPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + UserInfo.FromBytes(bytes, ref i); + } + + public KickUserAckPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - UserInfo = new UserInfoBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + UserInfo.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -23131,13 +27881,18 @@ namespace libsecondlife.Packets public UserInfoBlock() { } public UserInfoBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - GodID = new LLUUID(bytes, i); i += 16; - GodSessionID = new LLUUID(bytes, i); i += 16; - AgentID = new LLUUID(bytes, i); i += 16; + GodID.FromBytes(bytes, i); i += 16; + GodSessionID.FromBytes(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; KickFlags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); length = (ushort)(bytes[i++] + (bytes[i++] << 8)); _reason = new byte[length]; @@ -23190,17 +27945,38 @@ namespace libsecondlife.Packets UserInfo = new UserInfoBlock(); } - public GodKickUserPacket(byte[] bytes, ref int i) + public GodKickUserPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - UserInfo = new UserInfoBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public GodKickUserPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + UserInfo.FromBytes(bytes, ref i); + } + + public GodKickUserPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - UserInfo = new UserInfoBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + UserInfo.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -23244,11 +28020,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -23288,10 +28069,15 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - TargetID = new LLUUID(bytes, i); i += 16; + TargetID.FromBytes(bytes, i); i += 16; Flags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -23334,19 +28120,40 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public EjectUserPacket(byte[] bytes, ref int i) + public EjectUserPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public EjectUserPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + } + + public EjectUserPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -23392,11 +28199,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -23436,10 +28248,15 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - TargetID = new LLUUID(bytes, i); i += 16; + TargetID.FromBytes(bytes, i); i += 16; Flags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -23482,19 +28299,40 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public FreezeUserPacket(byte[] bytes, ref int i) + public FreezeUserPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public FreezeUserPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + } + + public FreezeUserPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -23541,12 +28379,17 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; - AvatarID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; + AvatarID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -23585,17 +28428,38 @@ namespace libsecondlife.Packets AgentData = new AgentDataBlock(); } - public AvatarPropertiesRequestPacket(byte[] bytes, ref int i) + public AvatarPropertiesRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public AvatarPropertiesRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + } + + public AvatarPropertiesRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -23639,11 +28503,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - AvatarID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + AvatarID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -23746,13 +28615,18 @@ namespace libsecondlife.Packets public PropertiesDataBlock() { } public PropertiesDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - ImageID = new LLUUID(bytes, i); i += 16; - FLImageID = new LLUUID(bytes, i); i += 16; - PartnerID = new LLUUID(bytes, i); i += 16; + ImageID.FromBytes(bytes, i); i += 16; + FLImageID.FromBytes(bytes, i); i += 16; + PartnerID.FromBytes(bytes, i); i += 16; length = (ushort)(bytes[i++] + (bytes[i++] << 8)); _abouttext = new byte[length]; Buffer.BlockCopy(bytes, i, _abouttext, 0, length); i += length; @@ -23840,19 +28714,40 @@ namespace libsecondlife.Packets PropertiesData = new PropertiesDataBlock(); } - public AvatarPropertiesReplyPacket(byte[] bytes, ref int i) + public AvatarPropertiesReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - PropertiesData = new PropertiesDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public AvatarPropertiesReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + PropertiesData.FromBytes(bytes, ref i); + } + + public AvatarPropertiesReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - PropertiesData = new PropertiesDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + PropertiesData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -23898,11 +28793,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - AvatarID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + AvatarID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -23979,6 +28879,11 @@ namespace libsecondlife.Packets public PropertiesDataBlock() { } public PropertiesDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -24052,19 +28957,40 @@ namespace libsecondlife.Packets PropertiesData = new PropertiesDataBlock(); } - public AvatarInterestsReplyPacket(byte[] bytes, ref int i) + public AvatarInterestsReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - PropertiesData = new PropertiesDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public AvatarInterestsReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + PropertiesData.FromBytes(bytes, ref i); + } + + public AvatarInterestsReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - PropertiesData = new PropertiesDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + PropertiesData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -24110,11 +29036,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - AvatarID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + AvatarID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -24181,6 +29112,11 @@ namespace libsecondlife.Packets public GroupDataBlock() { } public GroupDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -24190,11 +29126,11 @@ namespace libsecondlife.Packets length = (ushort)bytes[i++]; _grouptitle = new byte[length]; Buffer.BlockCopy(bytes, i, _grouptitle, 0, length); i += length; - GroupID = new LLUUID(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _groupname = new byte[length]; Buffer.BlockCopy(bytes, i, _groupname, 0, length); i += length; - GroupInsigniaID = new LLUUID(bytes, i); i += 16; + GroupInsigniaID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -24254,25 +29190,52 @@ namespace libsecondlife.Packets GroupData = new GroupDataBlock[0]; } - public AvatarGroupsReplyPacket(byte[] bytes, ref int i) + public AvatarGroupsReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - GroupData = new GroupDataBlock[count]; - for (int j = 0; j < count; j++) - { GroupData[j] = new GroupDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public AvatarGroupsReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(GroupData.Length < count) { + GroupData = new GroupDataBlock[count]; + for(int j = 0; j < count; j++) GroupData[j] = new GroupDataBlock(); + } + for (int j = 0; j < count; j++) + { GroupData[j].FromBytes(bytes, ref i); } + } + + public AvatarGroupsReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - GroupData = new GroupDataBlock[count]; + if(GroupData.Length < count) { + GroupData = new GroupDataBlock[count]; + for(int j = 0; j < count; j++) GroupData[j] = new GroupDataBlock(); + } for (int j = 0; j < count; j++) - { GroupData[j] = new GroupDataBlock(bytes, ref i); } + { GroupData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -24324,11 +29287,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -24407,12 +29375,17 @@ namespace libsecondlife.Packets public PropertiesDataBlock() { } public PropertiesDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - ImageID = new LLUUID(bytes, i); i += 16; - FLImageID = new LLUUID(bytes, i); i += 16; + ImageID.FromBytes(bytes, i); i += 16; + FLImageID.FromBytes(bytes, i); i += 16; length = (ushort)(bytes[i++] + (bytes[i++] << 8)); _abouttext = new byte[length]; Buffer.BlockCopy(bytes, i, _abouttext, 0, length); i += length; @@ -24481,19 +29454,40 @@ namespace libsecondlife.Packets PropertiesData = new PropertiesDataBlock(); } - public AvatarPropertiesUpdatePacket(byte[] bytes, ref int i) + public AvatarPropertiesUpdatePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - PropertiesData = new PropertiesDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public AvatarPropertiesUpdatePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + PropertiesData.FromBytes(bytes, ref i); + } + + public AvatarPropertiesUpdatePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - PropertiesData = new PropertiesDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + PropertiesData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -24539,11 +29533,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -24620,6 +29619,11 @@ namespace libsecondlife.Packets public PropertiesDataBlock() { } public PropertiesDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -24693,19 +29697,40 @@ namespace libsecondlife.Packets PropertiesData = new PropertiesDataBlock(); } - public AvatarInterestsUpdatePacket(byte[] bytes, ref int i) + public AvatarInterestsUpdatePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - PropertiesData = new PropertiesDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public AvatarInterestsUpdatePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + PropertiesData.FromBytes(bytes, ref i); + } + + public AvatarInterestsUpdatePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - PropertiesData = new PropertiesDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + PropertiesData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -24750,10 +29775,15 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -24803,11 +29833,16 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - TargetID = new LLUUID(bytes, i); i += 16; + TargetID.FromBytes(bytes, i); i += 16; length = (ushort)(bytes[i++] + (bytes[i++] << 8)); _notes = new byte[length]; Buffer.BlockCopy(bytes, i, _notes, 0, length); i += length; @@ -24852,19 +29887,40 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public AvatarNotesReplyPacket(byte[] bytes, ref int i) + public AvatarNotesReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public AvatarNotesReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + } + + public AvatarNotesReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -24910,11 +29966,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -24966,11 +30027,16 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - TargetID = new LLUUID(bytes, i); i += 16; + TargetID.FromBytes(bytes, i); i += 16; length = (ushort)(bytes[i++] + (bytes[i++] << 8)); _notes = new byte[length]; Buffer.BlockCopy(bytes, i, _notes, 0, length); i += length; @@ -25015,19 +30081,40 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public AvatarNotesUpdatePacket(byte[] bytes, ref int i) + public AvatarNotesUpdatePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public AvatarNotesUpdatePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + } + + public AvatarNotesUpdatePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -25073,11 +30160,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - TargetID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + TargetID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -25129,11 +30221,16 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - PickID = new LLUUID(bytes, i); i += 16; + PickID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _pickname = new byte[length]; Buffer.BlockCopy(bytes, i, _pickname, 0, length); i += length; @@ -25177,25 +30274,52 @@ namespace libsecondlife.Packets Data = new DataBlock[0]; } - public AvatarPicksReplyPacket(byte[] bytes, ref int i) + public AvatarPicksReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - Data = new DataBlock[count]; - for (int j = 0; j < count; j++) - { Data[j] = new DataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public AvatarPicksReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(Data.Length < count) { + Data = new DataBlock[count]; + for(int j = 0; j < count; j++) Data[j] = new DataBlock(); + } + for (int j = 0; j < count; j++) + { Data[j].FromBytes(bytes, ref i); } + } + + public AvatarPicksReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - Data = new DataBlock[count]; + if(Data.Length < count) { + Data = new DataBlock[count]; + for(int j = 0; j < count; j++) Data[j] = new DataBlock(); + } for (int j = 0; j < count; j++) - { Data[j] = new DataBlock(bytes, ref i); } + { Data[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -25247,11 +30371,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -25290,6 +30419,11 @@ namespace libsecondlife.Packets public EventDataBlock() { } public EventDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -25333,19 +30467,40 @@ namespace libsecondlife.Packets EventData = new EventDataBlock(); } - public EventInfoRequestPacket(byte[] bytes, ref int i) + public EventInfoRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - EventData = new EventDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public EventInfoRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + EventData.FromBytes(bytes, ref i); + } + + public EventInfoRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - EventData = new EventDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + EventData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -25390,10 +30545,15 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -25509,6 +30669,11 @@ namespace libsecondlife.Packets public EventDataBlock() { } public EventDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -25536,7 +30701,7 @@ namespace libsecondlife.Packets length = (ushort)bytes[i++]; _simname = new byte[length]; Buffer.BlockCopy(bytes, i, _simname, 0, length); i += length; - GlobalPos = new LLVector3d(bytes, i); i += 24; + GlobalPos.FromBytes(bytes, i); i += 24; EventFlags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -25635,19 +30800,40 @@ namespace libsecondlife.Packets EventData = new EventDataBlock(); } - public EventInfoReplyPacket(byte[] bytes, ref int i) + public EventInfoReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - EventData = new EventDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public EventInfoReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + EventData.FromBytes(bytes, ref i); + } + + public EventInfoReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - EventData = new EventDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + EventData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -25693,11 +30879,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -25736,6 +30927,11 @@ namespace libsecondlife.Packets public EventDataBlock() { } public EventDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -25779,19 +30975,40 @@ namespace libsecondlife.Packets EventData = new EventDataBlock(); } - public EventNotificationAddRequestPacket(byte[] bytes, ref int i) + public EventNotificationAddRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - EventData = new EventDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public EventNotificationAddRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + EventData.FromBytes(bytes, ref i); + } + + public EventNotificationAddRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - EventData = new EventDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + EventData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -25837,11 +31054,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -25880,6 +31102,11 @@ namespace libsecondlife.Packets public EventDataBlock() { } public EventDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -25923,19 +31150,40 @@ namespace libsecondlife.Packets EventData = new EventDataBlock(); } - public EventNotificationRemoveRequestPacket(byte[] bytes, ref int i) + public EventNotificationRemoveRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - EventData = new EventDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public EventNotificationRemoveRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + EventData.FromBytes(bytes, ref i); + } + + public EventNotificationRemoveRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - EventData = new EventDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + EventData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -25981,11 +31229,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -26024,6 +31277,11 @@ namespace libsecondlife.Packets public EventDataBlock() { } public EventDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -26082,11 +31340,16 @@ namespace libsecondlife.Packets public QueryDataBlock() { } public QueryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - QueryID = new LLUUID(bytes, i); i += 16; + QueryID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _querytext = new byte[length]; Buffer.BlockCopy(bytes, i, _querytext, 0, length); i += length; @@ -26145,21 +31408,42 @@ namespace libsecondlife.Packets QueryData = new QueryDataBlock(); } - public EventGodDeletePacket(byte[] bytes, ref int i) + public EventGodDeletePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - EventData = new EventDataBlock(bytes, ref i); - QueryData = new QueryDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public EventGodDeletePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + EventData.FromBytes(bytes, ref i); + QueryData.FromBytes(bytes, ref i); + } + + public EventGodDeletePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - EventData = new EventDataBlock(bytes, ref i); - QueryData = new QueryDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + EventData.FromBytes(bytes, ref i); + QueryData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -26206,10 +31490,15 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -26314,21 +31603,26 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - PickID = new LLUUID(bytes, i); i += 16; - CreatorID = new LLUUID(bytes, i); i += 16; + PickID.FromBytes(bytes, i); i += 16; + CreatorID.FromBytes(bytes, i); i += 16; TopPick = (bytes[i++] != 0) ? (bool)true : (bool)false; - ParcelID = new LLUUID(bytes, i); i += 16; + ParcelID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _name = new byte[length]; Buffer.BlockCopy(bytes, i, _name, 0, length); i += length; length = (ushort)(bytes[i++] + (bytes[i++] << 8)); _desc = new byte[length]; Buffer.BlockCopy(bytes, i, _desc, 0, length); i += length; - SnapshotID = new LLUUID(bytes, i); i += 16; + SnapshotID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _user = new byte[length]; Buffer.BlockCopy(bytes, i, _user, 0, length); i += length; @@ -26338,7 +31632,7 @@ namespace libsecondlife.Packets length = (ushort)bytes[i++]; _simname = new byte[length]; Buffer.BlockCopy(bytes, i, _simname, 0, length); i += length; - PosGlobal = new LLVector3d(bytes, i); i += 24; + PosGlobal.FromBytes(bytes, i); i += 24; SortOrder = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); Enabled = (bytes[i++] != 0) ? (bool)true : (bool)false; } @@ -26420,19 +31714,40 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public PickInfoReplyPacket(byte[] bytes, ref int i) + public PickInfoReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public PickInfoReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + } + + public PickInfoReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -26478,11 +31793,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -26553,22 +31873,27 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - PickID = new LLUUID(bytes, i); i += 16; - CreatorID = new LLUUID(bytes, i); i += 16; + PickID.FromBytes(bytes, i); i += 16; + CreatorID.FromBytes(bytes, i); i += 16; TopPick = (bytes[i++] != 0) ? (bool)true : (bool)false; - ParcelID = new LLUUID(bytes, i); i += 16; + ParcelID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _name = new byte[length]; Buffer.BlockCopy(bytes, i, _name, 0, length); i += length; length = (ushort)(bytes[i++] + (bytes[i++] << 8)); _desc = new byte[length]; Buffer.BlockCopy(bytes, i, _desc, 0, length); i += length; - SnapshotID = new LLUUID(bytes, i); i += 16; - PosGlobal = new LLVector3d(bytes, i); i += 24; + SnapshotID.FromBytes(bytes, i); i += 16; + PosGlobal.FromBytes(bytes, i); i += 24; SortOrder = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); Enabled = (bytes[i++] != 0) ? (bool)true : (bool)false; } @@ -26635,19 +31960,40 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public PickInfoUpdatePacket(byte[] bytes, ref int i) + public PickInfoUpdatePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public PickInfoUpdatePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + } + + public PickInfoUpdatePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -26693,11 +32039,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -26736,10 +32087,15 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - PickID = new LLUUID(bytes, i); i += 16; + PickID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -26776,19 +32132,40 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public PickDeletePacket(byte[] bytes, ref int i) + public PickDeletePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public PickDeletePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + } + + public PickDeletePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -26834,11 +32211,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -26878,11 +32260,16 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - PickID = new LLUUID(bytes, i); i += 16; - QueryID = new LLUUID(bytes, i); i += 16; + PickID.FromBytes(bytes, i); i += 16; + QueryID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -26921,19 +32308,40 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public PickGodDeletePacket(byte[] bytes, ref int i) + public PickGodDeletePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public PickGodDeletePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + } + + public PickGodDeletePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -27005,12 +32413,17 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - TaskID = new LLUUID(bytes, i); i += 16; - ItemID = new LLUUID(bytes, i); i += 16; + TaskID.FromBytes(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _objectname = new byte[length]; Buffer.BlockCopy(bytes, i, _objectname, 0, length); i += length; @@ -27069,17 +32482,38 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public ScriptQuestionPacket(byte[] bytes, ref int i) + public ScriptQuestionPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ScriptQuestionPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Data.FromBytes(bytes, ref i); + } + + public ScriptQuestionPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -27124,6 +32558,11 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -27171,23 +32610,50 @@ namespace libsecondlife.Packets Data = new DataBlock[0]; } - public ScriptControlChangePacket(byte[] bytes, ref int i) + public ScriptControlChangePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - int count = (int)bytes[i++]; - Data = new DataBlock[count]; - for (int j = 0; j < count; j++) - { Data[j] = new DataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ScriptControlChangePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + int count = (int)bytes[i++]; + if(Data.Length < count) { + Data = new DataBlock[count]; + for(int j = 0; j < count; j++) Data[j] = new DataBlock(); + } + for (int j = 0; j < count; j++) + { Data[j].FromBytes(bytes, ref i); } + } + + public ScriptControlChangePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } int count = (int)bytes[i++]; - Data = new DataBlock[count]; + if(Data.Length < count) { + Data = new DataBlock[count]; + for(int j = 0; j < count; j++) Data[j] = new DataBlock(); + } for (int j = 0; j < count; j++) - { Data[j] = new DataBlock(bytes, ref i); } + { Data[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -27287,11 +32753,16 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - ObjectID = new LLUUID(bytes, i); i += 16; + ObjectID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _firstname = new byte[length]; Buffer.BlockCopy(bytes, i, _firstname, 0, length); i += length; @@ -27305,7 +32776,7 @@ namespace libsecondlife.Packets _message = new byte[length]; Buffer.BlockCopy(bytes, i, _message, 0, length); i += length; ChatChannel = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - ImageID = new LLUUID(bytes, i); i += 16; + ImageID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -27382,6 +32853,11 @@ namespace libsecondlife.Packets public ButtonsBlock() { } public ButtonsBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -27427,25 +32903,52 @@ namespace libsecondlife.Packets Buttons = new ButtonsBlock[0]; } - public ScriptDialogPacket(byte[] bytes, ref int i) + public ScriptDialogPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - Data = new DataBlock(bytes, ref i); - int count = (int)bytes[i++]; - Buttons = new ButtonsBlock[count]; - for (int j = 0; j < count; j++) - { Buttons[j] = new ButtonsBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ScriptDialogPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Data.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(Buttons.Length < count) { + Buttons = new ButtonsBlock[count]; + for(int j = 0; j < count; j++) Buttons[j] = new ButtonsBlock(); + } + for (int j = 0; j < count; j++) + { Buttons[j].FromBytes(bytes, ref i); } + } + + public ScriptDialogPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Data.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - Buttons = new ButtonsBlock[count]; + if(Buttons.Length < count) { + Buttons = new ButtonsBlock[count]; + for(int j = 0; j < count; j++) Buttons[j] = new ButtonsBlock(); + } for (int j = 0; j < count; j++) - { Buttons[j] = new ButtonsBlock(bytes, ref i); } + { Buttons[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -27497,11 +33000,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -27555,11 +33063,16 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - ObjectID = new LLUUID(bytes, i); i += 16; + ObjectID.FromBytes(bytes, i); i += 16; ChatChannel = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); ButtonIndex = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); length = (ushort)bytes[i++]; @@ -27615,19 +33128,40 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public ScriptDialogReplyPacket(byte[] bytes, ref int i) + public ScriptDialogReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ScriptDialogReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + } + + public ScriptDialogReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -27673,11 +33207,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -27714,17 +33253,38 @@ namespace libsecondlife.Packets AgentData = new AgentDataBlock(); } - public ForceScriptControlReleasePacket(byte[] bytes, ref int i) + public ForceScriptControlReleasePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ForceScriptControlReleasePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + } + + public ForceScriptControlReleasePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -27768,11 +33328,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -27812,10 +33377,15 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ObjectID = new LLUUID(bytes, i); i += 16; + ObjectID.FromBytes(bytes, i); i += 16; ObjectPermissions = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -27858,19 +33428,40 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public RevokePermissionsPacket(byte[] bytes, ref int i) + public RevokePermissionsPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public RevokePermissionsPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + } + + public RevokePermissionsPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -27954,6 +33545,11 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -27961,8 +33557,8 @@ namespace libsecondlife.Packets length = (ushort)bytes[i++]; _objectname = new byte[length]; Buffer.BlockCopy(bytes, i, _objectname, 0, length); i += length; - ObjectID = new LLUUID(bytes, i); i += 16; - OwnerID = new LLUUID(bytes, i); i += 16; + ObjectID.FromBytes(bytes, i); i += 16; + OwnerID.FromBytes(bytes, i); i += 16; OwnerIsGroup = (bytes[i++] != 0) ? (bool)true : (bool)false; length = (ushort)bytes[i++]; _message = new byte[length]; @@ -28022,17 +33618,38 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public LoadURLPacket(byte[] bytes, ref int i) + public LoadURLPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public LoadURLPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Data.FromBytes(bytes, ref i); + } + + public LoadURLPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -28101,6 +33718,11 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -28111,8 +33733,8 @@ namespace libsecondlife.Packets length = (ushort)bytes[i++]; _simname = new byte[length]; Buffer.BlockCopy(bytes, i, _simname, 0, length); i += length; - SimPosition = new LLVector3(bytes, i); i += 12; - LookAt = new LLVector3(bytes, i); i += 12; + SimPosition.FromBytes(bytes, i); i += 12; + LookAt.FromBytes(bytes, i); i += 12; } catch (Exception) { @@ -28159,17 +33781,38 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public ScriptTeleportRequestPacket(byte[] bytes, ref int i) + public ScriptTeleportRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ScriptTeleportRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Data.FromBytes(bytes, ref i); + } + + public ScriptTeleportRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -28225,6 +33868,11 @@ namespace libsecondlife.Packets public ParcelDataBlock() { } public ParcelDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -28275,17 +33923,38 @@ namespace libsecondlife.Packets ParcelData = new ParcelDataBlock(); } - public ParcelOverlayPacket(byte[] bytes, ref int i) + public ParcelOverlayPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - ParcelData = new ParcelDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ParcelOverlayPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + ParcelData.FromBytes(bytes, ref i); + } + + public ParcelOverlayPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - ParcelData = new ParcelDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + ParcelData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -28329,11 +33998,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -28373,6 +34047,11 @@ namespace libsecondlife.Packets public ParcelDataBlock() { } public ParcelDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -28422,19 +34101,40 @@ namespace libsecondlife.Packets ParcelData = new ParcelDataBlock(); } - public ParcelPropertiesRequestByIDPacket(byte[] bytes, ref int i) + public ParcelPropertiesRequestByIDPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - ParcelData = new ParcelDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ParcelPropertiesRequestByIDPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ParcelData.FromBytes(bytes, ref i); + } + + public ParcelPropertiesRequestByIDPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - ParcelData = new ParcelDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ParcelData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -28480,11 +34180,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -28586,6 +34291,11 @@ namespace libsecondlife.Packets public ParcelDataBlock() { } public ParcelDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -28606,17 +34316,17 @@ namespace libsecondlife.Packets length = (ushort)bytes[i++]; _mediaurl = new byte[length]; Buffer.BlockCopy(bytes, i, _mediaurl, 0, length); i += length; - MediaID = new LLUUID(bytes, i); i += 16; + MediaID.FromBytes(bytes, i); i += 16; MediaAutoScale = (byte)bytes[i++]; - GroupID = new LLUUID(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; PassPrice = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); if (!BitConverter.IsLittleEndian) Array.Reverse(bytes, i, 4); PassHours = BitConverter.ToSingle(bytes, i); i += 4; Category = (byte)bytes[i++]; - AuthBuyerID = new LLUUID(bytes, i); i += 16; - SnapshotID = new LLUUID(bytes, i); i += 16; - UserLocation = new LLVector3(bytes, i); i += 12; - UserLookAt = new LLVector3(bytes, i); i += 12; + AuthBuyerID.FromBytes(bytes, i); i += 16; + SnapshotID.FromBytes(bytes, i); i += 16; + UserLocation.FromBytes(bytes, i); i += 12; + UserLookAt.FromBytes(bytes, i); i += 12; LandingType = (byte)bytes[i++]; } catch (Exception) @@ -28720,19 +34430,40 @@ namespace libsecondlife.Packets ParcelData = new ParcelDataBlock(); } - public ParcelPropertiesUpdatePacket(byte[] bytes, ref int i) + public ParcelPropertiesUpdatePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - ParcelData = new ParcelDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ParcelPropertiesUpdatePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ParcelData.FromBytes(bytes, ref i); + } + + public ParcelPropertiesUpdatePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - ParcelData = new ParcelDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ParcelData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -28778,11 +34509,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -28822,6 +34558,11 @@ namespace libsecondlife.Packets public ParcelDataBlock() { } public ParcelDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -28871,10 +34612,15 @@ namespace libsecondlife.Packets public TaskIDsBlock() { } public TaskIDsBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - TaskID = new LLUUID(bytes, i); i += 16; + TaskID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -28911,10 +34657,15 @@ namespace libsecondlife.Packets public OwnerIDsBlock() { } public OwnerIDsBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - OwnerID = new LLUUID(bytes, i); i += 16; + OwnerID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -28955,35 +34706,68 @@ namespace libsecondlife.Packets OwnerIDs = new OwnerIDsBlock[0]; } - public ParcelReturnObjectsPacket(byte[] bytes, ref int i) + public ParcelReturnObjectsPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - ParcelData = new ParcelDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - TaskIDs = new TaskIDsBlock[count]; - for (int j = 0; j < count; j++) - { TaskIDs[j] = new TaskIDsBlock(bytes, ref i); } - count = (int)bytes[i++]; - OwnerIDs = new OwnerIDsBlock[count]; - for (int j = 0; j < count; j++) - { OwnerIDs[j] = new OwnerIDsBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ParcelReturnObjectsPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ParcelData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(TaskIDs.Length < count) { + TaskIDs = new TaskIDsBlock[count]; + for(int j = 0; j < count; j++) TaskIDs[j] = new TaskIDsBlock(); + } + for (int j = 0; j < count; j++) + { TaskIDs[j].FromBytes(bytes, ref i); } + count = (int)bytes[i++]; + if(OwnerIDs.Length < count) { + OwnerIDs = new OwnerIDsBlock[count]; + for(int j = 0; j < count; j++) OwnerIDs[j] = new OwnerIDsBlock(); + } + for (int j = 0; j < count; j++) + { OwnerIDs[j].FromBytes(bytes, ref i); } + } + + public ParcelReturnObjectsPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - ParcelData = new ParcelDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ParcelData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - TaskIDs = new TaskIDsBlock[count]; + if(TaskIDs.Length < count) { + TaskIDs = new TaskIDsBlock[count]; + for(int j = 0; j < count; j++) TaskIDs[j] = new TaskIDsBlock(); + } for (int j = 0; j < count; j++) - { TaskIDs[j] = new TaskIDsBlock(bytes, ref i); } + { TaskIDs[j].FromBytes(bytes, ref i); } count = (int)bytes[i++]; - OwnerIDs = new OwnerIDsBlock[count]; + if(OwnerIDs.Length < count) { + OwnerIDs = new OwnerIDsBlock[count]; + for(int j = 0; j < count; j++) OwnerIDs[j] = new OwnerIDsBlock(); + } for (int j = 0; j < count; j++) - { OwnerIDs[j] = new OwnerIDsBlock(bytes, ref i); } + { OwnerIDs[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -29045,11 +34829,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -29089,6 +34878,11 @@ namespace libsecondlife.Packets public ParcelDataBlock() { } public ParcelDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -29138,19 +34932,40 @@ namespace libsecondlife.Packets ParcelData = new ParcelDataBlock(); } - public ParcelSetOtherCleanTimePacket(byte[] bytes, ref int i) + public ParcelSetOtherCleanTimePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - ParcelData = new ParcelDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ParcelSetOtherCleanTimePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ParcelData.FromBytes(bytes, ref i); + } + + public ParcelSetOtherCleanTimePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - ParcelData = new ParcelDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ParcelData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -29196,11 +35011,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -29240,6 +35060,11 @@ namespace libsecondlife.Packets public ParcelDataBlock() { } public ParcelDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -29289,10 +35114,15 @@ namespace libsecondlife.Packets public TaskIDsBlock() { } public TaskIDsBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - TaskID = new LLUUID(bytes, i); i += 16; + TaskID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -29329,10 +35159,15 @@ namespace libsecondlife.Packets public OwnerIDsBlock() { } public OwnerIDsBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - OwnerID = new LLUUID(bytes, i); i += 16; + OwnerID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -29373,35 +35208,68 @@ namespace libsecondlife.Packets OwnerIDs = new OwnerIDsBlock[0]; } - public ParcelDisableObjectsPacket(byte[] bytes, ref int i) + public ParcelDisableObjectsPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - ParcelData = new ParcelDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - TaskIDs = new TaskIDsBlock[count]; - for (int j = 0; j < count; j++) - { TaskIDs[j] = new TaskIDsBlock(bytes, ref i); } - count = (int)bytes[i++]; - OwnerIDs = new OwnerIDsBlock[count]; - for (int j = 0; j < count; j++) - { OwnerIDs[j] = new OwnerIDsBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ParcelDisableObjectsPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ParcelData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(TaskIDs.Length < count) { + TaskIDs = new TaskIDsBlock[count]; + for(int j = 0; j < count; j++) TaskIDs[j] = new TaskIDsBlock(); + } + for (int j = 0; j < count; j++) + { TaskIDs[j].FromBytes(bytes, ref i); } + count = (int)bytes[i++]; + if(OwnerIDs.Length < count) { + OwnerIDs = new OwnerIDsBlock[count]; + for(int j = 0; j < count; j++) OwnerIDs[j] = new OwnerIDsBlock(); + } + for (int j = 0; j < count; j++) + { OwnerIDs[j].FromBytes(bytes, ref i); } + } + + public ParcelDisableObjectsPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - ParcelData = new ParcelDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ParcelData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - TaskIDs = new TaskIDsBlock[count]; + if(TaskIDs.Length < count) { + TaskIDs = new TaskIDsBlock[count]; + for(int j = 0; j < count; j++) TaskIDs[j] = new TaskIDsBlock(); + } for (int j = 0; j < count; j++) - { TaskIDs[j] = new TaskIDsBlock(bytes, ref i); } + { TaskIDs[j].FromBytes(bytes, ref i); } count = (int)bytes[i++]; - OwnerIDs = new OwnerIDsBlock[count]; + if(OwnerIDs.Length < count) { + OwnerIDs = new OwnerIDsBlock[count]; + for(int j = 0; j < count; j++) OwnerIDs[j] = new OwnerIDsBlock(); + } for (int j = 0; j < count; j++) - { OwnerIDs[j] = new OwnerIDsBlock(bytes, ref i); } + { OwnerIDs[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -29463,11 +35331,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -29507,6 +35380,11 @@ namespace libsecondlife.Packets public ParcelDataBlock() { } public ParcelDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -29556,10 +35434,15 @@ namespace libsecondlife.Packets public ReturnIDsBlock() { } public ReturnIDsBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ReturnID = new LLUUID(bytes, i); i += 16; + ReturnID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -29598,27 +35481,54 @@ namespace libsecondlife.Packets ReturnIDs = new ReturnIDsBlock[0]; } - public ParcelSelectObjectsPacket(byte[] bytes, ref int i) + public ParcelSelectObjectsPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - ParcelData = new ParcelDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ReturnIDs = new ReturnIDsBlock[count]; - for (int j = 0; j < count; j++) - { ReturnIDs[j] = new ReturnIDsBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ParcelSelectObjectsPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ParcelData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ReturnIDs.Length < count) { + ReturnIDs = new ReturnIDsBlock[count]; + for(int j = 0; j < count; j++) ReturnIDs[j] = new ReturnIDsBlock(); + } + for (int j = 0; j < count; j++) + { ReturnIDs[j].FromBytes(bytes, ref i); } + } + + public ParcelSelectObjectsPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - ParcelData = new ParcelDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ParcelData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ReturnIDs = new ReturnIDsBlock[count]; + if(ReturnIDs.Length < count) { + ReturnIDs = new ReturnIDsBlock[count]; + for(int j = 0; j < count; j++) ReturnIDs[j] = new ReturnIDsBlock(); + } for (int j = 0; j < count; j++) - { ReturnIDs[j] = new ReturnIDsBlock(bytes, ref i); } + { ReturnIDs[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -29672,11 +35582,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -29713,17 +35628,38 @@ namespace libsecondlife.Packets AgentData = new AgentDataBlock(); } - public EstateCovenantRequestPacket(byte[] bytes, ref int i) + public EstateCovenantRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public EstateCovenantRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + } + + public EstateCovenantRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -29781,16 +35717,21 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - CovenantID = new LLUUID(bytes, i); i += 16; + CovenantID.FromBytes(bytes, i); i += 16; CovenantTimestamp = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); length = (ushort)bytes[i++]; _estatename = new byte[length]; Buffer.BlockCopy(bytes, i, _estatename, 0, length); i += length; - EstateOwnerID = new LLUUID(bytes, i); i += 16; + EstateOwnerID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -29837,17 +35778,38 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public EstateCovenantReplyPacket(byte[] bytes, ref int i) + public EstateCovenantReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public EstateCovenantReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Data.FromBytes(bytes, ref i); + } + + public EstateCovenantReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -29890,6 +35852,11 @@ namespace libsecondlife.Packets public HeaderBlock() { } public HeaderBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -29930,6 +35897,11 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -29973,25 +35945,52 @@ namespace libsecondlife.Packets Data = new DataBlock[0]; } - public ForceObjectSelectPacket(byte[] bytes, ref int i) + public ForceObjectSelectPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - _Header = new HeaderBlock(bytes, ref i); - int count = (int)bytes[i++]; - Data = new DataBlock[count]; - for (int j = 0; j < count; j++) - { Data[j] = new DataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ForceObjectSelectPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + _Header.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(Data.Length < count) { + Data = new DataBlock[count]; + for(int j = 0; j < count; j++) Data[j] = new DataBlock(); + } + for (int j = 0; j < count; j++) + { Data[j].FromBytes(bytes, ref i); } + } + + public ForceObjectSelectPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - _Header = new HeaderBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + _Header.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - Data = new DataBlock[count]; + if(Data.Length < count) { + Data = new DataBlock[count]; + for(int j = 0; j < count; j++) Data[j] = new DataBlock(); + } for (int j = 0; j < count; j++) - { Data[j] = new DataBlock(bytes, ref i); } + { Data[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -30043,11 +36042,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -30086,6 +36090,11 @@ namespace libsecondlife.Packets public ParcelDataBlock() { } public ParcelDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -30129,19 +36138,40 @@ namespace libsecondlife.Packets ParcelData = new ParcelDataBlock(); } - public ParcelBuyPassPacket(byte[] bytes, ref int i) + public ParcelBuyPassPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - ParcelData = new ParcelDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ParcelBuyPassPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ParcelData.FromBytes(bytes, ref i); + } + + public ParcelBuyPassPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - ParcelData = new ParcelDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ParcelData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -30187,11 +36217,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -30231,10 +36266,15 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - GroupID = new LLUUID(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; LocalID = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -30277,19 +36317,40 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public ParcelDeedToGroupPacket(byte[] bytes, ref int i) + public ParcelDeedToGroupPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ParcelDeedToGroupPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + } + + public ParcelDeedToGroupPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -30335,11 +36396,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -30378,6 +36444,11 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -30421,19 +36492,40 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public ParcelReclaimPacket(byte[] bytes, ref int i) + public ParcelReclaimPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ParcelReclaimPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + } + + public ParcelReclaimPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -30479,11 +36571,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -30524,10 +36621,15 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - GroupID = new LLUUID(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; IsGroupOwned = (bytes[i++] != 0) ? (bool)true : (bool)false; Final = (bytes[i++] != 0) ? (bool)true : (bool)false; } @@ -30573,6 +36675,11 @@ namespace libsecondlife.Packets public ParcelDataBlock() { } public ParcelDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -30637,27 +36744,54 @@ namespace libsecondlife.Packets ParcelData = new ParcelDataBlock[0]; } - public ParcelClaimPacket(byte[] bytes, ref int i) + public ParcelClaimPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ParcelData = new ParcelDataBlock[count]; - for (int j = 0; j < count; j++) - { ParcelData[j] = new ParcelDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ParcelClaimPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ParcelData.Length < count) { + ParcelData = new ParcelDataBlock[count]; + for(int j = 0; j < count; j++) ParcelData[j] = new ParcelDataBlock(); + } + for (int j = 0; j < count; j++) + { ParcelData[j].FromBytes(bytes, ref i); } + } + + public ParcelClaimPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ParcelData = new ParcelDataBlock[count]; + if(ParcelData.Length < count) { + ParcelData = new ParcelDataBlock[count]; + for(int j = 0; j < count; j++) ParcelData[j] = new ParcelDataBlock(); + } for (int j = 0; j < count; j++) - { ParcelData[j] = new ParcelDataBlock(bytes, ref i); } + { ParcelData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -30711,11 +36845,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -30757,6 +36896,11 @@ namespace libsecondlife.Packets public ParcelDataBlock() { } public ParcelDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -30819,19 +36963,40 @@ namespace libsecondlife.Packets ParcelData = new ParcelDataBlock(); } - public ParcelJoinPacket(byte[] bytes, ref int i) + public ParcelJoinPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - ParcelData = new ParcelDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ParcelJoinPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ParcelData.FromBytes(bytes, ref i); + } + + public ParcelJoinPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - ParcelData = new ParcelDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ParcelData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -30877,11 +37042,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -30923,6 +37093,11 @@ namespace libsecondlife.Packets public ParcelDataBlock() { } public ParcelDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -30985,19 +37160,40 @@ namespace libsecondlife.Packets ParcelData = new ParcelDataBlock(); } - public ParcelDividePacket(byte[] bytes, ref int i) + public ParcelDividePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - ParcelData = new ParcelDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ParcelDividePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ParcelData.FromBytes(bytes, ref i); + } + + public ParcelDividePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - ParcelData = new ParcelDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ParcelData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -31043,11 +37239,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -31086,6 +37287,11 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -31129,19 +37335,40 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public ParcelReleasePacket(byte[] bytes, ref int i) + public ParcelReleasePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ParcelReleasePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + } + + public ParcelReleasePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -31187,11 +37414,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -31234,10 +37466,15 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - GroupID = new LLUUID(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; IsGroupOwned = (bytes[i++] != 0) ? (bool)true : (bool)false; RemoveContribution = (bytes[i++] != 0) ? (bool)true : (bool)false; LocalID = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); @@ -31290,6 +37527,11 @@ namespace libsecondlife.Packets public ParcelDataBlock() { } public ParcelDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -31341,21 +37583,42 @@ namespace libsecondlife.Packets ParcelData = new ParcelDataBlock(); } - public ParcelBuyPacket(byte[] bytes, ref int i) + public ParcelBuyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); - ParcelData = new ParcelDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ParcelBuyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + ParcelData.FromBytes(bytes, ref i); + } + + public ParcelBuyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); - ParcelData = new ParcelDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + ParcelData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -31403,11 +37666,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -31447,10 +37715,15 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - OwnerID = new LLUUID(bytes, i); i += 16; + OwnerID.FromBytes(bytes, i); i += 16; LocalID = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -31493,19 +37766,40 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public ParcelGodForceOwnerPacket(byte[] bytes, ref int i) + public ParcelGodForceOwnerPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ParcelGodForceOwnerPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + } + + public ParcelGodForceOwnerPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -31551,11 +37845,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -31596,6 +37895,11 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -31651,19 +37955,40 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public ParcelAccessListRequestPacket(byte[] bytes, ref int i) + public ParcelAccessListRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ParcelAccessListRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + } + + public ParcelAccessListRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -31711,10 +38036,15 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; SequenceID = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); Flags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); LocalID = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); @@ -31771,10 +38101,15 @@ namespace libsecondlife.Packets public ListBlock() { } public ListBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ID = new LLUUID(bytes, i); i += 16; + ID.FromBytes(bytes, i); i += 16; Time = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); Flags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } @@ -31823,25 +38158,52 @@ namespace libsecondlife.Packets List = new ListBlock[0]; } - public ParcelAccessListReplyPacket(byte[] bytes, ref int i) + public ParcelAccessListReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - Data = new DataBlock(bytes, ref i); - int count = (int)bytes[i++]; - List = new ListBlock[count]; - for (int j = 0; j < count; j++) - { List[j] = new ListBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ParcelAccessListReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Data.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(List.Length < count) { + List = new ListBlock[count]; + for(int j = 0; j < count; j++) List[j] = new ListBlock(); + } + for (int j = 0; j < count; j++) + { List[j].FromBytes(bytes, ref i); } + } + + public ParcelAccessListReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Data.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - List = new ListBlock[count]; + if(List.Length < count) { + List = new ListBlock[count]; + for(int j = 0; j < count; j++) List[j] = new ListBlock(); + } for (int j = 0; j < count; j++) - { List[j] = new ListBlock(bytes, ref i); } + { List[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -31893,11 +38255,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -31940,12 +38307,17 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { Flags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); LocalID = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - TransactionID = new LLUUID(bytes, i); i += 16; + TransactionID.FromBytes(bytes, i); i += 16; SequenceID = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); Sections = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } @@ -32006,10 +38378,15 @@ namespace libsecondlife.Packets public ListBlock() { } public ListBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ID = new LLUUID(bytes, i); i += 16; + ID.FromBytes(bytes, i); i += 16; Time = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); Flags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } @@ -32060,27 +38437,54 @@ namespace libsecondlife.Packets List = new ListBlock[0]; } - public ParcelAccessListUpdatePacket(byte[] bytes, ref int i) + public ParcelAccessListUpdatePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); - int count = (int)bytes[i++]; - List = new ListBlock[count]; - for (int j = 0; j < count; j++) - { List[j] = new ListBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ParcelAccessListUpdatePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(List.Length < count) { + List = new ListBlock[count]; + for(int j = 0; j < count; j++) List[j] = new ListBlock(); + } + for (int j = 0; j < count; j++) + { List[j].FromBytes(bytes, ref i); } + } + + public ParcelAccessListUpdatePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - List = new ListBlock[count]; + if(List.Length < count) { + List = new ListBlock[count]; + for(int j = 0; j < count; j++) List[j] = new ListBlock(); + } for (int j = 0; j < count; j++) - { List[j] = new ListBlock(bytes, ref i); } + { List[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -32134,11 +38538,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -32178,11 +38587,16 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { LocalID = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - ParcelID = new LLUUID(bytes, i); i += 16; + ParcelID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -32224,19 +38638,40 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public ParcelDwellRequestPacket(byte[] bytes, ref int i) + public ParcelDwellRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ParcelDwellRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + } + + public ParcelDwellRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -32281,10 +38716,15 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -32323,11 +38763,16 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { LocalID = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - ParcelID = new LLUUID(bytes, i); i += 16; + ParcelID.FromBytes(bytes, i); i += 16; if (!BitConverter.IsLittleEndian) Array.Reverse(bytes, i, 4); Dwell = BitConverter.ToSingle(bytes, i); i += 4; } @@ -32376,19 +38821,40 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public ParcelDwellReplyPacket(byte[] bytes, ref int i) + public ParcelDwellReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ParcelDwellReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + } + + public ParcelDwellReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -32434,11 +38900,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -32477,6 +38948,11 @@ namespace libsecondlife.Packets public ParcelDataBlock() { } public ParcelDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -32520,19 +38996,40 @@ namespace libsecondlife.Packets ParcelData = new ParcelDataBlock(); } - public ParcelGodMarkAsContentPacket(byte[] bytes, ref int i) + public ParcelGodMarkAsContentPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - ParcelData = new ParcelDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ParcelGodMarkAsContentPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ParcelData.FromBytes(bytes, ref i); + } + + public ParcelGodMarkAsContentPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - ParcelData = new ParcelDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ParcelData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -32578,11 +39075,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -32622,11 +39124,16 @@ namespace libsecondlife.Packets public ParcelDataBlock() { } public ParcelDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { LocalID = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - SnapshotID = new LLUUID(bytes, i); i += 16; + SnapshotID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -32668,19 +39175,40 @@ namespace libsecondlife.Packets ParcelData = new ParcelDataBlock(); } - public ViewerStartAuctionPacket(byte[] bytes, ref int i) + public ViewerStartAuctionPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - ParcelData = new ParcelDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ViewerStartAuctionPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ParcelData.FromBytes(bytes, ref i); + } + + public ViewerStartAuctionPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - ParcelData = new ParcelDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ParcelData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -32725,10 +39253,15 @@ namespace libsecondlife.Packets public UUIDNameBlockBlock() { } public UUIDNameBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ID = new LLUUID(bytes, i); i += 16; + ID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -32763,23 +39296,50 @@ namespace libsecondlife.Packets UUIDNameBlock = new UUIDNameBlockBlock[0]; } - public UUIDNameRequestPacket(byte[] bytes, ref int i) + public UUIDNameRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - int count = (int)bytes[i++]; - UUIDNameBlock = new UUIDNameBlockBlock[count]; - for (int j = 0; j < count; j++) - { UUIDNameBlock[j] = new UUIDNameBlockBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public UUIDNameRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + int count = (int)bytes[i++]; + if(UUIDNameBlock.Length < count) { + UUIDNameBlock = new UUIDNameBlockBlock[count]; + for(int j = 0; j < count; j++) UUIDNameBlock[j] = new UUIDNameBlockBlock(); + } + for (int j = 0; j < count; j++) + { UUIDNameBlock[j].FromBytes(bytes, ref i); } + } + + public UUIDNameRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } int count = (int)bytes[i++]; - UUIDNameBlock = new UUIDNameBlockBlock[count]; + if(UUIDNameBlock.Length < count) { + UUIDNameBlock = new UUIDNameBlockBlock[count]; + for(int j = 0; j < count; j++) UUIDNameBlock[j] = new UUIDNameBlockBlock(); + } for (int j = 0; j < count; j++) - { UUIDNameBlock[j] = new UUIDNameBlockBlock(bytes, ref i); } + { UUIDNameBlock[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -32853,11 +39413,16 @@ namespace libsecondlife.Packets public UUIDNameBlockBlock() { } public UUIDNameBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - ID = new LLUUID(bytes, i); i += 16; + ID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _firstname = new byte[length]; Buffer.BlockCopy(bytes, i, _firstname, 0, length); i += length; @@ -32907,23 +39472,50 @@ namespace libsecondlife.Packets UUIDNameBlock = new UUIDNameBlockBlock[0]; } - public UUIDNameReplyPacket(byte[] bytes, ref int i) + public UUIDNameReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - int count = (int)bytes[i++]; - UUIDNameBlock = new UUIDNameBlockBlock[count]; - for (int j = 0; j < count; j++) - { UUIDNameBlock[j] = new UUIDNameBlockBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public UUIDNameReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + int count = (int)bytes[i++]; + if(UUIDNameBlock.Length < count) { + UUIDNameBlock = new UUIDNameBlockBlock[count]; + for(int j = 0; j < count; j++) UUIDNameBlock[j] = new UUIDNameBlockBlock(); + } + for (int j = 0; j < count; j++) + { UUIDNameBlock[j].FromBytes(bytes, ref i); } + } + + public UUIDNameReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } int count = (int)bytes[i++]; - UUIDNameBlock = new UUIDNameBlockBlock[count]; + if(UUIDNameBlock.Length < count) { + UUIDNameBlock = new UUIDNameBlockBlock[count]; + for(int j = 0; j < count; j++) UUIDNameBlock[j] = new UUIDNameBlockBlock(); + } for (int j = 0; j < count; j++) - { UUIDNameBlock[j] = new UUIDNameBlockBlock(bytes, ref i); } + { UUIDNameBlock[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -32972,10 +39564,15 @@ namespace libsecondlife.Packets public UUIDNameBlockBlock() { } public UUIDNameBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ID = new LLUUID(bytes, i); i += 16; + ID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -33010,23 +39607,50 @@ namespace libsecondlife.Packets UUIDNameBlock = new UUIDNameBlockBlock[0]; } - public UUIDGroupNameRequestPacket(byte[] bytes, ref int i) + public UUIDGroupNameRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - int count = (int)bytes[i++]; - UUIDNameBlock = new UUIDNameBlockBlock[count]; - for (int j = 0; j < count; j++) - { UUIDNameBlock[j] = new UUIDNameBlockBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public UUIDGroupNameRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + int count = (int)bytes[i++]; + if(UUIDNameBlock.Length < count) { + UUIDNameBlock = new UUIDNameBlockBlock[count]; + for(int j = 0; j < count; j++) UUIDNameBlock[j] = new UUIDNameBlockBlock(); + } + for (int j = 0; j < count; j++) + { UUIDNameBlock[j].FromBytes(bytes, ref i); } + } + + public UUIDGroupNameRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } int count = (int)bytes[i++]; - UUIDNameBlock = new UUIDNameBlockBlock[count]; + if(UUIDNameBlock.Length < count) { + UUIDNameBlock = new UUIDNameBlockBlock[count]; + for(int j = 0; j < count; j++) UUIDNameBlock[j] = new UUIDNameBlockBlock(); + } for (int j = 0; j < count; j++) - { UUIDNameBlock[j] = new UUIDNameBlockBlock(bytes, ref i); } + { UUIDNameBlock[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -33088,11 +39712,16 @@ namespace libsecondlife.Packets public UUIDNameBlockBlock() { } public UUIDNameBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - ID = new LLUUID(bytes, i); i += 16; + ID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _groupname = new byte[length]; Buffer.BlockCopy(bytes, i, _groupname, 0, length); i += length; @@ -33134,23 +39763,50 @@ namespace libsecondlife.Packets UUIDNameBlock = new UUIDNameBlockBlock[0]; } - public UUIDGroupNameReplyPacket(byte[] bytes, ref int i) + public UUIDGroupNameReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - int count = (int)bytes[i++]; - UUIDNameBlock = new UUIDNameBlockBlock[count]; - for (int j = 0; j < count; j++) - { UUIDNameBlock[j] = new UUIDNameBlockBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public UUIDGroupNameReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + int count = (int)bytes[i++]; + if(UUIDNameBlock.Length < count) { + UUIDNameBlock = new UUIDNameBlockBlock[count]; + for(int j = 0; j < count; j++) UUIDNameBlock[j] = new UUIDNameBlockBlock(); + } + for (int j = 0; j < count; j++) + { UUIDNameBlock[j].FromBytes(bytes, ref i); } + } + + public UUIDGroupNameReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } int count = (int)bytes[i++]; - UUIDNameBlock = new UUIDNameBlockBlock[count]; + if(UUIDNameBlock.Length < count) { + UUIDNameBlock = new UUIDNameBlockBlock[count]; + for(int j = 0; j < count; j++) UUIDNameBlock[j] = new UUIDNameBlockBlock(); + } for (int j = 0; j < count; j++) - { UUIDNameBlock[j] = new UUIDNameBlockBlock(bytes, ref i); } + { UUIDNameBlock[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -33200,11 +39856,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -33241,17 +39902,38 @@ namespace libsecondlife.Packets AgentData = new AgentDataBlock(); } - public ChildAgentDyingPacket(byte[] bytes, ref int i) + public ChildAgentDyingPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ChildAgentDyingPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + } + + public ChildAgentDyingPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -33295,11 +39977,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -33336,17 +40023,38 @@ namespace libsecondlife.Packets AgentData = new AgentDataBlock(); } - public ChildAgentUnknownPacket(byte[] bytes, ref int i) + public ChildAgentUnknownPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ChildAgentUnknownPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + } + + public ChildAgentUnknownPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -33390,11 +40098,16 @@ namespace libsecondlife.Packets public ScriptBlock() { } public ScriptBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ObjectID = new LLUUID(bytes, i); i += 16; - ItemID = new LLUUID(bytes, i); i += 16; + ObjectID.FromBytes(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -33431,17 +40144,38 @@ namespace libsecondlife.Packets Script = new ScriptBlock(); } - public GetScriptRunningPacket(byte[] bytes, ref int i) + public GetScriptRunningPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - Script = new ScriptBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public GetScriptRunningPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Script.FromBytes(bytes, ref i); + } + + public GetScriptRunningPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - Script = new ScriptBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Script.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -33486,11 +40220,16 @@ namespace libsecondlife.Packets public ScriptBlock() { } public ScriptBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ObjectID = new LLUUID(bytes, i); i += 16; - ItemID = new LLUUID(bytes, i); i += 16; + ObjectID.FromBytes(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; Running = (bytes[i++] != 0) ? (bool)true : (bool)false; } catch (Exception) @@ -33530,17 +40269,38 @@ namespace libsecondlife.Packets Script = new ScriptBlock(); } - public ScriptRunningReplyPacket(byte[] bytes, ref int i) + public ScriptRunningReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - Script = new ScriptBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ScriptRunningReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Script.FromBytes(bytes, ref i); + } + + public ScriptRunningReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - Script = new ScriptBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Script.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -33584,11 +40344,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -33629,11 +40394,16 @@ namespace libsecondlife.Packets public ScriptBlock() { } public ScriptBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ObjectID = new LLUUID(bytes, i); i += 16; - ItemID = new LLUUID(bytes, i); i += 16; + ObjectID.FromBytes(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; Running = (bytes[i++] != 0) ? (bool)true : (bool)false; } catch (Exception) @@ -33675,19 +40445,40 @@ namespace libsecondlife.Packets Script = new ScriptBlock(); } - public SetScriptRunningPacket(byte[] bytes, ref int i) + public SetScriptRunningPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Script = new ScriptBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public SetScriptRunningPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Script.FromBytes(bytes, ref i); + } + + public SetScriptRunningPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Script = new ScriptBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Script.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -33733,11 +40524,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -33777,11 +40573,16 @@ namespace libsecondlife.Packets public ScriptBlock() { } public ScriptBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ObjectID = new LLUUID(bytes, i); i += 16; - ItemID = new LLUUID(bytes, i); i += 16; + ObjectID.FromBytes(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -33820,19 +40621,40 @@ namespace libsecondlife.Packets Script = new ScriptBlock(); } - public ScriptResetPacket(byte[] bytes, ref int i) + public ScriptResetPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Script = new ScriptBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ScriptResetPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Script.FromBytes(bytes, ref i); + } + + public ScriptResetPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Script = new ScriptBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Script.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -33899,15 +40721,20 @@ namespace libsecondlife.Packets public RequesterBlock() { } public RequesterBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - SourceID = new LLUUID(bytes, i); i += 16; - RequestID = new LLUUID(bytes, i); i += 16; - SearchID = new LLUUID(bytes, i); i += 16; - SearchPos = new LLVector3(bytes, i); i += 12; - SearchDir = new LLQuaternion(bytes, i, true); i += 12; + SourceID.FromBytes(bytes, i); i += 16; + RequestID.FromBytes(bytes, i); i += 16; + SearchID.FromBytes(bytes, i); i += 16; + SearchPos.FromBytes(bytes, i); i += 12; + SearchDir.FromBytes(bytes, i, true); i += 12; length = (ushort)bytes[i++]; _searchname = new byte[length]; Buffer.BlockCopy(bytes, i, _searchname, 0, length); i += length; @@ -33990,17 +40817,38 @@ namespace libsecondlife.Packets Requester = new RequesterBlock(); } - public ScriptSensorRequestPacket(byte[] bytes, ref int i) + public ScriptSensorRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - Requester = new RequesterBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ScriptSensorRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Requester.FromBytes(bytes, ref i); + } + + public ScriptSensorRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - Requester = new RequesterBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Requester.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -34043,10 +40891,15 @@ namespace libsecondlife.Packets public RequesterBlock() { } public RequesterBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - SourceID = new LLUUID(bytes, i); i += 16; + SourceID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -34103,16 +40956,21 @@ namespace libsecondlife.Packets public SensedDataBlock() { } public SensedDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - ObjectID = new LLUUID(bytes, i); i += 16; - OwnerID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; - Position = new LLVector3(bytes, i); i += 12; - Velocity = new LLVector3(bytes, i); i += 12; - Rotation = new LLQuaternion(bytes, i, true); i += 12; + ObjectID.FromBytes(bytes, i); i += 16; + OwnerID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; + Position.FromBytes(bytes, i); i += 12; + Velocity.FromBytes(bytes, i); i += 12; + Rotation.FromBytes(bytes, i, true); i += 12; length = (ushort)bytes[i++]; _name = new byte[length]; Buffer.BlockCopy(bytes, i, _name, 0, length); i += length; @@ -34180,25 +41038,52 @@ namespace libsecondlife.Packets SensedData = new SensedDataBlock[0]; } - public ScriptSensorReplyPacket(byte[] bytes, ref int i) + public ScriptSensorReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - Requester = new RequesterBlock(bytes, ref i); - int count = (int)bytes[i++]; - SensedData = new SensedDataBlock[count]; - for (int j = 0; j < count; j++) - { SensedData[j] = new SensedDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ScriptSensorReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Requester.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(SensedData.Length < count) { + SensedData = new SensedDataBlock[count]; + for(int j = 0; j < count; j++) SensedData[j] = new SensedDataBlock(); + } + for (int j = 0; j < count; j++) + { SensedData[j].FromBytes(bytes, ref i); } + } + + public ScriptSensorReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - Requester = new RequesterBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Requester.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - SensedData = new SensedDataBlock[count]; + if(SensedData.Length < count) { + SensedData = new SensedDataBlock[count]; + for(int j = 0; j < count; j++) SensedData[j] = new SensedDataBlock(); + } for (int j = 0; j < count; j++) - { SensedData[j] = new SensedDataBlock(bytes, ref i); } + { SensedData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -34251,11 +41136,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; CircuitCode = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -34298,17 +41188,38 @@ namespace libsecondlife.Packets AgentData = new AgentDataBlock(); } - public CompleteAgentMovementPacket(byte[] bytes, ref int i) + public CompleteAgentMovementPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public CompleteAgentMovementPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + } + + public CompleteAgentMovementPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -34352,11 +41263,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -34398,11 +41314,16 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - Position = new LLVector3(bytes, i); i += 12; - LookAt = new LLVector3(bytes, i); i += 12; + Position.FromBytes(bytes, i); i += 12; + LookAt.FromBytes(bytes, i); i += 12; RegionHandle = (ulong)((ulong)bytes[i++] + ((ulong)bytes[i++] << 8) + ((ulong)bytes[i++] << 16) + ((ulong)bytes[i++] << 24) + ((ulong)bytes[i++] << 32) + ((ulong)bytes[i++] << 40) + ((ulong)bytes[i++] << 48) + ((ulong)bytes[i++] << 56)); Timestamp = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } @@ -34469,6 +41390,11 @@ namespace libsecondlife.Packets public SimDataBlock() { } public SimDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -34517,21 +41443,42 @@ namespace libsecondlife.Packets SimData = new SimDataBlock(); } - public AgentMovementCompletePacket(byte[] bytes, ref int i) + public AgentMovementCompletePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); - SimData = new SimDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public AgentMovementCompletePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + SimData.FromBytes(bytes, ref i); + } + + public AgentMovementCompletePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); - SimData = new SimDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + SimData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -34579,11 +41526,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -34620,17 +41572,38 @@ namespace libsecondlife.Packets AgentData = new AgentDataBlock(); } - public LogoutRequestPacket(byte[] bytes, ref int i) + public LogoutRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public LogoutRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + } + + public LogoutRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -34674,11 +41647,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -34717,10 +41695,15 @@ namespace libsecondlife.Packets public InventoryDataBlock() { } public InventoryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ItemID = new LLUUID(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -34757,25 +41740,52 @@ namespace libsecondlife.Packets InventoryData = new InventoryDataBlock[0]; } - public LogoutReplyPacket(byte[] bytes, ref int i) + public LogoutReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - InventoryData = new InventoryDataBlock[count]; - for (int j = 0; j < count; j++) - { InventoryData[j] = new InventoryDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public LogoutReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(InventoryData.Length < count) { + InventoryData = new InventoryDataBlock[count]; + for(int j = 0; j < count; j++) InventoryData[j] = new InventoryDataBlock(); + } + for (int j = 0; j < count; j++) + { InventoryData[j].FromBytes(bytes, ref i); } + } + + public LogoutReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - InventoryData = new InventoryDataBlock[count]; + if(InventoryData.Length < count) { + InventoryData = new InventoryDataBlock[count]; + for(int j = 0; j < count; j++) InventoryData[j] = new InventoryDataBlock(); + } for (int j = 0; j < count; j++) - { InventoryData[j] = new InventoryDataBlock(bytes, ref i); } + { InventoryData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -34827,11 +41837,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -34915,18 +41930,23 @@ namespace libsecondlife.Packets public MessageBlockBlock() { } public MessageBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { FromGroup = (bytes[i++] != 0) ? (bool)true : (bool)false; - ToAgentID = new LLUUID(bytes, i); i += 16; + ToAgentID.FromBytes(bytes, i); i += 16; ParentEstateID = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - RegionID = new LLUUID(bytes, i); i += 16; - Position = new LLVector3(bytes, i); i += 12; + RegionID.FromBytes(bytes, i); i += 16; + Position.FromBytes(bytes, i); i += 12; Offline = (byte)bytes[i++]; Dialog = (byte)bytes[i++]; - ID = new LLUUID(bytes, i); i += 16; + ID.FromBytes(bytes, i); i += 16; Timestamp = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); length = (ushort)bytes[i++]; _fromagentname = new byte[length]; @@ -35011,19 +42031,40 @@ namespace libsecondlife.Packets MessageBlock = new MessageBlockBlock(); } - public ImprovedInstantMessagePacket(byte[] bytes, ref int i) + public ImprovedInstantMessagePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - MessageBlock = new MessageBlockBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ImprovedInstantMessagePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + MessageBlock.FromBytes(bytes, ref i); + } + + public ImprovedInstantMessagePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - MessageBlock = new MessageBlockBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + MessageBlock.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -35069,11 +42110,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -35110,17 +42156,38 @@ namespace libsecondlife.Packets AgentData = new AgentDataBlock(); } - public RetrieveInstantMessagesPacket(byte[] bytes, ref int i) + public RetrieveInstantMessagesPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public RetrieveInstantMessagesPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + } + + public RetrieveInstantMessagesPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -35165,11 +42232,16 @@ namespace libsecondlife.Packets public AgentBlockBlock() { } public AgentBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - Hunter = new LLUUID(bytes, i); i += 16; - Prey = new LLUUID(bytes, i); i += 16; + Hunter.FromBytes(bytes, i); i += 16; + Prey.FromBytes(bytes, i); i += 16; SpaceIP = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -35215,6 +42287,11 @@ namespace libsecondlife.Packets public LocationBlockBlock() { } public LocationBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -35265,25 +42342,52 @@ namespace libsecondlife.Packets LocationBlock = new LocationBlockBlock[0]; } - public FindAgentPacket(byte[] bytes, ref int i) + public FindAgentPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentBlock = new AgentBlockBlock(bytes, ref i); - int count = (int)bytes[i++]; - LocationBlock = new LocationBlockBlock[count]; - for (int j = 0; j < count; j++) - { LocationBlock[j] = new LocationBlockBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public FindAgentPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentBlock.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(LocationBlock.Length < count) { + LocationBlock = new LocationBlockBlock[count]; + for(int j = 0; j < count; j++) LocationBlock[j] = new LocationBlockBlock(); + } + for (int j = 0; j < count; j++) + { LocationBlock[j].FromBytes(bytes, ref i); } + } + + public FindAgentPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentBlock = new AgentBlockBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentBlock.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - LocationBlock = new LocationBlockBlock[count]; + if(LocationBlock.Length < count) { + LocationBlock = new LocationBlockBlock[count]; + for(int j = 0; j < count; j++) LocationBlock[j] = new LocationBlockBlock(); + } for (int j = 0; j < count; j++) - { LocationBlock[j] = new LocationBlockBlock(bytes, ref i); } + { LocationBlock[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -35335,11 +42439,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -35379,11 +42488,16 @@ namespace libsecondlife.Packets public RequestBlockBlock() { } public RequestBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { Godlike = (bytes[i++] != 0) ? (bool)true : (bool)false; - Token = new LLUUID(bytes, i); i += 16; + Token.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -35422,19 +42536,40 @@ namespace libsecondlife.Packets RequestBlock = new RequestBlockBlock(); } - public RequestGodlikePowersPacket(byte[] bytes, ref int i) + public RequestGodlikePowersPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - RequestBlock = new RequestBlockBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public RequestGodlikePowersPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + RequestBlock.FromBytes(bytes, ref i); + } + + public RequestGodlikePowersPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - RequestBlock = new RequestBlockBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + RequestBlock.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -35480,11 +42615,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -35524,11 +42664,16 @@ namespace libsecondlife.Packets public GrantDataBlock() { } public GrantDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { GodLevel = (byte)bytes[i++]; - Token = new LLUUID(bytes, i); i += 16; + Token.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -35567,19 +42712,40 @@ namespace libsecondlife.Packets GrantData = new GrantDataBlock(); } - public GrantGodlikePowersPacket(byte[] bytes, ref int i) + public GrantGodlikePowersPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - GrantData = new GrantDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public GrantGodlikePowersPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GrantData.FromBytes(bytes, ref i); + } + + public GrantGodlikePowersPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - GrantData = new GrantDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GrantData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -35626,12 +42792,17 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; - TransactionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; + TransactionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -35685,6 +42856,11 @@ namespace libsecondlife.Packets public MethodDataBlock() { } public MethodDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -35692,7 +42868,7 @@ namespace libsecondlife.Packets length = (ushort)bytes[i++]; _method = new byte[length]; Buffer.BlockCopy(bytes, i, _method, 0, length); i += length; - Invoice = new LLUUID(bytes, i); i += 16; + Invoice.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -35746,6 +42922,11 @@ namespace libsecondlife.Packets public ParamListBlock() { } public ParamListBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -35793,27 +42974,54 @@ namespace libsecondlife.Packets ParamList = new ParamListBlock[0]; } - public GodlikeMessagePacket(byte[] bytes, ref int i) + public GodlikeMessagePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - MethodData = new MethodDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ParamList = new ParamListBlock[count]; - for (int j = 0; j < count; j++) - { ParamList[j] = new ParamListBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public GodlikeMessagePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + MethodData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ParamList.Length < count) { + ParamList = new ParamListBlock[count]; + for(int j = 0; j < count; j++) ParamList[j] = new ParamListBlock(); + } + for (int j = 0; j < count; j++) + { ParamList[j].FromBytes(bytes, ref i); } + } + + public GodlikeMessagePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - MethodData = new MethodDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + MethodData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ParamList = new ParamListBlock[count]; + if(ParamList.Length < count) { + ParamList = new ParamListBlock[count]; + for(int j = 0; j < count; j++) ParamList[j] = new ParamListBlock(); + } for (int j = 0; j < count; j++) - { ParamList[j] = new ParamListBlock(bytes, ref i); } + { ParamList[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -35868,12 +43076,17 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; - TransactionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; + TransactionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -35927,6 +43140,11 @@ namespace libsecondlife.Packets public MethodDataBlock() { } public MethodDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -35934,7 +43152,7 @@ namespace libsecondlife.Packets length = (ushort)bytes[i++]; _method = new byte[length]; Buffer.BlockCopy(bytes, i, _method, 0, length); i += length; - Invoice = new LLUUID(bytes, i); i += 16; + Invoice.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -35988,6 +43206,11 @@ namespace libsecondlife.Packets public ParamListBlock() { } public ParamListBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -36035,27 +43258,54 @@ namespace libsecondlife.Packets ParamList = new ParamListBlock[0]; } - public EstateOwnerMessagePacket(byte[] bytes, ref int i) + public EstateOwnerMessagePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - MethodData = new MethodDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ParamList = new ParamListBlock[count]; - for (int j = 0; j < count; j++) - { ParamList[j] = new ParamListBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public EstateOwnerMessagePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + MethodData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ParamList.Length < count) { + ParamList = new ParamListBlock[count]; + for(int j = 0; j < count; j++) ParamList[j] = new ParamListBlock(); + } + for (int j = 0; j < count; j++) + { ParamList[j].FromBytes(bytes, ref i); } + } + + public EstateOwnerMessagePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - MethodData = new MethodDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + MethodData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ParamList = new ParamListBlock[count]; + if(ParamList.Length < count) { + ParamList = new ParamListBlock[count]; + for(int j = 0; j < count; j++) ParamList[j] = new ParamListBlock(); + } for (int j = 0; j < count; j++) - { ParamList[j] = new ParamListBlock(bytes, ref i); } + { ParamList[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -36110,12 +43360,17 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; - TransactionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; + TransactionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -36169,6 +43424,11 @@ namespace libsecondlife.Packets public MethodDataBlock() { } public MethodDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -36176,7 +43436,7 @@ namespace libsecondlife.Packets length = (ushort)bytes[i++]; _method = new byte[length]; Buffer.BlockCopy(bytes, i, _method, 0, length); i += length; - Invoice = new LLUUID(bytes, i); i += 16; + Invoice.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -36230,6 +43490,11 @@ namespace libsecondlife.Packets public ParamListBlock() { } public ParamListBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -36277,27 +43542,54 @@ namespace libsecondlife.Packets ParamList = new ParamListBlock[0]; } - public GenericMessagePacket(byte[] bytes, ref int i) + public GenericMessagePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - MethodData = new MethodDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ParamList = new ParamListBlock[count]; - for (int j = 0; j < count; j++) - { ParamList[j] = new ParamListBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public GenericMessagePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + MethodData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ParamList.Length < count) { + ParamList = new ParamListBlock[count]; + for(int j = 0; j < count; j++) ParamList[j] = new ParamListBlock(); + } + for (int j = 0; j < count; j++) + { ParamList[j].FromBytes(bytes, ref i); } + } + + public GenericMessagePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - MethodData = new MethodDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + MethodData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ParamList = new ParamListBlock[count]; + if(ParamList.Length < count) { + ParamList = new ParamListBlock[count]; + for(int j = 0; j < count; j++) ParamList[j] = new ParamListBlock(); + } for (int j = 0; j < count; j++) - { ParamList[j] = new ParamListBlock(bytes, ref i); } + { ParamList[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -36351,11 +43643,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -36394,6 +43691,11 @@ namespace libsecondlife.Packets public MuteDataBlock() { } public MuteDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -36437,19 +43739,40 @@ namespace libsecondlife.Packets MuteData = new MuteDataBlock(); } - public MuteListRequestPacket(byte[] bytes, ref int i) + public MuteListRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - MuteData = new MuteDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public MuteListRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + MuteData.FromBytes(bytes, ref i); + } + + public MuteListRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - MuteData = new MuteDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + MuteData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -36495,11 +43818,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -36553,11 +43881,16 @@ namespace libsecondlife.Packets public MuteDataBlock() { } public MuteDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - MuteID = new LLUUID(bytes, i); i += 16; + MuteID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _mutename = new byte[length]; Buffer.BlockCopy(bytes, i, _mutename, 0, length); i += length; @@ -36614,19 +43947,40 @@ namespace libsecondlife.Packets MuteData = new MuteDataBlock(); } - public UpdateMuteListEntryPacket(byte[] bytes, ref int i) + public UpdateMuteListEntryPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - MuteData = new MuteDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public UpdateMuteListEntryPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + MuteData.FromBytes(bytes, ref i); + } + + public UpdateMuteListEntryPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - MuteData = new MuteDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + MuteData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -36672,11 +44026,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -36728,11 +44087,16 @@ namespace libsecondlife.Packets public MuteDataBlock() { } public MuteDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - MuteID = new LLUUID(bytes, i); i += 16; + MuteID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _mutename = new byte[length]; Buffer.BlockCopy(bytes, i, _mutename, 0, length); i += length; @@ -36776,19 +44140,40 @@ namespace libsecondlife.Packets MuteData = new MuteDataBlock(); } - public RemoveMuteListEntryPacket(byte[] bytes, ref int i) + public RemoveMuteListEntryPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - MuteData = new MuteDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public RemoveMuteListEntryPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + MuteData.FromBytes(bytes, ref i); + } + + public RemoveMuteListEntryPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - MuteData = new MuteDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + MuteData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -36834,11 +44219,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -36878,11 +44268,16 @@ namespace libsecondlife.Packets public NotecardDataBlock() { } public NotecardDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - NotecardItemID = new LLUUID(bytes, i); i += 16; - ObjectID = new LLUUID(bytes, i); i += 16; + NotecardItemID.FromBytes(bytes, i); i += 16; + ObjectID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -36922,11 +44317,16 @@ namespace libsecondlife.Packets public InventoryDataBlock() { } public InventoryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ItemID = new LLUUID(bytes, i); i += 16; - FolderID = new LLUUID(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; + FolderID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -36967,27 +44367,54 @@ namespace libsecondlife.Packets InventoryData = new InventoryDataBlock[0]; } - public CopyInventoryFromNotecardPacket(byte[] bytes, ref int i) + public CopyInventoryFromNotecardPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - NotecardData = new NotecardDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - InventoryData = new InventoryDataBlock[count]; - for (int j = 0; j < count; j++) - { InventoryData[j] = new InventoryDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public CopyInventoryFromNotecardPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + NotecardData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(InventoryData.Length < count) { + InventoryData = new InventoryDataBlock[count]; + for(int j = 0; j < count; j++) InventoryData[j] = new InventoryDataBlock(); + } + for (int j = 0; j < count; j++) + { InventoryData[j].FromBytes(bytes, ref i); } + } + + public CopyInventoryFromNotecardPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - NotecardData = new NotecardDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + NotecardData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - InventoryData = new InventoryDataBlock[count]; + if(InventoryData.Length < count) { + InventoryData = new InventoryDataBlock[count]; + for(int j = 0; j < count; j++) InventoryData[j] = new InventoryDataBlock(); + } for (int j = 0; j < count; j++) - { InventoryData[j] = new InventoryDataBlock(bytes, ref i); } + { InventoryData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -37042,12 +44469,17 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; - TransactionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; + TransactionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -37132,23 +44564,28 @@ namespace libsecondlife.Packets public InventoryDataBlock() { } public InventoryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - ItemID = new LLUUID(bytes, i); i += 16; - FolderID = new LLUUID(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; + FolderID.FromBytes(bytes, i); i += 16; CallbackID = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - CreatorID = new LLUUID(bytes, i); i += 16; - OwnerID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + CreatorID.FromBytes(bytes, i); i += 16; + OwnerID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; BaseMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); OwnerMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); GroupMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); EveryoneMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); NextOwnerMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); GroupOwned = (bytes[i++] != 0) ? (bool)true : (bool)false; - TransactionID = new LLUUID(bytes, i); i += 16; + TransactionID.FromBytes(bytes, i); i += 16; Type = (sbyte)bytes[i++]; InvType = (sbyte)bytes[i++]; Flags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); @@ -37276,25 +44713,52 @@ namespace libsecondlife.Packets InventoryData = new InventoryDataBlock[0]; } - public UpdateInventoryItemPacket(byte[] bytes, ref int i) + public UpdateInventoryItemPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - InventoryData = new InventoryDataBlock[count]; - for (int j = 0; j < count; j++) - { InventoryData[j] = new InventoryDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public UpdateInventoryItemPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(InventoryData.Length < count) { + InventoryData = new InventoryDataBlock[count]; + for(int j = 0; j < count; j++) InventoryData[j] = new InventoryDataBlock(); + } + for (int j = 0; j < count; j++) + { InventoryData[j].FromBytes(bytes, ref i); } + } + + public UpdateInventoryItemPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - InventoryData = new InventoryDataBlock[count]; + if(InventoryData.Length < count) { + InventoryData = new InventoryDataBlock[count]; + for(int j = 0; j < count; j++) InventoryData[j] = new InventoryDataBlock(); + } for (int j = 0; j < count; j++) - { InventoryData[j] = new InventoryDataBlock(bytes, ref i); } + { InventoryData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -37347,12 +44811,17 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; SimApproved = (bytes[i++] != 0) ? (bool)true : (bool)false; - TransactionID = new LLUUID(bytes, i); i += 16; + TransactionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -37437,23 +44906,28 @@ namespace libsecondlife.Packets public InventoryDataBlock() { } public InventoryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - ItemID = new LLUUID(bytes, i); i += 16; - FolderID = new LLUUID(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; + FolderID.FromBytes(bytes, i); i += 16; CallbackID = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - CreatorID = new LLUUID(bytes, i); i += 16; - OwnerID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + CreatorID.FromBytes(bytes, i); i += 16; + OwnerID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; BaseMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); OwnerMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); GroupMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); EveryoneMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); NextOwnerMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); GroupOwned = (bytes[i++] != 0) ? (bool)true : (bool)false; - AssetID = new LLUUID(bytes, i); i += 16; + AssetID.FromBytes(bytes, i); i += 16; Type = (sbyte)bytes[i++]; InvType = (sbyte)bytes[i++]; Flags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); @@ -37581,25 +45055,52 @@ namespace libsecondlife.Packets InventoryData = new InventoryDataBlock[0]; } - public UpdateCreateInventoryItemPacket(byte[] bytes, ref int i) + public UpdateCreateInventoryItemPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - InventoryData = new InventoryDataBlock[count]; - for (int j = 0; j < count; j++) - { InventoryData[j] = new InventoryDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public UpdateCreateInventoryItemPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(InventoryData.Length < count) { + InventoryData = new InventoryDataBlock[count]; + for(int j = 0; j < count; j++) InventoryData[j] = new InventoryDataBlock(); + } + for (int j = 0; j < count; j++) + { InventoryData[j].FromBytes(bytes, ref i); } + } + + public UpdateCreateInventoryItemPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - InventoryData = new InventoryDataBlock[count]; + if(InventoryData.Length < count) { + InventoryData = new InventoryDataBlock[count]; + for(int j = 0; j < count; j++) InventoryData[j] = new InventoryDataBlock(); + } for (int j = 0; j < count; j++) - { InventoryData[j] = new InventoryDataBlock(bytes, ref i); } + { InventoryData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -37652,11 +45153,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; Stamp = (bytes[i++] != 0) ? (bool)true : (bool)false; } catch (Exception) @@ -37712,12 +45218,17 @@ namespace libsecondlife.Packets public InventoryDataBlock() { } public InventoryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - ItemID = new LLUUID(bytes, i); i += 16; - FolderID = new LLUUID(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; + FolderID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _newname = new byte[length]; Buffer.BlockCopy(bytes, i, _newname, 0, length); i += length; @@ -37763,25 +45274,52 @@ namespace libsecondlife.Packets InventoryData = new InventoryDataBlock[0]; } - public MoveInventoryItemPacket(byte[] bytes, ref int i) + public MoveInventoryItemPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - InventoryData = new InventoryDataBlock[count]; - for (int j = 0; j < count; j++) - { InventoryData[j] = new InventoryDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public MoveInventoryItemPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(InventoryData.Length < count) { + InventoryData = new InventoryDataBlock[count]; + for(int j = 0; j < count; j++) InventoryData[j] = new InventoryDataBlock(); + } + for (int j = 0; j < count; j++) + { InventoryData[j].FromBytes(bytes, ref i); } + } + + public MoveInventoryItemPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - InventoryData = new InventoryDataBlock[count]; + if(InventoryData.Length < count) { + InventoryData = new InventoryDataBlock[count]; + for(int j = 0; j < count; j++) InventoryData[j] = new InventoryDataBlock(); + } for (int j = 0; j < count; j++) - { InventoryData[j] = new InventoryDataBlock(bytes, ref i); } + { InventoryData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -37833,11 +45371,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -37892,14 +45435,19 @@ namespace libsecondlife.Packets public InventoryDataBlock() { } public InventoryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { CallbackID = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - OldAgentID = new LLUUID(bytes, i); i += 16; - OldItemID = new LLUUID(bytes, i); i += 16; - NewFolderID = new LLUUID(bytes, i); i += 16; + OldAgentID.FromBytes(bytes, i); i += 16; + OldItemID.FromBytes(bytes, i); i += 16; + NewFolderID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _newname = new byte[length]; Buffer.BlockCopy(bytes, i, _newname, 0, length); i += length; @@ -37952,25 +45500,52 @@ namespace libsecondlife.Packets InventoryData = new InventoryDataBlock[0]; } - public CopyInventoryItemPacket(byte[] bytes, ref int i) + public CopyInventoryItemPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - InventoryData = new InventoryDataBlock[count]; - for (int j = 0; j < count; j++) - { InventoryData[j] = new InventoryDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public CopyInventoryItemPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(InventoryData.Length < count) { + InventoryData = new InventoryDataBlock[count]; + for(int j = 0; j < count; j++) InventoryData[j] = new InventoryDataBlock(); + } + for (int j = 0; j < count; j++) + { InventoryData[j].FromBytes(bytes, ref i); } + } + + public CopyInventoryItemPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - InventoryData = new InventoryDataBlock[count]; + if(InventoryData.Length < count) { + InventoryData = new InventoryDataBlock[count]; + for(int j = 0; j < count; j++) InventoryData[j] = new InventoryDataBlock(); + } for (int j = 0; j < count; j++) - { InventoryData[j] = new InventoryDataBlock(bytes, ref i); } + { InventoryData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -38022,11 +45597,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -38065,10 +45645,15 @@ namespace libsecondlife.Packets public InventoryDataBlock() { } public InventoryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ItemID = new LLUUID(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -38105,25 +45690,52 @@ namespace libsecondlife.Packets InventoryData = new InventoryDataBlock[0]; } - public RemoveInventoryItemPacket(byte[] bytes, ref int i) + public RemoveInventoryItemPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - InventoryData = new InventoryDataBlock[count]; - for (int j = 0; j < count; j++) - { InventoryData[j] = new InventoryDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public RemoveInventoryItemPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(InventoryData.Length < count) { + InventoryData = new InventoryDataBlock[count]; + for(int j = 0; j < count; j++) InventoryData[j] = new InventoryDataBlock(); + } + for (int j = 0; j < count; j++) + { InventoryData[j].FromBytes(bytes, ref i); } + } + + public RemoveInventoryItemPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - InventoryData = new InventoryDataBlock[count]; + if(InventoryData.Length < count) { + InventoryData = new InventoryDataBlock[count]; + for(int j = 0; j < count; j++) InventoryData[j] = new InventoryDataBlock(); + } for (int j = 0; j < count; j++) - { InventoryData[j] = new InventoryDataBlock(bytes, ref i); } + { InventoryData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -38175,11 +45787,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -38219,10 +45836,15 @@ namespace libsecondlife.Packets public InventoryDataBlock() { } public InventoryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ItemID = new LLUUID(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; Flags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -38265,25 +45887,52 @@ namespace libsecondlife.Packets InventoryData = new InventoryDataBlock[0]; } - public ChangeInventoryItemFlagsPacket(byte[] bytes, ref int i) + public ChangeInventoryItemFlagsPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - InventoryData = new InventoryDataBlock[count]; - for (int j = 0; j < count; j++) - { InventoryData[j] = new InventoryDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ChangeInventoryItemFlagsPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(InventoryData.Length < count) { + InventoryData = new InventoryDataBlock[count]; + for(int j = 0; j < count; j++) InventoryData[j] = new InventoryDataBlock(); + } + for (int j = 0; j < count; j++) + { InventoryData[j].FromBytes(bytes, ref i); } + } + + public ChangeInventoryItemFlagsPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - InventoryData = new InventoryDataBlock[count]; + if(InventoryData.Length < count) { + InventoryData = new InventoryDataBlock[count]; + for(int j = 0; j < count; j++) InventoryData[j] = new InventoryDataBlock(); + } for (int j = 0; j < count; j++) - { InventoryData[j] = new InventoryDataBlock(bytes, ref i); } + { InventoryData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -38334,10 +45983,15 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -38375,11 +46029,16 @@ namespace libsecondlife.Packets public InventoryDataBlock() { } public InventoryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ItemID = new LLUUID(bytes, i); i += 16; - NewAssetID = new LLUUID(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; + NewAssetID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -38418,19 +46077,40 @@ namespace libsecondlife.Packets InventoryData = new InventoryDataBlock(); } - public SaveAssetIntoInventoryPacket(byte[] bytes, ref int i) + public SaveAssetIntoInventoryPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - InventoryData = new InventoryDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public SaveAssetIntoInventoryPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + InventoryData.FromBytes(bytes, ref i); + } + + public SaveAssetIntoInventoryPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - InventoryData = new InventoryDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + InventoryData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -38476,11 +46156,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -38534,12 +46219,17 @@ namespace libsecondlife.Packets public FolderDataBlock() { } public FolderDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - FolderID = new LLUUID(bytes, i); i += 16; - ParentID = new LLUUID(bytes, i); i += 16; + FolderID.FromBytes(bytes, i); i += 16; + ParentID.FromBytes(bytes, i); i += 16; Type = (sbyte)bytes[i++]; length = (ushort)bytes[i++]; _name = new byte[length]; @@ -38588,19 +46278,40 @@ namespace libsecondlife.Packets FolderData = new FolderDataBlock(); } - public CreateInventoryFolderPacket(byte[] bytes, ref int i) + public CreateInventoryFolderPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - FolderData = new FolderDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public CreateInventoryFolderPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + FolderData.FromBytes(bytes, ref i); + } + + public CreateInventoryFolderPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - FolderData = new FolderDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + FolderData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -38646,11 +46357,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -38704,12 +46420,17 @@ namespace libsecondlife.Packets public FolderDataBlock() { } public FolderDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - FolderID = new LLUUID(bytes, i); i += 16; - ParentID = new LLUUID(bytes, i); i += 16; + FolderID.FromBytes(bytes, i); i += 16; + ParentID.FromBytes(bytes, i); i += 16; Type = (sbyte)bytes[i++]; length = (ushort)bytes[i++]; _name = new byte[length]; @@ -38758,25 +46479,52 @@ namespace libsecondlife.Packets FolderData = new FolderDataBlock[0]; } - public UpdateInventoryFolderPacket(byte[] bytes, ref int i) + public UpdateInventoryFolderPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - FolderData = new FolderDataBlock[count]; - for (int j = 0; j < count; j++) - { FolderData[j] = new FolderDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public UpdateInventoryFolderPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(FolderData.Length < count) { + FolderData = new FolderDataBlock[count]; + for(int j = 0; j < count; j++) FolderData[j] = new FolderDataBlock(); + } + for (int j = 0; j < count; j++) + { FolderData[j].FromBytes(bytes, ref i); } + } + + public UpdateInventoryFolderPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - FolderData = new FolderDataBlock[count]; + if(FolderData.Length < count) { + FolderData = new FolderDataBlock[count]; + for(int j = 0; j < count; j++) FolderData[j] = new FolderDataBlock(); + } for (int j = 0; j < count; j++) - { FolderData[j] = new FolderDataBlock(bytes, ref i); } + { FolderData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -38829,11 +46577,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; Stamp = (bytes[i++] != 0) ? (bool)true : (bool)false; } catch (Exception) @@ -38876,11 +46629,16 @@ namespace libsecondlife.Packets public InventoryDataBlock() { } public InventoryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - FolderID = new LLUUID(bytes, i); i += 16; - ParentID = new LLUUID(bytes, i); i += 16; + FolderID.FromBytes(bytes, i); i += 16; + ParentID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -38919,25 +46677,52 @@ namespace libsecondlife.Packets InventoryData = new InventoryDataBlock[0]; } - public MoveInventoryFolderPacket(byte[] bytes, ref int i) + public MoveInventoryFolderPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - InventoryData = new InventoryDataBlock[count]; - for (int j = 0; j < count; j++) - { InventoryData[j] = new InventoryDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public MoveInventoryFolderPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(InventoryData.Length < count) { + InventoryData = new InventoryDataBlock[count]; + for(int j = 0; j < count; j++) InventoryData[j] = new InventoryDataBlock(); + } + for (int j = 0; j < count; j++) + { InventoryData[j].FromBytes(bytes, ref i); } + } + + public MoveInventoryFolderPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - InventoryData = new InventoryDataBlock[count]; + if(InventoryData.Length < count) { + InventoryData = new InventoryDataBlock[count]; + for(int j = 0; j < count; j++) InventoryData[j] = new InventoryDataBlock(); + } for (int j = 0; j < count; j++) - { InventoryData[j] = new InventoryDataBlock(bytes, ref i); } + { InventoryData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -38989,11 +46774,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -39032,10 +46822,15 @@ namespace libsecondlife.Packets public FolderDataBlock() { } public FolderDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - FolderID = new LLUUID(bytes, i); i += 16; + FolderID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -39072,25 +46867,52 @@ namespace libsecondlife.Packets FolderData = new FolderDataBlock[0]; } - public RemoveInventoryFolderPacket(byte[] bytes, ref int i) + public RemoveInventoryFolderPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - FolderData = new FolderDataBlock[count]; - for (int j = 0; j < count; j++) - { FolderData[j] = new FolderDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public RemoveInventoryFolderPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(FolderData.Length < count) { + FolderData = new FolderDataBlock[count]; + for(int j = 0; j < count; j++) FolderData[j] = new FolderDataBlock(); + } + for (int j = 0; j < count; j++) + { FolderData[j].FromBytes(bytes, ref i); } + } + + public RemoveInventoryFolderPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - FolderData = new FolderDataBlock[count]; + if(FolderData.Length < count) { + FolderData = new FolderDataBlock[count]; + for(int j = 0; j < count; j++) FolderData[j] = new FolderDataBlock(); + } for (int j = 0; j < count; j++) - { FolderData[j] = new FolderDataBlock(bytes, ref i); } + { FolderData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -39142,11 +46964,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -39189,11 +47016,16 @@ namespace libsecondlife.Packets public InventoryDataBlock() { } public InventoryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - FolderID = new LLUUID(bytes, i); i += 16; - OwnerID = new LLUUID(bytes, i); i += 16; + FolderID.FromBytes(bytes, i); i += 16; + OwnerID.FromBytes(bytes, i); i += 16; SortOrder = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); FetchFolders = (bytes[i++] != 0) ? (bool)true : (bool)false; FetchItems = (bytes[i++] != 0) ? (bool)true : (bool)false; @@ -39244,19 +47076,40 @@ namespace libsecondlife.Packets InventoryData = new InventoryDataBlock(); } - public FetchInventoryDescendentsPacket(byte[] bytes, ref int i) + public FetchInventoryDescendentsPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - InventoryData = new InventoryDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public FetchInventoryDescendentsPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + InventoryData.FromBytes(bytes, ref i); + } + + public FetchInventoryDescendentsPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - InventoryData = new InventoryDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + InventoryData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -39305,12 +47158,17 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - FolderID = new LLUUID(bytes, i); i += 16; - OwnerID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + FolderID.FromBytes(bytes, i); i += 16; + OwnerID.FromBytes(bytes, i); i += 16; Version = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); Descendents = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } @@ -39378,12 +47236,17 @@ namespace libsecondlife.Packets public FolderDataBlock() { } public FolderDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - FolderID = new LLUUID(bytes, i); i += 16; - ParentID = new LLUUID(bytes, i); i += 16; + FolderID.FromBytes(bytes, i); i += 16; + ParentID.FromBytes(bytes, i); i += 16; Type = (sbyte)bytes[i++]; length = (ushort)bytes[i++]; _name = new byte[length]; @@ -39475,22 +47338,27 @@ namespace libsecondlife.Packets public ItemDataBlock() { } public ItemDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - ItemID = new LLUUID(bytes, i); i += 16; - FolderID = new LLUUID(bytes, i); i += 16; - CreatorID = new LLUUID(bytes, i); i += 16; - OwnerID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; + FolderID.FromBytes(bytes, i); i += 16; + CreatorID.FromBytes(bytes, i); i += 16; + OwnerID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; BaseMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); OwnerMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); GroupMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); EveryoneMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); NextOwnerMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); GroupOwned = (bytes[i++] != 0) ? (bool)true : (bool)false; - AssetID = new LLUUID(bytes, i); i += 16; + AssetID.FromBytes(bytes, i); i += 16; Type = (sbyte)bytes[i++]; InvType = (sbyte)bytes[i++]; Flags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); @@ -39615,33 +47483,66 @@ namespace libsecondlife.Packets ItemData = new ItemDataBlock[0]; } - public InventoryDescendentsPacket(byte[] bytes, ref int i) + public InventoryDescendentsPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - FolderData = new FolderDataBlock[count]; - for (int j = 0; j < count; j++) - { FolderData[j] = new FolderDataBlock(bytes, ref i); } - count = (int)bytes[i++]; - ItemData = new ItemDataBlock[count]; - for (int j = 0; j < count; j++) - { ItemData[j] = new ItemDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public InventoryDescendentsPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(FolderData.Length < count) { + FolderData = new FolderDataBlock[count]; + for(int j = 0; j < count; j++) FolderData[j] = new FolderDataBlock(); + } + for (int j = 0; j < count; j++) + { FolderData[j].FromBytes(bytes, ref i); } + count = (int)bytes[i++]; + if(ItemData.Length < count) { + ItemData = new ItemDataBlock[count]; + for(int j = 0; j < count; j++) ItemData[j] = new ItemDataBlock(); + } + for (int j = 0; j < count; j++) + { ItemData[j].FromBytes(bytes, ref i); } + } + + public InventoryDescendentsPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - FolderData = new FolderDataBlock[count]; + if(FolderData.Length < count) { + FolderData = new FolderDataBlock[count]; + for(int j = 0; j < count; j++) FolderData[j] = new FolderDataBlock(); + } for (int j = 0; j < count; j++) - { FolderData[j] = new FolderDataBlock(bytes, ref i); } + { FolderData[j].FromBytes(bytes, ref i); } count = (int)bytes[i++]; - ItemData = new ItemDataBlock[count]; + if(ItemData.Length < count) { + ItemData = new ItemDataBlock[count]; + for(int j = 0; j < count; j++) ItemData[j] = new ItemDataBlock(); + } for (int j = 0; j < count; j++) - { ItemData[j] = new ItemDataBlock(bytes, ref i); } + { ItemData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -39701,11 +47602,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -39745,11 +47651,16 @@ namespace libsecondlife.Packets public InventoryDataBlock() { } public InventoryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - OwnerID = new LLUUID(bytes, i); i += 16; - ItemID = new LLUUID(bytes, i); i += 16; + OwnerID.FromBytes(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -39788,25 +47699,52 @@ namespace libsecondlife.Packets InventoryData = new InventoryDataBlock[0]; } - public FetchInventoryPacket(byte[] bytes, ref int i) + public FetchInventoryPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - InventoryData = new InventoryDataBlock[count]; - for (int j = 0; j < count; j++) - { InventoryData[j] = new InventoryDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public FetchInventoryPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(InventoryData.Length < count) { + InventoryData = new InventoryDataBlock[count]; + for(int j = 0; j < count; j++) InventoryData[j] = new InventoryDataBlock(); + } + for (int j = 0; j < count; j++) + { InventoryData[j].FromBytes(bytes, ref i); } + } + + public FetchInventoryPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - InventoryData = new InventoryDataBlock[count]; + if(InventoryData.Length < count) { + InventoryData = new InventoryDataBlock[count]; + for(int j = 0; j < count; j++) InventoryData[j] = new InventoryDataBlock(); + } for (int j = 0; j < count; j++) - { InventoryData[j] = new InventoryDataBlock(bytes, ref i); } + { InventoryData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -39857,10 +47795,15 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -39940,22 +47883,27 @@ namespace libsecondlife.Packets public InventoryDataBlock() { } public InventoryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - ItemID = new LLUUID(bytes, i); i += 16; - FolderID = new LLUUID(bytes, i); i += 16; - CreatorID = new LLUUID(bytes, i); i += 16; - OwnerID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; + FolderID.FromBytes(bytes, i); i += 16; + CreatorID.FromBytes(bytes, i); i += 16; + OwnerID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; BaseMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); OwnerMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); GroupMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); EveryoneMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); NextOwnerMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); GroupOwned = (bytes[i++] != 0) ? (bool)true : (bool)false; - AssetID = new LLUUID(bytes, i); i += 16; + AssetID.FromBytes(bytes, i); i += 16; Type = (sbyte)bytes[i++]; InvType = (sbyte)bytes[i++]; Flags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); @@ -40078,25 +48026,52 @@ namespace libsecondlife.Packets InventoryData = new InventoryDataBlock[0]; } - public FetchInventoryReplyPacket(byte[] bytes, ref int i) + public FetchInventoryReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - InventoryData = new InventoryDataBlock[count]; - for (int j = 0; j < count; j++) - { InventoryData[j] = new InventoryDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public FetchInventoryReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(InventoryData.Length < count) { + InventoryData = new InventoryDataBlock[count]; + for(int j = 0; j < count; j++) InventoryData[j] = new InventoryDataBlock(); + } + for (int j = 0; j < count; j++) + { InventoryData[j].FromBytes(bytes, ref i); } + } + + public FetchInventoryReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - InventoryData = new InventoryDataBlock[count]; + if(InventoryData.Length < count) { + InventoryData = new InventoryDataBlock[count]; + for(int j = 0; j < count; j++) InventoryData[j] = new InventoryDataBlock(); + } for (int j = 0; j < count; j++) - { InventoryData[j] = new InventoryDataBlock(bytes, ref i); } + { InventoryData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -40148,11 +48123,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - TransactionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + TransactionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -40206,12 +48186,17 @@ namespace libsecondlife.Packets public FolderDataBlock() { } public FolderDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - FolderID = new LLUUID(bytes, i); i += 16; - ParentID = new LLUUID(bytes, i); i += 16; + FolderID.FromBytes(bytes, i); i += 16; + ParentID.FromBytes(bytes, i); i += 16; Type = (sbyte)bytes[i++]; length = (ushort)bytes[i++]; _name = new byte[length]; @@ -40304,23 +48289,28 @@ namespace libsecondlife.Packets public ItemDataBlock() { } public ItemDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - ItemID = new LLUUID(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; CallbackID = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - FolderID = new LLUUID(bytes, i); i += 16; - CreatorID = new LLUUID(bytes, i); i += 16; - OwnerID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + FolderID.FromBytes(bytes, i); i += 16; + CreatorID.FromBytes(bytes, i); i += 16; + OwnerID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; BaseMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); OwnerMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); GroupMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); EveryoneMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); NextOwnerMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); GroupOwned = (bytes[i++] != 0) ? (bool)true : (bool)false; - AssetID = new LLUUID(bytes, i); i += 16; + AssetID.FromBytes(bytes, i); i += 16; Type = (sbyte)bytes[i++]; InvType = (sbyte)bytes[i++]; Flags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); @@ -40450,33 +48440,66 @@ namespace libsecondlife.Packets ItemData = new ItemDataBlock[0]; } - public BulkUpdateInventoryPacket(byte[] bytes, ref int i) + public BulkUpdateInventoryPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - FolderData = new FolderDataBlock[count]; - for (int j = 0; j < count; j++) - { FolderData[j] = new FolderDataBlock(bytes, ref i); } - count = (int)bytes[i++]; - ItemData = new ItemDataBlock[count]; - for (int j = 0; j < count; j++) - { ItemData[j] = new ItemDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public BulkUpdateInventoryPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(FolderData.Length < count) { + FolderData = new FolderDataBlock[count]; + for(int j = 0; j < count; j++) FolderData[j] = new FolderDataBlock(); + } + for (int j = 0; j < count; j++) + { FolderData[j].FromBytes(bytes, ref i); } + count = (int)bytes[i++]; + if(ItemData.Length < count) { + ItemData = new ItemDataBlock[count]; + for(int j = 0; j < count; j++) ItemData[j] = new ItemDataBlock(); + } + for (int j = 0; j < count; j++) + { ItemData[j].FromBytes(bytes, ref i); } + } + + public BulkUpdateInventoryPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - FolderData = new FolderDataBlock[count]; + if(FolderData.Length < count) { + FolderData = new FolderDataBlock[count]; + for(int j = 0; j < count; j++) FolderData[j] = new FolderDataBlock(); + } for (int j = 0; j < count; j++) - { FolderData[j] = new FolderDataBlock(bytes, ref i); } + { FolderData[j].FromBytes(bytes, ref i); } count = (int)bytes[i++]; - ItemData = new ItemDataBlock[count]; + if(ItemData.Length < count) { + ItemData = new ItemDataBlock[count]; + for(int j = 0; j < count; j++) ItemData[j] = new ItemDataBlock(); + } for (int j = 0; j < count; j++) - { ItemData[j] = new ItemDataBlock(bytes, ref i); } + { ItemData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -40538,13 +48561,18 @@ namespace libsecondlife.Packets public QueryDataBlock() { } public QueryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - QueryID = new LLUUID(bytes, i); i += 16; - AgentID = new LLUUID(bytes, i); i += 16; - OwnerID = new LLUUID(bytes, i); i += 16; - ItemID = new LLUUID(bytes, i); i += 16; + QueryID.FromBytes(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + OwnerID.FromBytes(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -40585,17 +48613,38 @@ namespace libsecondlife.Packets QueryData = new QueryDataBlock(); } - public RequestInventoryAssetPacket(byte[] bytes, ref int i) + public RequestInventoryAssetPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - QueryData = new QueryDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public RequestInventoryAssetPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + QueryData.FromBytes(bytes, ref i); + } + + public RequestInventoryAssetPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - QueryData = new QueryDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + QueryData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -40640,11 +48689,16 @@ namespace libsecondlife.Packets public QueryDataBlock() { } public QueryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - QueryID = new LLUUID(bytes, i); i += 16; - AssetID = new LLUUID(bytes, i); i += 16; + QueryID.FromBytes(bytes, i); i += 16; + AssetID.FromBytes(bytes, i); i += 16; IsReadable = (bytes[i++] != 0) ? (bool)true : (bool)false; } catch (Exception) @@ -40684,17 +48738,38 @@ namespace libsecondlife.Packets QueryData = new QueryDataBlock(); } - public InventoryAssetResponsePacket(byte[] bytes, ref int i) + public InventoryAssetResponsePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - QueryData = new QueryDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public InventoryAssetResponsePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + QueryData.FromBytes(bytes, ref i); + } + + public InventoryAssetResponsePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - QueryData = new QueryDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + QueryData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -40738,11 +48813,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -40781,10 +48861,15 @@ namespace libsecondlife.Packets public FolderDataBlock() { } public FolderDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - FolderID = new LLUUID(bytes, i); i += 16; + FolderID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -40821,10 +48906,15 @@ namespace libsecondlife.Packets public ItemDataBlock() { } public ItemDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ItemID = new LLUUID(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -40863,33 +48953,66 @@ namespace libsecondlife.Packets ItemData = new ItemDataBlock[0]; } - public RemoveInventoryObjectsPacket(byte[] bytes, ref int i) + public RemoveInventoryObjectsPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - FolderData = new FolderDataBlock[count]; - for (int j = 0; j < count; j++) - { FolderData[j] = new FolderDataBlock(bytes, ref i); } - count = (int)bytes[i++]; - ItemData = new ItemDataBlock[count]; - for (int j = 0; j < count; j++) - { ItemData[j] = new ItemDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public RemoveInventoryObjectsPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(FolderData.Length < count) { + FolderData = new FolderDataBlock[count]; + for(int j = 0; j < count; j++) FolderData[j] = new FolderDataBlock(); + } + for (int j = 0; j < count; j++) + { FolderData[j].FromBytes(bytes, ref i); } + count = (int)bytes[i++]; + if(ItemData.Length < count) { + ItemData = new ItemDataBlock[count]; + for(int j = 0; j < count; j++) ItemData[j] = new ItemDataBlock(); + } + for (int j = 0; j < count; j++) + { ItemData[j].FromBytes(bytes, ref i); } + } + + public RemoveInventoryObjectsPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - FolderData = new FolderDataBlock[count]; + if(FolderData.Length < count) { + FolderData = new FolderDataBlock[count]; + for(int j = 0; j < count; j++) FolderData[j] = new FolderDataBlock(); + } for (int j = 0; j < count; j++) - { FolderData[j] = new FolderDataBlock(bytes, ref i); } + { FolderData[j].FromBytes(bytes, ref i); } count = (int)bytes[i++]; - ItemData = new ItemDataBlock[count]; + if(ItemData.Length < count) { + ItemData = new ItemDataBlock[count]; + for(int j = 0; j < count; j++) ItemData[j] = new ItemDataBlock(); + } for (int j = 0; j < count; j++) - { ItemData[j] = new ItemDataBlock(bytes, ref i); } + { ItemData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -40949,11 +49072,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -40992,10 +49120,15 @@ namespace libsecondlife.Packets public InventoryDataBlock() { } public InventoryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - FolderID = new LLUUID(bytes, i); i += 16; + FolderID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -41032,19 +49165,40 @@ namespace libsecondlife.Packets InventoryData = new InventoryDataBlock(); } - public PurgeInventoryDescendentsPacket(byte[] bytes, ref int i) + public PurgeInventoryDescendentsPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - InventoryData = new InventoryDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public PurgeInventoryDescendentsPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + InventoryData.FromBytes(bytes, ref i); + } + + public PurgeInventoryDescendentsPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - InventoryData = new InventoryDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + InventoryData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -41090,11 +49244,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -41134,6 +49293,11 @@ namespace libsecondlife.Packets public UpdateDataBlock() { } public UpdateDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -41223,22 +49387,27 @@ namespace libsecondlife.Packets public InventoryDataBlock() { } public InventoryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - ItemID = new LLUUID(bytes, i); i += 16; - FolderID = new LLUUID(bytes, i); i += 16; - CreatorID = new LLUUID(bytes, i); i += 16; - OwnerID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; + FolderID.FromBytes(bytes, i); i += 16; + CreatorID.FromBytes(bytes, i); i += 16; + OwnerID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; BaseMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); OwnerMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); GroupMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); EveryoneMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); NextOwnerMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); GroupOwned = (bytes[i++] != 0) ? (bool)true : (bool)false; - TransactionID = new LLUUID(bytes, i); i += 16; + TransactionID.FromBytes(bytes, i); i += 16; Type = (sbyte)bytes[i++]; InvType = (sbyte)bytes[i++]; Flags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); @@ -41363,21 +49532,42 @@ namespace libsecondlife.Packets InventoryData = new InventoryDataBlock(); } - public UpdateTaskInventoryPacket(byte[] bytes, ref int i) + public UpdateTaskInventoryPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - UpdateData = new UpdateDataBlock(bytes, ref i); - InventoryData = new InventoryDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public UpdateTaskInventoryPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + UpdateData.FromBytes(bytes, ref i); + InventoryData.FromBytes(bytes, ref i); + } + + public UpdateTaskInventoryPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - UpdateData = new UpdateDataBlock(bytes, ref i); - InventoryData = new InventoryDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + UpdateData.FromBytes(bytes, ref i); + InventoryData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -41425,11 +49615,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -41469,11 +49664,16 @@ namespace libsecondlife.Packets public InventoryDataBlock() { } public InventoryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { LocalID = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - ItemID = new LLUUID(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -41515,19 +49715,40 @@ namespace libsecondlife.Packets InventoryData = new InventoryDataBlock(); } - public RemoveTaskInventoryPacket(byte[] bytes, ref int i) + public RemoveTaskInventoryPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - InventoryData = new InventoryDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public RemoveTaskInventoryPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + InventoryData.FromBytes(bytes, ref i); + } + + public RemoveTaskInventoryPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - InventoryData = new InventoryDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + InventoryData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -41574,12 +49795,17 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; - FolderID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; + FolderID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -41621,11 +49847,16 @@ namespace libsecondlife.Packets public InventoryDataBlock() { } public InventoryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { LocalID = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - ItemID = new LLUUID(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -41667,19 +49898,40 @@ namespace libsecondlife.Packets InventoryData = new InventoryDataBlock(); } - public MoveTaskInventoryPacket(byte[] bytes, ref int i) + public MoveTaskInventoryPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - InventoryData = new InventoryDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public MoveTaskInventoryPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + InventoryData.FromBytes(bytes, ref i); + } + + public MoveTaskInventoryPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - InventoryData = new InventoryDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + InventoryData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -41725,11 +49977,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -41768,6 +50025,11 @@ namespace libsecondlife.Packets public InventoryDataBlock() { } public InventoryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -41811,19 +50073,40 @@ namespace libsecondlife.Packets InventoryData = new InventoryDataBlock(); } - public RequestTaskInventoryPacket(byte[] bytes, ref int i) + public RequestTaskInventoryPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - InventoryData = new InventoryDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public RequestTaskInventoryPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + InventoryData.FromBytes(bytes, ref i); + } + + public RequestTaskInventoryPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - InventoryData = new InventoryDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + InventoryData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -41882,11 +50165,16 @@ namespace libsecondlife.Packets public InventoryDataBlock() { } public InventoryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - TaskID = new LLUUID(bytes, i); i += 16; + TaskID.FromBytes(bytes, i); i += 16; Serial = (short)(bytes[i++] + (bytes[i++] << 8)); length = (ushort)bytes[i++]; _filename = new byte[length]; @@ -41932,17 +50220,38 @@ namespace libsecondlife.Packets InventoryData = new InventoryDataBlock(); } - public ReplyTaskInventoryPacket(byte[] bytes, ref int i) + public ReplyTaskInventoryPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - InventoryData = new InventoryDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ReplyTaskInventoryPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + InventoryData.FromBytes(bytes, ref i); + } + + public ReplyTaskInventoryPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - InventoryData = new InventoryDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + InventoryData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -41986,11 +50295,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -42034,13 +50348,18 @@ namespace libsecondlife.Packets public AgentBlockBlock() { } public AgentBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - GroupID = new LLUUID(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; Destination = (byte)bytes[i++]; - DestinationID = new LLUUID(bytes, i); i += 16; - TransactionID = new LLUUID(bytes, i); i += 16; + DestinationID.FromBytes(bytes, i); i += 16; + TransactionID.FromBytes(bytes, i); i += 16; PacketCount = (byte)bytes[i++]; PacketNumber = (byte)bytes[i++]; } @@ -42089,6 +50408,11 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -42134,27 +50458,54 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public DeRezObjectPacket(byte[] bytes, ref int i) + public DeRezObjectPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - AgentBlock = new AgentBlockBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public DeRezObjectPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + AgentBlock.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public DeRezObjectPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - AgentBlock = new AgentBlockBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + AgentBlock.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -42208,10 +50559,15 @@ namespace libsecondlife.Packets public TransactionDataBlock() { } public TransactionDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - TransactionID = new LLUUID(bytes, i); i += 16; + TransactionID.FromBytes(bytes, i); i += 16; Success = (bytes[i++] != 0) ? (bool)true : (bool)false; } catch (Exception) @@ -42249,17 +50605,38 @@ namespace libsecondlife.Packets TransactionData = new TransactionDataBlock(); } - public DeRezAckPacket(byte[] bytes, ref int i) + public DeRezAckPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - TransactionData = new TransactionDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public DeRezAckPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + TransactionData.FromBytes(bytes, ref i); + } + + public DeRezAckPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - TransactionData = new TransactionDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + TransactionData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -42304,12 +50681,17 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -42361,14 +50743,19 @@ namespace libsecondlife.Packets public RezDataBlock() { } public RezDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - FromTaskID = new LLUUID(bytes, i); i += 16; + FromTaskID.FromBytes(bytes, i); i += 16; BypassRaycast = (byte)bytes[i++]; - RayStart = new LLVector3(bytes, i); i += 12; - RayEnd = new LLVector3(bytes, i); i += 12; - RayTargetID = new LLUUID(bytes, i); i += 16; + RayStart.FromBytes(bytes, i); i += 12; + RayEnd.FromBytes(bytes, i); i += 12; + RayTargetID.FromBytes(bytes, i); i += 16; RayEndIsIntersection = (bytes[i++] != 0) ? (bool)true : (bool)false; RezSelected = (bytes[i++] != 0) ? (bool)true : (bool)false; RemoveItem = (bytes[i++] != 0) ? (bool)true : (bool)false; @@ -42489,22 +50876,27 @@ namespace libsecondlife.Packets public InventoryDataBlock() { } public InventoryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - ItemID = new LLUUID(bytes, i); i += 16; - FolderID = new LLUUID(bytes, i); i += 16; - CreatorID = new LLUUID(bytes, i); i += 16; - OwnerID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; + FolderID.FromBytes(bytes, i); i += 16; + CreatorID.FromBytes(bytes, i); i += 16; + OwnerID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; BaseMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); OwnerMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); GroupMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); EveryoneMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); NextOwnerMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); GroupOwned = (bytes[i++] != 0) ? (bool)true : (bool)false; - TransactionID = new LLUUID(bytes, i); i += 16; + TransactionID.FromBytes(bytes, i); i += 16; Type = (sbyte)bytes[i++]; InvType = (sbyte)bytes[i++]; Flags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); @@ -42629,21 +51021,42 @@ namespace libsecondlife.Packets InventoryData = new InventoryDataBlock(); } - public RezObjectPacket(byte[] bytes, ref int i) + public RezObjectPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - RezData = new RezDataBlock(bytes, ref i); - InventoryData = new InventoryDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public RezObjectPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + RezData.FromBytes(bytes, ref i); + InventoryData.FromBytes(bytes, ref i); + } + + public RezObjectPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - RezData = new RezDataBlock(bytes, ref i); - InventoryData = new InventoryDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + RezData.FromBytes(bytes, ref i); + InventoryData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -42692,12 +51105,17 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -42749,14 +51167,19 @@ namespace libsecondlife.Packets public RezDataBlock() { } public RezDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - FromTaskID = new LLUUID(bytes, i); i += 16; + FromTaskID.FromBytes(bytes, i); i += 16; BypassRaycast = (byte)bytes[i++]; - RayStart = new LLVector3(bytes, i); i += 12; - RayEnd = new LLVector3(bytes, i); i += 12; - RayTargetID = new LLUUID(bytes, i); i += 16; + RayStart.FromBytes(bytes, i); i += 12; + RayEnd.FromBytes(bytes, i); i += 12; + RayTargetID.FromBytes(bytes, i); i += 16; RayEndIsIntersection = (bytes[i++] != 0) ? (bool)true : (bool)false; RezSelected = (bytes[i++] != 0) ? (bool)true : (bool)false; RemoveItem = (bytes[i++] != 0) ? (bool)true : (bool)false; @@ -42835,11 +51258,16 @@ namespace libsecondlife.Packets public NotecardDataBlock() { } public NotecardDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - NotecardItemID = new LLUUID(bytes, i); i += 16; - ObjectID = new LLUUID(bytes, i); i += 16; + NotecardItemID.FromBytes(bytes, i); i += 16; + ObjectID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -42878,10 +51306,15 @@ namespace libsecondlife.Packets public InventoryDataBlock() { } public InventoryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ItemID = new LLUUID(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -42922,29 +51355,56 @@ namespace libsecondlife.Packets InventoryData = new InventoryDataBlock[0]; } - public RezObjectFromNotecardPacket(byte[] bytes, ref int i) + public RezObjectFromNotecardPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - RezData = new RezDataBlock(bytes, ref i); - NotecardData = new NotecardDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - InventoryData = new InventoryDataBlock[count]; - for (int j = 0; j < count; j++) - { InventoryData[j] = new InventoryDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public RezObjectFromNotecardPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + RezData.FromBytes(bytes, ref i); + NotecardData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(InventoryData.Length < count) { + InventoryData = new InventoryDataBlock[count]; + for(int j = 0; j < count; j++) InventoryData[j] = new InventoryDataBlock(); + } + for (int j = 0; j < count; j++) + { InventoryData[j].FromBytes(bytes, ref i); } + } + + public RezObjectFromNotecardPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - RezData = new RezDataBlock(bytes, ref i); - NotecardData = new NotecardDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + RezData.FromBytes(bytes, ref i); + NotecardData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - InventoryData = new InventoryDataBlock[count]; + if(InventoryData.Length < count) { + InventoryData = new InventoryDataBlock[count]; + for(int j = 0; j < count; j++) InventoryData[j] = new InventoryDataBlock(); + } for (int j = 0; j < count; j++) - { InventoryData[j] = new InventoryDataBlock(bytes, ref i); } + { InventoryData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -43000,11 +51460,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -43043,10 +51508,15 @@ namespace libsecondlife.Packets public TransactionBlockBlock() { } public TransactionBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - TransactionID = new LLUUID(bytes, i); i += 16; + TransactionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -43083,10 +51553,15 @@ namespace libsecondlife.Packets public FolderDataBlock() { } public FolderDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - FolderID = new LLUUID(bytes, i); i += 16; + FolderID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -43125,27 +51600,54 @@ namespace libsecondlife.Packets FolderData = new FolderDataBlock[0]; } - public AcceptFriendshipPacket(byte[] bytes, ref int i) + public AcceptFriendshipPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - TransactionBlock = new TransactionBlockBlock(bytes, ref i); - int count = (int)bytes[i++]; - FolderData = new FolderDataBlock[count]; - for (int j = 0; j < count; j++) - { FolderData[j] = new FolderDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public AcceptFriendshipPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + TransactionBlock.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(FolderData.Length < count) { + FolderData = new FolderDataBlock[count]; + for(int j = 0; j < count; j++) FolderData[j] = new FolderDataBlock(); + } + for (int j = 0; j < count; j++) + { FolderData[j].FromBytes(bytes, ref i); } + } + + public AcceptFriendshipPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - TransactionBlock = new TransactionBlockBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + TransactionBlock.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - FolderData = new FolderDataBlock[count]; + if(FolderData.Length < count) { + FolderData = new FolderDataBlock[count]; + for(int j = 0; j < count; j++) FolderData[j] = new FolderDataBlock(); + } for (int j = 0; j < count; j++) - { FolderData[j] = new FolderDataBlock(bytes, ref i); } + { FolderData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -43199,11 +51701,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -43242,10 +51749,15 @@ namespace libsecondlife.Packets public TransactionBlockBlock() { } public TransactionBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - TransactionID = new LLUUID(bytes, i); i += 16; + TransactionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -43282,19 +51794,40 @@ namespace libsecondlife.Packets TransactionBlock = new TransactionBlockBlock(); } - public DeclineFriendshipPacket(byte[] bytes, ref int i) + public DeclineFriendshipPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - TransactionBlock = new TransactionBlockBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public DeclineFriendshipPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + TransactionBlock.FromBytes(bytes, ref i); + } + + public DeclineFriendshipPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - TransactionBlock = new TransactionBlockBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + TransactionBlock.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -43340,11 +51873,16 @@ namespace libsecondlife.Packets public AgentBlockBlock() { } public AgentBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - SourceID = new LLUUID(bytes, i); i += 16; - DestID = new LLUUID(bytes, i); i += 16; + SourceID.FromBytes(bytes, i); i += 16; + DestID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -43381,17 +51919,38 @@ namespace libsecondlife.Packets AgentBlock = new AgentBlockBlock(); } - public FormFriendshipPacket(byte[] bytes, ref int i) + public FormFriendshipPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentBlock = new AgentBlockBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public FormFriendshipPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentBlock.FromBytes(bytes, ref i); + } + + public FormFriendshipPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentBlock = new AgentBlockBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentBlock.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -43435,11 +51994,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -43478,10 +52042,15 @@ namespace libsecondlife.Packets public ExBlockBlock() { } public ExBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - OtherID = new LLUUID(bytes, i); i += 16; + OtherID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -43518,19 +52087,40 @@ namespace libsecondlife.Packets ExBlock = new ExBlockBlock(); } - public TerminateFriendshipPacket(byte[] bytes, ref int i) + public TerminateFriendshipPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - ExBlock = new ExBlockBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public TerminateFriendshipPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ExBlock.FromBytes(bytes, ref i); + } + + public TerminateFriendshipPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - ExBlock = new ExBlockBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ExBlock.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -43576,11 +52166,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -43620,11 +52215,16 @@ namespace libsecondlife.Packets public AgentBlockBlock() { } public AgentBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - DestID = new LLUUID(bytes, i); i += 16; - TransactionID = new LLUUID(bytes, i); i += 16; + DestID.FromBytes(bytes, i); i += 16; + TransactionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -43663,19 +52263,40 @@ namespace libsecondlife.Packets AgentBlock = new AgentBlockBlock(); } - public OfferCallingCardPacket(byte[] bytes, ref int i) + public OfferCallingCardPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - AgentBlock = new AgentBlockBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public OfferCallingCardPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + AgentBlock.FromBytes(bytes, ref i); + } + + public OfferCallingCardPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - AgentBlock = new AgentBlockBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + AgentBlock.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -43721,11 +52342,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -43764,10 +52390,15 @@ namespace libsecondlife.Packets public TransactionBlockBlock() { } public TransactionBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - TransactionID = new LLUUID(bytes, i); i += 16; + TransactionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -43804,10 +52435,15 @@ namespace libsecondlife.Packets public FolderDataBlock() { } public FolderDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - FolderID = new LLUUID(bytes, i); i += 16; + FolderID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -43846,27 +52482,54 @@ namespace libsecondlife.Packets FolderData = new FolderDataBlock[0]; } - public AcceptCallingCardPacket(byte[] bytes, ref int i) + public AcceptCallingCardPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - TransactionBlock = new TransactionBlockBlock(bytes, ref i); - int count = (int)bytes[i++]; - FolderData = new FolderDataBlock[count]; - for (int j = 0; j < count; j++) - { FolderData[j] = new FolderDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public AcceptCallingCardPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + TransactionBlock.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(FolderData.Length < count) { + FolderData = new FolderDataBlock[count]; + for(int j = 0; j < count; j++) FolderData[j] = new FolderDataBlock(); + } + for (int j = 0; j < count; j++) + { FolderData[j].FromBytes(bytes, ref i); } + } + + public AcceptCallingCardPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - TransactionBlock = new TransactionBlockBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + TransactionBlock.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - FolderData = new FolderDataBlock[count]; + if(FolderData.Length < count) { + FolderData = new FolderDataBlock[count]; + for(int j = 0; j < count; j++) FolderData[j] = new FolderDataBlock(); + } for (int j = 0; j < count; j++) - { FolderData[j] = new FolderDataBlock(bytes, ref i); } + { FolderData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -43920,11 +52583,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -43963,10 +52631,15 @@ namespace libsecondlife.Packets public TransactionBlockBlock() { } public TransactionBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - TransactionID = new LLUUID(bytes, i); i += 16; + TransactionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -44003,19 +52676,40 @@ namespace libsecondlife.Packets TransactionBlock = new TransactionBlockBlock(); } - public DeclineCallingCardPacket(byte[] bytes, ref int i) + public DeclineCallingCardPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - TransactionBlock = new TransactionBlockBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public DeclineCallingCardPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + TransactionBlock.FromBytes(bytes, ref i); + } + + public DeclineCallingCardPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - TransactionBlock = new TransactionBlockBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + TransactionBlock.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -44062,12 +52756,17 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -44109,6 +52808,11 @@ namespace libsecondlife.Packets public UpdateBlockBlock() { } public UpdateBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -44198,22 +52902,27 @@ namespace libsecondlife.Packets public InventoryBlockBlock() { } public InventoryBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - ItemID = new LLUUID(bytes, i); i += 16; - FolderID = new LLUUID(bytes, i); i += 16; - CreatorID = new LLUUID(bytes, i); i += 16; - OwnerID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; + FolderID.FromBytes(bytes, i); i += 16; + CreatorID.FromBytes(bytes, i); i += 16; + OwnerID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; BaseMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); OwnerMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); GroupMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); EveryoneMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); NextOwnerMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); GroupOwned = (bytes[i++] != 0) ? (bool)true : (bool)false; - TransactionID = new LLUUID(bytes, i); i += 16; + TransactionID.FromBytes(bytes, i); i += 16; Type = (sbyte)bytes[i++]; InvType = (sbyte)bytes[i++]; Flags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); @@ -44338,21 +53047,42 @@ namespace libsecondlife.Packets InventoryBlock = new InventoryBlockBlock(); } - public RezScriptPacket(byte[] bytes, ref int i) + public RezScriptPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - UpdateBlock = new UpdateBlockBlock(bytes, ref i); - InventoryBlock = new InventoryBlockBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public RezScriptPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + UpdateBlock.FromBytes(bytes, ref i); + InventoryBlock.FromBytes(bytes, ref i); + } + + public RezScriptPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - UpdateBlock = new UpdateBlockBlock(bytes, ref i); - InventoryBlock = new InventoryBlockBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + UpdateBlock.FromBytes(bytes, ref i); + InventoryBlock.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -44400,11 +53130,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -44474,13 +53209,18 @@ namespace libsecondlife.Packets public InventoryBlockBlock() { } public InventoryBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { CallbackID = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - FolderID = new LLUUID(bytes, i); i += 16; - TransactionID = new LLUUID(bytes, i); i += 16; + FolderID.FromBytes(bytes, i); i += 16; + TransactionID.FromBytes(bytes, i); i += 16; NextOwnerMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); Type = (sbyte)bytes[i++]; InvType = (sbyte)bytes[i++]; @@ -44554,19 +53294,40 @@ namespace libsecondlife.Packets InventoryBlock = new InventoryBlockBlock(); } - public CreateInventoryItemPacket(byte[] bytes, ref int i) + public CreateInventoryItemPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - InventoryBlock = new InventoryBlockBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public CreateInventoryItemPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + InventoryBlock.FromBytes(bytes, ref i); + } + + public CreateInventoryItemPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - InventoryBlock = new InventoryBlockBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + InventoryBlock.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -44612,11 +53373,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -44655,6 +53421,11 @@ namespace libsecondlife.Packets public EventDataBlock() { } public EventDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -44711,11 +53482,16 @@ namespace libsecondlife.Packets public InventoryBlockBlock() { } public InventoryBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - FolderID = new LLUUID(bytes, i); i += 16; + FolderID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _name = new byte[length]; Buffer.BlockCopy(bytes, i, _name, 0, length); i += length; @@ -44761,21 +53537,42 @@ namespace libsecondlife.Packets InventoryBlock = new InventoryBlockBlock(); } - public CreateLandmarkForEventPacket(byte[] bytes, ref int i) + public CreateLandmarkForEventPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - EventData = new EventDataBlock(bytes, ref i); - InventoryBlock = new InventoryBlockBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public CreateLandmarkForEventPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + EventData.FromBytes(bytes, ref i); + InventoryBlock.FromBytes(bytes, ref i); + } + + public CreateLandmarkForEventPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - EventData = new EventDataBlock(bytes, ref i); - InventoryBlock = new InventoryBlockBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + EventData.FromBytes(bytes, ref i); + InventoryBlock.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -44822,10 +53619,15 @@ namespace libsecondlife.Packets public RequestBlockBlock() { } public RequestBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - RegionID = new LLUUID(bytes, i); i += 16; + RegionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -44860,17 +53662,38 @@ namespace libsecondlife.Packets RequestBlock = new RequestBlockBlock(); } - public RegionHandleRequestPacket(byte[] bytes, ref int i) + public RegionHandleRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - RequestBlock = new RequestBlockBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public RegionHandleRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + RequestBlock.FromBytes(bytes, ref i); + } + + public RegionHandleRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - RequestBlock = new RequestBlockBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + RequestBlock.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -44914,10 +53737,15 @@ namespace libsecondlife.Packets public ReplyBlockBlock() { } public ReplyBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - RegionID = new LLUUID(bytes, i); i += 16; + RegionID.FromBytes(bytes, i); i += 16; RegionHandle = (ulong)((ulong)bytes[i++] + ((ulong)bytes[i++] << 8) + ((ulong)bytes[i++] << 16) + ((ulong)bytes[i++] << 24) + ((ulong)bytes[i++] << 32) + ((ulong)bytes[i++] << 40) + ((ulong)bytes[i++] << 48) + ((ulong)bytes[i++] << 56)); } catch (Exception) @@ -44962,17 +53790,38 @@ namespace libsecondlife.Packets ReplyBlock = new ReplyBlockBlock(); } - public RegionIDAndHandleReplyPacket(byte[] bytes, ref int i) + public RegionIDAndHandleReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - ReplyBlock = new ReplyBlockBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public RegionIDAndHandleReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + ReplyBlock.FromBytes(bytes, ref i); + } + + public RegionIDAndHandleReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - ReplyBlock = new ReplyBlockBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + ReplyBlock.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -45016,11 +53865,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -45078,12 +53932,17 @@ namespace libsecondlife.Packets public MoneyDataBlock() { } public MoneyDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - SourceID = new LLUUID(bytes, i); i += 16; - DestID = new LLUUID(bytes, i); i += 16; + SourceID.FromBytes(bytes, i); i += 16; + DestID.FromBytes(bytes, i); i += 16; Flags = (byte)bytes[i++]; Amount = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); AggregatePermNextOwner = (byte)bytes[i++]; @@ -45150,19 +54009,40 @@ namespace libsecondlife.Packets MoneyData = new MoneyDataBlock(); } - public MoneyTransferRequestPacket(byte[] bytes, ref int i) + public MoneyTransferRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - MoneyData = new MoneyDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public MoneyTransferRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + MoneyData.FromBytes(bytes, ref i); + } + + public MoneyTransferRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - MoneyData = new MoneyDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + MoneyData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -45208,11 +54088,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -45251,10 +54136,15 @@ namespace libsecondlife.Packets public MoneyDataBlock() { } public MoneyDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - TransactionID = new LLUUID(bytes, i); i += 16; + TransactionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -45291,19 +54181,40 @@ namespace libsecondlife.Packets MoneyData = new MoneyDataBlock(); } - public MoneyBalanceRequestPacket(byte[] bytes, ref int i) + public MoneyBalanceRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - MoneyData = new MoneyDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public MoneyBalanceRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + MoneyData.FromBytes(bytes, ref i); + } + + public MoneyBalanceRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - MoneyData = new MoneyDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + MoneyData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -45366,12 +54277,17 @@ namespace libsecondlife.Packets public MoneyDataBlock() { } public MoneyDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - AgentID = new LLUUID(bytes, i); i += 16; - TransactionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + TransactionID.FromBytes(bytes, i); i += 16; TransactionSuccess = (bytes[i++] != 0) ? (bool)true : (bool)false; MoneyBalance = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); SquareMetersCredit = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); @@ -45436,17 +54352,38 @@ namespace libsecondlife.Packets MoneyData = new MoneyDataBlock(); } - public MoneyBalanceReplyPacket(byte[] bytes, ref int i) + public MoneyBalanceReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - MoneyData = new MoneyDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public MoneyBalanceReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + MoneyData.FromBytes(bytes, ref i); + } + + public MoneyBalanceReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - MoneyData = new MoneyDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + MoneyData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -45490,6 +54427,11 @@ namespace libsecondlife.Packets public TargetBlockBlock() { } public TargetBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -45555,12 +54497,17 @@ namespace libsecondlife.Packets public MoneyDataBlock() { } public MoneyDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - AgentID = new LLUUID(bytes, i); i += 16; - TransactionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + TransactionID.FromBytes(bytes, i); i += 16; TransactionSuccess = (bytes[i++] != 0) ? (bool)true : (bool)false; MoneyBalance = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); SquareMetersCredit = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); @@ -45627,19 +54574,40 @@ namespace libsecondlife.Packets MoneyData = new MoneyDataBlock(); } - public RoutedMoneyBalanceReplyPacket(byte[] bytes, ref int i) + public RoutedMoneyBalanceReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - TargetBlock = new TargetBlockBlock(bytes, ref i); - MoneyData = new MoneyDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public RoutedMoneyBalanceReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + TargetBlock.FromBytes(bytes, ref i); + MoneyData.FromBytes(bytes, ref i); + } + + public RoutedMoneyBalanceReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - TargetBlock = new TargetBlockBlock(bytes, ref i); - MoneyData = new MoneyDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + TargetBlock.FromBytes(bytes, ref i); + MoneyData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -45686,11 +54654,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; Flags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -45737,11 +54710,16 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ItemID = new LLUUID(bytes, i); i += 16; - AssetID = new LLUUID(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; + AssetID.FromBytes(bytes, i); i += 16; GestureFlags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -45786,25 +54764,52 @@ namespace libsecondlife.Packets Data = new DataBlock[0]; } - public ActivateGesturesPacket(byte[] bytes, ref int i) + public ActivateGesturesPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - Data = new DataBlock[count]; - for (int j = 0; j < count; j++) - { Data[j] = new DataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ActivateGesturesPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(Data.Length < count) { + Data = new DataBlock[count]; + for(int j = 0; j < count; j++) Data[j] = new DataBlock(); + } + for (int j = 0; j < count; j++) + { Data[j].FromBytes(bytes, ref i); } + } + + public ActivateGesturesPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - Data = new DataBlock[count]; + if(Data.Length < count) { + Data = new DataBlock[count]; + for(int j = 0; j < count; j++) Data[j] = new DataBlock(); + } for (int j = 0; j < count; j++) - { Data[j] = new DataBlock(bytes, ref i); } + { Data[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -45857,11 +54862,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; Flags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -45907,10 +54917,15 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ItemID = new LLUUID(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; GestureFlags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -45953,25 +54968,52 @@ namespace libsecondlife.Packets Data = new DataBlock[0]; } - public DeactivateGesturesPacket(byte[] bytes, ref int i) + public DeactivateGesturesPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - Data = new DataBlock[count]; - for (int j = 0; j < count; j++) - { Data[j] = new DataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public DeactivateGesturesPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(Data.Length < count) { + Data = new DataBlock[count]; + for(int j = 0; j < count; j++) Data[j] = new DataBlock(); + } + for (int j = 0; j < count; j++) + { Data[j].FromBytes(bytes, ref i); } + } + + public DeactivateGesturesPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - Data = new DataBlock[count]; + if(Data.Length < count) { + Data = new DataBlock[count]; + for(int j = 0; j < count; j++) Data[j] = new DataBlock(); + } for (int j = 0; j < count; j++) - { Data[j] = new DataBlock(bytes, ref i); } + { Data[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -46035,11 +55077,16 @@ namespace libsecondlife.Packets public MuteDataBlock() { } public MuteDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _filename = new byte[length]; Buffer.BlockCopy(bytes, i, _filename, 0, length); i += length; @@ -46081,17 +55128,38 @@ namespace libsecondlife.Packets MuteData = new MuteDataBlock(); } - public MuteListUpdatePacket(byte[] bytes, ref int i) + public MuteListUpdatePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - MuteData = new MuteDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public MuteListUpdatePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + MuteData.FromBytes(bytes, ref i); + } + + public MuteListUpdatePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - MuteData = new MuteDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + MuteData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -46134,10 +55202,15 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -46172,17 +55245,38 @@ namespace libsecondlife.Packets AgentData = new AgentDataBlock(); } - public UseCachedMuteListPacket(byte[] bytes, ref int i) + public UseCachedMuteListPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public UseCachedMuteListPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + } + + public UseCachedMuteListPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -46226,11 +55320,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -46270,10 +55369,15 @@ namespace libsecondlife.Packets public RightsBlock() { } public RightsBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentRelated = new LLUUID(bytes, i); i += 16; + AgentRelated.FromBytes(bytes, i); i += 16; RelatedRights = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -46316,25 +55420,52 @@ namespace libsecondlife.Packets Rights = new RightsBlock[0]; } - public GrantUserRightsPacket(byte[] bytes, ref int i) + public GrantUserRightsPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - Rights = new RightsBlock[count]; - for (int j = 0; j < count; j++) - { Rights[j] = new RightsBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public GrantUserRightsPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(Rights.Length < count) { + Rights = new RightsBlock[count]; + for(int j = 0; j < count; j++) Rights[j] = new RightsBlock(); + } + for (int j = 0; j < count; j++) + { Rights[j].FromBytes(bytes, ref i); } + } + + public GrantUserRightsPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - Rights = new RightsBlock[count]; + if(Rights.Length < count) { + Rights = new RightsBlock[count]; + for(int j = 0; j < count; j++) Rights[j] = new RightsBlock(); + } for (int j = 0; j < count; j++) - { Rights[j] = new RightsBlock(bytes, ref i); } + { Rights[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -46385,10 +55516,15 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -46426,10 +55562,15 @@ namespace libsecondlife.Packets public RightsBlock() { } public RightsBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentRelated = new LLUUID(bytes, i); i += 16; + AgentRelated.FromBytes(bytes, i); i += 16; RelatedRights = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -46472,25 +55613,52 @@ namespace libsecondlife.Packets Rights = new RightsBlock[0]; } - public ChangeUserRightsPacket(byte[] bytes, ref int i) + public ChangeUserRightsPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - Rights = new RightsBlock[count]; - for (int j = 0; j < count; j++) - { Rights[j] = new RightsBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ChangeUserRightsPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(Rights.Length < count) { + Rights = new RightsBlock[count]; + for(int j = 0; j < count; j++) Rights[j] = new RightsBlock(); + } + for (int j = 0; j < count; j++) + { Rights[j].FromBytes(bytes, ref i); } + } + + public ChangeUserRightsPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - Rights = new RightsBlock[count]; + if(Rights.Length < count) { + Rights = new RightsBlock[count]; + for(int j = 0; j < count; j++) Rights[j] = new RightsBlock(); + } for (int j = 0; j < count; j++) - { Rights[j] = new RightsBlock(bytes, ref i); } + { Rights[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -46541,10 +55709,15 @@ namespace libsecondlife.Packets public AgentBlockBlock() { } public AgentBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -46579,23 +55752,50 @@ namespace libsecondlife.Packets AgentBlock = new AgentBlockBlock[0]; } - public OnlineNotificationPacket(byte[] bytes, ref int i) + public OnlineNotificationPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - int count = (int)bytes[i++]; - AgentBlock = new AgentBlockBlock[count]; - for (int j = 0; j < count; j++) - { AgentBlock[j] = new AgentBlockBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public OnlineNotificationPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + int count = (int)bytes[i++]; + if(AgentBlock.Length < count) { + AgentBlock = new AgentBlockBlock[count]; + for(int j = 0; j < count; j++) AgentBlock[j] = new AgentBlockBlock(); + } + for (int j = 0; j < count; j++) + { AgentBlock[j].FromBytes(bytes, ref i); } + } + + public OnlineNotificationPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } int count = (int)bytes[i++]; - AgentBlock = new AgentBlockBlock[count]; + if(AgentBlock.Length < count) { + AgentBlock = new AgentBlockBlock[count]; + for(int j = 0; j < count; j++) AgentBlock[j] = new AgentBlockBlock(); + } for (int j = 0; j < count; j++) - { AgentBlock[j] = new AgentBlockBlock(bytes, ref i); } + { AgentBlock[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -46644,10 +55844,15 @@ namespace libsecondlife.Packets public AgentBlockBlock() { } public AgentBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -46682,23 +55887,50 @@ namespace libsecondlife.Packets AgentBlock = new AgentBlockBlock[0]; } - public OfflineNotificationPacket(byte[] bytes, ref int i) + public OfflineNotificationPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - int count = (int)bytes[i++]; - AgentBlock = new AgentBlockBlock[count]; - for (int j = 0; j < count; j++) - { AgentBlock[j] = new AgentBlockBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public OfflineNotificationPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + int count = (int)bytes[i++]; + if(AgentBlock.Length < count) { + AgentBlock = new AgentBlockBlock[count]; + for(int j = 0; j < count; j++) AgentBlock[j] = new AgentBlockBlock(); + } + for (int j = 0; j < count; j++) + { AgentBlock[j].FromBytes(bytes, ref i); } + } + + public OfflineNotificationPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } int count = (int)bytes[i++]; - AgentBlock = new AgentBlockBlock[count]; + if(AgentBlock.Length < count) { + AgentBlock = new AgentBlockBlock[count]; + for(int j = 0; j < count; j++) AgentBlock[j] = new AgentBlockBlock(); + } for (int j = 0; j < count; j++) - { AgentBlock[j] = new AgentBlockBlock(bytes, ref i); } + { AgentBlock[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -46748,11 +55980,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -46806,6 +56043,11 @@ namespace libsecondlife.Packets public StartLocationDataBlock() { } public StartLocationDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -46814,8 +56056,8 @@ namespace libsecondlife.Packets _simname = new byte[length]; Buffer.BlockCopy(bytes, i, _simname, 0, length); i += length; LocationID = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - LocationPos = new LLVector3(bytes, i); i += 12; - LocationLookAt = new LLVector3(bytes, i); i += 12; + LocationPos.FromBytes(bytes, i); i += 12; + LocationLookAt.FromBytes(bytes, i); i += 12; } catch (Exception) { @@ -46864,19 +56106,40 @@ namespace libsecondlife.Packets StartLocationData = new StartLocationDataBlock(); } - public SetStartLocationRequestPacket(byte[] bytes, ref int i) + public SetStartLocationRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - StartLocationData = new StartLocationDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public SetStartLocationRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + StartLocationData.FromBytes(bytes, ref i); + } + + public SetStartLocationRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - StartLocationData = new StartLocationDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + StartLocationData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -46937,11 +56200,16 @@ namespace libsecondlife.Packets public AssetBlockBlock() { } public AssetBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - TransactionID = new LLUUID(bytes, i); i += 16; + TransactionID.FromBytes(bytes, i); i += 16; Type = (sbyte)bytes[i++]; Tempfile = (bytes[i++] != 0) ? (bool)true : (bool)false; StoreLocal = (bytes[i++] != 0) ? (bool)true : (bool)false; @@ -46993,17 +56261,38 @@ namespace libsecondlife.Packets AssetBlock = new AssetBlockBlock(); } - public AssetUploadRequestPacket(byte[] bytes, ref int i) + public AssetUploadRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AssetBlock = new AssetBlockBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public AssetUploadRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AssetBlock.FromBytes(bytes, ref i); + } + + public AssetUploadRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AssetBlock = new AssetBlockBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AssetBlock.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -47048,10 +56337,15 @@ namespace libsecondlife.Packets public AssetBlockBlock() { } public AssetBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - UUID = new LLUUID(bytes, i); i += 16; + UUID.FromBytes(bytes, i); i += 16; Type = (sbyte)bytes[i++]; Success = (bytes[i++] != 0) ? (bool)true : (bool)false; } @@ -47092,17 +56386,38 @@ namespace libsecondlife.Packets AssetBlock = new AssetBlockBlock(); } - public AssetUploadCompletePacket(byte[] bytes, ref int i) + public AssetUploadCompletePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AssetBlock = new AssetBlockBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public AssetUploadCompletePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AssetBlock.FromBytes(bytes, ref i); + } + + public AssetUploadCompletePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AssetBlock = new AssetBlockBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AssetBlock.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -47146,11 +56461,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -47219,6 +56539,11 @@ namespace libsecondlife.Packets public GroupDataBlock() { } public GroupDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -47230,7 +56555,7 @@ namespace libsecondlife.Packets _charter = new byte[length]; Buffer.BlockCopy(bytes, i, _charter, 0, length); i += length; ShowInList = (bytes[i++] != 0) ? (bool)true : (bool)false; - InsigniaID = new LLUUID(bytes, i); i += 16; + InsigniaID.FromBytes(bytes, i); i += 16; MembershipFee = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); OpenEnrollment = (bytes[i++] != 0) ? (bool)true : (bool)false; AllowPublish = (bytes[i++] != 0) ? (bool)true : (bool)false; @@ -47295,19 +56620,40 @@ namespace libsecondlife.Packets GroupData = new GroupDataBlock(); } - public CreateGroupRequestPacket(byte[] bytes, ref int i) + public CreateGroupRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public CreateGroupRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); + } + + public CreateGroupRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -47352,10 +56698,15 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -47406,11 +56757,16 @@ namespace libsecondlife.Packets public ReplyDataBlock() { } public ReplyDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - GroupID = new LLUUID(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; Success = (bytes[i++] != 0) ? (bool)true : (bool)false; length = (ushort)bytes[i++]; _message = new byte[length]; @@ -47457,19 +56813,40 @@ namespace libsecondlife.Packets ReplyData = new ReplyDataBlock(); } - public CreateGroupReplyPacket(byte[] bytes, ref int i) + public CreateGroupReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - ReplyData = new ReplyDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public CreateGroupReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ReplyData.FromBytes(bytes, ref i); + } + + public CreateGroupReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - ReplyData = new ReplyDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ReplyData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -47515,11 +56892,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -47577,16 +56959,21 @@ namespace libsecondlife.Packets public GroupDataBlock() { } public GroupDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - GroupID = new LLUUID(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; length = (ushort)(bytes[i++] + (bytes[i++] << 8)); _charter = new byte[length]; Buffer.BlockCopy(bytes, i, _charter, 0, length); i += length; ShowInList = (bytes[i++] != 0) ? (bool)true : (bool)false; - InsigniaID = new LLUUID(bytes, i); i += 16; + InsigniaID.FromBytes(bytes, i); i += 16; MembershipFee = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); OpenEnrollment = (bytes[i++] != 0) ? (bool)true : (bool)false; AllowPublish = (bytes[i++] != 0) ? (bool)true : (bool)false; @@ -47648,19 +57035,40 @@ namespace libsecondlife.Packets GroupData = new GroupDataBlock(); } - public UpdateGroupInfoPacket(byte[] bytes, ref int i) + public UpdateGroupInfoPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public UpdateGroupInfoPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); + } + + public UpdateGroupInfoPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -47707,12 +57115,17 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -47755,11 +57168,16 @@ namespace libsecondlife.Packets public RoleChangeBlock() { } public RoleChangeBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - RoleID = new LLUUID(bytes, i); i += 16; - MemberID = new LLUUID(bytes, i); i += 16; + RoleID.FromBytes(bytes, i); i += 16; + MemberID.FromBytes(bytes, i); i += 16; Change = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -47804,25 +57222,52 @@ namespace libsecondlife.Packets RoleChange = new RoleChangeBlock[0]; } - public GroupRoleChangesPacket(byte[] bytes, ref int i) + public GroupRoleChangesPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - RoleChange = new RoleChangeBlock[count]; - for (int j = 0; j < count; j++) - { RoleChange[j] = new RoleChangeBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public GroupRoleChangesPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(RoleChange.Length < count) { + RoleChange = new RoleChangeBlock[count]; + for(int j = 0; j < count; j++) RoleChange[j] = new RoleChangeBlock(); + } + for (int j = 0; j < count; j++) + { RoleChange[j].FromBytes(bytes, ref i); } + } + + public GroupRoleChangesPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - RoleChange = new RoleChangeBlock[count]; + if(RoleChange.Length < count) { + RoleChange = new RoleChangeBlock[count]; + for(int j = 0; j < count; j++) RoleChange[j] = new RoleChangeBlock(); + } for (int j = 0; j < count; j++) - { RoleChange[j] = new RoleChangeBlock(bytes, ref i); } + { RoleChange[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -47874,11 +57319,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -47917,10 +57367,15 @@ namespace libsecondlife.Packets public GroupDataBlock() { } public GroupDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - GroupID = new LLUUID(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -47957,19 +57412,40 @@ namespace libsecondlife.Packets GroupData = new GroupDataBlock(); } - public JoinGroupRequestPacket(byte[] bytes, ref int i) + public JoinGroupRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public JoinGroupRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); + } + + public JoinGroupRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -48014,10 +57490,15 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -48055,10 +57536,15 @@ namespace libsecondlife.Packets public GroupDataBlock() { } public GroupDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - GroupID = new LLUUID(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; Success = (bytes[i++] != 0) ? (bool)true : (bool)false; } catch (Exception) @@ -48098,19 +57584,40 @@ namespace libsecondlife.Packets GroupData = new GroupDataBlock(); } - public JoinGroupReplyPacket(byte[] bytes, ref int i) + public JoinGroupReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public JoinGroupReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); + } + + public JoinGroupReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -48156,11 +57663,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -48199,10 +57711,15 @@ namespace libsecondlife.Packets public GroupDataBlock() { } public GroupDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - GroupID = new LLUUID(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -48239,10 +57756,15 @@ namespace libsecondlife.Packets public EjectDataBlock() { } public EjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - EjecteeID = new LLUUID(bytes, i); i += 16; + EjecteeID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -48281,27 +57803,54 @@ namespace libsecondlife.Packets EjectData = new EjectDataBlock[0]; } - public EjectGroupMemberRequestPacket(byte[] bytes, ref int i) + public EjectGroupMemberRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - EjectData = new EjectDataBlock[count]; - for (int j = 0; j < count; j++) - { EjectData[j] = new EjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public EjectGroupMemberRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(EjectData.Length < count) { + EjectData = new EjectDataBlock[count]; + for(int j = 0; j < count; j++) EjectData[j] = new EjectDataBlock(); + } + for (int j = 0; j < count; j++) + { EjectData[j].FromBytes(bytes, ref i); } + } + + public EjectGroupMemberRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - EjectData = new EjectDataBlock[count]; + if(EjectData.Length < count) { + EjectData = new EjectDataBlock[count]; + for(int j = 0; j < count; j++) EjectData[j] = new EjectDataBlock(); + } for (int j = 0; j < count; j++) - { EjectData[j] = new EjectDataBlock(bytes, ref i); } + { EjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -48354,10 +57903,15 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -48394,10 +57948,15 @@ namespace libsecondlife.Packets public GroupDataBlock() { } public GroupDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - GroupID = new LLUUID(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -48434,6 +57993,11 @@ namespace libsecondlife.Packets public EjectDataBlock() { } public EjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -48476,21 +58040,42 @@ namespace libsecondlife.Packets EjectData = new EjectDataBlock(); } - public EjectGroupMemberReplyPacket(byte[] bytes, ref int i) + public EjectGroupMemberReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); - EjectData = new EjectDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public EjectGroupMemberReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); + EjectData.FromBytes(bytes, ref i); + } + + public EjectGroupMemberReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); - EjectData = new EjectDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); + EjectData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -48538,11 +58123,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -48581,10 +58171,15 @@ namespace libsecondlife.Packets public GroupDataBlock() { } public GroupDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - GroupID = new LLUUID(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -48621,19 +58216,40 @@ namespace libsecondlife.Packets GroupData = new GroupDataBlock(); } - public LeaveGroupRequestPacket(byte[] bytes, ref int i) + public LeaveGroupRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public LeaveGroupRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); + } + + public LeaveGroupRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -48678,10 +58294,15 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -48719,10 +58340,15 @@ namespace libsecondlife.Packets public GroupDataBlock() { } public GroupDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - GroupID = new LLUUID(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; Success = (bytes[i++] != 0) ? (bool)true : (bool)false; } catch (Exception) @@ -48762,19 +58388,40 @@ namespace libsecondlife.Packets GroupData = new GroupDataBlock(); } - public LeaveGroupReplyPacket(byte[] bytes, ref int i) + public LeaveGroupReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public LeaveGroupReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); + } + + public LeaveGroupReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -48820,11 +58467,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -48863,10 +58515,15 @@ namespace libsecondlife.Packets public GroupDataBlock() { } public GroupDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - GroupID = new LLUUID(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -48904,11 +58561,16 @@ namespace libsecondlife.Packets public InviteDataBlock() { } public InviteDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - InviteeID = new LLUUID(bytes, i); i += 16; - RoleID = new LLUUID(bytes, i); i += 16; + InviteeID.FromBytes(bytes, i); i += 16; + RoleID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -48949,27 +58611,54 @@ namespace libsecondlife.Packets InviteData = new InviteDataBlock[0]; } - public InviteGroupRequestPacket(byte[] bytes, ref int i) + public InviteGroupRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - InviteData = new InviteDataBlock[count]; - for (int j = 0; j < count; j++) - { InviteData[j] = new InviteDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public InviteGroupRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(InviteData.Length < count) { + InviteData = new InviteDataBlock[count]; + for(int j = 0; j < count; j++) InviteData[j] = new InviteDataBlock(); + } + for (int j = 0; j < count; j++) + { InviteData[j].FromBytes(bytes, ref i); } + } + + public InviteGroupRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - InviteData = new InviteDataBlock[count]; + if(InviteData.Length < count) { + InviteData = new InviteDataBlock[count]; + for(int j = 0; j < count; j++) InviteData[j] = new InviteDataBlock(); + } for (int j = 0; j < count; j++) - { InviteData[j] = new InviteDataBlock(bytes, ref i); } + { InviteData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -49023,11 +58712,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -49066,10 +58760,15 @@ namespace libsecondlife.Packets public GroupDataBlock() { } public GroupDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - GroupID = new LLUUID(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -49106,19 +58805,40 @@ namespace libsecondlife.Packets GroupData = new GroupDataBlock(); } - public GroupProfileRequestPacket(byte[] bytes, ref int i) + public GroupProfileRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public GroupProfileRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); + } + + public GroupProfileRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -49163,10 +58883,15 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -49252,11 +58977,16 @@ namespace libsecondlife.Packets public GroupDataBlock() { } public GroupDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - GroupID = new LLUUID(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _name = new byte[length]; Buffer.BlockCopy(bytes, i, _name, 0, length); i += length; @@ -49268,8 +58998,8 @@ namespace libsecondlife.Packets _membertitle = new byte[length]; Buffer.BlockCopy(bytes, i, _membertitle, 0, length); i += length; PowersMask = (ulong)((ulong)bytes[i++] + ((ulong)bytes[i++] << 8) + ((ulong)bytes[i++] << 16) + ((ulong)bytes[i++] << 24) + ((ulong)bytes[i++] << 32) + ((ulong)bytes[i++] << 40) + ((ulong)bytes[i++] << 48) + ((ulong)bytes[i++] << 56)); - InsigniaID = new LLUUID(bytes, i); i += 16; - FounderID = new LLUUID(bytes, i); i += 16; + InsigniaID.FromBytes(bytes, i); i += 16; + FounderID.FromBytes(bytes, i); i += 16; MembershipFee = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); OpenEnrollment = (bytes[i++] != 0) ? (bool)true : (bool)false; Money = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); @@ -49277,7 +59007,7 @@ namespace libsecondlife.Packets GroupRolesCount = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); AllowPublish = (bytes[i++] != 0) ? (bool)true : (bool)false; MaturePublish = (bytes[i++] != 0) ? (bool)true : (bool)false; - OwnerRole = new LLUUID(bytes, i); i += 16; + OwnerRole.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -49373,19 +59103,40 @@ namespace libsecondlife.Packets GroupData = new GroupDataBlock(); } - public GroupProfileReplyPacket(byte[] bytes, ref int i) + public GroupProfileReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public GroupProfileReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); + } + + public GroupProfileReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -49432,12 +59183,17 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -49480,10 +59236,15 @@ namespace libsecondlife.Packets public MoneyDataBlock() { } public MoneyDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - RequestID = new LLUUID(bytes, i); i += 16; + RequestID.FromBytes(bytes, i); i += 16; IntervalDays = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); CurrentInterval = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } @@ -49532,19 +59293,40 @@ namespace libsecondlife.Packets MoneyData = new MoneyDataBlock(); } - public GroupAccountSummaryRequestPacket(byte[] bytes, ref int i) + public GroupAccountSummaryRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - MoneyData = new MoneyDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public GroupAccountSummaryRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + MoneyData.FromBytes(bytes, ref i); + } + + public GroupAccountSummaryRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - MoneyData = new MoneyDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + MoneyData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -49590,11 +59372,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -49686,11 +59473,16 @@ namespace libsecondlife.Packets public MoneyDataBlock() { } public MoneyDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - RequestID = new LLUUID(bytes, i); i += 16; + RequestID.FromBytes(bytes, i); i += 16; IntervalDays = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); CurrentInterval = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); length = (ushort)bytes[i++]; @@ -49846,19 +59638,40 @@ namespace libsecondlife.Packets MoneyData = new MoneyDataBlock(); } - public GroupAccountSummaryReplyPacket(byte[] bytes, ref int i) + public GroupAccountSummaryReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - MoneyData = new MoneyDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public GroupAccountSummaryReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + MoneyData.FromBytes(bytes, ref i); + } + + public GroupAccountSummaryReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - MoneyData = new MoneyDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + MoneyData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -49905,12 +59718,17 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -49953,10 +59771,15 @@ namespace libsecondlife.Packets public MoneyDataBlock() { } public MoneyDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - RequestID = new LLUUID(bytes, i); i += 16; + RequestID.FromBytes(bytes, i); i += 16; IntervalDays = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); CurrentInterval = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } @@ -50005,19 +59828,40 @@ namespace libsecondlife.Packets MoneyData = new MoneyDataBlock(); } - public GroupAccountDetailsRequestPacket(byte[] bytes, ref int i) + public GroupAccountDetailsRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - MoneyData = new MoneyDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public GroupAccountDetailsRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + MoneyData.FromBytes(bytes, ref i); + } + + public GroupAccountDetailsRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - MoneyData = new MoneyDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + MoneyData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -50063,11 +59907,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -50121,11 +59970,16 @@ namespace libsecondlife.Packets public MoneyDataBlock() { } public MoneyDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - RequestID = new LLUUID(bytes, i); i += 16; + RequestID.FromBytes(bytes, i); i += 16; IntervalDays = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); CurrentInterval = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); length = (ushort)bytes[i++]; @@ -50194,6 +60048,11 @@ namespace libsecondlife.Packets public HistoryDataBlock() { } public HistoryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -50248,27 +60107,54 @@ namespace libsecondlife.Packets HistoryData = new HistoryDataBlock[0]; } - public GroupAccountDetailsReplyPacket(byte[] bytes, ref int i) + public GroupAccountDetailsReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - MoneyData = new MoneyDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - HistoryData = new HistoryDataBlock[count]; - for (int j = 0; j < count; j++) - { HistoryData[j] = new HistoryDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public GroupAccountDetailsReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + MoneyData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(HistoryData.Length < count) { + HistoryData = new HistoryDataBlock[count]; + for(int j = 0; j < count; j++) HistoryData[j] = new HistoryDataBlock(); + } + for (int j = 0; j < count; j++) + { HistoryData[j].FromBytes(bytes, ref i); } + } + + public GroupAccountDetailsReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - MoneyData = new MoneyDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + MoneyData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - HistoryData = new HistoryDataBlock[count]; + if(HistoryData.Length < count) { + HistoryData = new HistoryDataBlock[count]; + for(int j = 0; j < count; j++) HistoryData[j] = new HistoryDataBlock(); + } for (int j = 0; j < count; j++) - { HistoryData[j] = new HistoryDataBlock(bytes, ref i); } + { HistoryData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -50323,12 +60209,17 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -50371,10 +60262,15 @@ namespace libsecondlife.Packets public MoneyDataBlock() { } public MoneyDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - RequestID = new LLUUID(bytes, i); i += 16; + RequestID.FromBytes(bytes, i); i += 16; IntervalDays = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); CurrentInterval = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } @@ -50423,19 +60319,40 @@ namespace libsecondlife.Packets MoneyData = new MoneyDataBlock(); } - public GroupAccountTransactionsRequestPacket(byte[] bytes, ref int i) + public GroupAccountTransactionsRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - MoneyData = new MoneyDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public GroupAccountTransactionsRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + MoneyData.FromBytes(bytes, ref i); + } + + public GroupAccountTransactionsRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - MoneyData = new MoneyDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + MoneyData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -50481,11 +60398,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -50539,11 +60461,16 @@ namespace libsecondlife.Packets public MoneyDataBlock() { } public MoneyDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - RequestID = new LLUUID(bytes, i); i += 16; + RequestID.FromBytes(bytes, i); i += 16; IntervalDays = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); CurrentInterval = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); length = (ushort)bytes[i++]; @@ -50637,6 +60564,11 @@ namespace libsecondlife.Packets public HistoryDataBlock() { } public HistoryDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -50713,27 +60645,54 @@ namespace libsecondlife.Packets HistoryData = new HistoryDataBlock[0]; } - public GroupAccountTransactionsReplyPacket(byte[] bytes, ref int i) + public GroupAccountTransactionsReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - MoneyData = new MoneyDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - HistoryData = new HistoryDataBlock[count]; - for (int j = 0; j < count; j++) - { HistoryData[j] = new HistoryDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public GroupAccountTransactionsReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + MoneyData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(HistoryData.Length < count) { + HistoryData = new HistoryDataBlock[count]; + for(int j = 0; j < count; j++) HistoryData[j] = new HistoryDataBlock(); + } + for (int j = 0; j < count; j++) + { HistoryData[j].FromBytes(bytes, ref i); } + } + + public GroupAccountTransactionsReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - MoneyData = new MoneyDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + MoneyData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - HistoryData = new HistoryDataBlock[count]; + if(HistoryData.Length < count) { + HistoryData = new HistoryDataBlock[count]; + for(int j = 0; j < count; j++) HistoryData[j] = new HistoryDataBlock(); + } for (int j = 0; j < count; j++) - { HistoryData[j] = new HistoryDataBlock(bytes, ref i); } + { HistoryData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -50787,11 +60746,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -50830,10 +60794,15 @@ namespace libsecondlife.Packets public GroupDataBlock() { } public GroupDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - GroupID = new LLUUID(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -50870,10 +60839,15 @@ namespace libsecondlife.Packets public TransactionDataBlock() { } public TransactionDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - TransactionID = new LLUUID(bytes, i); i += 16; + TransactionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -50912,21 +60886,42 @@ namespace libsecondlife.Packets TransactionData = new TransactionDataBlock(); } - public GroupActiveProposalsRequestPacket(byte[] bytes, ref int i) + public GroupActiveProposalsRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); - TransactionData = new TransactionDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public GroupActiveProposalsRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); + TransactionData.FromBytes(bytes, ref i); + } + + public GroupActiveProposalsRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); - TransactionData = new TransactionDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); + TransactionData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -50974,11 +60969,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -51018,10 +61018,15 @@ namespace libsecondlife.Packets public TransactionDataBlock() { } public TransactionDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - TransactionID = new LLUUID(bytes, i); i += 16; + TransactionID.FromBytes(bytes, i); i += 16; TotalNumItems = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -51129,12 +61134,17 @@ namespace libsecondlife.Packets public ProposalDataBlock() { } public ProposalDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - VoteID = new LLUUID(bytes, i); i += 16; - VoteInitiator = new LLUUID(bytes, i); i += 16; + VoteID.FromBytes(bytes, i); i += 16; + VoteInitiator.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _tersedateid = new byte[length]; Buffer.BlockCopy(bytes, i, _tersedateid, 0, length); i += length; @@ -51230,27 +61240,54 @@ namespace libsecondlife.Packets ProposalData = new ProposalDataBlock[0]; } - public GroupActiveProposalItemReplyPacket(byte[] bytes, ref int i) + public GroupActiveProposalItemReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - TransactionData = new TransactionDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ProposalData = new ProposalDataBlock[count]; - for (int j = 0; j < count; j++) - { ProposalData[j] = new ProposalDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public GroupActiveProposalItemReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + TransactionData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ProposalData.Length < count) { + ProposalData = new ProposalDataBlock[count]; + for(int j = 0; j < count; j++) ProposalData[j] = new ProposalDataBlock(); + } + for (int j = 0; j < count; j++) + { ProposalData[j].FromBytes(bytes, ref i); } + } + + public GroupActiveProposalItemReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - TransactionData = new TransactionDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + TransactionData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ProposalData = new ProposalDataBlock[count]; + if(ProposalData.Length < count) { + ProposalData = new ProposalDataBlock[count]; + for(int j = 0; j < count; j++) ProposalData[j] = new ProposalDataBlock(); + } for (int j = 0; j < count; j++) - { ProposalData[j] = new ProposalDataBlock(bytes, ref i); } + { ProposalData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -51304,11 +61341,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -51347,10 +61389,15 @@ namespace libsecondlife.Packets public GroupDataBlock() { } public GroupDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - GroupID = new LLUUID(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -51387,10 +61434,15 @@ namespace libsecondlife.Packets public TransactionDataBlock() { } public TransactionDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - TransactionID = new LLUUID(bytes, i); i += 16; + TransactionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -51429,21 +61481,42 @@ namespace libsecondlife.Packets TransactionData = new TransactionDataBlock(); } - public GroupVoteHistoryRequestPacket(byte[] bytes, ref int i) + public GroupVoteHistoryRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); - TransactionData = new TransactionDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public GroupVoteHistoryRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); + TransactionData.FromBytes(bytes, ref i); + } + + public GroupVoteHistoryRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); - TransactionData = new TransactionDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); + TransactionData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -51491,11 +61564,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -51535,10 +61613,15 @@ namespace libsecondlife.Packets public TransactionDataBlock() { } public TransactionDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - TransactionID = new LLUUID(bytes, i); i += 16; + TransactionID.FromBytes(bytes, i); i += 16; TotalNumItems = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -51657,11 +61740,16 @@ namespace libsecondlife.Packets public HistoryItemDataBlock() { } public HistoryItemDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - VoteID = new LLUUID(bytes, i); i += 16; + VoteID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _tersedateid = new byte[length]; Buffer.BlockCopy(bytes, i, _tersedateid, 0, length); i += length; @@ -51671,7 +61759,7 @@ namespace libsecondlife.Packets length = (ushort)bytes[i++]; _enddatetime = new byte[length]; Buffer.BlockCopy(bytes, i, _enddatetime, 0, length); i += length; - VoteInitiator = new LLUUID(bytes, i); i += 16; + VoteInitiator.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _votetype = new byte[length]; Buffer.BlockCopy(bytes, i, _votetype, 0, length); i += length; @@ -51776,11 +61864,16 @@ namespace libsecondlife.Packets public VoteItemBlock() { } public VoteItemBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - CandidateID = new LLUUID(bytes, i); i += 16; + CandidateID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _votecast = new byte[length]; Buffer.BlockCopy(bytes, i, _votecast, 0, length); i += length; @@ -51835,29 +61928,56 @@ namespace libsecondlife.Packets VoteItem = new VoteItemBlock[0]; } - public GroupVoteHistoryItemReplyPacket(byte[] bytes, ref int i) + public GroupVoteHistoryItemReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - TransactionData = new TransactionDataBlock(bytes, ref i); - HistoryItemData = new HistoryItemDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - VoteItem = new VoteItemBlock[count]; - for (int j = 0; j < count; j++) - { VoteItem[j] = new VoteItemBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public GroupVoteHistoryItemReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + TransactionData.FromBytes(bytes, ref i); + HistoryItemData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(VoteItem.Length < count) { + VoteItem = new VoteItemBlock[count]; + for(int j = 0; j < count; j++) VoteItem[j] = new VoteItemBlock(); + } + for (int j = 0; j < count; j++) + { VoteItem[j].FromBytes(bytes, ref i); } + } + + public GroupVoteHistoryItemReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - TransactionData = new TransactionDataBlock(bytes, ref i); - HistoryItemData = new HistoryItemDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + TransactionData.FromBytes(bytes, ref i); + HistoryItemData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - VoteItem = new VoteItemBlock[count]; + if(VoteItem.Length < count) { + VoteItem = new VoteItemBlock[count]; + for(int j = 0; j < count; j++) VoteItem[j] = new VoteItemBlock(); + } for (int j = 0; j < count; j++) - { VoteItem[j] = new VoteItemBlock(bytes, ref i); } + { VoteItem[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -51913,11 +62033,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -51972,11 +62097,16 @@ namespace libsecondlife.Packets public ProposalDataBlock() { } public ProposalDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - GroupID = new LLUUID(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; Quorum = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); if (!BitConverter.IsLittleEndian) Array.Reverse(bytes, i, 4); Majority = BitConverter.ToSingle(bytes, i); i += 4; @@ -52039,19 +62169,40 @@ namespace libsecondlife.Packets ProposalData = new ProposalDataBlock(); } - public StartGroupProposalPacket(byte[] bytes, ref int i) + public StartGroupProposalPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - ProposalData = new ProposalDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public StartGroupProposalPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ProposalData.FromBytes(bytes, ref i); + } + + public StartGroupProposalPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - ProposalData = new ProposalDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ProposalData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -52097,11 +62248,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -52154,12 +62310,17 @@ namespace libsecondlife.Packets public ProposalDataBlock() { } public ProposalDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - ProposalID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + ProposalID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _votecast = new byte[length]; Buffer.BlockCopy(bytes, i, _votecast, 0, length); i += length; @@ -52205,19 +62366,40 @@ namespace libsecondlife.Packets ProposalData = new ProposalDataBlock(); } - public GroupProposalBallotPacket(byte[] bytes, ref int i) + public GroupProposalBallotPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - ProposalData = new ProposalDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public GroupProposalBallotPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ProposalData.FromBytes(bytes, ref i); + } + + public GroupProposalBallotPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - ProposalData = new ProposalDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ProposalData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -52263,11 +62445,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -52307,11 +62494,16 @@ namespace libsecondlife.Packets public GroupDataBlock() { } public GroupDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - GroupID = new LLUUID(bytes, i); i += 16; - RequestID = new LLUUID(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; + RequestID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -52350,19 +62542,40 @@ namespace libsecondlife.Packets GroupData = new GroupDataBlock(); } - public GroupMembersRequestPacket(byte[] bytes, ref int i) + public GroupMembersRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public GroupMembersRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); + } + + public GroupMembersRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -52407,10 +62620,15 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -52449,11 +62667,16 @@ namespace libsecondlife.Packets public GroupDataBlock() { } public GroupDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - GroupID = new LLUUID(bytes, i); i += 16; - RequestID = new LLUUID(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; + RequestID.FromBytes(bytes, i); i += 16; MemberCount = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -52526,11 +62749,16 @@ namespace libsecondlife.Packets public MemberDataBlock() { } public MemberDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; Contribution = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); length = (ushort)bytes[i++]; _onlinestatus = new byte[length]; @@ -52604,27 +62832,54 @@ namespace libsecondlife.Packets MemberData = new MemberDataBlock[0]; } - public GroupMembersReplyPacket(byte[] bytes, ref int i) + public GroupMembersReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - MemberData = new MemberDataBlock[count]; - for (int j = 0; j < count; j++) - { MemberData[j] = new MemberDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public GroupMembersReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(MemberData.Length < count) { + MemberData = new MemberDataBlock[count]; + for(int j = 0; j < count; j++) MemberData[j] = new MemberDataBlock(); + } + for (int j = 0; j < count; j++) + { MemberData[j].FromBytes(bytes, ref i); } + } + + public GroupMembersReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - MemberData = new MemberDataBlock[count]; + if(MemberData.Length < count) { + MemberData = new MemberDataBlock[count]; + for(int j = 0; j < count; j++) MemberData[j] = new MemberDataBlock(); + } for (int j = 0; j < count; j++) - { MemberData[j] = new MemberDataBlock(bytes, ref i); } + { MemberData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -52679,12 +62934,17 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -52723,17 +62983,38 @@ namespace libsecondlife.Packets AgentData = new AgentDataBlock(); } - public ActivateGroupPacket(byte[] bytes, ref int i) + public ActivateGroupPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ActivateGroupPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + } + + public ActivateGroupPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -52777,11 +63058,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -52821,10 +63107,15 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - GroupID = new LLUUID(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; Contribution = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -52867,19 +63158,40 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public SetGroupContributionPacket(byte[] bytes, ref int i) + public SetGroupContributionPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public SetGroupContributionPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + } + + public SetGroupContributionPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -52925,11 +63237,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -52969,10 +63286,15 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - GroupID = new LLUUID(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; AcceptNotices = (bytes[i++] != 0) ? (bool)true : (bool)false; } catch (Exception) @@ -53012,19 +63334,40 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public SetGroupAcceptNoticesPacket(byte[] bytes, ref int i) + public SetGroupAcceptNoticesPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public SetGroupAcceptNoticesPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + } + + public SetGroupAcceptNoticesPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -53070,11 +63413,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -53114,11 +63462,16 @@ namespace libsecondlife.Packets public GroupDataBlock() { } public GroupDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - GroupID = new LLUUID(bytes, i); i += 16; - RequestID = new LLUUID(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; + RequestID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -53157,19 +63510,40 @@ namespace libsecondlife.Packets GroupData = new GroupDataBlock(); } - public GroupRoleDataRequestPacket(byte[] bytes, ref int i) + public GroupRoleDataRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public GroupRoleDataRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); + } + + public GroupRoleDataRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -53214,10 +63588,15 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -53256,11 +63635,16 @@ namespace libsecondlife.Packets public GroupDataBlock() { } public GroupDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - GroupID = new LLUUID(bytes, i); i += 16; - RequestID = new LLUUID(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; + RequestID.FromBytes(bytes, i); i += 16; RoleCount = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -53344,11 +63728,16 @@ namespace libsecondlife.Packets public RoleDataBlock() { } public RoleDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - RoleID = new LLUUID(bytes, i); i += 16; + RoleID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _name = new byte[length]; Buffer.BlockCopy(bytes, i, _name, 0, length); i += length; @@ -53427,27 +63816,54 @@ namespace libsecondlife.Packets RoleData = new RoleDataBlock[0]; } - public GroupRoleDataReplyPacket(byte[] bytes, ref int i) + public GroupRoleDataReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - RoleData = new RoleDataBlock[count]; - for (int j = 0; j < count; j++) - { RoleData[j] = new RoleDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public GroupRoleDataReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(RoleData.Length < count) { + RoleData = new RoleDataBlock[count]; + for(int j = 0; j < count; j++) RoleData[j] = new RoleDataBlock(); + } + for (int j = 0; j < count; j++) + { RoleData[j].FromBytes(bytes, ref i); } + } + + public GroupRoleDataReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - RoleData = new RoleDataBlock[count]; + if(RoleData.Length < count) { + RoleData = new RoleDataBlock[count]; + for(int j = 0; j < count; j++) RoleData[j] = new RoleDataBlock(); + } for (int j = 0; j < count; j++) - { RoleData[j] = new RoleDataBlock(bytes, ref i); } + { RoleData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -53501,11 +63917,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -53545,11 +63966,16 @@ namespace libsecondlife.Packets public GroupDataBlock() { } public GroupDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - GroupID = new LLUUID(bytes, i); i += 16; - RequestID = new LLUUID(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; + RequestID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -53588,19 +64014,40 @@ namespace libsecondlife.Packets GroupData = new GroupDataBlock(); } - public GroupRoleMembersRequestPacket(byte[] bytes, ref int i) + public GroupRoleMembersRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public GroupRoleMembersRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); + } + + public GroupRoleMembersRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - GroupData = new GroupDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + GroupData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -53648,12 +64095,17 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; - RequestID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; + RequestID.FromBytes(bytes, i); i += 16; TotalPairs = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -53701,11 +64153,16 @@ namespace libsecondlife.Packets public MemberDataBlock() { } public MemberDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - RoleID = new LLUUID(bytes, i); i += 16; - MemberID = new LLUUID(bytes, i); i += 16; + RoleID.FromBytes(bytes, i); i += 16; + MemberID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -53744,25 +64201,52 @@ namespace libsecondlife.Packets MemberData = new MemberDataBlock[0]; } - public GroupRoleMembersReplyPacket(byte[] bytes, ref int i) + public GroupRoleMembersReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - MemberData = new MemberDataBlock[count]; - for (int j = 0; j < count; j++) - { MemberData[j] = new MemberDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public GroupRoleMembersReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(MemberData.Length < count) { + MemberData = new MemberDataBlock[count]; + for(int j = 0; j < count; j++) MemberData[j] = new MemberDataBlock(); + } + for (int j = 0; j < count; j++) + { MemberData[j].FromBytes(bytes, ref i); } + } + + public GroupRoleMembersReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - MemberData = new MemberDataBlock[count]; + if(MemberData.Length < count) { + MemberData = new MemberDataBlock[count]; + for(int j = 0; j < count; j++) MemberData[j] = new MemberDataBlock(); + } for (int j = 0; j < count; j++) - { MemberData[j] = new MemberDataBlock(bytes, ref i); } + { MemberData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -53816,13 +64300,18 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; - RequestID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; + RequestID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -53863,17 +64352,38 @@ namespace libsecondlife.Packets AgentData = new AgentDataBlock(); } - public GroupTitlesRequestPacket(byte[] bytes, ref int i) + public GroupTitlesRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public GroupTitlesRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + } + + public GroupTitlesRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -53918,12 +64428,17 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; - RequestID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; + RequestID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -53978,6 +64493,11 @@ namespace libsecondlife.Packets public GroupDataBlock() { } public GroupDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -53985,7 +64505,7 @@ namespace libsecondlife.Packets length = (ushort)bytes[i++]; _title = new byte[length]; Buffer.BlockCopy(bytes, i, _title, 0, length); i += length; - RoleID = new LLUUID(bytes, i); i += 16; + RoleID.FromBytes(bytes, i); i += 16; Selected = (bytes[i++] != 0) ? (bool)true : (bool)false; } catch (Exception) @@ -54030,25 +64550,52 @@ namespace libsecondlife.Packets GroupData = new GroupDataBlock[0]; } - public GroupTitlesReplyPacket(byte[] bytes, ref int i) + public GroupTitlesReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - GroupData = new GroupDataBlock[count]; - for (int j = 0; j < count; j++) - { GroupData[j] = new GroupDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public GroupTitlesReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(GroupData.Length < count) { + GroupData = new GroupDataBlock[count]; + for(int j = 0; j < count; j++) GroupData[j] = new GroupDataBlock(); + } + for (int j = 0; j < count; j++) + { GroupData[j].FromBytes(bytes, ref i); } + } + + public GroupTitlesReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - GroupData = new GroupDataBlock[count]; + if(GroupData.Length < count) { + GroupData = new GroupDataBlock[count]; + for(int j = 0; j < count; j++) GroupData[j] = new GroupDataBlock(); + } for (int j = 0; j < count; j++) - { GroupData[j] = new GroupDataBlock(bytes, ref i); } + { GroupData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -54102,13 +64649,18 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; - TitleRoleID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; + TitleRoleID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -54149,17 +64701,38 @@ namespace libsecondlife.Packets AgentData = new AgentDataBlock(); } - public GroupTitleUpdatePacket(byte[] bytes, ref int i) + public GroupTitleUpdatePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public GroupTitleUpdatePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + } + + public GroupTitleUpdatePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -54204,12 +64777,17 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -54289,11 +64867,16 @@ namespace libsecondlife.Packets public RoleDataBlock() { } public RoleDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - RoleID = new LLUUID(bytes, i); i += 16; + RoleID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _name = new byte[length]; Buffer.BlockCopy(bytes, i, _name, 0, length); i += length; @@ -54367,25 +64950,52 @@ namespace libsecondlife.Packets RoleData = new RoleDataBlock[0]; } - public GroupRoleUpdatePacket(byte[] bytes, ref int i) + public GroupRoleUpdatePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - RoleData = new RoleDataBlock[count]; - for (int j = 0; j < count; j++) - { RoleData[j] = new RoleDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public GroupRoleUpdatePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(RoleData.Length < count) { + RoleData = new RoleDataBlock[count]; + for(int j = 0; j < count; j++) RoleData[j] = new RoleDataBlock(); + } + for (int j = 0; j < count; j++) + { RoleData[j].FromBytes(bytes, ref i); } + } + + public GroupRoleUpdatePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - RoleData = new RoleDataBlock[count]; + if(RoleData.Length < count) { + RoleData = new RoleDataBlock[count]; + for(int j = 0; j < count; j++) RoleData[j] = new RoleDataBlock(); + } for (int j = 0; j < count; j++) - { RoleData[j] = new RoleDataBlock(bytes, ref i); } + { RoleData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -54437,11 +65047,16 @@ namespace libsecondlife.Packets public RequestDataBlock() { } public RequestDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - RequestID = new LLUUID(bytes, i); i += 16; - AgentID = new LLUUID(bytes, i); i += 16; + RequestID.FromBytes(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -54478,17 +65093,38 @@ namespace libsecondlife.Packets RequestData = new RequestDataBlock(); } - public LiveHelpGroupRequestPacket(byte[] bytes, ref int i) + public LiveHelpGroupRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - RequestData = new RequestDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public LiveHelpGroupRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + RequestData.FromBytes(bytes, ref i); + } + + public LiveHelpGroupRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - RequestData = new RequestDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + RequestData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -54545,12 +65181,17 @@ namespace libsecondlife.Packets public ReplyDataBlock() { } public ReplyDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - RequestID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + RequestID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _selection = new byte[length]; Buffer.BlockCopy(bytes, i, _selection, 0, length); i += length; @@ -54594,17 +65235,38 @@ namespace libsecondlife.Packets ReplyData = new ReplyDataBlock(); } - public LiveHelpGroupReplyPacket(byte[] bytes, ref int i) + public LiveHelpGroupReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - ReplyData = new ReplyDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public LiveHelpGroupReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + ReplyData.FromBytes(bytes, ref i); + } + + public LiveHelpGroupReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - ReplyData = new ReplyDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + ReplyData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -54648,11 +65310,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -54689,17 +65356,38 @@ namespace libsecondlife.Packets AgentData = new AgentDataBlock(); } - public AgentWearablesRequestPacket(byte[] bytes, ref int i) + public AgentWearablesRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public AgentWearablesRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + } + + public AgentWearablesRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -54744,11 +65432,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; SerialNum = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -54795,11 +65488,16 @@ namespace libsecondlife.Packets public WearableDataBlock() { } public WearableDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ItemID = new LLUUID(bytes, i); i += 16; - AssetID = new LLUUID(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; + AssetID.FromBytes(bytes, i); i += 16; WearableType = (byte)bytes[i++]; } catch (Exception) @@ -54841,25 +65539,52 @@ namespace libsecondlife.Packets WearableData = new WearableDataBlock[0]; } - public AgentWearablesUpdatePacket(byte[] bytes, ref int i) + public AgentWearablesUpdatePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - WearableData = new WearableDataBlock[count]; - for (int j = 0; j < count; j++) - { WearableData[j] = new WearableDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public AgentWearablesUpdatePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(WearableData.Length < count) { + WearableData = new WearableDataBlock[count]; + for(int j = 0; j < count; j++) WearableData[j] = new WearableDataBlock(); + } + for (int j = 0; j < count; j++) + { WearableData[j].FromBytes(bytes, ref i); } + } + + public AgentWearablesUpdatePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - WearableData = new WearableDataBlock[count]; + if(WearableData.Length < count) { + WearableData = new WearableDataBlock[count]; + for(int j = 0; j < count; j++) WearableData[j] = new WearableDataBlock(); + } for (int j = 0; j < count; j++) - { WearableData[j] = new WearableDataBlock(bytes, ref i); } + { WearableData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -54911,11 +65636,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -54955,10 +65685,15 @@ namespace libsecondlife.Packets public WearableDataBlock() { } public WearableDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ItemID = new LLUUID(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; WearableType = (byte)bytes[i++]; } catch (Exception) @@ -54998,25 +65733,52 @@ namespace libsecondlife.Packets WearableData = new WearableDataBlock[0]; } - public AgentIsNowWearingPacket(byte[] bytes, ref int i) + public AgentIsNowWearingPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - WearableData = new WearableDataBlock[count]; - for (int j = 0; j < count; j++) - { WearableData[j] = new WearableDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public AgentIsNowWearingPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(WearableData.Length < count) { + WearableData = new WearableDataBlock[count]; + for(int j = 0; j < count; j++) WearableData[j] = new WearableDataBlock(); + } + for (int j = 0; j < count; j++) + { WearableData[j].FromBytes(bytes, ref i); } + } + + public AgentIsNowWearingPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - WearableData = new WearableDataBlock[count]; + if(WearableData.Length < count) { + WearableData = new WearableDataBlock[count]; + for(int j = 0; j < count; j++) WearableData[j] = new WearableDataBlock(); + } for (int j = 0; j < count; j++) - { WearableData[j] = new WearableDataBlock(bytes, ref i); } + { WearableData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -55069,11 +65831,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; SerialNum = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -55119,10 +65886,15 @@ namespace libsecondlife.Packets public WearableDataBlock() { } public WearableDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ID = new LLUUID(bytes, i); i += 16; + ID.FromBytes(bytes, i); i += 16; TextureIndex = (byte)bytes[i++]; } catch (Exception) @@ -55162,25 +65934,52 @@ namespace libsecondlife.Packets WearableData = new WearableDataBlock[0]; } - public AgentCachedTexturePacket(byte[] bytes, ref int i) + public AgentCachedTexturePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - WearableData = new WearableDataBlock[count]; - for (int j = 0; j < count; j++) - { WearableData[j] = new WearableDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public AgentCachedTexturePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(WearableData.Length < count) { + WearableData = new WearableDataBlock[count]; + for(int j = 0; j < count; j++) WearableData[j] = new WearableDataBlock(); + } + for (int j = 0; j < count; j++) + { WearableData[j].FromBytes(bytes, ref i); } + } + + public AgentCachedTexturePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - WearableData = new WearableDataBlock[count]; + if(WearableData.Length < count) { + WearableData = new WearableDataBlock[count]; + for(int j = 0; j < count; j++) WearableData[j] = new WearableDataBlock(); + } for (int j = 0; j < count; j++) - { WearableData[j] = new WearableDataBlock(bytes, ref i); } + { WearableData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -55233,11 +66032,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; SerialNum = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -55296,11 +66100,16 @@ namespace libsecondlife.Packets public WearableDataBlock() { } public WearableDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - TextureID = new LLUUID(bytes, i); i += 16; + TextureID.FromBytes(bytes, i); i += 16; TextureIndex = (byte)bytes[i++]; length = (ushort)bytes[i++]; _hostname = new byte[length]; @@ -55347,25 +66156,52 @@ namespace libsecondlife.Packets WearableData = new WearableDataBlock[0]; } - public AgentCachedTextureResponsePacket(byte[] bytes, ref int i) + public AgentCachedTextureResponsePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - WearableData = new WearableDataBlock[count]; - for (int j = 0; j < count; j++) - { WearableData[j] = new WearableDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public AgentCachedTextureResponsePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(WearableData.Length < count) { + WearableData = new WearableDataBlock[count]; + for(int j = 0; j < count; j++) WearableData[j] = new WearableDataBlock(); + } + for (int j = 0; j < count; j++) + { WearableData[j].FromBytes(bytes, ref i); } + } + + public AgentCachedTextureResponsePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - WearableData = new WearableDataBlock[count]; + if(WearableData.Length < count) { + WearableData = new WearableDataBlock[count]; + for(int j = 0; j < count; j++) WearableData[j] = new WearableDataBlock(); + } for (int j = 0; j < count; j++) - { WearableData[j] = new WearableDataBlock(bytes, ref i); } + { WearableData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -55417,11 +66253,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -55458,17 +66299,38 @@ namespace libsecondlife.Packets AgentData = new AgentDataBlock(); } - public AgentDataUpdateRequestPacket(byte[] bytes, ref int i) + public AgentDataUpdateRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public AgentDataUpdateRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + } + + public AgentDataUpdateRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -55562,11 +66424,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _firstname = new byte[length]; Buffer.BlockCopy(bytes, i, _firstname, 0, length); i += length; @@ -55576,7 +66443,7 @@ namespace libsecondlife.Packets length = (ushort)bytes[i++]; _grouptitle = new byte[length]; Buffer.BlockCopy(bytes, i, _grouptitle, 0, length); i += length; - ActiveGroupID = new LLUUID(bytes, i); i += 16; + ActiveGroupID.FromBytes(bytes, i); i += 16; GroupPowers = (ulong)((ulong)bytes[i++] + ((ulong)bytes[i++] << 8) + ((ulong)bytes[i++] << 16) + ((ulong)bytes[i++] << 24) + ((ulong)bytes[i++] << 32) + ((ulong)bytes[i++] << 40) + ((ulong)bytes[i++] << 48) + ((ulong)bytes[i++] << 56)); length = (ushort)bytes[i++]; _groupname = new byte[length]; @@ -55645,17 +66512,38 @@ namespace libsecondlife.Packets AgentData = new AgentDataBlock(); } - public AgentDataUpdatePacket(byte[] bytes, ref int i) + public AgentDataUpdatePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public AgentDataUpdatePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + } + + public AgentDataUpdatePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -55713,12 +66601,17 @@ namespace libsecondlife.Packets public AgentGroupDataBlock() { } public AgentGroupDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - AgentID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; AgentPowers = (ulong)((ulong)bytes[i++] + ((ulong)bytes[i++] << 8) + ((ulong)bytes[i++] << 16) + ((ulong)bytes[i++] << 24) + ((ulong)bytes[i++] << 32) + ((ulong)bytes[i++] << 40) + ((ulong)bytes[i++] << 48) + ((ulong)bytes[i++] << 56)); length = (ushort)bytes[i++]; _grouptitle = new byte[length]; @@ -55772,23 +66665,50 @@ namespace libsecondlife.Packets AgentGroupData = new AgentGroupDataBlock[0]; } - public GroupDataUpdatePacket(byte[] bytes, ref int i) + public GroupDataUpdatePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - int count = (int)bytes[i++]; - AgentGroupData = new AgentGroupDataBlock[count]; - for (int j = 0; j < count; j++) - { AgentGroupData[j] = new AgentGroupDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public GroupDataUpdatePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + int count = (int)bytes[i++]; + if(AgentGroupData.Length < count) { + AgentGroupData = new AgentGroupDataBlock[count]; + for(int j = 0; j < count; j++) AgentGroupData[j] = new AgentGroupDataBlock(); + } + for (int j = 0; j < count; j++) + { AgentGroupData[j].FromBytes(bytes, ref i); } + } + + public GroupDataUpdatePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } int count = (int)bytes[i++]; - AgentGroupData = new AgentGroupDataBlock[count]; + if(AgentGroupData.Length < count) { + AgentGroupData = new AgentGroupDataBlock[count]; + for(int j = 0; j < count; j++) AgentGroupData[j] = new AgentGroupDataBlock(); + } for (int j = 0; j < count; j++) - { AgentGroupData[j] = new AgentGroupDataBlock(bytes, ref i); } + { AgentGroupData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -55837,10 +66757,15 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -55894,14 +66819,19 @@ namespace libsecondlife.Packets public GroupDataBlock() { } public GroupDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - GroupID = new LLUUID(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; GroupPowers = (ulong)((ulong)bytes[i++] + ((ulong)bytes[i++] << 8) + ((ulong)bytes[i++] << 16) + ((ulong)bytes[i++] << 24) + ((ulong)bytes[i++] << 32) + ((ulong)bytes[i++] << 40) + ((ulong)bytes[i++] << 48) + ((ulong)bytes[i++] << 56)); AcceptNotices = (bytes[i++] != 0) ? (bool)true : (bool)false; - GroupInsigniaID = new LLUUID(bytes, i); i += 16; + GroupInsigniaID.FromBytes(bytes, i); i += 16; Contribution = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); length = (ushort)bytes[i++]; _groupname = new byte[length]; @@ -55964,25 +66894,52 @@ namespace libsecondlife.Packets GroupData = new GroupDataBlock[0]; } - public AgentGroupDataUpdatePacket(byte[] bytes, ref int i) + public AgentGroupDataUpdatePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - GroupData = new GroupDataBlock[count]; - for (int j = 0; j < count; j++) - { GroupData[j] = new GroupDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public AgentGroupDataUpdatePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(GroupData.Length < count) { + GroupData = new GroupDataBlock[count]; + for(int j = 0; j < count; j++) GroupData[j] = new GroupDataBlock(); + } + for (int j = 0; j < count; j++) + { GroupData[j].FromBytes(bytes, ref i); } + } + + public AgentGroupDataUpdatePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - GroupData = new GroupDataBlock[count]; + if(GroupData.Length < count) { + GroupData = new GroupDataBlock[count]; + for(int j = 0; j < count; j++) GroupData[j] = new GroupDataBlock(); + } for (int j = 0; j < count; j++) - { GroupData[j] = new GroupDataBlock(bytes, ref i); } + { GroupData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -56034,11 +66991,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -56075,17 +67037,38 @@ namespace libsecondlife.Packets AgentData = new AgentDataBlock(); } - public AgentDropGroupPacket(byte[] bytes, ref int i) + public AgentDropGroupPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public AgentDropGroupPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + } + + public AgentDropGroupPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -56129,10 +67112,15 @@ namespace libsecondlife.Packets public DataBlockBlock() { } public DataBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - EndPointID = new LLUUID(bytes, i); i += 16; + EndPointID.FromBytes(bytes, i); i += 16; Digest = new byte[32]; Buffer.BlockCopy(bytes, i, Digest, 0, 32); i += 32; } @@ -56171,17 +67159,38 @@ namespace libsecondlife.Packets DataBlock = new DataBlockBlock(); } - public CreateTrustedCircuitPacket(byte[] bytes, ref int i) + public CreateTrustedCircuitPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - DataBlock = new DataBlockBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public CreateTrustedCircuitPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + DataBlock.FromBytes(bytes, ref i); + } + + public CreateTrustedCircuitPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - DataBlock = new DataBlockBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + DataBlock.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -56224,10 +67233,15 @@ namespace libsecondlife.Packets public DataBlockBlock() { } public DataBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - EndPointID = new LLUUID(bytes, i); i += 16; + EndPointID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -56262,17 +67276,38 @@ namespace libsecondlife.Packets DataBlock = new DataBlockBlock(); } - public DenyTrustedCircuitPacket(byte[] bytes, ref int i) + public DenyTrustedCircuitPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - DataBlock = new DataBlockBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public DenyTrustedCircuitPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + DataBlock.FromBytes(bytes, ref i); + } + + public DenyTrustedCircuitPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - DataBlock = new DataBlockBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + DataBlock.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -56311,15 +67346,36 @@ namespace libsecondlife.Packets Header.Reliable = true; } - public RequestTrustedCircuitPacket(byte[] bytes, ref int i) + public RequestTrustedCircuitPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); + FromBytes(bytes, ref i, ref packetEnd, null); } - public RequestTrustedCircuitPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + } + + public RequestTrustedCircuitPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } } public override byte[] ToBytes() @@ -56361,11 +67417,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -56435,12 +67496,17 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - ItemID = new LLUUID(bytes, i); i += 16; - OwnerID = new LLUUID(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; + OwnerID.FromBytes(bytes, i); i += 16; AttachmentPt = (byte)bytes[i++]; ItemFlags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); GroupMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); @@ -56521,19 +67587,40 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock(); } - public RezSingleAttachmentFromInvPacket(byte[] bytes, ref int i) + public RezSingleAttachmentFromInvPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - ObjectData = new ObjectDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public RezSingleAttachmentFromInvPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ObjectData.FromBytes(bytes, ref i); + } + + public RezSingleAttachmentFromInvPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - ObjectData = new ObjectDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ObjectData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -56579,11 +67666,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -56624,10 +67716,15 @@ namespace libsecondlife.Packets public HeaderDataBlock() { } public HeaderDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - CompoundMsgID = new LLUUID(bytes, i); i += 16; + CompoundMsgID.FromBytes(bytes, i); i += 16; TotalObjects = (byte)bytes[i++]; FirstDetachAll = (bytes[i++] != 0) ? (bool)true : (bool)false; } @@ -56701,12 +67798,17 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - ItemID = new LLUUID(bytes, i); i += 16; - OwnerID = new LLUUID(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; + OwnerID.FromBytes(bytes, i); i += 16; AttachmentPt = (byte)bytes[i++]; ItemFlags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); GroupMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); @@ -56789,27 +67891,54 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public RezMultipleAttachmentsFromInvPacket(byte[] bytes, ref int i) + public RezMultipleAttachmentsFromInvPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - HeaderData = new HeaderDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public RezMultipleAttachmentsFromInvPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + HeaderData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public RezMultipleAttachmentsFromInvPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - HeaderData = new HeaderDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + HeaderData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -56863,11 +67992,16 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - ItemID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -56904,17 +68038,38 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock(); } - public DetachAttachmentIntoInvPacket(byte[] bytes, ref int i) + public DetachAttachmentIntoInvPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - ObjectData = new ObjectDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public DetachAttachmentIntoInvPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + ObjectData.FromBytes(bytes, ref i); + } + + public DetachAttachmentIntoInvPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - ObjectData = new ObjectDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + ObjectData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -56958,11 +68113,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -57001,10 +68161,15 @@ namespace libsecondlife.Packets public HeaderDataBlock() { } public HeaderDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - NewFolderID = new LLUUID(bytes, i); i += 16; + NewFolderID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -57042,11 +68207,16 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - OldItemID = new LLUUID(bytes, i); i += 16; - OldFolderID = new LLUUID(bytes, i); i += 16; + OldItemID.FromBytes(bytes, i); i += 16; + OldFolderID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -57087,27 +68257,54 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public CreateNewOutfitAttachmentsPacket(byte[] bytes, ref int i) + public CreateNewOutfitAttachmentsPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - HeaderData = new HeaderDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public CreateNewOutfitAttachmentsPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + HeaderData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public CreateNewOutfitAttachmentsPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - HeaderData = new HeaderDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + HeaderData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -57161,11 +68358,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -57202,17 +68404,38 @@ namespace libsecondlife.Packets AgentData = new AgentDataBlock(); } - public UserInfoRequestPacket(byte[] bytes, ref int i) + public UserInfoRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public UserInfoRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + } + + public UserInfoRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -57255,10 +68478,15 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -57320,6 +68548,11 @@ namespace libsecondlife.Packets public UserDataBlock() { } public UserDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -57377,19 +68610,40 @@ namespace libsecondlife.Packets UserData = new UserDataBlock(); } - public UserInfoReplyPacket(byte[] bytes, ref int i) + public UserInfoReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - UserData = new UserDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public UserInfoReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + UserData.FromBytes(bytes, ref i); + } + + public UserInfoReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - UserData = new UserDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + UserData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -57435,11 +68689,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -57491,6 +68750,11 @@ namespace libsecondlife.Packets public UserDataBlock() { } public UserDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -57539,19 +68803,40 @@ namespace libsecondlife.Packets UserData = new UserDataBlock(); } - public UpdateUserInfoPacket(byte[] bytes, ref int i) + public UpdateUserInfoPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - UserData = new UserDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public UpdateUserInfoPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + UserData.FromBytes(bytes, ref i); + } + + public UpdateUserInfoPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - UserData = new UserDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + UserData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -57596,10 +68881,15 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -57660,6 +68950,11 @@ namespace libsecondlife.Packets public FileDataBlock() { } public FileDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -57713,19 +69008,40 @@ namespace libsecondlife.Packets FileData = new FileDataBlock(); } - public InitiateDownloadPacket(byte[] bytes, ref int i) + public InitiateDownloadPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - FileData = new FileDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public InitiateDownloadPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + FileData.FromBytes(bytes, ref i); + } + + public InitiateDownloadPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - FileData = new FileDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + FileData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -57784,6 +69100,11 @@ namespace libsecondlife.Packets public MethodDataBlock() { } public MethodDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -57791,7 +69112,7 @@ namespace libsecondlife.Packets length = (ushort)bytes[i++]; _method = new byte[length]; Buffer.BlockCopy(bytes, i, _method, 0, length); i += length; - Invoice = new LLUUID(bytes, i); i += 16; + Invoice.FromBytes(bytes, i); i += 16; Digest = new byte[32]; Buffer.BlockCopy(bytes, i, Digest, 0, 32); i += 32; } @@ -57849,6 +69170,11 @@ namespace libsecondlife.Packets public ParamListBlock() { } public ParamListBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -57894,25 +69220,52 @@ namespace libsecondlife.Packets ParamList = new ParamListBlock[0]; } - public SystemMessagePacket(byte[] bytes, ref int i) + public SystemMessagePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - MethodData = new MethodDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ParamList = new ParamListBlock[count]; - for (int j = 0; j < count; j++) - { ParamList[j] = new ParamListBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public SystemMessagePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + MethodData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ParamList.Length < count) { + ParamList = new ParamListBlock[count]; + for(int j = 0; j < count; j++) ParamList[j] = new ParamListBlock(); + } + for (int j = 0; j < count; j++) + { ParamList[j].FromBytes(bytes, ref i); } + } + + public SystemMessagePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - MethodData = new MethodDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + MethodData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ParamList = new ParamListBlock[count]; + if(ParamList.Length < count) { + ParamList = new ParamListBlock[count]; + for(int j = 0; j < count; j++) ParamList[j] = new ParamListBlock(); + } for (int j = 0; j < count; j++) - { ParamList[j] = new ParamListBlock(bytes, ref i); } + { ParamList[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -57967,11 +69320,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; Flags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); EstateID = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); Godlike = (bytes[i++] != 0) ? (bool)true : (bool)false; @@ -58023,17 +69381,38 @@ namespace libsecondlife.Packets AgentData = new AgentDataBlock(); } - public MapLayerRequestPacket(byte[] bytes, ref int i) + public MapLayerRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public MapLayerRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + } + + public MapLayerRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -58077,10 +69456,15 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; Flags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -58127,6 +69511,11 @@ namespace libsecondlife.Packets public LayerDataBlock() { } public LayerDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -58134,7 +69523,7 @@ namespace libsecondlife.Packets Right = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); Top = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); Bottom = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - ImageID = new LLUUID(bytes, i); i += 16; + ImageID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -58191,25 +69580,52 @@ namespace libsecondlife.Packets LayerData = new LayerDataBlock[0]; } - public MapLayerReplyPacket(byte[] bytes, ref int i) + public MapLayerReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - LayerData = new LayerDataBlock[count]; - for (int j = 0; j < count; j++) - { LayerData[j] = new LayerDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public MapLayerReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(LayerData.Length < count) { + LayerData = new LayerDataBlock[count]; + for(int j = 0; j < count; j++) LayerData[j] = new LayerDataBlock(); + } + for (int j = 0; j < count; j++) + { LayerData[j].FromBytes(bytes, ref i); } + } + + public MapLayerReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - LayerData = new LayerDataBlock[count]; + if(LayerData.Length < count) { + LayerData = new LayerDataBlock[count]; + for(int j = 0; j < count; j++) LayerData[j] = new LayerDataBlock(); + } for (int j = 0; j < count; j++) - { LayerData[j] = new LayerDataBlock(bytes, ref i); } + { LayerData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -58264,11 +69680,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; Flags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); EstateID = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); Godlike = (bytes[i++] != 0) ? (bool)true : (bool)false; @@ -58325,6 +69746,11 @@ namespace libsecondlife.Packets public PositionDataBlock() { } public PositionDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -58378,19 +69804,40 @@ namespace libsecondlife.Packets PositionData = new PositionDataBlock(); } - public MapBlockRequestPacket(byte[] bytes, ref int i) + public MapBlockRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - PositionData = new PositionDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public MapBlockRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + PositionData.FromBytes(bytes, ref i); + } + + public MapBlockRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - PositionData = new PositionDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + PositionData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -58439,11 +69886,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; Flags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); EstateID = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); Godlike = (bytes[i++] != 0) ? (bool)true : (bool)false; @@ -58509,6 +69961,11 @@ namespace libsecondlife.Packets public NameDataBlock() { } public NameDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -58554,19 +70011,40 @@ namespace libsecondlife.Packets NameData = new NameDataBlock(); } - public MapNameRequestPacket(byte[] bytes, ref int i) + public MapNameRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - NameData = new NameDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public MapNameRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + NameData.FromBytes(bytes, ref i); + } + + public MapNameRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - NameData = new NameDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + NameData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -58612,10 +70090,15 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; Flags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -58677,6 +70160,11 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -58690,7 +70178,7 @@ namespace libsecondlife.Packets RegionFlags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); WaterHeight = (byte)bytes[i++]; Agents = (byte)bytes[i++]; - MapImageID = new LLUUID(bytes, i); i += 16; + MapImageID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -58749,25 +70237,52 @@ namespace libsecondlife.Packets Data = new DataBlock[0]; } - public MapBlockReplyPacket(byte[] bytes, ref int i) + public MapBlockReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - Data = new DataBlock[count]; - for (int j = 0; j < count; j++) - { Data[j] = new DataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public MapBlockReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(Data.Length < count) { + Data = new DataBlock[count]; + for(int j = 0; j < count; j++) Data[j] = new DataBlock(); + } + for (int j = 0; j < count; j++) + { Data[j].FromBytes(bytes, ref i); } + } + + public MapBlockReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - Data = new DataBlock[count]; + if(Data.Length < count) { + Data = new DataBlock[count]; + for(int j = 0; j < count; j++) Data[j] = new DataBlock(); + } for (int j = 0; j < count; j++) - { Data[j] = new DataBlock(bytes, ref i); } + { Data[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -58822,11 +70337,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; Flags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); EstateID = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); Godlike = (bytes[i++] != 0) ? (bool)true : (bool)false; @@ -58881,6 +70401,11 @@ namespace libsecondlife.Packets public RequestDataBlock() { } public RequestDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -58934,19 +70459,40 @@ namespace libsecondlife.Packets RequestData = new RequestDataBlock(); } - public MapItemRequestPacket(byte[] bytes, ref int i) + public MapItemRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - RequestData = new RequestDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public MapItemRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + RequestData.FromBytes(bytes, ref i); + } + + public MapItemRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - RequestData = new RequestDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + RequestData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -58992,10 +70538,15 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; Flags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -59038,6 +70589,11 @@ namespace libsecondlife.Packets public RequestDataBlock() { } public RequestDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -59098,13 +70654,18 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { X = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); Y = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - ID = new LLUUID(bytes, i); i += 16; + ID.FromBytes(bytes, i); i += 16; Extra = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); Extra2 = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); length = (ushort)bytes[i++]; @@ -59172,27 +70733,54 @@ namespace libsecondlife.Packets Data = new DataBlock[0]; } - public MapItemReplyPacket(byte[] bytes, ref int i) + public MapItemReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - RequestData = new RequestDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - Data = new DataBlock[count]; - for (int j = 0; j < count; j++) - { Data[j] = new DataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public MapItemReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + RequestData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(Data.Length < count) { + Data = new DataBlock[count]; + for(int j = 0; j < count; j++) Data[j] = new DataBlock(); + } + for (int j = 0; j < count; j++) + { Data[j].FromBytes(bytes, ref i); } + } + + public MapItemReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - RequestData = new RequestDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + RequestData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - Data = new DataBlock[count]; + if(Data.Length < count) { + Data = new DataBlock[count]; + for(int j = 0; j < count; j++) Data[j] = new DataBlock(); + } for (int j = 0; j < count; j++) - { Data[j] = new DataBlock(bytes, ref i); } + { Data[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -59311,14 +70899,19 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; - AssetID = new LLUUID(bytes, i); i += 16; - PosGlobal = new LLVector3d(bytes, i); i += 24; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; + AssetID.FromBytes(bytes, i); i += 16; + PosGlobal.FromBytes(bytes, i); i += 24; length = (ushort)bytes[i++]; _to = new byte[length]; Buffer.BlockCopy(bytes, i, _to, 0, length); i += length; @@ -59406,17 +70999,38 @@ namespace libsecondlife.Packets AgentData = new AgentDataBlock(); } - public SendPostcardPacket(byte[] bytes, ref int i) + public SendPostcardPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public SendPostcardPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + } + + public SendPostcardPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -59461,6 +71075,11 @@ namespace libsecondlife.Packets public CommandBlockBlock() { } public CommandBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -59515,17 +71134,38 @@ namespace libsecondlife.Packets CommandBlock = new CommandBlockBlock(); } - public ParcelMediaCommandMessagePacket(byte[] bytes, ref int i) + public ParcelMediaCommandMessagePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - CommandBlock = new CommandBlockBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ParcelMediaCommandMessagePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + CommandBlock.FromBytes(bytes, ref i); + } + + public ParcelMediaCommandMessagePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - CommandBlock = new CommandBlockBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + CommandBlock.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -59582,6 +71222,11 @@ namespace libsecondlife.Packets public DataBlockBlock() { } public DataBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -59589,7 +71234,7 @@ namespace libsecondlife.Packets length = (ushort)bytes[i++]; _mediaurl = new byte[length]; Buffer.BlockCopy(bytes, i, _mediaurl, 0, length); i += length; - MediaID = new LLUUID(bytes, i); i += 16; + MediaID.FromBytes(bytes, i); i += 16; MediaAutoScale = (byte)bytes[i++]; } catch (Exception) @@ -59632,17 +71277,38 @@ namespace libsecondlife.Packets DataBlock = new DataBlockBlock(); } - public ParcelMediaUpdatePacket(byte[] bytes, ref int i) + public ParcelMediaUpdatePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - DataBlock = new DataBlockBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ParcelMediaUpdatePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + DataBlock.FromBytes(bytes, ref i); + } + + public ParcelMediaUpdatePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - DataBlock = new DataBlockBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + DataBlock.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -59686,11 +71352,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -59744,6 +71415,11 @@ namespace libsecondlife.Packets public RequestDataBlock() { } public RequestDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -59808,19 +71484,40 @@ namespace libsecondlife.Packets RequestData = new RequestDataBlock(); } - public LandStatRequestPacket(byte[] bytes, ref int i) + public LandStatRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - RequestData = new RequestDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public LandStatRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + RequestData.FromBytes(bytes, ref i); + } + + public LandStatRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - RequestData = new RequestDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + RequestData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -59867,6 +71564,11 @@ namespace libsecondlife.Packets public RequestDataBlock() { } public RequestDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -59952,12 +71654,17 @@ namespace libsecondlife.Packets public ReportDataBlock() { } public ReportDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { TaskLocalID = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - TaskID = new LLUUID(bytes, i); i += 16; + TaskID.FromBytes(bytes, i); i += 16; if (!BitConverter.IsLittleEndian) Array.Reverse(bytes, i, 4); LocationX = BitConverter.ToSingle(bytes, i); i += 4; if (!BitConverter.IsLittleEndian) Array.Reverse(bytes, i, 4); @@ -60039,25 +71746,52 @@ namespace libsecondlife.Packets ReportData = new ReportDataBlock[0]; } - public LandStatReplyPacket(byte[] bytes, ref int i) + public LandStatReplyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - RequestData = new RequestDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ReportData = new ReportDataBlock[count]; - for (int j = 0; j < count; j++) - { ReportData[j] = new ReportDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public LandStatReplyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + RequestData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ReportData.Length < count) { + ReportData = new ReportDataBlock[count]; + for(int j = 0; j < count; j++) ReportData[j] = new ReportDataBlock(); + } + for (int j = 0; j < count; j++) + { ReportData[j].FromBytes(bytes, ref i); } + } + + public LandStatReplyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - RequestData = new RequestDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + RequestData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ReportData = new ReportDataBlock[count]; + if(ReportData.Length < count) { + ReportData = new ReportDataBlock[count]; + for(int j = 0; j < count; j++) ReportData[j] = new ReportDataBlock(); + } for (int j = 0; j < count; j++) - { ReportData[j] = new ReportDataBlock(bytes, ref i); } + { ReportData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -60108,10 +71842,15 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -60198,6 +71937,11 @@ namespace libsecondlife.Packets public DataBlock() { } public DataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -60206,7 +71950,7 @@ namespace libsecondlife.Packets length = (ushort)bytes[i++]; _token = new byte[length]; Buffer.BlockCopy(bytes, i, _token, 0, length); i += length; - ID = new LLUUID(bytes, i); i += 16; + ID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _system = new byte[length]; Buffer.BlockCopy(bytes, i, _system, 0, length); i += length; @@ -60278,19 +72022,40 @@ namespace libsecondlife.Packets Data = new DataBlock(); } - public ErrorPacket(byte[] bytes, ref int i) + public ErrorPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ErrorPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); + } + + public ErrorPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - Data = new DataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + Data.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -60335,6 +72100,11 @@ namespace libsecondlife.Packets public PacketsBlock() { } public PacketsBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -60376,23 +72146,50 @@ namespace libsecondlife.Packets Packets = new PacketsBlock[0]; } - public PacketAckPacket(byte[] bytes, ref int i) + public PacketAckPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - int count = (int)bytes[i++]; - Packets = new PacketsBlock[count]; - for (int j = 0; j < count; j++) - { Packets[j] = new PacketsBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public PacketAckPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + int count = (int)bytes[i++]; + if(Packets.Length < count) { + Packets = new PacketsBlock[count]; + for(int j = 0; j < count; j++) Packets[j] = new PacketsBlock(); + } + for (int j = 0; j < count; j++) + { Packets[j].FromBytes(bytes, ref i); } + } + + public PacketAckPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } int count = (int)bytes[i++]; - Packets = new PacketsBlock[count]; + if(Packets.Length < count) { + Packets = new PacketsBlock[count]; + for(int j = 0; j < count; j++) Packets[j] = new PacketsBlock(); + } for (int j = 0; j < count; j++) - { Packets[j] = new PacketsBlock(bytes, ref i); } + { Packets[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -60442,6 +72239,11 @@ namespace libsecondlife.Packets public CircuitInfoBlock() { } public CircuitInfoBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -60487,17 +72289,38 @@ namespace libsecondlife.Packets CircuitInfo = new CircuitInfoBlock(); } - public OpenCircuitPacket(byte[] bytes, ref int i) + public OpenCircuitPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); - CircuitInfo = new CircuitInfoBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public OpenCircuitPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + CircuitInfo.FromBytes(bytes, ref i); + } + + public OpenCircuitPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - CircuitInfo = new CircuitInfoBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + CircuitInfo.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -60536,15 +72359,36 @@ namespace libsecondlife.Packets Header.Reliable = true; } - public CloseCircuitPacket(byte[] bytes, ref int i) + public CloseCircuitPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new LowHeader(bytes, ref i, ref packetEnd); + FromBytes(bytes, ref i, ref packetEnd, null); } - public CloseCircuitPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + } + + public CloseCircuitPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } } public override byte[] ToBytes() @@ -60587,12 +72431,17 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -60661,6 +72510,11 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -60686,12 +72540,12 @@ namespace libsecondlife.Packets ProfileEnd = (ushort)(bytes[i++] + (bytes[i++] << 8)); ProfileHollow = (ushort)(bytes[i++] + (bytes[i++] << 8)); BypassRaycast = (byte)bytes[i++]; - RayStart = new LLVector3(bytes, i); i += 12; - RayEnd = new LLVector3(bytes, i); i += 12; - RayTargetID = new LLUUID(bytes, i); i += 16; + RayStart.FromBytes(bytes, i); i += 12; + RayEnd.FromBytes(bytes, i); i += 12; + RayTargetID.FromBytes(bytes, i); i += 16; RayEndIsIntersection = (byte)bytes[i++]; - Scale = new LLVector3(bytes, i); i += 12; - Rotation = new LLQuaternion(bytes, i, true); i += 12; + Scale.FromBytes(bytes, i); i += 12; + Rotation.FromBytes(bytes, i, true); i += 12; State = (byte)bytes[i++]; } catch (Exception) @@ -60793,19 +72647,40 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock(); } - public ObjectAddPacket(byte[] bytes, ref int i) + public ObjectAddPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new MediumHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - ObjectData = new ObjectDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectAddPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ObjectData.FromBytes(bytes, ref i); + } + + public ObjectAddPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - ObjectData = new ObjectDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ObjectData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -60851,11 +72726,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -60908,6 +72788,11 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -60962,25 +72847,52 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public MultipleObjectUpdatePacket(byte[] bytes, ref int i) + public MultipleObjectUpdatePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new MediumHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public MultipleObjectUpdatePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public MultipleObjectUpdatePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -61032,11 +72944,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -61076,6 +72993,11 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -61122,25 +73044,52 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public RequestMultipleObjectsPacket(byte[] bytes, ref int i) + public RequestMultipleObjectsPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new MediumHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public RequestMultipleObjectsPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public RequestMultipleObjectsPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -61192,11 +73141,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -61236,11 +73190,16 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { ObjectLocalID = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - Position = new LLVector3(bytes, i); i += 12; + Position.FromBytes(bytes, i); i += 12; } catch (Exception) { @@ -61282,25 +73241,52 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public ObjectPositionPacket(byte[] bytes, ref int i) + public ObjectPositionPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new MediumHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectPositionPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public ObjectPositionPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -61352,11 +73338,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -61396,11 +73387,16 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { RequestFlags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - ObjectID = new LLUUID(bytes, i); i += 16; + ObjectID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -61442,19 +73438,40 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock(); } - public RequestObjectPropertiesFamilyPacket(byte[] bytes, ref int i) + public RequestObjectPropertiesFamilyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new MediumHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - ObjectData = new ObjectDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public RequestObjectPropertiesFamilyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ObjectData.FromBytes(bytes, ref i); + } + + public RequestObjectPropertiesFamilyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - ObjectData = new ObjectDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ObjectData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -61501,6 +73518,11 @@ namespace libsecondlife.Packets public LocationBlock() { } public LocationBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -61548,6 +73570,11 @@ namespace libsecondlife.Packets public IndexBlock() { } public IndexBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -61593,25 +73620,52 @@ namespace libsecondlife.Packets Index = new IndexBlock(); } - public CoarseLocationUpdatePacket(byte[] bytes, ref int i) + public CoarseLocationUpdatePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new MediumHeader(bytes, ref i, ref packetEnd); - int count = (int)bytes[i++]; - Location = new LocationBlock[count]; - for (int j = 0; j < count; j++) - { Location[j] = new LocationBlock(bytes, ref i); } - Index = new IndexBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public CoarseLocationUpdatePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + int count = (int)bytes[i++]; + if(Location.Length < count) { + Location = new LocationBlock[count]; + for(int j = 0; j < count; j++) Location[j] = new LocationBlock(); + } + for (int j = 0; j < count; j++) + { Location[j].FromBytes(bytes, ref i); } + Index.FromBytes(bytes, ref i); + } + + public CoarseLocationUpdatePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } int count = (int)bytes[i++]; - Location = new LocationBlock[count]; + if(Location.Length < count) { + Location = new LocationBlock[count]; + for(int j = 0; j < count; j++) Location[j] = new LocationBlock(); + } for (int j = 0; j < count; j++) - { Location[j] = new LocationBlock(bytes, ref i); } - Index = new IndexBlock(bytes, ref i); + { Location[j].FromBytes(bytes, ref i); } + Index.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -61663,11 +73717,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -61721,6 +73780,11 @@ namespace libsecondlife.Packets public RegionDataBlock() { } public RegionDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -61788,11 +73852,16 @@ namespace libsecondlife.Packets public InfoBlock() { } public InfoBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - Position = new LLVector3(bytes, i); i += 12; - LookAt = new LLVector3(bytes, i); i += 12; + Position.FromBytes(bytes, i); i += 12; + LookAt.FromBytes(bytes, i); i += 12; } catch (Exception) { @@ -61833,21 +73902,42 @@ namespace libsecondlife.Packets Info = new InfoBlock(); } - public CrossedRegionPacket(byte[] bytes, ref int i) + public CrossedRegionPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new MediumHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - RegionData = new RegionDataBlock(bytes, ref i); - Info = new InfoBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public CrossedRegionPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + RegionData.FromBytes(bytes, ref i); + Info.FromBytes(bytes, ref i); + } + + public CrossedRegionPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - RegionData = new RegionDataBlock(bytes, ref i); - Info = new InfoBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + RegionData.FromBytes(bytes, ref i); + Info.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -61895,11 +73985,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -61936,17 +74031,38 @@ namespace libsecondlife.Packets AgentData = new AgentDataBlock(); } - public ConfirmEnableSimulatorPacket(byte[] bytes, ref int i) + public ConfirmEnableSimulatorPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new MediumHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ConfirmEnableSimulatorPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + } + + public ConfirmEnableSimulatorPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -62071,14 +74187,19 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - ObjectID = new LLUUID(bytes, i); i += 16; - CreatorID = new LLUUID(bytes, i); i += 16; - OwnerID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + ObjectID.FromBytes(bytes, i); i += 16; + CreatorID.FromBytes(bytes, i); i += 16; + OwnerID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; CreationDate = (ulong)((ulong)bytes[i++] + ((ulong)bytes[i++] << 8) + ((ulong)bytes[i++] << 16) + ((ulong)bytes[i++] << 24) + ((ulong)bytes[i++] << 32) + ((ulong)bytes[i++] << 40) + ((ulong)bytes[i++] << 48) + ((ulong)bytes[i++] << 56)); BaseMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); OwnerMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); @@ -62093,10 +74214,10 @@ namespace libsecondlife.Packets AggregatePermTexturesOwner = (byte)bytes[i++]; Category = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); InventorySerial = (short)(bytes[i++] + (bytes[i++] << 8)); - ItemID = new LLUUID(bytes, i); i += 16; - FolderID = new LLUUID(bytes, i); i += 16; - FromTaskID = new LLUUID(bytes, i); i += 16; - LastOwnerID = new LLUUID(bytes, i); i += 16; + ItemID.FromBytes(bytes, i); i += 16; + FolderID.FromBytes(bytes, i); i += 16; + FromTaskID.FromBytes(bytes, i); i += 16; + LastOwnerID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _name = new byte[length]; Buffer.BlockCopy(bytes, i, _name, 0, length); i += length; @@ -62244,23 +74365,50 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public ObjectPropertiesPacket(byte[] bytes, ref int i) + public ObjectPropertiesPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new MediumHeader(bytes, ref i, ref packetEnd); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectPropertiesPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public ObjectPropertiesPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -62347,14 +74495,19 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { RequestFlags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - ObjectID = new LLUUID(bytes, i); i += 16; - OwnerID = new LLUUID(bytes, i); i += 16; - GroupID = new LLUUID(bytes, i); i += 16; + ObjectID.FromBytes(bytes, i); i += 16; + OwnerID.FromBytes(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; BaseMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); OwnerMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); GroupMask = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); @@ -62364,7 +74517,7 @@ namespace libsecondlife.Packets SaleType = (byte)bytes[i++]; SalePrice = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); Category = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - LastOwnerID = new LLUUID(bytes, i); i += 16; + LastOwnerID.FromBytes(bytes, i); i += 16; length = (ushort)bytes[i++]; _name = new byte[length]; Buffer.BlockCopy(bytes, i, _name, 0, length); i += length; @@ -62467,17 +74620,38 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock(); } - public ObjectPropertiesFamilyPacket(byte[] bytes, ref int i) + public ObjectPropertiesFamilyPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new MediumHeader(bytes, ref i, ref packetEnd); - ObjectData = new ObjectDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectPropertiesFamilyPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + ObjectData.FromBytes(bytes, ref i); + } + + public ObjectPropertiesFamilyPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - ObjectData = new ObjectDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + ObjectData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -62521,11 +74695,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -62569,6 +74748,11 @@ namespace libsecondlife.Packets public ParcelDataBlock() { } public ParcelDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -62640,19 +74824,40 @@ namespace libsecondlife.Packets ParcelData = new ParcelDataBlock(); } - public ParcelPropertiesRequestPacket(byte[] bytes, ref int i) + public ParcelPropertiesRequestPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new MediumHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - ParcelData = new ParcelDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ParcelPropertiesRequestPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ParcelData.FromBytes(bytes, ref i); + } + + public ParcelPropertiesRequestPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - ParcelData = new ParcelDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + ParcelData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -62701,12 +74906,17 @@ namespace libsecondlife.Packets public DataBlockBlock() { } public DataBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - SoundID = new LLUUID(bytes, i); i += 16; - ObjectID = new LLUUID(bytes, i); i += 16; - OwnerID = new LLUUID(bytes, i); i += 16; + SoundID.FromBytes(bytes, i); i += 16; + ObjectID.FromBytes(bytes, i); i += 16; + OwnerID.FromBytes(bytes, i); i += 16; if (!BitConverter.IsLittleEndian) Array.Reverse(bytes, i, 4); Gain = BitConverter.ToSingle(bytes, i); i += 4; Flags = (byte)bytes[i++]; @@ -62755,17 +74965,38 @@ namespace libsecondlife.Packets DataBlock = new DataBlockBlock(); } - public AttachedSoundPacket(byte[] bytes, ref int i) + public AttachedSoundPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new MediumHeader(bytes, ref i, ref packetEnd); - DataBlock = new DataBlockBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public AttachedSoundPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + DataBlock.FromBytes(bytes, ref i); + } + + public AttachedSoundPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - DataBlock = new DataBlockBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + DataBlock.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -62809,10 +75040,15 @@ namespace libsecondlife.Packets public DataBlockBlock() { } public DataBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ObjectID = new LLUUID(bytes, i); i += 16; + ObjectID.FromBytes(bytes, i); i += 16; if (!BitConverter.IsLittleEndian) Array.Reverse(bytes, i, 4); Gain = BitConverter.ToSingle(bytes, i); i += 4; } @@ -62854,17 +75090,38 @@ namespace libsecondlife.Packets DataBlock = new DataBlockBlock(); } - public AttachedSoundGainChangePacket(byte[] bytes, ref int i) + public AttachedSoundGainChangePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new MediumHeader(bytes, ref i, ref packetEnd); - DataBlock = new DataBlockBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public AttachedSoundGainChangePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + DataBlock.FromBytes(bytes, ref i); + } + + public AttachedSoundGainChangePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - DataBlock = new DataBlockBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + DataBlock.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -62909,12 +75166,17 @@ namespace libsecondlife.Packets public DataBlockBlock() { } public DataBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ObjectID = new LLUUID(bytes, i); i += 16; - OwnerID = new LLUUID(bytes, i); i += 16; - SoundID = new LLUUID(bytes, i); i += 16; + ObjectID.FromBytes(bytes, i); i += 16; + OwnerID.FromBytes(bytes, i); i += 16; + SoundID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -62953,23 +75215,50 @@ namespace libsecondlife.Packets DataBlock = new DataBlockBlock[0]; } - public PreloadSoundPacket(byte[] bytes, ref int i) + public PreloadSoundPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new MediumHeader(bytes, ref i, ref packetEnd); - int count = (int)bytes[i++]; - DataBlock = new DataBlockBlock[count]; - for (int j = 0; j < count; j++) - { DataBlock[j] = new DataBlockBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public PreloadSoundPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + int count = (int)bytes[i++]; + if(DataBlock.Length < count) { + DataBlock = new DataBlockBlock[count]; + for(int j = 0; j < count; j++) DataBlock[j] = new DataBlockBlock(); + } + for (int j = 0; j < count; j++) + { DataBlock[j].FromBytes(bytes, ref i); } + } + + public PreloadSoundPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } int count = (int)bytes[i++]; - DataBlock = new DataBlockBlock[count]; + if(DataBlock.Length < count) { + DataBlock = new DataBlockBlock[count]; + for(int j = 0; j < count; j++) DataBlock[j] = new DataBlockBlock(); + } for (int j = 0; j < count; j++) - { DataBlock[j] = new DataBlockBlock(bytes, ref i); } + { DataBlock[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -63019,11 +75308,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -63079,12 +75373,17 @@ namespace libsecondlife.Packets public EffectBlock() { } public EffectBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - ID = new LLUUID(bytes, i); i += 16; - AgentID = new LLUUID(bytes, i); i += 16; + ID.FromBytes(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; Type = (byte)bytes[i++]; if (!BitConverter.IsLittleEndian) Array.Reverse(bytes, i, 4); Duration = BitConverter.ToSingle(bytes, i); i += 4; @@ -63145,25 +75444,52 @@ namespace libsecondlife.Packets Effect = new EffectBlock[0]; } - public ViewerEffectPacket(byte[] bytes, ref int i) + public ViewerEffectPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new MediumHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - Effect = new EffectBlock[count]; - for (int j = 0; j < count; j++) - { Effect[j] = new EffectBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ViewerEffectPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(Effect.Length < count) { + Effect = new EffectBlock[count]; + for(int j = 0; j < count; j++) Effect[j] = new EffectBlock(); + } + for (int j = 0; j < count; j++) + { Effect[j].FromBytes(bytes, ref i); } + } + + public ViewerEffectPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - Effect = new EffectBlock[count]; + if(Effect.Length < count) { + Effect = new EffectBlock[count]; + for(int j = 0; j < count; j++) Effect[j] = new EffectBlock(); + } for (int j = 0; j < count; j++) - { Effect[j] = new EffectBlock(bytes, ref i); } + { Effect[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -63215,6 +75541,11 @@ namespace libsecondlife.Packets public PingIDBlock() { } public PingIDBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -63259,17 +75590,38 @@ namespace libsecondlife.Packets PingID = new PingIDBlock(); } - public StartPingCheckPacket(byte[] bytes, ref int i) + public StartPingCheckPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new HighHeader(bytes, ref i, ref packetEnd); - PingID = new PingIDBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public StartPingCheckPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + PingID.FromBytes(bytes, ref i); + } + + public StartPingCheckPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - PingID = new PingIDBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + PingID.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -63312,6 +75664,11 @@ namespace libsecondlife.Packets public PingIDBlock() { } public PingIDBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -63350,17 +75707,38 @@ namespace libsecondlife.Packets PingID = new PingIDBlock(); } - public CompletePingCheckPacket(byte[] bytes, ref int i) + public CompletePingCheckPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new HighHeader(bytes, ref i, ref packetEnd); - PingID = new PingIDBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public CompletePingCheckPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + PingID.FromBytes(bytes, ref i); + } + + public CompletePingCheckPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - PingID = new PingIDBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + PingID.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -63414,18 +75792,23 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; - BodyRotation = new LLQuaternion(bytes, i, true); i += 12; - HeadRotation = new LLQuaternion(bytes, i, true); i += 12; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; + BodyRotation.FromBytes(bytes, i, true); i += 12; + HeadRotation.FromBytes(bytes, i, true); i += 12; State = (byte)bytes[i++]; - CameraCenter = new LLVector3(bytes, i); i += 12; - CameraAtAxis = new LLVector3(bytes, i); i += 12; - CameraLeftAxis = new LLVector3(bytes, i); i += 12; - CameraUpAxis = new LLVector3(bytes, i); i += 12; + CameraCenter.FromBytes(bytes, i); i += 12; + CameraAtAxis.FromBytes(bytes, i); i += 12; + CameraLeftAxis.FromBytes(bytes, i); i += 12; + CameraUpAxis.FromBytes(bytes, i); i += 12; if (!BitConverter.IsLittleEndian) Array.Reverse(bytes, i, 4); Far = BitConverter.ToSingle(bytes, i); i += 4; ControlFlags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); @@ -63492,17 +75875,38 @@ namespace libsecondlife.Packets AgentData = new AgentDataBlock(); } - public AgentUpdatePacket(byte[] bytes, ref int i) + public AgentUpdatePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new HighHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public AgentUpdatePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + } + + public AgentUpdatePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -63546,11 +75950,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -63590,10 +75999,15 @@ namespace libsecondlife.Packets public AnimationListBlock() { } public AnimationListBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AnimID = new LLUUID(bytes, i); i += 16; + AnimID.FromBytes(bytes, i); i += 16; StartAnim = (bytes[i++] != 0) ? (bool)true : (bool)false; } catch (Exception) @@ -63645,6 +76059,11 @@ namespace libsecondlife.Packets public PhysicalAvatarEventListBlock() { } public PhysicalAvatarEventListBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -63692,33 +76111,66 @@ namespace libsecondlife.Packets PhysicalAvatarEventList = new PhysicalAvatarEventListBlock[0]; } - public AgentAnimationPacket(byte[] bytes, ref int i) + public AgentAnimationPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new HighHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - AnimationList = new AnimationListBlock[count]; - for (int j = 0; j < count; j++) - { AnimationList[j] = new AnimationListBlock(bytes, ref i); } - count = (int)bytes[i++]; - PhysicalAvatarEventList = new PhysicalAvatarEventListBlock[count]; - for (int j = 0; j < count; j++) - { PhysicalAvatarEventList[j] = new PhysicalAvatarEventListBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public AgentAnimationPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(AnimationList.Length < count) { + AnimationList = new AnimationListBlock[count]; + for(int j = 0; j < count; j++) AnimationList[j] = new AnimationListBlock(); + } + for (int j = 0; j < count; j++) + { AnimationList[j].FromBytes(bytes, ref i); } + count = (int)bytes[i++]; + if(PhysicalAvatarEventList.Length < count) { + PhysicalAvatarEventList = new PhysicalAvatarEventListBlock[count]; + for(int j = 0; j < count; j++) PhysicalAvatarEventList[j] = new PhysicalAvatarEventListBlock(); + } + for (int j = 0; j < count; j++) + { PhysicalAvatarEventList[j].FromBytes(bytes, ref i); } + } + + public AgentAnimationPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - AnimationList = new AnimationListBlock[count]; + if(AnimationList.Length < count) { + AnimationList = new AnimationListBlock[count]; + for(int j = 0; j < count; j++) AnimationList[j] = new AnimationListBlock(); + } for (int j = 0; j < count; j++) - { AnimationList[j] = new AnimationListBlock(bytes, ref i); } + { AnimationList[j].FromBytes(bytes, ref i); } count = (int)bytes[i++]; - PhysicalAvatarEventList = new PhysicalAvatarEventListBlock[count]; + if(PhysicalAvatarEventList.Length < count) { + PhysicalAvatarEventList = new PhysicalAvatarEventListBlock[count]; + for(int j = 0; j < count; j++) PhysicalAvatarEventList[j] = new PhysicalAvatarEventListBlock(); + } for (int j = 0; j < count; j++) - { PhysicalAvatarEventList[j] = new PhysicalAvatarEventListBlock(bytes, ref i); } + { PhysicalAvatarEventList[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -63778,11 +76230,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -63822,11 +76279,16 @@ namespace libsecondlife.Packets public TargetObjectBlock() { } public TargetObjectBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - TargetID = new LLUUID(bytes, i); i += 16; - Offset = new LLVector3(bytes, i); i += 12; + TargetID.FromBytes(bytes, i); i += 16; + Offset.FromBytes(bytes, i); i += 12; } catch (Exception) { @@ -63865,19 +76327,40 @@ namespace libsecondlife.Packets TargetObject = new TargetObjectBlock(); } - public AgentRequestSitPacket(byte[] bytes, ref int i) + public AgentRequestSitPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new HighHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - TargetObject = new TargetObjectBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public AgentRequestSitPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + TargetObject.FromBytes(bytes, ref i); + } + + public AgentRequestSitPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); - TargetObject = new TargetObjectBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + TargetObject.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -63923,11 +76406,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -63964,17 +76452,38 @@ namespace libsecondlife.Packets AgentData = new AgentDataBlock(); } - public AgentSitPacket(byte[] bytes, ref int i) + public AgentSitPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new HighHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public AgentSitPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + } + + public AgentSitPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -64018,11 +76527,16 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -64065,10 +76579,15 @@ namespace libsecondlife.Packets public RequestImageBlock() { } public RequestImageBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - Image = new LLUUID(bytes, i); i += 16; + Image.FromBytes(bytes, i); i += 16; DiscardLevel = (sbyte)bytes[i++]; if (!BitConverter.IsLittleEndian) Array.Reverse(bytes, i, 4); DownloadPriority = BitConverter.ToSingle(bytes, i); i += 4; @@ -64124,25 +76643,52 @@ namespace libsecondlife.Packets RequestImage = new RequestImageBlock[0]; } - public RequestImagePacket(byte[] bytes, ref int i) + public RequestImagePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new HighHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - RequestImage = new RequestImageBlock[count]; - for (int j = 0; j < count; j++) - { RequestImage[j] = new RequestImageBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public RequestImagePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(RequestImage.Length < count) { + RequestImage = new RequestImageBlock[count]; + for(int j = 0; j < count; j++) RequestImage[j] = new RequestImageBlock(); + } + for (int j = 0; j < count; j++) + { RequestImage[j].FromBytes(bytes, ref i); } + } + + public RequestImagePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - RequestImage = new RequestImageBlock[count]; + if(RequestImage.Length < count) { + RequestImage = new RequestImageBlock[count]; + for(int j = 0; j < count; j++) RequestImage[j] = new RequestImageBlock(); + } for (int j = 0; j < count; j++) - { RequestImage[j] = new RequestImageBlock(bytes, ref i); } + { RequestImage[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -64196,10 +76742,15 @@ namespace libsecondlife.Packets public ImageIDBlock() { } public ImageIDBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ID = new LLUUID(bytes, i); i += 16; + ID.FromBytes(bytes, i); i += 16; Codec = (byte)bytes[i++]; Size = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); Packets = (ushort)(bytes[i++] + (bytes[i++] << 8)); @@ -64261,6 +76812,11 @@ namespace libsecondlife.Packets public ImageDataBlock() { } public ImageDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -64307,19 +76863,40 @@ namespace libsecondlife.Packets ImageData = new ImageDataBlock(); } - public ImageDataPacket(byte[] bytes, ref int i) + public ImageDataPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new HighHeader(bytes, ref i, ref packetEnd); - ImageID = new ImageIDBlock(bytes, ref i); - ImageData = new ImageDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ImageDataPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + ImageID.FromBytes(bytes, ref i); + ImageData.FromBytes(bytes, ref i); + } + + public ImageDataPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - ImageID = new ImageIDBlock(bytes, ref i); - ImageData = new ImageDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + ImageID.FromBytes(bytes, ref i); + ImageData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -64365,10 +76942,15 @@ namespace libsecondlife.Packets public ImageIDBlock() { } public ImageIDBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ID = new LLUUID(bytes, i); i += 16; + ID.FromBytes(bytes, i); i += 16; Packet = (ushort)(bytes[i++] + (bytes[i++] << 8)); } catch (Exception) @@ -64421,6 +77003,11 @@ namespace libsecondlife.Packets public ImageDataBlock() { } public ImageDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -64467,19 +77054,40 @@ namespace libsecondlife.Packets ImageData = new ImageDataBlock(); } - public ImagePacketPacket(byte[] bytes, ref int i) + public ImagePacketPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new HighHeader(bytes, ref i, ref packetEnd); - ImageID = new ImageIDBlock(bytes, ref i); - ImageData = new ImageDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ImagePacketPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + ImageID.FromBytes(bytes, ref i); + ImageData.FromBytes(bytes, ref i); + } + + public ImagePacketPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - ImageID = new ImageIDBlock(bytes, ref i); - ImageData = new ImageDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + ImageID.FromBytes(bytes, ref i); + ImageData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -64524,6 +77132,11 @@ namespace libsecondlife.Packets public LayerIDBlock() { } public LayerIDBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -64576,6 +77189,11 @@ namespace libsecondlife.Packets public LayerDataBlock() { } public LayerDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -64622,19 +77240,40 @@ namespace libsecondlife.Packets LayerData = new LayerDataBlock(); } - public LayerDataPacket(byte[] bytes, ref int i) + public LayerDataPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new HighHeader(bytes, ref i, ref packetEnd); - LayerID = new LayerIDBlock(bytes, ref i); - LayerData = new LayerDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public LayerDataPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + LayerID.FromBytes(bytes, ref i); + LayerData.FromBytes(bytes, ref i); + } + + public LayerDataPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - LayerID = new LayerIDBlock(bytes, ref i); - LayerData = new LayerDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + LayerID.FromBytes(bytes, ref i); + LayerData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -64680,6 +77319,11 @@ namespace libsecondlife.Packets public RegionDataBlock() { } public RegionDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -64876,18 +77520,23 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { ID = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); State = (byte)bytes[i++]; - FullID = new LLUUID(bytes, i); i += 16; + FullID.FromBytes(bytes, i); i += 16; CRC = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); PCode = (byte)bytes[i++]; Material = (byte)bytes[i++]; ClickAction = (byte)bytes[i++]; - Scale = new LLVector3(bytes, i); i += 12; + Scale.FromBytes(bytes, i); i += 12; length = (ushort)bytes[i++]; _objectdata = new byte[length]; Buffer.BlockCopy(bytes, i, _objectdata, 0, length); i += length; @@ -64937,16 +77586,16 @@ namespace libsecondlife.Packets length = (ushort)bytes[i++]; _extraparams = new byte[length]; Buffer.BlockCopy(bytes, i, _extraparams, 0, length); i += length; - Sound = new LLUUID(bytes, i); i += 16; - OwnerID = new LLUUID(bytes, i); i += 16; + Sound.FromBytes(bytes, i); i += 16; + OwnerID.FromBytes(bytes, i); i += 16; if (!BitConverter.IsLittleEndian) Array.Reverse(bytes, i, 4); Gain = BitConverter.ToSingle(bytes, i); i += 4; Flags = (byte)bytes[i++]; if (!BitConverter.IsLittleEndian) Array.Reverse(bytes, i, 4); Radius = BitConverter.ToSingle(bytes, i); i += 4; JointType = (byte)bytes[i++]; - JointPivot = new LLVector3(bytes, i); i += 12; - JointAxisOrAnchor = new LLVector3(bytes, i); i += 12; + JointPivot.FromBytes(bytes, i); i += 12; + JointAxisOrAnchor.FromBytes(bytes, i); i += 12; } catch (Exception) { @@ -65126,25 +77775,52 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public ObjectUpdatePacket(byte[] bytes, ref int i) + public ObjectUpdatePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new HighHeader(bytes, ref i, ref packetEnd); - RegionData = new RegionDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectUpdatePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + RegionData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public ObjectUpdatePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - RegionData = new RegionDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + RegionData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -65196,6 +77872,11 @@ namespace libsecondlife.Packets public RegionDataBlock() { } public RegionDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -65260,6 +77941,11 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -65312,25 +77998,52 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public ObjectUpdateCompressedPacket(byte[] bytes, ref int i) + public ObjectUpdateCompressedPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new HighHeader(bytes, ref i, ref packetEnd); - RegionData = new RegionDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectUpdateCompressedPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + RegionData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public ObjectUpdateCompressedPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - RegionData = new RegionDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + RegionData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -65382,6 +78095,11 @@ namespace libsecondlife.Packets public RegionDataBlock() { } public RegionDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -65435,6 +78153,11 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -65490,25 +78213,52 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public ObjectUpdateCachedPacket(byte[] bytes, ref int i) + public ObjectUpdateCachedPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new HighHeader(bytes, ref i, ref packetEnd); - RegionData = new RegionDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ObjectUpdateCachedPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + RegionData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public ObjectUpdateCachedPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - RegionData = new RegionDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + RegionData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -65560,6 +78310,11 @@ namespace libsecondlife.Packets public RegionDataBlock() { } public RegionDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -65635,6 +78390,11 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -65689,25 +78449,52 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public ImprovedTerseObjectUpdatePacket(byte[] bytes, ref int i) + public ImprovedTerseObjectUpdatePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new HighHeader(bytes, ref i, ref packetEnd); - RegionData = new RegionDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ImprovedTerseObjectUpdatePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + RegionData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public ImprovedTerseObjectUpdatePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - RegionData = new RegionDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + RegionData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -65758,6 +78545,11 @@ namespace libsecondlife.Packets public ObjectDataBlock() { } public ObjectDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -65799,23 +78591,50 @@ namespace libsecondlife.Packets ObjectData = new ObjectDataBlock[0]; } - public KillObjectPacket(byte[] bytes, ref int i) + public KillObjectPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new HighHeader(bytes, ref i, ref packetEnd); - int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; - for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public KillObjectPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + int count = (int)bytes[i++]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } + for (int j = 0; j < count; j++) + { ObjectData[j].FromBytes(bytes, ref i); } + } + + public KillObjectPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } int count = (int)bytes[i++]; - ObjectData = new ObjectDataBlock[count]; + if(ObjectData.Length < count) { + ObjectData = new ObjectDataBlock[count]; + for(int j = 0; j < count; j++) ObjectData[j] = new ObjectDataBlock(); + } for (int j = 0; j < count; j++) - { ObjectData[j] = new ObjectDataBlock(bytes, ref i); } + { ObjectData[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -65880,11 +78699,16 @@ namespace libsecondlife.Packets public TransferDataBlock() { } public TransferDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { - TransferID = new LLUUID(bytes, i); i += 16; + TransferID.FromBytes(bytes, i); i += 16; ChannelType = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); Packet = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); Status = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); @@ -65945,17 +78769,38 @@ namespace libsecondlife.Packets TransferData = new TransferDataBlock(); } - public TransferPacketPacket(byte[] bytes, ref int i) + public TransferPacketPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new HighHeader(bytes, ref i, ref packetEnd); - TransferData = new TransferDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public TransferPacketPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + TransferData.FromBytes(bytes, ref i); + } + + public TransferPacketPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - TransferData = new TransferDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + TransferData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -65999,6 +78844,11 @@ namespace libsecondlife.Packets public XferIDBlock() { } public XferIDBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -66064,6 +78914,11 @@ namespace libsecondlife.Packets public DataPacketBlock() { } public DataPacketBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -66110,19 +78965,40 @@ namespace libsecondlife.Packets DataPacket = new DataPacketBlock(); } - public SendXferPacketPacket(byte[] bytes, ref int i) + public SendXferPacketPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new HighHeader(bytes, ref i, ref packetEnd); - XferID = new XferIDBlock(bytes, ref i); - DataPacket = new DataPacketBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public SendXferPacketPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + XferID.FromBytes(bytes, ref i); + DataPacket.FromBytes(bytes, ref i); + } + + public SendXferPacketPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - XferID = new XferIDBlock(bytes, ref i); - DataPacket = new DataPacketBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + XferID.FromBytes(bytes, ref i); + DataPacket.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -66168,6 +79044,11 @@ namespace libsecondlife.Packets public XferIDBlock() { } public XferIDBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -66219,17 +79100,38 @@ namespace libsecondlife.Packets XferID = new XferIDBlock(); } - public ConfirmXferPacketPacket(byte[] bytes, ref int i) + public ConfirmXferPacketPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new HighHeader(bytes, ref i, ref packetEnd); - XferID = new XferIDBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ConfirmXferPacketPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + XferID.FromBytes(bytes, ref i); + } + + public ConfirmXferPacketPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - XferID = new XferIDBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + XferID.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -66272,10 +79174,15 @@ namespace libsecondlife.Packets public SenderBlock() { } public SenderBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ID = new LLUUID(bytes, i); i += 16; + ID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -66313,10 +79220,15 @@ namespace libsecondlife.Packets public AnimationListBlock() { } public AnimationListBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - AnimID = new LLUUID(bytes, i); i += 16; + AnimID.FromBytes(bytes, i); i += 16; AnimSequenceID = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) @@ -66359,10 +79271,15 @@ namespace libsecondlife.Packets public AnimationSourceListBlock() { } public AnimationSourceListBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ObjectID = new LLUUID(bytes, i); i += 16; + ObjectID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -66411,6 +79328,11 @@ namespace libsecondlife.Packets public PhysicalAvatarEventListBlock() { } public PhysicalAvatarEventListBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -66460,41 +79382,80 @@ namespace libsecondlife.Packets PhysicalAvatarEventList = new PhysicalAvatarEventListBlock[0]; } - public AvatarAnimationPacket(byte[] bytes, ref int i) + public AvatarAnimationPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new HighHeader(bytes, ref i, ref packetEnd); - Sender = new SenderBlock(bytes, ref i); - int count = (int)bytes[i++]; - AnimationList = new AnimationListBlock[count]; - for (int j = 0; j < count; j++) - { AnimationList[j] = new AnimationListBlock(bytes, ref i); } - count = (int)bytes[i++]; - AnimationSourceList = new AnimationSourceListBlock[count]; - for (int j = 0; j < count; j++) - { AnimationSourceList[j] = new AnimationSourceListBlock(bytes, ref i); } - count = (int)bytes[i++]; - PhysicalAvatarEventList = new PhysicalAvatarEventListBlock[count]; - for (int j = 0; j < count; j++) - { PhysicalAvatarEventList[j] = new PhysicalAvatarEventListBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public AvatarAnimationPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Sender.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(AnimationList.Length < count) { + AnimationList = new AnimationListBlock[count]; + for(int j = 0; j < count; j++) AnimationList[j] = new AnimationListBlock(); + } + for (int j = 0; j < count; j++) + { AnimationList[j].FromBytes(bytes, ref i); } + count = (int)bytes[i++]; + if(AnimationSourceList.Length < count) { + AnimationSourceList = new AnimationSourceListBlock[count]; + for(int j = 0; j < count; j++) AnimationSourceList[j] = new AnimationSourceListBlock(); + } + for (int j = 0; j < count; j++) + { AnimationSourceList[j].FromBytes(bytes, ref i); } + count = (int)bytes[i++]; + if(PhysicalAvatarEventList.Length < count) { + PhysicalAvatarEventList = new PhysicalAvatarEventListBlock[count]; + for(int j = 0; j < count; j++) PhysicalAvatarEventList[j] = new PhysicalAvatarEventListBlock(); + } + for (int j = 0; j < count; j++) + { PhysicalAvatarEventList[j].FromBytes(bytes, ref i); } + } + + public AvatarAnimationPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - Sender = new SenderBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + Sender.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - AnimationList = new AnimationListBlock[count]; + if(AnimationList.Length < count) { + AnimationList = new AnimationListBlock[count]; + for(int j = 0; j < count; j++) AnimationList[j] = new AnimationListBlock(); + } for (int j = 0; j < count; j++) - { AnimationList[j] = new AnimationListBlock(bytes, ref i); } + { AnimationList[j].FromBytes(bytes, ref i); } count = (int)bytes[i++]; - AnimationSourceList = new AnimationSourceListBlock[count]; + if(AnimationSourceList.Length < count) { + AnimationSourceList = new AnimationSourceListBlock[count]; + for(int j = 0; j < count; j++) AnimationSourceList[j] = new AnimationSourceListBlock(); + } for (int j = 0; j < count; j++) - { AnimationSourceList[j] = new AnimationSourceListBlock(bytes, ref i); } + { AnimationSourceList[j].FromBytes(bytes, ref i); } count = (int)bytes[i++]; - PhysicalAvatarEventList = new PhysicalAvatarEventListBlock[count]; + if(PhysicalAvatarEventList.Length < count) { + PhysicalAvatarEventList = new PhysicalAvatarEventListBlock[count]; + for(int j = 0; j < count; j++) PhysicalAvatarEventList[j] = new PhysicalAvatarEventListBlock(); + } for (int j = 0; j < count; j++) - { PhysicalAvatarEventList[j] = new PhysicalAvatarEventListBlock(bytes, ref i); } + { PhysicalAvatarEventList[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -66561,10 +79522,15 @@ namespace libsecondlife.Packets public SitObjectBlock() { } public SitObjectBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - ID = new LLUUID(bytes, i); i += 16; + ID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -66606,14 +79572,19 @@ namespace libsecondlife.Packets public SitTransformBlock() { } public SitTransformBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { AutoPilot = (bytes[i++] != 0) ? (bool)true : (bool)false; - SitPosition = new LLVector3(bytes, i); i += 12; - SitRotation = new LLQuaternion(bytes, i, true); i += 12; - CameraEyeOffset = new LLVector3(bytes, i); i += 12; - CameraAtOffset = new LLVector3(bytes, i); i += 12; + SitPosition.FromBytes(bytes, i); i += 12; + SitRotation.FromBytes(bytes, i, true); i += 12; + CameraEyeOffset.FromBytes(bytes, i); i += 12; + CameraAtOffset.FromBytes(bytes, i); i += 12; ForceMouselook = (bytes[i++] != 0) ? (bool)true : (bool)false; } catch (Exception) @@ -66661,19 +79632,40 @@ namespace libsecondlife.Packets SitTransform = new SitTransformBlock(); } - public AvatarSitResponsePacket(byte[] bytes, ref int i) + public AvatarSitResponsePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new HighHeader(bytes, ref i, ref packetEnd); - SitObject = new SitObjectBlock(bytes, ref i); - SitTransform = new SitTransformBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public AvatarSitResponsePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + SitObject.FromBytes(bytes, ref i); + SitTransform.FromBytes(bytes, ref i); + } + + public AvatarSitResponsePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - SitObject = new SitObjectBlock(bytes, ref i); - SitTransform = new SitTransformBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + SitObject.FromBytes(bytes, ref i); + SitTransform.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -66718,10 +79710,15 @@ namespace libsecondlife.Packets public CameraCollidePlaneBlock() { } public CameraCollidePlaneBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - Plane = new LLVector4(bytes, i); i += 16; + Plane.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -66756,17 +79753,38 @@ namespace libsecondlife.Packets CameraCollidePlane = new CameraCollidePlaneBlock(); } - public CameraConstraintPacket(byte[] bytes, ref int i) + public CameraConstraintPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new HighHeader(bytes, ref i, ref packetEnd); - CameraCollidePlane = new CameraCollidePlaneBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public CameraConstraintPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + CameraCollidePlane.FromBytes(bytes, ref i); + } + + public CameraConstraintPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - CameraCollidePlane = new CameraCollidePlaneBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + CameraCollidePlane.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -66913,6 +79931,11 @@ namespace libsecondlife.Packets public ParcelDataBlock() { } public ParcelDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -66924,14 +79947,14 @@ namespace libsecondlife.Packets OtherCount = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); PublicCount = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); LocalID = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - OwnerID = new LLUUID(bytes, i); i += 16; + OwnerID.FromBytes(bytes, i); i += 16; IsGroupOwned = (bytes[i++] != 0) ? (bool)true : (bool)false; AuctionID = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); ClaimDate = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); ClaimPrice = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); RentPrice = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - AABBMin = new LLVector3(bytes, i); i += 12; - AABBMax = new LLVector3(bytes, i); i += 12; + AABBMin.FromBytes(bytes, i); i += 12; + AABBMax.FromBytes(bytes, i); i += 12; length = (ushort)(bytes[i++] + (bytes[i++] << 8)); _bitmap = new byte[length]; Buffer.BlockCopy(bytes, i, _bitmap, 0, length); i += length; @@ -66962,17 +79985,17 @@ namespace libsecondlife.Packets length = (ushort)bytes[i++]; _mediaurl = new byte[length]; Buffer.BlockCopy(bytes, i, _mediaurl, 0, length); i += length; - MediaID = new LLUUID(bytes, i); i += 16; + MediaID.FromBytes(bytes, i); i += 16; MediaAutoScale = (byte)bytes[i++]; - GroupID = new LLUUID(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; PassPrice = (int)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); if (!BitConverter.IsLittleEndian) Array.Reverse(bytes, i, 4); PassHours = BitConverter.ToSingle(bytes, i); i += 4; Category = (byte)bytes[i++]; - AuthBuyerID = new LLUUID(bytes, i); i += 16; - SnapshotID = new LLUUID(bytes, i); i += 16; - UserLocation = new LLVector3(bytes, i); i += 12; - UserLookAt = new LLVector3(bytes, i); i += 12; + AuthBuyerID.FromBytes(bytes, i); i += 16; + SnapshotID.FromBytes(bytes, i); i += 16; + UserLocation.FromBytes(bytes, i); i += 12; + UserLookAt.FromBytes(bytes, i); i += 12; LandingType = (byte)bytes[i++]; RegionPushOverride = (bytes[i++] != 0) ? (bool)true : (bool)false; RegionDenyAnonymous = (bytes[i++] != 0) ? (bool)true : (bool)false; @@ -67198,17 +80221,38 @@ namespace libsecondlife.Packets ParcelData = new ParcelDataBlock(); } - public ParcelPropertiesPacket(byte[] bytes, ref int i) + public ParcelPropertiesPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new HighHeader(bytes, ref i, ref packetEnd); - ParcelData = new ParcelDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ParcelPropertiesPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + ParcelData.FromBytes(bytes, ref i); + } + + public ParcelPropertiesPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - ParcelData = new ParcelDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + ParcelData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -67299,21 +80343,26 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try { RegionHandle = (ulong)((ulong)bytes[i++] + ((ulong)bytes[i++] << 8) + ((ulong)bytes[i++] << 16) + ((ulong)bytes[i++] << 24) + ((ulong)bytes[i++] << 32) + ((ulong)bytes[i++] << 40) + ((ulong)bytes[i++] << 48) + ((ulong)bytes[i++] << 56)); ViewerCircuitCode = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; - AgentPos = new LLVector3(bytes, i); i += 12; - AgentVel = new LLVector3(bytes, i); i += 12; - Center = new LLVector3(bytes, i); i += 12; - Size = new LLVector3(bytes, i); i += 12; - AtAxis = new LLVector3(bytes, i); i += 12; - LeftAxis = new LLVector3(bytes, i); i += 12; - UpAxis = new LLVector3(bytes, i); i += 12; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; + AgentPos.FromBytes(bytes, i); i += 12; + AgentVel.FromBytes(bytes, i); i += 12; + Center.FromBytes(bytes, i); i += 12; + Size.FromBytes(bytes, i); i += 12; + AtAxis.FromBytes(bytes, i); i += 12; + LeftAxis.FromBytes(bytes, i); i += 12; + UpAxis.FromBytes(bytes, i); i += 12; ChangedGrid = (bytes[i++] != 0) ? (bool)true : (bool)false; if (!BitConverter.IsLittleEndian) Array.Reverse(bytes, i, 4); Far = BitConverter.ToSingle(bytes, i); i += 4; @@ -67323,19 +80372,19 @@ namespace libsecondlife.Packets _throttles = new byte[length]; Buffer.BlockCopy(bytes, i, _throttles, 0, length); i += length; LocomotionState = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - HeadRotation = new LLQuaternion(bytes, i, true); i += 12; - BodyRotation = new LLQuaternion(bytes, i, true); i += 12; + HeadRotation.FromBytes(bytes, i, true); i += 12; + BodyRotation.FromBytes(bytes, i, true); i += 12; ControlFlags = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); if (!BitConverter.IsLittleEndian) Array.Reverse(bytes, i, 4); EnergyLevel = BitConverter.ToSingle(bytes, i); i += 4; GodLevel = (byte)bytes[i++]; AlwaysRun = (bytes[i++] != 0) ? (bool)true : (bool)false; - PreyAgent = new LLUUID(bytes, i); i += 16; + PreyAgent.FromBytes(bytes, i); i += 16; AgentAccess = (byte)bytes[i++]; length = (ushort)(bytes[i++] + (bytes[i++] << 8)); _agenttextures = new byte[length]; Buffer.BlockCopy(bytes, i, _agenttextures, 0, length); i += length; - ActiveGroupID = new LLUUID(bytes, i); i += 16; + ActiveGroupID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -67454,10 +80503,15 @@ namespace libsecondlife.Packets public GroupDataBlock() { } public GroupDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - GroupID = new LLUUID(bytes, i); i += 16; + GroupID.FromBytes(bytes, i); i += 16; GroupPowers = (ulong)((ulong)bytes[i++] + ((ulong)bytes[i++] << 8) + ((ulong)bytes[i++] << 16) + ((ulong)bytes[i++] << 24) + ((ulong)bytes[i++] << 32) + ((ulong)bytes[i++] << 40) + ((ulong)bytes[i++] << 48) + ((ulong)bytes[i++] << 56)); AcceptNotices = (bytes[i++] != 0) ? (bool)true : (bool)false; } @@ -67508,11 +80562,16 @@ namespace libsecondlife.Packets public AnimationDataBlock() { } public AnimationDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - Animation = new LLUUID(bytes, i); i += 16; - ObjectID = new LLUUID(bytes, i); i += 16; + Animation.FromBytes(bytes, i); i += 16; + ObjectID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -67551,10 +80610,15 @@ namespace libsecondlife.Packets public GranterBlockBlock() { } public GranterBlockBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - GranterID = new LLUUID(bytes, i); i += 16; + GranterID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -67603,6 +80667,11 @@ namespace libsecondlife.Packets public NVPairDataBlock() { } public NVPairDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { int length; try @@ -67649,6 +80718,11 @@ namespace libsecondlife.Packets public VisualParamBlock() { } public VisualParamBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { @@ -67697,57 +80771,108 @@ namespace libsecondlife.Packets VisualParam = new VisualParamBlock[0]; } - public ChildAgentUpdatePacket(byte[] bytes, ref int i) + public ChildAgentUpdatePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new HighHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); - int count = (int)bytes[i++]; - GroupData = new GroupDataBlock[count]; - for (int j = 0; j < count; j++) - { GroupData[j] = new GroupDataBlock(bytes, ref i); } - count = (int)bytes[i++]; - AnimationData = new AnimationDataBlock[count]; - for (int j = 0; j < count; j++) - { AnimationData[j] = new AnimationDataBlock(bytes, ref i); } - count = (int)bytes[i++]; - GranterBlock = new GranterBlockBlock[count]; - for (int j = 0; j < count; j++) - { GranterBlock[j] = new GranterBlockBlock(bytes, ref i); } - count = (int)bytes[i++]; - NVPairData = new NVPairDataBlock[count]; - for (int j = 0; j < count; j++) - { NVPairData[j] = new NVPairDataBlock(bytes, ref i); } - count = (int)bytes[i++]; - VisualParam = new VisualParamBlock[count]; - for (int j = 0; j < count; j++) - { VisualParam[j] = new VisualParamBlock(bytes, ref i); } + FromBytes(bytes, ref i, ref packetEnd, null); } - public ChildAgentUpdatePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + int count = (int)bytes[i++]; + if(GroupData.Length < count) { + GroupData = new GroupDataBlock[count]; + for(int j = 0; j < count; j++) GroupData[j] = new GroupDataBlock(); + } + for (int j = 0; j < count; j++) + { GroupData[j].FromBytes(bytes, ref i); } + count = (int)bytes[i++]; + if(AnimationData.Length < count) { + AnimationData = new AnimationDataBlock[count]; + for(int j = 0; j < count; j++) AnimationData[j] = new AnimationDataBlock(); + } + for (int j = 0; j < count; j++) + { AnimationData[j].FromBytes(bytes, ref i); } + count = (int)bytes[i++]; + if(GranterBlock.Length < count) { + GranterBlock = new GranterBlockBlock[count]; + for(int j = 0; j < count; j++) GranterBlock[j] = new GranterBlockBlock(); + } + for (int j = 0; j < count; j++) + { GranterBlock[j].FromBytes(bytes, ref i); } + count = (int)bytes[i++]; + if(NVPairData.Length < count) { + NVPairData = new NVPairDataBlock[count]; + for(int j = 0; j < count; j++) NVPairData[j] = new NVPairDataBlock(); + } + for (int j = 0; j < count; j++) + { NVPairData[j].FromBytes(bytes, ref i); } + count = (int)bytes[i++]; + if(VisualParam.Length < count) { + VisualParam = new VisualParamBlock[count]; + for(int j = 0; j < count; j++) VisualParam[j] = new VisualParamBlock(); + } + for (int j = 0; j < count; j++) + { VisualParam[j].FromBytes(bytes, ref i); } + } + + public ChildAgentUpdatePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); int count = (int)bytes[i++]; - GroupData = new GroupDataBlock[count]; + if(GroupData.Length < count) { + GroupData = new GroupDataBlock[count]; + for(int j = 0; j < count; j++) GroupData[j] = new GroupDataBlock(); + } for (int j = 0; j < count; j++) - { GroupData[j] = new GroupDataBlock(bytes, ref i); } + { GroupData[j].FromBytes(bytes, ref i); } count = (int)bytes[i++]; - AnimationData = new AnimationDataBlock[count]; + if(AnimationData.Length < count) { + AnimationData = new AnimationDataBlock[count]; + for(int j = 0; j < count; j++) AnimationData[j] = new AnimationDataBlock(); + } for (int j = 0; j < count; j++) - { AnimationData[j] = new AnimationDataBlock(bytes, ref i); } + { AnimationData[j].FromBytes(bytes, ref i); } count = (int)bytes[i++]; - GranterBlock = new GranterBlockBlock[count]; + if(GranterBlock.Length < count) { + GranterBlock = new GranterBlockBlock[count]; + for(int j = 0; j < count; j++) GranterBlock[j] = new GranterBlockBlock(); + } for (int j = 0; j < count; j++) - { GranterBlock[j] = new GranterBlockBlock(bytes, ref i); } + { GranterBlock[j].FromBytes(bytes, ref i); } count = (int)bytes[i++]; - NVPairData = new NVPairDataBlock[count]; + if(NVPairData.Length < count) { + NVPairData = new NVPairDataBlock[count]; + for(int j = 0; j < count; j++) NVPairData[j] = new NVPairDataBlock(); + } for (int j = 0; j < count; j++) - { NVPairData[j] = new NVPairDataBlock(bytes, ref i); } + { NVPairData[j].FromBytes(bytes, ref i); } count = (int)bytes[i++]; - VisualParam = new VisualParamBlock[count]; + if(VisualParam.Length < count) { + VisualParam = new VisualParamBlock[count]; + for(int j = 0; j < count; j++) VisualParam[j] = new VisualParamBlock(); + } for (int j = 0; j < count; j++) - { VisualParam[j] = new VisualParamBlock(bytes, ref i); } + { VisualParam[j].FromBytes(bytes, ref i); } } public override byte[] ToBytes() @@ -67833,13 +80958,18 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { RegionHandle = (ulong)((ulong)bytes[i++] + ((ulong)bytes[i++] << 8) + ((ulong)bytes[i++] << 16) + ((ulong)bytes[i++] << 24) + ((ulong)bytes[i++] << 32) + ((ulong)bytes[i++] << 40) + ((ulong)bytes[i++] << 48) + ((ulong)bytes[i++] << 56)); ViewerCircuitCode = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; } catch (Exception) { @@ -67890,17 +81020,38 @@ namespace libsecondlife.Packets AgentData = new AgentDataBlock(); } - public ChildAgentAlivePacket(byte[] bytes, ref int i) + public ChildAgentAlivePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new HighHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ChildAgentAlivePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + } + + public ChildAgentAlivePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -67954,20 +81105,25 @@ namespace libsecondlife.Packets public AgentDataBlock() { } public AgentDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { RegionHandle = (ulong)((ulong)bytes[i++] + ((ulong)bytes[i++] << 8) + ((ulong)bytes[i++] << 16) + ((ulong)bytes[i++] << 24) + ((ulong)bytes[i++] << 32) + ((ulong)bytes[i++] << 40) + ((ulong)bytes[i++] << 48) + ((ulong)bytes[i++] << 56)); ViewerCircuitCode = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - AgentID = new LLUUID(bytes, i); i += 16; - SessionID = new LLUUID(bytes, i); i += 16; - AgentPos = new LLVector3(bytes, i); i += 12; - AgentVel = new LLVector3(bytes, i); i += 12; - Center = new LLVector3(bytes, i); i += 12; - Size = new LLVector3(bytes, i); i += 12; - AtAxis = new LLVector3(bytes, i); i += 12; - LeftAxis = new LLVector3(bytes, i); i += 12; - UpAxis = new LLVector3(bytes, i); i += 12; + AgentID.FromBytes(bytes, i); i += 16; + SessionID.FromBytes(bytes, i); i += 16; + AgentPos.FromBytes(bytes, i); i += 12; + AgentVel.FromBytes(bytes, i); i += 12; + Center.FromBytes(bytes, i); i += 12; + Size.FromBytes(bytes, i); i += 12; + AtAxis.FromBytes(bytes, i); i += 12; + LeftAxis.FromBytes(bytes, i); i += 12; + UpAxis.FromBytes(bytes, i); i += 12; ChangedGrid = (bytes[i++] != 0) ? (bool)true : (bool)false; } catch (Exception) @@ -68035,17 +81191,38 @@ namespace libsecondlife.Packets AgentData = new AgentDataBlock(); } - public ChildAgentPositionUpdatePacket(byte[] bytes, ref int i) + public ChildAgentPositionUpdatePacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new HighHeader(bytes, ref i, ref packetEnd); - AgentData = new AgentDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public ChildAgentPositionUpdatePacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); + } + + public ChildAgentPositionUpdatePacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - AgentData = new AgentDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + AgentData.FromBytes(bytes, ref i); } public override byte[] ToBytes() @@ -68094,15 +81271,20 @@ namespace libsecondlife.Packets public SoundDataBlock() { } public SoundDataBlock(byte[] bytes, ref int i) + { + FromBytes(bytes, ref i); + } + + public void FromBytes(byte[] bytes, ref int i) { try { - SoundID = new LLUUID(bytes, i); i += 16; - OwnerID = new LLUUID(bytes, i); i += 16; - ObjectID = new LLUUID(bytes, i); i += 16; - ParentID = new LLUUID(bytes, i); i += 16; + SoundID.FromBytes(bytes, i); i += 16; + OwnerID.FromBytes(bytes, i); i += 16; + ObjectID.FromBytes(bytes, i); i += 16; + ParentID.FromBytes(bytes, i); i += 16; Handle = (ulong)((ulong)bytes[i++] + ((ulong)bytes[i++] << 8) + ((ulong)bytes[i++] << 16) + ((ulong)bytes[i++] << 24) + ((ulong)bytes[i++] << 32) + ((ulong)bytes[i++] << 40) + ((ulong)bytes[i++] << 48) + ((ulong)bytes[i++] << 56)); - Position = new LLVector3(bytes, i); i += 12; + Position.FromBytes(bytes, i); i += 12; if (!BitConverter.IsLittleEndian) Array.Reverse(bytes, i, 4); Gain = BitConverter.ToSingle(bytes, i); i += 4; } @@ -68161,17 +81343,38 @@ namespace libsecondlife.Packets SoundData = new SoundDataBlock(); } - public SoundTriggerPacket(byte[] bytes, ref int i) + public SoundTriggerPacket(byte[] bytes, ref int i) : this() { int packetEnd = bytes.Length - 1; - Header = new HighHeader(bytes, ref i, ref packetEnd); - SoundData = new SoundDataBlock(bytes, ref i); + FromBytes(bytes, ref i, ref packetEnd, null); } - public SoundTriggerPacket(Header head, byte[] bytes, ref int i) + override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) + { + header.FromBytes(bytes, ref i, ref packetEnd); + if (header.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + SoundData.FromBytes(bytes, ref i); + } + + public SoundTriggerPacket(Header head, byte[] bytes, ref int i): this() + { + int packetEnd = bytes.Length - 1; + FromBytes(head, bytes, ref i, ref packetEnd, null); + } + + override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) { Header = head; - SoundData = new SoundDataBlock(bytes, ref i); + if (head.Zerocoded && zeroBuffer != null) + { + packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1; + bytes = zeroBuffer; + } + SoundData.FromBytes(bytes, ref i); } public override byte[] ToBytes() diff --git a/libsecondlife/mapgenerator/mapgenerator.cs b/libsecondlife/mapgenerator/mapgenerator.cs index 9c7bae3f..fdbed477 100644 --- a/libsecondlife/mapgenerator/mapgenerator.cs +++ b/libsecondlife/mapgenerator/mapgenerator.cs @@ -128,24 +128,19 @@ namespace mapgenerator " = (ushort)(bytes[i++] + (bytes[i++] << 8));"); break; case FieldType.LLQuaternion: - writer.WriteLine(" " + field.Name + - " = new LLQuaternion(bytes, i, true); i += 12;"); + writer.WriteLine(" " + field.Name + ".FromBytes(bytes, i, true); i += 12;"); break; case FieldType.LLUUID: - writer.WriteLine(" " + field.Name + - " = new LLUUID(bytes, i); i += 16;"); + writer.WriteLine(" " + field.Name + ".FromBytes(bytes, i); i += 16;"); break; case FieldType.LLVector3: - writer.WriteLine(" " + field.Name + - " = new LLVector3(bytes, i); i += 12;"); + writer.WriteLine(" " + field.Name + ".FromBytes(bytes, i); i += 12;"); break; case FieldType.LLVector3d: - writer.WriteLine(" " + field.Name + - " = new LLVector3d(bytes, i); i += 24;"); + writer.WriteLine(" " + field.Name + ".FromBytes(bytes, i); i += 24;"); break; case FieldType.LLVector4: - writer.WriteLine(" " + field.Name + - " = new LLVector4(bytes, i); i += 16;"); + writer.WriteLine(" " + field.Name + ".FromBytes(bytes, i); i += 16;"); break; case FieldType.S16: writer.WriteLine(" " + field.Name + @@ -383,6 +378,12 @@ namespace mapgenerator // Constructor for building the class from bytes //writer.WriteLine(" /// Constructor for building the block from a byte array"); writer.WriteLine(" public " + block.Name + "Block(byte[] bytes, ref int i)" + Environment.NewLine + + " {" + Environment.NewLine + + " FromBytes(bytes, ref i);" + Environment.NewLine + + " }" + Environment.NewLine); + + // Initiates instance variables from a byte message + writer.WriteLine(" public void FromBytes(byte[] bytes, ref int i)" + Environment.NewLine + " {"); // Declare a length variable if we need it for variable fields in this constructor @@ -505,8 +506,7 @@ namespace mapgenerator else { // Multiple count block - writer.WriteLine(" " + sanitizedName + " = new " + block.Name + - "Block[" + block.Count + "];"); + writer.WriteLine(" " + sanitizedName + " = new " + block.Name + "Block[" + block.Count + "];"); } } writer.WriteLine(" }" + Environment.NewLine); @@ -514,10 +514,20 @@ namespace mapgenerator // Constructor that takes a byte array and beginning position only (no prebuilt header) bool seenVariable = false; //writer.WriteLine(" /// Constructor that takes a byte array and beginning position (no prebuilt header)"); - writer.WriteLine(" public " + packet.Name + "Packet(byte[] bytes, ref int i)" + Environment.NewLine + " {"); - writer.WriteLine(" int packetEnd = bytes.Length - 1;"); - writer.WriteLine(" Header = new " + packet.Frequency.ToString() + - "Header(bytes, ref i, ref packetEnd);"); + writer.WriteLine(" public " + packet.Name + "Packet(byte[] bytes, ref int i) : this()" + Environment.NewLine + + " {" + Environment.NewLine + + " int packetEnd = bytes.Length - 1;" + Environment.NewLine + + " FromBytes(bytes, ref i, ref packetEnd, null);" + Environment.NewLine + + " }" + Environment.NewLine); + + writer.WriteLine(" override public void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer)" + Environment.NewLine + " {"); + writer.WriteLine(" header.FromBytes(bytes, ref i, ref packetEnd);"); + writer.WriteLine(" if (header.Zerocoded && zeroBuffer != null)"); + writer.WriteLine(" {"); + writer.WriteLine(" packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1;"); + writer.WriteLine(" bytes = zeroBuffer;"); + writer.WriteLine(" }"); + foreach (MapBlock block in packet.Blocks) { if (block.Name == "Header") { sanitizedName = "_" + block.Name; } @@ -526,7 +536,7 @@ namespace mapgenerator if (block.Count == 1) { // Single count block - writer.WriteLine(" " + sanitizedName + " = new " + block.Name + "Block(bytes, ref i);"); + writer.WriteLine(" " + sanitizedName + ".FromBytes(bytes, ref i);"); } else if (block.Count == -1) { @@ -540,19 +550,22 @@ namespace mapgenerator { writer.WriteLine(" count = (int)bytes[i++];"); } - writer.WriteLine(" " + sanitizedName + " = new " + block.Name + "Block[count];"); + writer.WriteLine(" if(" + sanitizedName + ".Length < count) {"); + writer.WriteLine(" " + sanitizedName + " = new " + block.Name + "Block[count];"); + writer.WriteLine(" for(int j = 0; j < count; j++) " + sanitizedName + "[j] = new " + block.Name + "Block();"); + writer.WriteLine(" }"); writer.WriteLine(" for (int j = 0; j < count; j++)"); - writer.WriteLine(" { " + sanitizedName + "[j] = new " + - block.Name + "Block(bytes, ref i); }"); + writer.WriteLine(" { " + sanitizedName + "[j].FromBytes(bytes, ref i); }"); } else { // Multiple count block - writer.WriteLine(" " + sanitizedName + " = new " + block.Name + - "Block[" + block.Count + "];"); + writer.WriteLine(" if(" + sanitizedName + ".Length < " + block.Count+") {"); + writer.WriteLine(" " + sanitizedName + " = new " + block.Name + "Block[" + block.Count + "];"); + writer.WriteLine(" for(int j = 0; j < " + block.Count + "; j++) " + sanitizedName + "[j] = new " + block.Name + "Block();"); + writer.WriteLine(" }"); writer.WriteLine(" for (int j = 0; j < " + block.Count + "; j++)"); - writer.WriteLine(" { " + sanitizedName + "[j] = new " + - block.Name + "Block(bytes, ref i); }"); + writer.WriteLine(" { " + sanitizedName + "[j].FromBytes(bytes, ref i); }"); } } writer.WriteLine(" }" + Environment.NewLine); @@ -561,9 +574,19 @@ namespace mapgenerator // Constructor that takes a byte array and a prebuilt header //writer.WriteLine(" /// Constructor that takes a byte array and a prebuilt header"); - writer.WriteLine(" public " + packet.Name + - "Packet(Header head, byte[] bytes, ref int i)" + Environment.NewLine + " {"); + writer.WriteLine(" public " + packet.Name + "Packet(Header head, byte[] bytes, ref int i): this()" + Environment.NewLine + + " {" + Environment.NewLine + + " int packetEnd = bytes.Length - 1;" + Environment.NewLine + + " FromBytes(head, bytes, ref i, ref packetEnd, null);" + Environment.NewLine + + " }" + Environment.NewLine); + + writer.WriteLine(" override public void FromBytes(Header head, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer)" + Environment.NewLine + " {"); writer.WriteLine(" Header = head;"); + writer.WriteLine(" if (head.Zerocoded && zeroBuffer != null)"); + writer.WriteLine(" {"); + writer.WriteLine(" packetEnd = Helpers.ZeroDecode(bytes, packetEnd + 1, zeroBuffer) - 1;"); + writer.WriteLine(" bytes = zeroBuffer;"); + writer.WriteLine(" }"); foreach (MapBlock block in packet.Blocks) { if (block.Name == "Header") { sanitizedName = "_" + block.Name; } @@ -572,7 +595,7 @@ namespace mapgenerator if (block.Count == 1) { // Single count block - writer.WriteLine(" " + sanitizedName + " = new " + block.Name + "Block(bytes, ref i);"); + writer.WriteLine(" " + sanitizedName + ".FromBytes(bytes, ref i);"); } else if (block.Count == -1) { @@ -586,19 +609,22 @@ namespace mapgenerator { writer.WriteLine(" count = (int)bytes[i++];"); } - writer.WriteLine(" " + sanitizedName + " = new " + block.Name + "Block[count];"); + writer.WriteLine(" if(" + sanitizedName + ".Length < count) {"); + writer.WriteLine(" " + sanitizedName + " = new " + block.Name + "Block[count];"); + writer.WriteLine(" for(int j = 0; j < count; j++) " + sanitizedName + "[j] = new " + block.Name + "Block();"); + writer.WriteLine(" }"); writer.WriteLine(" for (int j = 0; j < count; j++)"); - writer.WriteLine(" { " + sanitizedName + "[j] = new " + - block.Name + "Block(bytes, ref i); }"); + writer.WriteLine(" { " + sanitizedName + "[j].FromBytes(bytes, ref i); }"); } else { // Multiple count block - writer.WriteLine(" " + sanitizedName + " = new " + block.Name + - "Block[" + block.Count + "];"); + writer.WriteLine(" if(" + sanitizedName + ".Length < " + block.Count+") {"); + writer.WriteLine(" " + sanitizedName + " = new " + block.Name + "Block[" + block.Count + "];"); + writer.WriteLine(" for(int j = 0; j < " + block.Count + "; j++) " + sanitizedName + "[j] = new " + block.Name + "Block();"); + writer.WriteLine(" }"); writer.WriteLine(" for (int j = 0; j < " + block.Count + "; j++)"); - writer.WriteLine(" { " + sanitizedName + "[j] = new " + - block.Name + "Block(bytes, ref i); }"); + writer.WriteLine(" { " + sanitizedName + "[j].FromBytes(bytes, ref i); }"); } } writer.WriteLine(" }" + Environment.NewLine); @@ -808,7 +834,9 @@ namespace mapgenerator " public abstract partial class Packet" + Environment.NewLine + " {" + Environment.NewLine + " public abstract Header Header { get; set; }" + Environment.NewLine + " public abstract PacketType Type { get; }" + Environment.NewLine + - " internal int TickCount;" + Environment.NewLine + Environment.NewLine + + " public abstract void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer);" + Environment.NewLine + + " public abstract void FromBytes(Header header, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer);" + Environment.NewLine + + " public int TickCount;" + Environment.NewLine + Environment.NewLine + " public abstract byte[] ToBytes();" //+ Environment.NewLine + Environment.NewLine + //" public void ToXml(XmlWriter xmlWriter)" + Environment.NewLine + //" {" + Environment.NewLine + @@ -848,6 +876,42 @@ namespace mapgenerator " break;" + Environment.NewLine + " }" + Environment.NewLine + Environment.NewLine + " return PacketType.Default;" + Environment.NewLine + " }" + Environment.NewLine); + // Write the Packet.GetType() function + writer.WriteLine( + " public static PacketType GetType(byte[] bytes, int packetEnd, byte[] zeroBuffer)" + Environment.NewLine + + " {" + Environment.NewLine + " ushort id; PacketFrequency freq;" + Environment.NewLine + + " int i = 0, end = packetEnd;" + Environment.NewLine + + " Header header = Header.BuildHeader(bytes, ref i, ref end);" + Environment.NewLine + + " if (header.Zerocoded)" + Environment.NewLine + " {" + Environment.NewLine + + " end = Helpers.ZeroDecode(bytes, end + 1, zeroBuffer) - 1;" + Environment.NewLine + + " bytes = zeroBuffer;" + Environment.NewLine + " }" + Environment.NewLine + Environment.NewLine + + " if (bytes[6] == 0xFF)" + Environment.NewLine + " {" + Environment.NewLine + + " if (bytes[7] == 0xFF)" + Environment.NewLine + " {" + Environment.NewLine + + " id = (ushort)((bytes[8] << 8) + bytes[9]); freq = PacketFrequency.Low;" + Environment.NewLine + + " }" + Environment.NewLine + + " else" + Environment.NewLine + + " {" + Environment.NewLine + " id = (ushort)bytes[7]; freq = PacketFrequency.Medium;" + + Environment.NewLine + " }" + Environment.NewLine + " }" + Environment.NewLine + + " else" + Environment.NewLine + " {" + Environment.NewLine + + " id = (ushort)bytes[6]; freq = PacketFrequency.High;" + Environment.NewLine + + " }" + Environment.NewLine + + " return GetType(id, freq);" + Environment.NewLine + + " }" + Environment.NewLine); + + // Write the Packet.BuildPacket(PacketType) function + writer.WriteLine(" public static Packet BuildPacket(PacketType type)"); + writer.WriteLine(" {"); + foreach (MapPacket packet in protocol.HighMaps) + if (packet != null) + writer.WriteLine(" if(type == PacketType." + packet.Name + ") return new " + packet.Name +"Packet();"); + foreach (MapPacket packet in protocol.MediumMaps) + if (packet != null) + writer.WriteLine(" if(type == PacketType." + packet.Name + ") return new " + packet.Name +"Packet();"); + foreach (MapPacket packet in protocol.LowMaps) + if (packet != null) + writer.WriteLine(" if(type == PacketType." + packet.Name + ") return new " + packet.Name +"Packet();"); + writer.WriteLine(" return null;\n"); + writer.WriteLine(" }\n"); // Write the Packet.BuildPacket() function writer.WriteLine( diff --git a/libsecondlife/mapgenerator/template.cs b/libsecondlife/mapgenerator/template.cs index 38671a8c..4f7e2a30 100644 --- a/libsecondlife/mapgenerator/template.cs +++ b/libsecondlife/mapgenerator/template.cs @@ -113,6 +113,8 @@ namespace libsecondlife.Packets /// Array containing all the appended ACKs of this packet public uint[] AckList; + public abstract void FromBytes(byte[] bytes, ref int pos, ref int packetEnd); + /// /// Convert the AckList to a byte array, used for packet serializing /// @@ -226,6 +228,11 @@ namespace libsecondlife.Packets /// /// public LowHeader(byte[] bytes, ref int pos, ref int packetEnd) + { + FromBytes(bytes, ref pos, ref packetEnd); + } + + override public void FromBytes(byte[] bytes, ref int pos, ref int packetEnd) { if (bytes.Length < 10) { throw new MalformedDataException(); } Data = new byte[10]; @@ -290,6 +297,11 @@ namespace libsecondlife.Packets /// /// public MediumHeader(byte[] bytes, ref int pos, ref int packetEnd) + { + FromBytes(bytes, ref pos, ref packetEnd); + } + + override public void FromBytes(byte[] bytes, ref int pos, ref int packetEnd) { if (bytes.Length < 8) { throw new MalformedDataException(); } Data = new byte[8]; @@ -340,6 +352,11 @@ namespace libsecondlife.Packets /// /// public HighHeader(byte[] bytes, ref int pos, ref int packetEnd) + { + FromBytes(bytes, ref pos, ref packetEnd); + } + + override public void FromBytes(byte[] bytes, ref int pos, ref int packetEnd) { if (bytes.Length < 7) { throw new MalformedDataException(); } Data = new byte[7];