Ejemplo n.º 1
0
        public static RconPacket CreatePacket(int id, RconPacketType type, string body)
        {
            var packet = new RconPacket();

            packet.ID   = id;
            packet.Type = (int)type;
            packet.Body = body;
            return(packet);
        }
Ejemplo n.º 2
0
        public static RconPacket ParsePacket(byte[] buffer)
        {
            if ((PacketMinimumSize <= buffer.Length) && (buffer.Length <= PacketMaximumSize))
            {
                if (buffer[buffer.Length - 1] == 0x00)
                {
                    using (var ms = new MemoryStream(buffer))
                    {
                        byte[] bf_size = new byte[4];
                        byte[] bf_id   = new byte[4];
                        byte[] bf_type = new byte[4];
                        byte[] bf_body = new byte[buffer.Length - 13];
                        ms.Read(bf_size, 0, 4);
                        ms.Read(bf_id, 0, 4);
                        ms.Read(bf_type, 0, 4);
                        if (!BitConverter.IsLittleEndian)
                        {
                            Array.Reverse(bf_size);
                            Array.Reverse(bf_id);
                            Array.Reverse(bf_type);
                        }
                        ms.Read(bf_body, 0, buffer.Length - 13);

                        int    id   = BitConverter.ToInt32(bf_id, 0);
                        int    size = BitConverter.ToInt32(bf_size, 0);
                        int    type = BitConverter.ToInt32(bf_type, 0);
                        String body = Encoding.ASCII.GetString(bf_body).TrimEnd((char)0);

                        if (size == 10 + body.Length && (type == 0 || type == 2 || type == 5))
                        {
                            var packet = new RconPacket();
                            packet.ID   = id;
                            packet.Type = type;
                            return(packet);
                        }
                        else
                        {
                            throw new ArgumentException("Invalid Buffer");
                        }
                    }
                }
                else
                {
                    throw new ArgumentException("Rcon Buffer Must be end with 0x00");
                }
            }
            else
            {
                throw new ArgumentOutOfRangeException("buffer size is not in size range of rcon");
            }
        }
Ejemplo n.º 3
0
        public RconPacket SendPacket(RconPacket packet)
        {
            socket.Send(packet.ToArray(), packet.Size, SocketFlags.None);

            byte[] buffer = new byte[RconPacket.PacketMaximumSize];

            int recv;

            while ((recv = socket.Receive(buffer)) > 0)
            {
                return(RconPacket.ParsePacket(buffer));
            }
            return(null);
        }
Ejemplo n.º 4
0
        public bool Connect(string password, IPEndPoint ip)
        {
            if (socket == null)
            {
                socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                socket.Connect(ip);
                var respond = SendPacket(RconPacket.CreatePacket(5653, RconPacketType.SERVERDATA_AUTH, "password"));

                IsAuthorized = respond.ID != -1;
            }
            else if (socket.Connected)
            {
                Disconnect();
            }
            return(true);
        }