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); }
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 ); }
// 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); }
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!"); } }
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!"); } }
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; }
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; }
public TCPListener(TCPManager iocp, INetworkHandler handler, Config.ConfigNet config) { m_iocp = iocp; m_config = config; m_networkHandler = handler; }
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; }
public void CreateGameServerSession(PacketOut pOut, Config.ConfigNet config, string pAccount) { m_cGameEmulator = new XClientGameEmulator(config, m_cManager, this, pAccount, pOut); }