Exemplo n.º 1
0
        public byte[] toBuffer()
        {
            MemoryStream m = new MemoryStream();

            Helper.WriteU8(m, m_oSourceVPort.toByte());
            Helper.WriteU8(m, m_oDestinationVPort.toByte());
            byte typeFlag = (byte)type;

            foreach (PACKETFLAG flag in flags)
            {
                typeFlag |= (byte)((byte)flag << 3);
            }
            Helper.WriteU8(m, typeFlag);
            Helper.WriteU8(m, m_bySessionID);
            Helper.WriteU32(m, m_uiSignature);
            Helper.WriteU16(m, uiSeqId);
            if (type == PACKETTYPE.SYN || type == PACKETTYPE.CONNECT)
            {
                Helper.WriteU32(m, m_uiConnectionSignature);
            }
            if (type == PACKETTYPE.DATA)
            {
                Helper.WriteU8(m, m_byPartNumber);
            }
            byte[] tmpPayload = payload;
            if (tmpPayload != null && tmpPayload.Length > 0)
            {
                if (usesCompression)
                {
                    uint   sizeBefore = (uint)tmpPayload.Length;
                    byte[] buff       = Helper.Compress(tmpPayload);
                    byte   count      = (byte)(sizeBefore / buff.Length);
                    if ((sizeBefore % buff.Length) != 0)
                    {
                        count++;
                    }
                    MemoryStream m2 = new MemoryStream();
                    m2.WriteByte(count);
                    m2.Write(buff, 0, buff.Length);
                    tmpPayload = m2.ToArray();
                    tmpPayload = Helper.Encrypt(Global.keyDATA, tmpPayload);
                }
                else
                {
                    MemoryStream m2 = new MemoryStream();
                    m2.WriteByte(0);
                    m2.Write(tmpPayload, 0, tmpPayload.Length);
                    tmpPayload = m2.ToArray();
                    tmpPayload = Helper.Encrypt(Global.keyDATA, tmpPayload);
                }
            }
            if (flags.Contains(PACKETFLAG.FLAG_HAS_SIZE))
            {
                Helper.WriteU16(m, (ushort)tmpPayload.Length);
            }
            m.Write(tmpPayload, 0, tmpPayload.Length);
            return(AddCheckSum(m.ToArray()));
        }
Exemplo n.º 2
0
 public void toBuffer(Stream s)
 {
     Helper.WriteU32(s, m_idMyself);
     Helper.WriteU32(s, m_pidOwner);
     Helper.WriteU32(s, m_pidHost);
     Helper.WriteU16(s, m_uiMinParticipants);
     Helper.WriteU16(s, m_uiMaxParticipants);
     Helper.WriteU32(s, m_uiParticipationPolicy);
     Helper.WriteU32(s, m_uiPolicyArgument);
     Helper.WriteU32(s, m_uiFlags);
     Helper.WriteU32(s, m_uiState);
     Helper.WriteString(s, m_strDescription);
 }
Exemplo n.º 3
0
        private static void SendReplyPacket(UdpClient udp, QPacket p, RMCPacket rmc, ClientInfo client, RMCPacketReply reply, bool useCompression, uint error)
        {
            QPacket np = new QPacket(p.toBuffer());

            np.flags = new List <QPacket.PACKETFLAG>()
            {
                QPacket.PACKETFLAG.FLAG_NEED_ACK
            };
            np.m_oSourceVPort      = p.m_oDestinationVPort;
            np.m_oDestinationVPort = p.m_oSourceVPort;
            np.m_uiSignature       = client.IDsend;
            np.uiSeqId++;
            MemoryStream m = new MemoryStream();

            if ((ushort)rmc.proto < 0x7F)
            {
                Helper.WriteU8(m, (byte)rmc.proto);
            }
            else
            {
                Helper.WriteU8(m, 0x7F);
                Helper.WriteU16(m, (ushort)rmc.proto);
            }
            byte[] buff;
            if (error == 0)
            {
                Helper.WriteU8(m, 0x1);
                Helper.WriteU32(m, rmc.callID);
                Helper.WriteU32(m, rmc.methodID | 0x8000);
                buff = reply.ToBuffer();
                m.Write(buff, 0, buff.Length);
            }
            else
            {
                Helper.WriteU8(m, 0);
                Helper.WriteU32(m, error);
                Helper.WriteU32(m, rmc.callID);
            }
            buff = m.ToArray();
            m    = new MemoryStream();
            Helper.WriteU32(m, (uint)buff.Length);
            m.Write(buff, 0, buff.Length);
            np.payload     = m.ToArray();
            np.payloadSize = (ushort)np.payload.Length;
            WriteLog(10, "send response packet");
            Send(udp, np, client);
        }
Exemplo n.º 4
0
        public override byte[] ToBuffer()
        {
            MemoryStream m = new MemoryStream();

            Helper.WriteU32(m, resultCode);
            Helper.WriteU32(m, PID);
            Helper.WriteU32(m, (uint)pbufResponse.Length);
            m.Write(pbufResponse, 0, pbufResponse.Length);
            string s = MakeConnectionString();

            Helper.WriteU16(m, (ushort)(s.Length + 1));
            foreach (char c in s)
            {
                Helper.WriteU8(m, (byte)c);
            }
            Helper.WriteU8(m, 0);
            Helper.WriteU32(m, unk2);
            Helper.WriteU16(m, unk3);
            Helper.WriteU16(m, unk4);
            Helper.WriteU16(m, unk5);
            Helper.WriteU16(m, unk6);
            return(m.ToArray());
        }