public static byte[] HubUserlistItem(Leaf x, uint ident, LinkUser user)
        {
            TCPPacketWriter packet = new TCPPacketWriter();

            packet.WriteUInt32(ident);
            packet.WriteString(x, user.OrgName);
            packet.WriteString(x, user.Name);
            packet.WriteString(x, user.Version);
            packet.WriteGuid(user.Guid);
            packet.WriteUInt16(user.FileCount);
            packet.WriteIP(user.ExternalIP);
            packet.WriteIP(user.LocalIP);
            packet.WriteUInt16(user.Port);
            packet.WriteString(x, user.DNS);
            packet.WriteByte((byte)(user.Browsable ? 1 : 0));
            packet.WriteByte(user.Age);
            packet.WriteByte(user.Sex);
            packet.WriteByte(user.Country);
            packet.WriteString(x, user.Region);
            packet.WriteByte((byte)user.Level);
            packet.WriteUInt16(user.Vroom);
            packet.WriteByte((byte)(user.CustomClient ? 1 : 0));
            packet.WriteByte((byte)(user.Muzzled ? 1 : 0));
            packet.WriteByte((byte)(user.WebClient ? 1 : 0));
            packet.WriteByte((byte)(user.Encrypted ? 1 : 0));
            packet.WriteByte((byte)(user.Registered ? 1 : 0));
            packet.WriteByte((byte)(user.Idle ? 1 : 0));
            byte[] buf = packet.ToLinkPacket(LinkMsg.MSG_LINK_HUB_USERLIST_ITEM);
            packet = new TCPPacketWriter();
            packet.WriteBytes(buf);
            return(packet.ToAresPacket(TCPMsg.MSG_LINK_PROTO));
        }
        public static byte[] LeafJoin(LinkClient x, IClient client)
        {
            TCPPacketWriter packet = new TCPPacketWriter();

            packet.WriteString(x, client.OrgName);
            packet.WriteString(x, client.Name);
            packet.WriteString(x, client.Version);
            packet.WriteGuid(client.Guid);
            packet.WriteUInt16(client.FileCount);
            packet.WriteIP(Settings.HideIps ? IPAddress.Parse("0.0.0.0") : client.ExternalIP);
            packet.WriteIP(Settings.HideIps ? IPAddress.Parse("0.0.0.0") : client.LocalIP);
            packet.WriteUInt16(Settings.HideIps ? (ushort)0 : client.DataPort);
            packet.WriteString(x, client.DNS);
            packet.WriteByte((byte)(client.Browsable ? 1 : 0));
            packet.WriteByte(client.Age);
            packet.WriteByte(client.Sex);
            packet.WriteByte(client.Country);
            packet.WriteString(x, client.Region);
            packet.WriteByte((byte)client.Level);
            packet.WriteUInt16(client.Vroom);
            packet.WriteByte((byte)(client.CustomClient ? 1 : 0));
            packet.WriteByte((byte)(client.Muzzled ? 1 : 0));
            packet.WriteByte((byte)(client.WebClient ? 1 : 0));
            packet.WriteByte((byte)(client.Encryption.Mode == EncryptionMode.Encrypted ? 1 : 0));
            packet.WriteByte((byte)(client.Registered ? 1 : 0));
            packet.WriteByte((byte)(client.Idled ? 1 : 0));
            byte[] buf = packet.ToLinkPacket(LinkHub.LinkMsg.MSG_LINK_LEAF_JOIN);
            packet = new TCPPacketWriter();
            packet.WriteBytes(buf);
            return(packet.ToAresPacket(TCPMsg.MSG_LINK_PROTO));
        }
        public static byte[] LeafVroomChanged(LinkClient x, IClient client)
        {
            TCPPacketWriter packet = new TCPPacketWriter();

            packet.WriteString(x, client.Name);
            packet.WriteUInt16(client.Vroom);
            byte[] buf = packet.ToLinkPacket(LinkHub.LinkMsg.MSG_LINK_LEAF_VROOM_CHANGED);
            packet = new TCPPacketWriter();
            packet.WriteBytes(buf);
            return(packet.ToAresPacket(TCPMsg.MSG_LINK_PROTO));
        }
        public static byte[] HubPrintVroom(Leaf x, ushort vroom, String text)
        {
            TCPPacketWriter packet = new TCPPacketWriter();

            packet.WriteUInt16(vroom);
            packet.WriteString(x, text, false);
            byte[] buf = packet.ToLinkPacket(LinkMsg.MSG_LINK_HUB_PRINT_VROOM);
            packet = new TCPPacketWriter();
            packet.WriteBytes(buf);
            return(packet.ToAresPacket(TCPMsg.MSG_LINK_PROTO));
        }
        public static byte[] LeafPrintVroom(LinkClient x, uint ident, ushort vroom, String text)
        {
            TCPPacketWriter packet = new TCPPacketWriter();

            packet.WriteUInt32(ident);
            packet.WriteUInt16(vroom);
            packet.WriteString(x, text, false);
            byte[] buf = packet.ToLinkPacket(LinkHub.LinkMsg.MSG_LINK_LEAF_PRINT_VROOM);
            packet = new TCPPacketWriter();
            packet.WriteBytes(buf);
            return(packet.ToAresPacket(TCPMsg.MSG_LINK_PROTO));
        }
        public static byte[] HubVroomChanged(Leaf x, uint ident, LinkUser user)
        {
            TCPPacketWriter packet = new TCPPacketWriter();

            packet.WriteUInt32(ident);
            packet.WriteString(x, user.Name);
            packet.WriteUInt16(user.Vroom);
            byte[] buf = packet.ToLinkPacket(LinkMsg.MSG_LINK_HUB_VROOM_CHANGED);
            packet = new TCPPacketWriter();
            packet.WriteBytes(buf);
            return(packet.ToAresPacket(TCPMsg.MSG_LINK_PROTO));
        }
        public static byte[] LeafCustomDataAll(LinkClient x, ushort vroom, String sender, String ident, byte[] data)
        {
            TCPPacketWriter packet = new TCPPacketWriter();

            packet.WriteUInt16(vroom);
            packet.WriteString(x, sender);
            packet.WriteString(x, ident);
            packet.WriteBytes(data);
            byte[] buf = packet.ToLinkPacket(LinkHub.LinkMsg.MSG_LINK_LEAF_CUSTOM_DATA_ALL);
            packet = new TCPPacketWriter();
            packet.WriteBytes(buf);
            return(packet.ToAresPacket(TCPMsg.MSG_LINK_PROTO));
        }
        public static byte[] LeafLogin()
        {
            List <byte> list = new List <byte>();

            list.AddRange(Encoding.UTF8.GetBytes(Settings.Name));
            list.AddRange(Settings.Get <byte[]>("guid"));
            list.Reverse();
            byte[] buf = list.ToArray();

            using (SHA1 sha1 = SHA1.Create())
                buf = sha1.ComputeHash(buf);

            TCPPacketWriter packet = new TCPPacketWriter();

            packet.WriteBytes(buf);
            packet.WriteUInt16(Settings.LINK_PROTO);
            packet.WriteUInt16(Settings.Port);
            buf    = packet.ToLinkPacket(LinkHub.LinkMsg.MSG_LINK_LEAF_LOGIN);
            packet = new TCPPacketWriter();
            packet.WriteBytes(buf);
            return(packet.ToAresPacket(TCPMsg.MSG_LINK_PROTO));
        }
        public static byte[] HubLeafConnected(Leaf x, Leaf leaf)
        {
            TCPPacketWriter packet = new TCPPacketWriter();

            packet.WriteUInt32(leaf.Ident);
            packet.WriteString(x, leaf.Name);
            packet.WriteIP(leaf.ExternalIP);
            packet.WriteUInt16(leaf.Port);
            byte[] buf = packet.ToLinkPacket(LinkMsg.MSG_LINK_HUB_LEAF_CONNECTED);
            packet = new TCPPacketWriter();
            packet.WriteBytes(buf);
            return(packet.ToAresPacket(TCPMsg.MSG_LINK_PROTO));
        }
        public static byte[] LeafBrowse(LinkClient x, uint leaf_ident, String browsee, String browser, ushort browse_ident, byte mime)
        {
            TCPPacketWriter packet = new TCPPacketWriter();

            packet.WriteUInt32(leaf_ident);
            packet.WriteString(x, browsee);
            packet.WriteString(x, browser);
            packet.WriteUInt16(browse_ident);
            packet.WriteByte(mime);
            byte[] buf = packet.ToLinkPacket(LinkHub.LinkMsg.MSG_LINK_LEAF_BROWSE);
            packet = new TCPPacketWriter();
            packet.WriteBytes(buf);
            return(packet.ToAresPacket(TCPMsg.MSG_LINK_PROTO));
        }
        public static byte[] HubBrowse(Leaf x, uint source, String browsee, String browser, ushort browse_ident, byte mime)
        {
            TCPPacketWriter packet = new TCPPacketWriter();

            packet.WriteUInt32(source);
            packet.WriteString(x, browsee);
            packet.WriteString(x, browser);
            packet.WriteUInt16(browse_ident);
            packet.WriteByte(mime);
            byte[] buf = packet.ToLinkPacket(LinkMsg.MSG_LINK_HUB_BROWSE);
            packet = new TCPPacketWriter();
            packet.WriteBytes(buf);
            return(packet.ToAresPacket(TCPMsg.MSG_LINK_PROTO));
        }