X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=server.c;h=dfe8be870a25ad55f0ac084c7d92709391b0b3c3;hb=47941822dae18a018c985847b052e70214a3ccc6;hp=578c3f5b5723d407cdc94e09c7772082498fae9f;hpb=f9656a800d0262a2096c3525c2160ce38bc16828;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/server.c b/server.c index 578c3f5..dfe8be8 100644 --- a/server.c +++ b/server.c @@ -1,4 +1,6 @@ -// Copyright (C) 2021 Harry Godden (hgn) - All Rights Reserved +/* + * Copyright (C) 2021-2022 Mt.ZERO Software, Harry Godden - All Rights Reserved + */ /* * This server application requires steamclient.so to be present in the @@ -26,12 +28,15 @@ void inthandler( int signum ) #include "network_msg.h" #include "highscores.h" -void *hSteamHTTP, - *hSteamNetworkingSockets; +static const u64 k_connection_unauthorized = 0xffffffffffffffff; + +static void *hSteamHTTP, + *hSteamNetworkingSockets; -u8 steam_symetric_key[ k_nSteamEncryptedAppTicketSymmetricKeyLen ]; -HSteamNetPollGroup client_pollgroup; +static u8 steam_symetric_key[ k_nSteamEncryptedAppTicketSymmetricKeyLen ]; +static HSteamNetPollGroup client_pollgroup; +#if 0 static void recieve_http( void *callresult, void *context ) { HTTPRequestCompleted_t *result = callresult; @@ -41,16 +46,17 @@ static void recieve_http( void *callresult, void *context ) SteamAPI_ISteamHTTP_GetHTTPResponseBodySize( hSteamHTTP, request, &size ); - u8 *buffer = malloc( size ); + u8 *buffer = vg_alloc( size ); SteamAPI_ISteamHTTP_GetHTTPResponseBodyData( hSteamHTTP, request, buffer, size ); buffer[size-1] = '\0'; vg_info( "%s\n", (char *)buffer ); - free( buffer ); + vg_free( buffer ); SteamAPI_ISteamHTTP_ReleaseHTTPRequest( hSteamHTTP, result->m_hRequest ); } +#endif static u64_steamid get_connection_authsteamid( SteamNetworkingMessage_t *msg ) { @@ -79,8 +85,9 @@ static void new_client_connecting( HSteamNetConnection client ) SteamAPI_ISteamNetworkingSockets_SetConnectionPollGroup( hSteamNetworkingSockets, client, client_pollgroup ); - - set_connection_authsteamid( client, 0 ); + + /* Just to be sure */ + set_connection_authsteamid( client, -1 ); } else { @@ -102,8 +109,8 @@ static void on_connect_status( CallbackMsg_t *msg ) vg_info( " Connection status changed for %lu\n", info->m_hConn ); vg_info( " %s -> %s\n", - string_ESteamNetworkingConnectionState(info->m_info.m_eState), - string_ESteamNetworkingConnectionState(info->m_eOldState) ); + string_ESteamNetworkingConnectionState(info->m_eOldState), + string_ESteamNetworkingConnectionState(info->m_info.m_eState) ); if( info->m_info.m_eState==k_ESteamNetworkingConnectionState_Connecting ) { @@ -113,14 +120,14 @@ static void on_connect_status( CallbackMsg_t *msg ) static void on_inet_auth( SteamNetworkingMessage_t *msg ) { - if( get_connection_authsteamid( msg ) ) + if( get_connection_authsteamid( msg ) != k_connection_unauthorized ) { vg_warn( "Already authorized this user but app ticket was sent" " again (%u)\n", msg->m_conn ); return; } - vg_log( "Attempting to verify user\n" ); + vg_low( "Attempting to verify user\n" ); if( msg->m_cbSize < sizeof(netmsg_auth) ) { @@ -139,7 +146,7 @@ static void on_inet_auth( SteamNetworkingMessage_t *msg ) } u8 decrypted[1024]; - u32 ticket_len; + u32 ticket_len = 1024; int success = SteamEncryptedAppTicket_BDecryptTicket( auth->ticket, auth->ticket_length, decrypted, @@ -149,10 +156,11 @@ static void on_inet_auth( SteamNetworkingMessage_t *msg ) if( !success ) { vg_error( "Failed to decrypt users ticket (client %u)\n", msg->m_conn ); + vg_error( " ticket length: %u\n", auth->ticket_length ); SteamAPI_ISteamNetworkingSockets_CloseConnection( hSteamNetworkingSockets, - msg->m_conn, 0, NULL, 0 ); + msg->m_conn, 0, NULL, 1 ); return; } @@ -170,7 +178,7 @@ static void on_inet_auth( SteamNetworkingMessage_t *msg ) /* TODO: Send expired information */ SteamAPI_ISteamNetworkingSockets_CloseConnection( hSteamNetworkingSockets, - msg->m_conn, 0, NULL, 0 ); + msg->m_conn, 0, NULL, 1 ); return; } } @@ -185,14 +193,14 @@ static void on_inet_auth( SteamNetworkingMessage_t *msg ) static int inet_require_auth( SteamNetworkingMessage_t *msg ) { - if( !get_connection_authsteamid( msg ) ) + if( get_connection_authsteamid( msg ) == k_connection_unauthorized ) { vg_warn( "Unauthorized request! Disconnecting client: %u\n", msg->m_conn ); SteamAPI_ISteamNetworkingSockets_CloseConnection( hSteamNetworkingSockets, - msg->m_conn, 0, NULL, 0 ); + msg->m_conn, 0, NULL, 1 ); return 0; } @@ -201,35 +209,12 @@ static int inet_require_auth( SteamNetworkingMessage_t *msg ) static void on_inet_score_request( SteamNetworkingMessage_t *msg ) { -#if 0 - if( get_connection_authsteamid( msg ) ) - { - vg_log( "Recieved score request, sending records. (id: %u)\n", - msg->m_conn ); - - /* Send back current scores */ - u32 data_size = sizeof(netmsg_scores_info) + - 0*sizeof(struct netmsg_score_record); - netmsg_scores_info *return_info = malloc( data_size ); + if( !inet_require_auth(msg) ) return; - return_info->inetmsg_id = k_inetmsg_scores_info; - return_info->record_count = 0; - - SteamAPI_ISteamNetworkingSockets_SendMessageToConnection( - hSteamNetworkingSockets, msg->m_conn, - return_info, data_size, - k_nSteamNetworkingSend_Reliable, NULL ); - } - else - { - vg_warn( "Unauthorized request! Disconnecting client: %u\n", - msg->m_conn ); - - SteamAPI_ISteamNetworkingSockets_CloseConnection( - hSteamNetworkingSockets, - msg->m_conn, 0, NULL, 0 ); - } -#endif + SteamAPI_ISteamNetworkingSockets_SendMessageToConnection( + hSteamNetworkingSockets, msg->m_conn, + &scoreboard_client_data, sizeof(netmsg_scoreboard), + k_nSteamNetworkingSend_Reliable, NULL ); } static void on_inet_set_nickname( SteamNetworkingMessage_t *msg ) @@ -317,23 +302,46 @@ static void poll_connections(void) on_inet_score_request( msg ); else if( tmp->inetmsg_id == k_inetmsg_set_nickname ) on_inet_set_nickname( msg ); + else if( tmp->inetmsg_id == k_inetmsg_set_score ) + on_inet_set_score( msg ); SteamAPI_SteamNetworkingMessage_t_Release( msg ); } } } -u64 seconds_to_server_ticks( double s ) +static u64 seconds_to_server_ticks( double s ) { return s / 0.1; } +static void generate_boards(void) +{ + FILE *fp = fopen( "www/html/srhighscores.txt", "w" ); + + for( int i=0; idata, i, 10 ); + highscores_board_printf( fp, board->data, 10 ); + } + + fclose( fp ); +} + int main( int argc, char *argv[] ) { signal( SIGINT, inthandler ); signal( SIGQUIT, inthandler ); + + /* TODO: Options to override, ammend, remove etc */ + vg_prealloc_quota( 80*1024*1024 ); highscores_init( 250000, 10000 ); + + if( !highscores_read() ) + highscores_create_db(); steamworks_ensure_txt( "2103940" ); if( !vg_load_steam_symetric_key( "application_key", steam_symetric_key ) ) @@ -393,7 +401,10 @@ int main( int argc, char *argv[] ) #endif u64 server_ticks = 8000, - last_record_save = 8000; + last_record_save = 8000, + last_scoreboard_gen = 0; + + generate_boards(); while( !sig_stop ) { @@ -403,15 +414,20 @@ int main( int argc, char *argv[] ) usleep(100000); server_ticks ++; - if(last_record_save+server_ticks > seconds_to_server_ticks( 10.0*60.0 )) + if(server_ticks > last_scoreboard_gen + seconds_to_server_ticks(1.0*60.0)) + { + last_scoreboard_gen = server_ticks; + generate_boards(); + } + + if(server_ticks > last_record_save + seconds_to_server_ticks( 10.0*60.0 )) { last_record_save = server_ticks; highscores_serialize_all(); } } - + highscores_serialize_all(); - highscores_free(); SteamAPI_ISteamNetworkingSockets_DestroyPollGroup( hSteamNetworkingSockets, client_pollgroup );