Esempio n. 1
0
        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());
        }
Esempio n. 2
0
        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;
        }
Esempio n. 3
0
        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();
        }