Example #1
0
        public PacketIn ProcessPacket(TCPConnection con, byte[] buf, int start, int size)
        {
            PacketIn packet = new PacketIn(buf, start, size);

            switch (packet.ID)
            {
            case 72:     // TS_AC_AES_KEY_IV
                var pAES = new AUTH_PACKETS.AES_KEY_IV(packet);
                m_pAES_KEY = m_cRSA.PrivateDecrypt(pAES.nKey, OpenSSL.Crypto.RSA.Padding.PKCS1);
                GenerateLoginPacket(m_pAES_KEY, con);
                break;

            case 10000:     // TS_AC_RESULT
                var pResult = new AUTH_PACKETS.RESULT(packet.ReadUInt16(), packet.ReadUInt16(), packet.ReadInt32());
                if (pResult.nLoginFlag == 1)
                {
                    PacketOut o = new PacketOut(10021);
                    con.SendTCP(o);
                }
                else
                {
                    m_cAuthConnection.Disconnect();
                    XLog.Log("Login failed. Result: {0} - Disconnecting...", pResult.nResult);
                }
                m_szPassword = string.Empty;
                break;

            case 10022:     // TS_AC_SERVER_LIST
                m_iAuthServerList = new AUTH_PACKETS.SERVER_LIST(packet);
                XLog.Log("Server selection. Please use /select ID to connect to one of the listed servers below.");
                for (int i = 0; i < m_iAuthServerList.count; i++)
                {
                    XLog.Log(string.Format("-> Server {0}: {1}", i + 1, m_iAuthServerList.list[i].server_name));
                }
                break;

            case 10024:     // TS_AC_SELECT_SERVER
                con.Disconnect();

                var pSelectServer = new AUTH_PACKETS.SELECT_SERVER(packet, ref m_pAES_KEY);

                Config.ConfigNet conf = new Config.ConfigNet();
                conf.Port     = m_iAuthServerList.list[m_nSelectedServerIdx].server_port;
                conf.ListenIp = System.Net.IPAddress.Parse(m_iAuthServerList.list[m_nSelectedServerIdx].server_ip);

                PacketOut oEncrypt = new PacketOut(2005);
                oEncrypt.FillString(m_szName, 61);
                oEncrypt.Write(pSelectServer.encrypted_data, 0, pSelectServer.encrypted_data.Length);
                oEncrypt.FinalizeLengthAndChecksum();
                con.Close();
                m_cClientBase.CreateGameServerSession(oEncrypt, conf, m_szName);
                break;

            default:
                break;
            }
            return(packet);
        }
Example #2
0
        public void EmulateClient(string szName, string szPassword, string szIPAddress = "127.0.0.1", int nPort = 4500)
        {
            m_cManager = new TCPManager( 1, 2048 * 300 );

            Config.ConfigNet config = new Config.ConfigNet();
            config.ListenIp = IPAddress.Parse( szIPAddress );
            config.Port = nPort;

            m_cAuthEmulator = new XClientAuthEmulator( m_cManager, config, szName, szPassword, this );
        }
Example #3
0
        // If there's a connection running
        #endregion

        public void EmulateClient(string szName, string szPassword, string szIPAddress = "127.0.0.1", int nPort = 4500)
        {
            m_cManager = new TCPManager(1, 2048 * 300);

            Config.ConfigNet config = new Config.ConfigNet();
            config.ListenIp = IPAddress.Parse(szIPAddress);
            config.Port     = nPort;

            m_cAuthEmulator = new XClientAuthEmulator(m_cManager, config, szName, szPassword, this);
        }
Example #4
0
 public XClientGameEmulator(Config.ConfigNet conf, TCPManager man, XChat.XClientEmulator pBase, string pAccount, PacketOut pOut)
 {
     m_szAccount       = pAccount;
     m_cGameConnection = new TCPConnection(man, null, this, conf);
     try {
         m_cGameConnection.Start();
         m_cGameConnection.SendTCP(CreateVersionPacket());
         m_cGameConnection.SendTCP(pOut);
     }
     catch {
         XLog.Log("Can't connect to Game Server!");
     }
 }
Example #5
0
        public XClientAuthEmulator(TCPManager man, Config.ConfigNet conf, string pAccount, string pPassword, XChat.XClientEmulator cBase)
        {
            m_szName      = pAccount;
            m_szPassword  = pPassword;
            m_cClientBase = cBase;

            try {
                m_cAuthConnection = new TCPConnection(man, null, this, conf);
                m_cAuthConnection.Start();
                m_cAuthConnection.SendTCP(this.CreateVersionPacket());
                m_cAuthConnection.SendTCP(this.CreateAESPacket());
            }
            catch {
                XLog.Log("Can't connect to Authentication Server!");
            }
        }
Example #6
0
        public TCPConnection(TCPManager iocp, Socket socket, INetworkHandler handler, Config.ConfigNet config)
        {
            m_config         = config;
            m_iocp           = iocp;
            m_networkHandler = handler;
            m_socket         = socket;
            if (m_socket == null)
            {
                InitOutgoingSocket();
            }

            if (config.Encrypted)
            {
                m_encoding = new XRC4Cipher();
                m_decoding = new XRC4Cipher();
            }
            else
            {
                m_encoding = new XCipher();
                m_decoding = new XCipher();
            }
            m_encoding.SetKey("}h79q~B%al;k'y $E");
            m_decoding.SetKey("}h79q~B%al;k'y $E");


            m_readEventArgs            = m_iocp.AcquireAsyncEvent();
            m_readEventArgs.Completed += new EventHandler <SocketAsyncEventArgs>(IO_Completed);
            m_readEventArgs.UserToken  = this;

            m_writeEventArgs            = m_iocp.AcquireAsyncEvent();
            m_writeEventArgs.Completed += new EventHandler <SocketAsyncEventArgs>(IO_Completed);
            m_writeEventArgs.UserToken  = this;

            m_readEventArgs.AcceptSocket  = m_socket;
            m_writeEventArgs.AcceptSocket = m_socket;
        }
Example #7
0
        public PacketIn ProcessPacket(TCPConnection con, byte[] buf, int start, int size)
        {
            PacketIn packet = new PacketIn( buf, start, size );
            switch ( packet.ID ) {

                case 72: // TS_AC_AES_KEY_IV
                    var pAES = new AUTH_PACKETS.AES_KEY_IV( packet );
                    m_pAES_KEY = m_cRSA.PrivateDecrypt( pAES.nKey, OpenSSL.Crypto.RSA.Padding.PKCS1 );
                    GenerateLoginPacket( m_pAES_KEY, con );
                    break;
                case 10000: // TS_AC_RESULT
                    var pResult = new AUTH_PACKETS.RESULT( packet.ReadUInt16(), packet.ReadUInt16(), packet.ReadInt32() );
                    if ( pResult.nLoginFlag == 1 ) {
                        PacketOut o = new PacketOut( 10021 );
                        con.SendTCP( o );
                    }
                    else {
                        m_cAuthConnection.Disconnect();
                        XLog.Log( "Login failed. Result: {0} - Disconnecting...", pResult.nResult );
                    }
                    m_szPassword = string.Empty;
                    break;
                case 10022: // TS_AC_SERVER_LIST
                    m_iAuthServerList = new AUTH_PACKETS.SERVER_LIST( packet );
                    XLog.Log( "Server selection. Please use /select ID to connect to one of the listed servers below." );
                    for ( int i = 0; i < m_iAuthServerList.count; i++ ) {
                        XLog.Log( string.Format( "-> Server {0}: {1}", i + 1, m_iAuthServerList.list[i].server_name ) );
                    }
                    break;
                case 10024: // TS_AC_SELECT_SERVER
                    con.Disconnect();

                    var pSelectServer = new AUTH_PACKETS.SELECT_SERVER( packet, ref m_pAES_KEY );

                    Config.ConfigNet conf = new Config.ConfigNet();
                    conf.Port = m_iAuthServerList.list[m_nSelectedServerIdx].server_port;
                    conf.ListenIp = System.Net.IPAddress.Parse( m_iAuthServerList.list[m_nSelectedServerIdx].server_ip );

                    PacketOut oEncrypt = new PacketOut( 2005 );
                    oEncrypt.FillString( m_szName, 61 );
                    oEncrypt.Write( pSelectServer.encrypted_data, 0, pSelectServer.encrypted_data.Length );
                    oEncrypt.FinalizeLengthAndChecksum();
                    con.Close();
                    m_cClientBase.CreateGameServerSession( oEncrypt, conf, m_szName );
                    break;
                default:
                    break;
            }
            return packet;
        }
Example #8
0
 public TCPListener(TCPManager iocp, INetworkHandler handler, Config.ConfigNet config)
 {
     m_iocp           = iocp;
     m_config         = config;
     m_networkHandler = handler;
 }
Example #9
0
        public TCPConnection(TCPManager iocp, Socket socket, INetworkHandler handler, Config.ConfigNet config)
        {
            m_config = config;
            m_iocp = iocp;
            m_networkHandler = handler;
            m_socket = socket;
            if (m_socket == null)
            {
                InitOutgoingSocket();
            }

            if (config.Encrypted)
            {
                m_encoding = new XRC4Cipher();
                m_decoding = new XRC4Cipher();
            }
            else
            {
                m_encoding = new XCipher();
                m_decoding = new XCipher();
            }
            m_encoding.SetKey("}h79q~B%al;k'y $E");
            m_decoding.SetKey("}h79q~B%al;k'y $E");

            m_readEventArgs = m_iocp.AcquireAsyncEvent();
            m_readEventArgs.Completed += new EventHandler<SocketAsyncEventArgs>(IO_Completed);
            m_readEventArgs.UserToken = this;

            m_writeEventArgs = m_iocp.AcquireAsyncEvent();
            m_writeEventArgs.Completed += new EventHandler<SocketAsyncEventArgs>(IO_Completed);
            m_writeEventArgs.UserToken = this;

            m_readEventArgs.AcceptSocket = m_socket;
            m_writeEventArgs.AcceptSocket = m_socket;
        }
Example #10
0
 public void CreateGameServerSession(PacketOut pOut, Config.ConfigNet config, string pAccount)
 {
     m_cGameEmulator = new XClientGameEmulator(config, m_cManager, this, pAccount, pOut);
 }
Example #11
0
 public TCPListener(TCPManager iocp, INetworkHandler handler, Config.ConfigNet config)
 {
     m_iocp = iocp;
     m_config = config;
     m_networkHandler = handler;
 }