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())); }
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); }
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); }
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()); }