From ace6ce28fbd880483a68c88c9bb63f915cd6e5d4 Mon Sep 17 00:00:00 2001 From: Jonas Gunz Date: Sat, 3 Oct 2020 00:41:38 +0200 Subject: nice rcon interface via rcon_login/rcon_command --- src/main.c | 67 ++++++++++++++++++++++++++++---------------------------------- 1 file changed, 30 insertions(+), 37 deletions(-) (limited to 'src/main.c') diff --git a/src/main.c b/src/main.c index 1a3c46f..0a80bf6 100644 --- a/src/main.c +++ b/src/main.c @@ -26,20 +26,45 @@ typedef struct program_params_s { program_params_t parse_args ( int argc, char* argv[] ); +int connect_socket ( char* _host, char* _port ); + int main( int argc, char* argv[] ) { program_params_t args = parse_args( argc, argv ); + int sock = connect_socket ( args.host, args.port ); + + fprintf ( stderr, "Connection successful.\n" ); + + if ( rcon_login ( sock, args.password ) ) { + fprintf ( stderr, "Authentification failed.\n" ); + exit ( EXIT_FAILURE ); + } + + char* result = NULL; + rcon_command ( &result, sock, args.command ); + + printf("%s\n", result); + + close (sock); + + return 0; +} + +program_params_t parse_args ( int argc, char* argv[] ) { + program_params_t ret = { "127.0.0.1", "25575", "1234", "list" }; + return ret; +} + +int connect_socket ( char* _host, char* _port ) { int sock = -1; int ret = 0; struct addrinfo hints, *result, *iter; - char recvbuf [ RCON_RECV_PKGSIZE ]; - char sendbuf [ RCON_SEND_PKGSIZE ]; memset ( &hints, 0, sizeof( struct addrinfo ) ); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; - ret = getaddrinfo ( args.host, args.port, &hints, &result ); + ret = getaddrinfo ( _host, _port, &hints, &result ); if ( ret ) { fprintf ( stderr, "getaddrinfo: %s\n", gai_strerror(ret) ); exit ( EXIT_FAILURE ); @@ -47,7 +72,7 @@ int main( int argc, char* argv[] ) { for ( iter = result; iter != NULL; iter = iter->ai_next ) { sock = socket( result->ai_family, result->ai_socktype, result->ai_protocol ); - if ( socket < 0 ) + if ( sock < 0 ) continue; if ( connect ( sock, iter->ai_addr, iter->ai_addrlen ) != -1 ) @@ -61,38 +86,6 @@ int main( int argc, char* argv[] ) { exit ( EXIT_FAILURE ); } - fprintf ( stderr, "Connection successful.\n" ); - - rcon_packet_t pack = {0,1337,RCON_LOGIN,args.password, strlen(args.password)}, rcon_result; - ret = rcon_construct_packet ( sendbuf, RCON_SEND_PKGSIZE, &pack ); - - ret = send ( sock, sendbuf, ret, 0 ); - - ret = recv ( sock, recvbuf, RCON_RECV_PKGSIZE, 0); - rcon_parse_packet ( &rcon_result, recvbuf, ret ); - - if ( rcon_result.type != RCON_COMMAND ) { - fprintf ( stderr, "Authentification failed." ); - exit ( EXIT_FAILURE ); - } - - rcon_packet_t pack2 = {0,6969,RCON_COMMAND, args.command, strlen(args.command)}; - - ret = rcon_construct_packet ( sendbuf, RCON_SEND_PKGSIZE, &pack2 ); - - ret = send ( sock, sendbuf, ret, 0 ); - - ret = recv ( sock, recvbuf, RCON_RECV_PKGSIZE, 0); - rcon_parse_packet ( &rcon_result, recvbuf, ret ); - - printf("%s\n", rcon_result.payload); - - close (sock); - - return 0; + return sock; } -program_params_t parse_args ( int argc, char* argv[] ) { - program_params_t ret = { "127.0.0.1", "25575", "1234", "list" }; - return ret; -} -- cgit v1.2.3