From ab3878e282305f6b41bd32e8de1c80feb6bbebbb Mon Sep 17 00:00:00 2001 From: James R Date: Fri, 12 Jun 2020 23:47:08 -0700 Subject: [PATCH] masterserver_token is back (cherry picked from commit e7d949aeb2b9ef2297287ba35f9296684078f184) --- src/http-mserv.c | 26 ++++++++++++++++++++++++-- src/mserv.c | 1 + src/mserv.h | 1 + 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/http-mserv.c b/src/http-mserv.c index b981b53b8..9068ad49b 100644 --- a/src/http-mserv.c +++ b/src/http-mserv.c @@ -44,6 +44,11 @@ consvar_t cv_masterserver_debug = { MasterServer_Debug_OnChange, 0, NULL, NULL, 0, 0, NULL/* C90 moment */ }; +consvar_t cv_masterserver_token = { + "masterserver_token", "", CV_SAVE, NULL, + NULL, 0, NULL, NULL, 0, 0, NULL/* C90 moment */ +}; + static int hms_started; static char *hms_api; @@ -100,7 +105,9 @@ HMS_connect (const char *format, ...) va_list ap; CURL *curl; char *url; + char *quack_token; size_t seek; + size_t token_length; struct HMS_buffer *buffer; if (! hms_started) @@ -127,6 +134,17 @@ HMS_connect (const char *format, ...) return NULL; } + if (cv_masterserver_token.string[0]) + { + quack_token = curl_easy_escape(curl, cv_masterserver_token.string, 0); + token_length = ( sizeof "?token="-1 )+ strlen(quack_token); + } + else + { + quack_token = NULL; + token_length = 0; + } + #ifdef HAVE_THREADS I_lock_mutex(&hms_api_mutex); #endif @@ -134,7 +152,7 @@ HMS_connect (const char *format, ...) seek = strlen(hms_api) + 1;/* + '/' */ va_start (ap, format); - url = malloc(seek + vsnprintf(0, 0, format, ap) + 1); + url = malloc(seek + vsnprintf(0, 0, format, ap) + token_length + 1); va_end (ap); sprintf(url, "%s/", hms_api); @@ -144,9 +162,12 @@ HMS_connect (const char *format, ...) #endif va_start (ap, format); - vsprintf(&url[seek], format, ap); + seek += vsprintf(&url[seek], format, ap); va_end (ap); + if (quack_token) + sprintf(&url[seek], "?token=%s", quack_token); + CONS_Printf("HMS: connecting '%s'...\n", url); buffer = malloc(sizeof *buffer); @@ -174,6 +195,7 @@ HMS_connect (const char *format, ...) curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, HMS_on_read); curl_easy_setopt(curl, CURLOPT_WRITEDATA, buffer); + curl_free(quack_token); free(url); return buffer; diff --git a/src/mserv.c b/src/mserv.c index b9a4a6f3c..44fa8e3ae 100644 --- a/src/mserv.c +++ b/src/mserv.c @@ -89,6 +89,7 @@ void AddMServCommands(void) CV_RegisterVar(&cv_masterserver_update_rate); CV_RegisterVar(&cv_masterserver_timeout); CV_RegisterVar(&cv_masterserver_debug); + CV_RegisterVar(&cv_masterserver_token); CV_RegisterVar(&cv_servername); COM_AddCommand("listserv", Command_Listserv_f); #endif diff --git a/src/mserv.h b/src/mserv.h index 01a12f50a..d0d5e49df 100644 --- a/src/mserv.h +++ b/src/mserv.h @@ -68,6 +68,7 @@ extern consvar_t cv_masterserver, cv_servername; extern consvar_t cv_masterserver_update_rate; extern consvar_t cv_masterserver_timeout; extern consvar_t cv_masterserver_debug; +extern consvar_t cv_masterserver_token; // < 0 to not connect (usually -1) (offline mode) // == 0 to show all rooms, not a valid hosting room