Esempio n. 1
0
        public static TransferAck Decode(G2Header root)
        {
            TransferAck ack = new TransferAck();

            G2Header child = new G2Header(root.Data);

            while (G2Protocol.ReadNextChild(root, child) == G2ReadResult.PACKET_GOOD)
            {
                if (child.Name == Packet_Uninitialized)
                {
                    ack.Uninitialized = true;
                }

                if (child.Name == Packet_Error)
                {
                    ack.Error = true;
                }

                if (!G2Protocol.ReadPayload(child))
                {
                    continue;
                }

                switch (child.Name)
                {
                case Packet_FileID:
                    ack.FileID = BitConverter.ToUInt64(child.Data, child.PayloadPos);
                    break;

                case Packet_StartByte:
                    ack.StartByte = CompactNum.ToInt64(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_Bitfield:
                    ack.Bitfield = Utilities.ExtractBytes(child.Data, child.PayloadPos, child.PayloadSize);
                    break;
                }
            }

            return(ack);
        }
Esempio n. 2
0
        public static TransferRequest Decode(G2Header root)
        {
            TransferRequest tr = new TransferRequest();

            G2Header child = new G2Header(root.Data);

            while (G2Protocol.ReadNextChild(root, child) == G2ReadResult.PACKET_GOOD)
            {
                if (child.Name == Packet_GetBitfield)
                {
                    tr.GetBitfield = true;
                }

                if (!G2Protocol.ReadPayload(child))
                {
                    continue;
                }

                switch (child.Name)
                {
                case Packet_FileID:
                    tr.FileID = BitConverter.ToUInt64(child.Data, child.PayloadPos);
                    break;

                case Packet_ChunkIndex:
                    tr.ChunkIndex = CompactNum.ToInt32(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_StartByte:
                    tr.StartByte = CompactNum.ToInt64(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_EndByte:
                    tr.EndByte = CompactNum.ToInt64(child.Data, child.PayloadPos, child.PayloadSize);
                    break;
                }
            }

            return(tr);
        }
Esempio n. 3
0
        public static TransferData Decode(G2Header root)
        {
            TransferData td = new TransferData();

            if (G2Protocol.ReadPayload(root))
            {
                td.Block = Utilities.ExtractBytes(root.Data, root.PayloadPos, root.PayloadSize);
            }

            G2Protocol.ResetPacket(root);

            G2Header child = new G2Header(root.Data);

            while (G2Protocol.ReadNextChild(root, child) == G2ReadResult.PACKET_GOOD)
            {
                if (!G2Protocol.ReadPayload(child))
                {
                    continue;
                }

                switch (child.Name)
                {
                case Packet_FileID:
                    td.FileID = BitConverter.ToUInt64(child.Data, child.PayloadPos);
                    break;

                case Packet_StartByte:
                    td.StartByte = CompactNum.ToInt64(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_Index:
                    td.Index = CompactNum.ToInt32(child.Data, child.PayloadPos, child.PayloadSize);
                    break;
                }
            }

            return(td);
        }
Esempio n. 4
0
        public static FileDetails Decode(G2Header root)
        {
            FileDetails packet = new FileDetails();
            G2Header    child  = new G2Header(root.Data);

            while (G2Protocol.ReadNextChild(root, child) == G2ReadResult.PACKET_GOOD)
            {
                if (!G2Protocol.ReadPayload(child))
                {
                    continue;
                }

                switch (child.Name)
                {
                case Packet_Service:
                    packet.Service = CompactNum.ToUInt32(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_DataType:
                    packet.DataType = CompactNum.ToUInt32(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_Hash:
                    packet.Hash = Utilities.ExtractBytes(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_Size:
                    packet.Size = CompactNum.ToInt64(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_Extra:
                    packet.Extra = Utilities.ExtractBytes(child.Data, child.PayloadPos, child.PayloadSize);
                    break;
                }
            }

            return(packet);
        }
Esempio n. 5
0
        public static TransferStop Decode(G2Header root)
        {
            TransferStop stop = new TransferStop();

            G2Header child = new G2Header(root.Data);

            while (G2Protocol.ReadNextChild(root, child) == G2ReadResult.PACKET_GOOD)
            {
                if (child.Name == Packet_Retry)
                {
                    stop.Retry = true;
                }

                if (!G2Protocol.ReadPayload(child))
                {
                    continue;
                }

                switch (child.Name)
                {
                case Packet_FileID:
                    stop.FileID = BitConverter.ToUInt64(child.Data, child.PayloadPos);
                    break;

                case Packet_StartByte:
                    stop.StartByte = CompactNum.ToInt64(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_Index:
                    stop.Index = CompactNum.ToInt32(child.Data, child.PayloadPos, child.PayloadSize);
                    break;
                }
            }

            return(stop);
        }
Esempio n. 6
0
        public static UpdateInfo Decode(G2Header root)
        {
            // embedded public key of source we allow updates from
            RSACryptoServiceProvider UpdateSourcePublicKey = new RSACryptoServiceProvider();
            //UpdateSourcePublicKey.FromXmlString("<RSAKeyValue><Modulus>pTmHLSxyM9TDOM4tZzI5dld9JvPsHlHC/M5i0+Qtjid1DiefGAVubPToEhK9Im4Ohy37h5Ax6J3vt2pxLG4rnIDuKBJt70YH6W6XrJewQ6tid5BvVnNEzPUOIJHGMpOnyi0VjPpzZzWgp4JK6Yuh6LtsYwCyqIIJIBt9iQ/9XN0=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>");


            UpdateInfo info = new UpdateInfo();

            if (G2Protocol.ReadPayload(root))
            {
                info.Embedded = Utilities.ExtractBytes(root.Data, root.PayloadPos, root.PayloadSize);
            }

            G2Protocol.ResetPacket(root);

            G2Header child = new G2Header(root.Data);

            while (G2Protocol.ReadNextChild(root, child) == G2ReadResult.PACKET_GOOD)
            {
                if (G2Protocol.ReadPayload(child))
                {
                    if (child.Name == Packet_Signature)
                    {
                        info.Signature = Utilities.ExtractBytes(child.Data, child.PayloadPos, child.PayloadSize);
                    }
                }
            }


            // verify signature
            byte[] pubKey = UpdateSourcePublicKey.ExportParameters(false).Modulus;
            if (!Utilities.CheckSignedData(pubKey, info.Embedded, info.Signature))
            {
                return(null);
            }


            root = new G2Header(info.Embedded);
            if (!G2Protocol.ReadPacket(root))
            {
                return(null);
            }

            child = new G2Header(info.Embedded);

            while (G2Protocol.ReadNextChild(root, child) == G2ReadResult.PACKET_GOOD)
            {
                if (!G2Protocol.ReadPayload(child))
                {
                    continue;
                }

                switch (child.Name)
                {
                case Packet_Name:
                    info.Name = UTF8Encoding.UTF8.GetString(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_Key:
                    info.Key = Utilities.ExtractBytes(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_Size:
                    info.Size = CompactNum.ToInt64(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_Hash:
                    info.Hash = Utilities.ExtractBytes(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_Notes:
                    info.Notes = UTF8Encoding.UTF8.GetString(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_Beginning:
                    info.Beginning = Utilities.ExtractBytes(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_DottedVersion:
                    info.DottedVersion = UTF8Encoding.UTF8.GetString(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_SequentialVersion:
                    info.SequentialVersion = CompactNum.ToUInt32(child.Data, child.PayloadPos, child.PayloadSize);
                    break;
                }
            }

            info.TempName = Utilities.ToBase64String(info.Hash);

            return(info);
        }
Esempio n. 7
0
        public static StorageFile Decode(G2Header root)
        {
            StorageFile file  = new StorageFile();
            G2Header    child = new G2Header(root.Data);

            while (G2Protocol.ReadNextChild(root, child) == G2ReadResult.PACKET_GOOD)
            {
                if (!G2Protocol.ReadPayload(child))
                {
                    continue;
                }

                switch (child.Name)
                {
                case Packet_UID:
                    file.UID = BitConverter.ToUInt64(child.Data, child.PayloadPos);
                    break;

                case Packet_Name:
                    file.Name = UTF8Encoding.UTF8.GetString(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_Date:
                    file.Date = DateTime.FromBinary(BitConverter.ToInt64(child.Data, child.PayloadPos));
                    break;

                case Packet_Flags:
                    file.Flags = (StorageFlags)BitConverter.ToUInt16(child.Data, child.PayloadPos);
                    break;

                case Packet_Note:
                    file.Note = UTF8Encoding.UTF8.GetString(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_Revs:
                    file.Revs = child.Data[child.PayloadPos];
                    break;

                case Packet_Size:
                    file.Size = CompactNum.ToInt64(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_Hash:
                    file.Hash   = Utilities.ExtractBytes(child.Data, child.PayloadPos, child.PayloadSize);
                    file.HashID = BitConverter.ToUInt64(file.Hash, 0);
                    break;

                case Packet_FileKey:
                    file.FileKey = Utilities.ExtractBytes(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_InternalSize:
                    file.InternalSize = CompactNum.ToInt64(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_InternalHash:
                    file.InternalHash   = Utilities.ExtractBytes(child.Data, child.PayloadPos, child.PayloadSize);
                    file.InternalHashID = BitConverter.ToUInt64(file.InternalHash, 0);
                    break;

                case Packet_Integrated:
                    file.IntegratedID = BitConverter.ToUInt64(child.Data, child.PayloadPos);
                    break;

                case Packet_Scope:
                    file.Scope[BitConverter.ToUInt64(child.Data, child.PayloadPos)] = BitConverter.ToInt16(child.Data, child.PayloadPos + 8);
                    break;
                }
            }

            return(file);
        }
Esempio n. 8
0
        public static TransferPong Decode(G2Header root)
        {
            TransferPong pong = new TransferPong();

            G2Header child = new G2Header(root.Data);

            while (G2Protocol.ReadNextChild(root, child) == G2ReadResult.PACKET_GOOD)
            {
                if (child.Name == Packet_Error)
                {
                    pong.Error = true;
                }

                if (!G2Protocol.ReadPayload(child))
                {
                    continue;
                }

                switch (child.Name)
                {
                case Packet_FileID:
                    pong.FileID = BitConverter.ToUInt64(child.Data, child.PayloadPos);
                    break;

                case Packet_Timeout:
                    pong.Timeout = CompactNum.ToInt32(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_Status:
                    pong.Status = (TransferStatus)CompactNum.ToInt32(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_InternalSize:
                    pong.InternalSize = CompactNum.ToInt64(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_ChunkSize:
                    pong.ChunkSize = CompactNum.ToInt32(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_BitCount:
                    pong.BitCount = CompactNum.ToInt32(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_AltClient:
                    DhtClient client = DhtClient.FromBytes(child.Data, child.PayloadPos);
                    pong.Alts[client] = new List <DhtAddress>();

                    G2Protocol.ResetPacket(child);

                    G2Header sub = new G2Header(child.Data);

                    while (G2Protocol.ReadNextChild(child, sub) == G2ReadResult.PACKET_GOOD)
                    {
                        if (G2Protocol.ReadPayload(sub))
                        {
                            if (sub.Name == Packet_AltAddress)
                            {
                                pong.Alts[client].Add(DhtAddress.ReadPacket(sub));
                            }
                        }
                    }

                    break;
                }
            }

            return(pong);
        }