Esempio n. 1
0
        /// <summary>
        /// Joins the specified channel
        /// </summary>
        /// <param name="channelName"></param>
        /// <param name="password"></param>
        public void JoinChannel(Channel channel)
        {
            if (ChannelMgr.ChannelList.Contains(channel))
                return;

            PacketWriter writer = new PacketWriter(Opcodes.CMSG_JOIN_CHANNEL);
            writer.Write((UInt32)0);
            writer.Write((byte)0);
            writer.Write((byte)0);
            writer.Write(channel.Name.ToCString());
            writer.Write(channel.Password);
            Send(writer);

            RequestChannelList(channel.Name);
        }
Esempio n. 2
0
        void HandleServerAuthChallenge(PacketReader reader)
        {
            uint one = reader.ReadUInt32();
            uint seed = reader.ReadUInt32();

            BigInteger seed1 = reader.ReadBytes(16).ToBigInteger();
            BigInteger seed2 = reader.ReadBytes(16).ToBigInteger();

            var rand = System.Security.Cryptography.RandomNumberGenerator.Create();
            byte[] bytes = new byte[4];
            rand.GetBytes(bytes);

            BigInteger _seed = bytes.ToBigInteger();

            uint zero = 0;

            byte[] response = HashAlgorithm.SHA1.Hash(Encoding.ASCII.GetBytes(Manager.m_WorldServer.username.ToUpper()),
                BitConverter.GetBytes(zero),
                BitConverter.GetBytes((uint)_seed),
                BitConverter.GetBytes(seed),
                Manager.m_WorldServer.SessionKey.ToCleanByteArray());

            PacketWriter writer = new PacketWriter(Opcodes.ClientAuthSession);
            writer.Write((uint)12340);
            writer.Write(zero);
            writer.Write(Manager.m_WorldServer.username.ToUpper().ToCString());
            writer.Write(zero);
            writer.Write((uint)_seed);
            writer.Write(zero);
            writer.Write(zero);
            writer.Write(zero);
            writer.Write((ulong)zero);
            writer.Write(response);
            writer.Write(zero);

            Send(writer);

            AuthenticationCrypto.Initialize(Manager.m_WorldServer.SessionKey.ToCleanByteArray());
        }
Esempio n. 3
0
 public ClientHeader(Opcodes opcode, PacketWriter packet)
 {
     Opcode = opcode;
     Packet = packet;
 }
Esempio n. 4
0
        /// <summary>
        /// Sends a message by type
        /// </summary>
        /// <param name="type"></param>
        /// <param name="richTextBox"></param>
        private void SendMessage(ChatType type, RichTextBox richTextBox)
        {
            PacketWriter writer = new PacketWriter(Opcodes.CMSG_MESSAGECHAT);

            switch (type)
            {
                case ChatType.CHAT_TYPE_SAY:
                    writer.Write((UInt32)ChatType.CHAT_TYPE_SAY);
                    break;
                case ChatType.CHAT_TYPE_YELL:
                    writer.Write((UInt32)ChatType.CHAT_TYPE_YELL);
                    break;
            }

            writer.Write((UInt32)Language.LANG_UNIVERSAL);
            writer.Write(richTextBox.Text.ToCString());
            WorldMgr.Server.Send(writer);
            richTextBox.Text = "";
        }
Esempio n. 5
0
 /// <summary>
 /// Request Channel List by ChannelName
 /// You must be in the channel to receive a list
 /// </summary>
 /// <param name="channelName"></param>
 public void RequestChannelList(string channelName)
 {
     PacketWriter writer = new PacketWriter(Opcodes.CMSG_CHANNEL_LIST);
     writer.Write(channelName.ToCString());
     Send(writer);
 }
Esempio n. 6
0
        /// <summary>
        /// Sends Opcode & data to the server
        /// </summary>
        /// <param name="writer"></param>
        public void Send(PacketWriter writer)
        {
            byte[] data = writer.FinalizePacket();
            lock (SendLock)
                tcpClient.Client.Send(data);

            Interlocked.Add(ref transferred, data.Length);
            Interlocked.Add(ref sent, data.Length);
        }
Esempio n. 7
0
        void HandleServerAuthResponse(PacketReader reader)
        {
            byte detail = reader.ReadByte();
            uint billingTimeRemaining = reader.ReadUInt32();
            byte billingFlags = reader.ReadByte();
            uint billingTimeRested = reader.ReadByte();
            byte expansion = reader.ReadByte();

            if (detail == 0x0C)
            {
                PacketWriter writer = new PacketWriter(Opcodes.ClientEnumerateCharacters);
                Send(writer);
            }
            else
                ErrorMessage = "Could not respond to ServerAuthResponse";
        }
Esempio n. 8
0
        void HandleServerChatMessage(PacketReader reader)
        {
            ChatType type = (ChatType)reader.ReadByte();
            Language language;
            UInt64 targetGUID;
            UInt64 targetGUIDOther;
            UInt32 messageLength;
            string channelName = null;
            string message;

            if ((type != ChatType.CHAT_TYPE_CHANNEL && type != ChatType.CHAT_TYPE_WHISPER))
                language = (Language)reader.ReadUInt32();
            else
                language = (Language)reader.ReadUInt32();

            targetGUID = reader.ReadUInt64();
            reader.ReadUInt32();

            switch (type)
            {
                case ChatType.CHAT_TYPE_CHANNEL:
                    channelName = reader.ReadCString();
                    break;
            }

            targetGUIDOther = reader.ReadUInt64();
            messageLength = reader.ReadUInt32();
            message = reader.ReadCString();
            reader.ReadByte();

            PlayerName result = PlayerNameList.Find(
                delegate(PlayerName playerName)
                {
                    return playerName.GUID == targetGUID;
                });

            if (type == ChatType.CHAT_TYPE_SYSTEM)
            {
                foreach (string syntax in message.Split('\n'))
                    if (!CmdList.Contains(syntax)) // Prevent double message
                        CmdList.Add(syntax);
            }

            if (result != null)
            {
                QueryChatMessage.Type = type;
                QueryChatMessage.Message = message;
                QueryChatMessage.Name = result.Name;
                if (channelName != null)
                    QueryChatMessage.ChannelName = channelName;
                ReceiveMsg = QueryChatMessage;
            }
            else
            {
                QueryChatMessage.Type = type;
                QueryChatMessage.Message = message;
                if (channelName != null)
                    QueryChatMessage.ChannelName = channelName;
            }

            if (targetGUID > 0)
            {
                PacketWriter writer = new PacketWriter(Opcodes.CMSG_NAME_QUERY);
                writer.Write(targetGUID);
                Send(writer);
            }
        }