public P2PMessage[] CreateFromOffsets(long[] offsets, byte[] allData) { List <P2PMessage> messages = new List <P2PMessage>(offsets.Length); long offset = allData.Length; for (int i = offsets.Length - 1; i >= 0; i--) { P2PMessage m = new P2PMessage(Version); long length = offset - offsets[i]; byte[] part = new byte[length]; Array.Copy(allData, offsets[i], part, 0, length); m.ParseBytes(part); offset -= length; messages.Add(m); } messages.Reverse(); return(messages.ToArray()); }
public static Guid CreateGuidFromData(P2PVersion ver, byte[] data) { Guid ret = Guid.Empty; if (ver == P2PVersion.P2PV1) { P2PMessage message = new P2PMessage(ver); message.ParseBytes(data); ret = new Guid( (int)message.V1Header.AckSessionId, (short)(message.Header.AckIdentifier & 0x0000FFFF), (short)((message.Header.AckIdentifier & 0xFFFF0000) >> 16), (byte)((message.V1Header.AckTotalSize & 0x00000000000000FF)), (byte)((message.V1Header.AckTotalSize & 0x000000000000FF00) >> 8), (byte)((message.V1Header.AckTotalSize & 0x0000000000FF0000) >> 16), (byte)((message.V1Header.AckTotalSize & 0x00000000FF000000) >> 24), (byte)((message.V1Header.AckTotalSize & 0x000000FF00000000) >> 32), (byte)((message.V1Header.AckTotalSize & 0x0000FF0000000000) >> 40), (byte)((message.V1Header.AckTotalSize & 0x00FF000000000000) >> 48), (byte)((message.V1Header.AckTotalSize & 0xFF00000000000000) >> 56) ); } else if (ver == P2PVersion.P2PV2) { Int32 a = BitUtility.ToInt32(data, 0, BitConverter.IsLittleEndian); Int16 b = BitUtility.ToInt16(data, 4, BitConverter.IsLittleEndian); Int16 c = BitUtility.ToInt16(data, 6, BitConverter.IsLittleEndian); byte d = data[8], e = data[9], f = data[10], g = data[11]; byte h = data[12], i = data[13], j = data[14], k = data[15]; ret = new Guid(a, b, c, d, e, f, g, h, i, j, k); } return ret; }
public P2PMessage[] CreateFromOffsets(long[] offsets, byte[] allData) { List<P2PMessage> messages = new List<P2PMessage>(offsets.Length); long offset = allData.Length; for (int i = offsets.Length - 1; i >= 0; i--) { P2PMessage m = new P2PMessage(Version); long length = offset - offsets[i]; byte[] part = new byte[length]; Array.Copy(allData, offsets[i], part, 0, length); m.ParseBytes(part); offset -= length; messages.Add(m); } messages.Reverse(); return messages.ToArray(); }