X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ffiles.c;h=6d99afccd0af57da1162fedb1ebe9c443f0be85a;hb=b937b0928312ad4a51f45c16a0792a09ba914659;hp=fc45f7731b298cf7f3ff9d1d2c496c0ed0e85b15;hpb=ab3d5a2937d41e04be3ae8884d9295d59ff346cd;p=rocksndiamonds.git diff --git a/src/files.c b/src/files.c index fc45f773..6d99afcc 100644 --- a/src/files.c +++ b/src/files.c @@ -9074,11 +9074,32 @@ struct ApiGetScoreThreadData char *score_cache_filename; }; -static void ApiGetScoreExt(struct HttpRequest *request, - struct HttpResponse *response, - int level_nr, - char *score_cache_filename) +static void *CreateThreadData_ApiGetScore(int nr) { + struct ApiGetScoreThreadData *data = + checked_malloc(sizeof(struct ApiGetScoreThreadData)); + char *score_cache_filename = getScoreCacheFilename(nr); + + data->level_nr = nr; + data->score_cache_filename = getStringCopy(score_cache_filename); + + return data; +} + +static void FreeThreadData_ApiGetScore(void *data_raw) +{ + struct ApiGetScoreThreadData *data = data_raw; + + checked_free(data->score_cache_filename); + checked_free(data); +} + +static boolean SetRequest_ApiGetScore(struct HttpRequest *request, + void *data_raw) +{ + struct ApiGetScoreThreadData *data = data_raw; + int level_nr = data->level_nr; + request->hostname = setup.api_server_hostname; request->port = API_SERVER_PORT; request->method = API_SERVER_METHOD; @@ -9095,25 +9116,18 @@ static void ApiGetScoreExt(struct HttpRequest *request, getPasswordJSON(setup.api_server_password), getProgramRealVersionString(), getProgramPlatformString(), - levelset.identifier, level_nr); + levelset.identifier, + level_nr); ConvertHttpRequestBodyToServerEncoding(request); - if (!DoHttpRequest(request, response)) - { - Error("HTTP request failed: %s", GetHttpError()); - - return; - } - - if (!HTTP_SUCCESS(response->status_code)) - { - Error("server failed to handle request: %d %s", - response->status_code, - response->status_text); + return TRUE; +} - return; - } +static void HandleResponse_ApiGetScore(struct HttpResponse *response, + void *data_raw) +{ + struct ApiGetScoreThreadData *data = data_raw; if (response->body_size == 0) { @@ -9124,7 +9138,7 @@ static void ApiGetScoreExt(struct HttpRequest *request, ConvertHttpResponseBodyToClientEncoding(response); - char *filename = score_cache_filename; + char *filename = data->score_cache_filename; FILE *file; int i; @@ -9148,39 +9162,57 @@ static void ApiGetScoreExt(struct HttpRequest *request, server_scores.updated = TRUE; } -static void ApiGetScore(int level_nr, char *score_cache_filename) +static void ApiGetScore_HttpRequestExt(struct HttpRequest *request, + struct HttpResponse *response, + void *data_raw) { - struct HttpRequest *request = checked_calloc(sizeof(struct HttpRequest)); - struct HttpResponse *response = checked_calloc(sizeof(struct HttpResponse)); + if (!SetRequest_ApiGetScore(request, data_raw)) + return; + + if (!DoHttpRequest(request, response)) + { + Error("HTTP request failed: %s", GetHttpError()); - ApiGetScoreExt(request, response, - level_nr, score_cache_filename); + return; + } - checked_free(request); - checked_free(response); + if (!HTTP_SUCCESS(response->status_code)) + { + Error("server failed to handle request: %d %s", + response->status_code, + response->status_text); + + return; + } + + HandleResponse_ApiGetScore(response, data_raw); +} + +static void ApiGetScore_HttpRequest(struct HttpRequest *request, + struct HttpResponse *response, + void *data_raw) +{ + ApiGetScore_HttpRequestExt(request, response, data_raw); + + FreeThreadData_ApiGetScore(data_raw); } static int ApiGetScoreThread(void *data_raw) { - struct ApiGetScoreThreadData *data = data_raw; + struct HttpRequest *request = checked_calloc(sizeof(struct HttpRequest)); + struct HttpResponse *response = checked_calloc(sizeof(struct HttpResponse)); - ApiGetScore(data->level_nr, - data->score_cache_filename); + ApiGetScore_HttpRequest(request, response, data_raw); - checked_free(data->score_cache_filename); - checked_free(data); + checked_free(request); + checked_free(response); return 0; } static void ApiGetScoreAsThread(int nr) { - struct ApiGetScoreThreadData *data = - checked_malloc(sizeof(struct ApiGetScoreThreadData)); - char *score_cache_filename = getScoreCacheFilename(nr); - - data->level_nr = nr; - data->score_cache_filename = getStringCopy(score_cache_filename); + struct ApiGetScoreThreadData *data = CreateThreadData_ApiGetScore(nr); ExecuteAsThread(ApiGetScoreThread, "ApiGetScore", data, @@ -9334,12 +9366,38 @@ struct ApiAddScoreThreadData struct ScoreEntry score_entry; }; -static void ApiAddScoreExt(struct HttpRequest *request, - struct HttpResponse *response, - int level_nr, - char *score_tape_filename, - struct ScoreEntry *score_entry) +static void *CreateThreadData_ApiAddScore(int nr, char *score_tape_filename) +{ + struct ApiAddScoreThreadData *data = + checked_malloc(sizeof(struct ApiAddScoreThreadData)); + struct ScoreEntry *score_entry = &scores.entry[scores.last_added]; + + if (score_tape_filename == NULL) + score_tape_filename = getScoreTapeFilename(score_entry->tape_basename, nr); + + data->level_nr = nr; + data->score_entry = *score_entry; + data->score_tape_filename = getStringCopy(score_tape_filename); + + return data; +} + +static void FreeThreadData_ApiAddScore(void *data_raw) +{ + struct ApiAddScoreThreadData *data = data_raw; + + checked_free(data->score_tape_filename); + checked_free(data); +} + +static boolean SetRequest_ApiAddScore(struct HttpRequest *request, + void *data_raw) { + struct ApiAddScoreThreadData *data = data_raw; + struct ScoreEntry *score_entry = &data->score_entry; + char *score_tape_filename = data->score_tape_filename; + int level_nr = data->level_nr; + request->hostname = setup.api_server_hostname; request->port = API_SERVER_PORT; request->method = API_SERVER_METHOD; @@ -9351,7 +9409,7 @@ static void ApiAddScoreExt(struct HttpRequest *request, { Error("loading and base64 encoding score tape file failed"); - return; + return FALSE; } char *player_name_raw = score_entry->name; @@ -9425,6 +9483,22 @@ static void ApiAddScoreExt(struct HttpRequest *request, ConvertHttpRequestBodyToServerEncoding(request); + return TRUE; +} + +static void HandleResponse_ApiAddScore(struct HttpResponse *response, + void *data_raw) +{ + server_scores.uploaded = TRUE; +} + +static void ApiAddScore_HttpRequestExt(struct HttpRequest *request, + struct HttpResponse *response, + void *data_raw) +{ + if (!SetRequest_ApiAddScore(request, data_raw)) + return; + if (!DoHttpRequest(request, response)) { Error("HTTP request failed: %s", GetHttpError()); @@ -9441,32 +9515,27 @@ static void ApiAddScoreExt(struct HttpRequest *request, return; } - server_scores.uploaded = TRUE; + HandleResponse_ApiAddScore(response, data_raw); } -static void ApiAddScore(int level_nr, char *score_tape_filename, - struct ScoreEntry *score_entry) +static void ApiAddScore_HttpRequest(struct HttpRequest *request, + struct HttpResponse *response, + void *data_raw) { - struct HttpRequest *request = checked_calloc(sizeof(struct HttpRequest)); - struct HttpResponse *response = checked_calloc(sizeof(struct HttpResponse)); - - ApiAddScoreExt(request, response, - level_nr, score_tape_filename, score_entry); + ApiAddScore_HttpRequestExt(request, response, data_raw); - checked_free(request); - checked_free(response); + FreeThreadData_ApiAddScore(data_raw); } static int ApiAddScoreThread(void *data_raw) { - struct ApiAddScoreThreadData *data = data_raw; + struct HttpRequest *request = checked_calloc(sizeof(struct HttpRequest)); + struct HttpResponse *response = checked_calloc(sizeof(struct HttpResponse)); - ApiAddScore(data->level_nr, - data->score_tape_filename, - &data->score_entry); + ApiAddScore_HttpRequest(request, response, data_raw); - checked_free(data->score_tape_filename); - checked_free(data); + checked_free(request); + checked_free(response); return 0; } @@ -9474,15 +9543,7 @@ static int ApiAddScoreThread(void *data_raw) static void ApiAddScoreAsThread(int nr, char *score_tape_filename) { struct ApiAddScoreThreadData *data = - checked_malloc(sizeof(struct ApiAddScoreThreadData)); - struct ScoreEntry *score_entry = &scores.entry[scores.last_added]; - - if (score_tape_filename == NULL) - score_tape_filename = getScoreTapeFilename(score_entry->tape_basename, nr); - - data->level_nr = nr; - data->score_entry = *score_entry; - data->score_tape_filename = getStringCopy(score_tape_filename); + CreateThreadData_ApiAddScore(nr, score_tape_filename); ExecuteAsThread(ApiAddScoreThread, "ApiAddScore", data,