コード例 #1
0
ファイル: TempCache.cs プロジェクト: nandub/DeOps
        public static TempData Decode(ulong target, byte[] data)
        {
            G2Header root = new G2Header(data);

            G2Protocol.ReadPacket(root);

            if (root.Name != TempPacket.Data)
            {
                return(null);
            }

            TempData temp  = new TempData(target);
            G2Header child = new G2Header(root.Data);

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

                switch (child.Name)
                {
                case Packet_TTL:
                    temp.TTL = CompactNum.ToInt32(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_Data:
                    temp.Data = Utilities.ExtractBytes(child.Data, child.PayloadPos, child.PayloadSize);
                    break;
                }
            }

            return(temp);
        }
コード例 #2
0
ファイル: BoardPackets.cs プロジェクト: nandub/DeOps
        public static PostInfo Decode(G2Header root)
        {
            PostInfo info  = new PostInfo();
            G2Header child = new G2Header(root.Data);

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

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

                case Packet_Format:
                    info.Format = (TextFormat)CompactNum.ToInt32(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

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

                case Packet_Unique:
                    info.Unique = BitConverter.ToInt32(child.Data, child.PayloadPos);
                    break;
                }
            }

            return(info);
        }
コード例 #3
0
ファイル: VoiceService.cs プロジェクト: nandub/DeOps
        public static AudioPacket Decode(G2Header root)
        {
            AudioPacket packet = new AudioPacket();

            if (G2Protocol.ReadPayload(root))
            {
                packet.Audio = 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_FrameSize:
                    packet.FrameSize = CompactNum.ToInt32(child.Data, child.PayloadPos, child.PayloadSize);
                    break;
                }
            }

            return(packet);
        }
コード例 #4
0
ファイル: IMPackets.cs プロジェクト: nandub/DeOps
        public static MessageData Decode(G2Header root)
        {
            MessageData msg = new MessageData();

            G2Header child = new G2Header(root.Data);

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

                switch (child.Name)
                {
                case Packet_Text:
                    msg.Text = UTF8Encoding.UTF8.GetString(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_Format:
                    msg.Format = (TextFormat)CompactNum.ToInt32(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_TargetID:
                    msg.TargetID = BitConverter.ToUInt64(child.Data, child.PayloadPos);
                    break;
                }
            }

            return(msg);
        }
コード例 #5
0
ファイル: TransferPackets.cs プロジェクト: nandub/DeOps
        public static TransferPing Decode(G2Header root)
        {
            TransferPing ping = new TransferPing();

            G2Header child = new G2Header(root.Data);

            while (G2Protocol.ReadNextChild(root, child) == G2ReadResult.PACKET_GOOD)
            {
                if (child.Name == Packet_RequestInfo)
                {
                    ping.RequestInfo = true;
                }

                if (child.Name == Packet_RequestAlts)
                {
                    ping.RequestAlts = true;
                }

                if (child.Name == Packet_BitfieldUpdated)
                {
                    ping.BitfieldUpdated = true;
                }


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

                switch (child.Name)
                {
                case Packet_Target:
                    ping.Target = BitConverter.ToUInt64(child.Data, child.PayloadPos);
                    break;

                case Packet_Details:
                    ping.Details = FileDetails.Decode(Utilities.ExtractBytes(child.Data, child.PayloadPos, child.PayloadSize));
                    break;

                case Packet_Status:
                    ping.Status = (TransferStatus)BitConverter.ToInt32(child.Data, child.PayloadPos);
                    break;

                case Packet_MissingDepth:
                    ping.MissingDepth = CompactNum.ToInt32(child.Data, child.PayloadPos, child.PayloadSize);
                    break;
                }
            }

            return(ping);
        }
コード例 #6
0
ファイル: TransferPackets.cs プロジェクト: nandub/DeOps
        public static TransferPartial Decode(G2Header root)
        {
            TransferPartial partial = new TransferPartial();

            G2Header child = new G2Header(root.Data);

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

                switch (child.Name)
                {
                case Packet_Created:
                    partial.Created = DateTime.FromBinary(BitConverter.ToInt64(child.Data, child.PayloadPos));
                    break;

                case Packet_Details:
                    partial.Details = FileDetails.Decode(Utilities.ExtractBytes(child.Data, child.PayloadPos, child.PayloadSize));
                    break;

                case Packet_Target:
                    partial.Target = BitConverter.ToUInt64(child.Data, child.PayloadPos);
                    break;

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

                case Packet_Bitfield:
                    partial.Bitfield = Utilities.ToBitArray(Utilities.ExtractBytes(child.Data, child.PayloadPos, child.PayloadSize), partial.BitCount);
                    break;

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

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

            return(partial);
        }
コード例 #7
0
ファイル: MailPackets.cs プロジェクト: nandub/DeOps
        public static MailInfo Decode(G2Header root)
        {
            MailInfo info  = new MailInfo();
            G2Header child = new G2Header(root.Data);

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

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

                case Packet_Format:
                    info.Format = (TextFormat)CompactNum.ToInt32(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

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

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

                case Packet_Attachments:
                    info.Attachments = BitConverter.ToBoolean(child.Data, child.PayloadPos);
                    break;

                case Packet_Unique:
                    info.Unique = Utilities.ExtractBytes(child.Data, child.PayloadPos, child.PayloadSize);
                    break;
                }
            }

            return(info);
        }
コード例 #8
0
ファイル: ChatPackets.cs プロジェクト: nandub/DeOps
        public static ChatText Decode(G2Header root)
        {
            ChatText chat = new ChatText();

            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_ID:
                    chat.ProjectID = BitConverter.ToUInt32(child.Data, child.PayloadPos);
                    break;

                case Packet_Kind:
                    chat.Kind = (RoomKind)BitConverter.ToUInt32(child.Data, child.PayloadPos);
                    break;

                case Packet_Text:
                    chat.Text = UTF8Encoding.UTF8.GetString(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_Format:
                    chat.Format = (TextFormat)CompactNum.ToInt32(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_RoomID:
                    chat.RoomID = BitConverter.ToUInt64(child.Data, child.PayloadPos);
                    break;
                }
            }

            return(chat);
        }
コード例 #9
0
ファイル: TransferPackets.cs プロジェクト: nandub/DeOps
        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);
        }
コード例 #10
0
ファイル: TransferPackets.cs プロジェクト: nandub/DeOps
        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);
        }
コード例 #11
0
        public static LocationNotify Decode(G2Header root)
        {
            LocationNotify notify = new LocationNotify();

            if (G2Protocol.ReadPayload(root))
            {
                notify.SignedLocation = 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 (child.Name == Packet_GoingOffline)
                {
                    notify.GoingOffline = true;
                    continue;
                }

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

                switch (child.Name)
                {
                case Packet_Timeout:
                    notify.Timeout = CompactNum.ToInt32(child.Data, child.PayloadPos, child.PayloadSize);
                    break;
                }
            }

            return(notify);
        }
コード例 #12
0
ファイル: TransferPackets.cs プロジェクト: nandub/DeOps
        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);
        }
コード例 #13
0
ファイル: TransferPackets.cs プロジェクト: nandub/DeOps
        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);
        }