return password_json;
}
-static void DownloadServerScoreToCacheExt(struct HttpRequest *request,
- struct HttpResponse *response,
- int level_nr,
- char *score_cache_filename)
+struct ApiGetScoreThreadData
{
+ 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;
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)
{
ConvertHttpResponseBodyToClientEncoding(response);
- char *filename = score_cache_filename;
+ char *filename = data->score_cache_filename;
FILE *file;
int i;
server_scores.updated = TRUE;
}
-static void DownloadServerScoreToCache(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;
- DownloadServerScoreToCacheExt(request, response,
- level_nr, score_cache_filename);
+ if (!DoHttpRequest(request, response))
+ {
+ Error("HTTP request failed: %s", GetHttpError());
- checked_free(request);
- checked_free(response);
+ return;
+ }
+
+ 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);
}
-struct DownloadServerScoreToCacheThreadData
+static void ApiGetScore_HttpRequest(struct HttpRequest *request,
+ struct HttpResponse *response,
+ void *data_raw)
{
- int level_nr;
- char *score_cache_filename;
-};
+ ApiGetScore_HttpRequestExt(request, response, data_raw);
-static int DownloadServerScoreToCacheThread(void *data_raw)
+ FreeThreadData_ApiGetScore(data_raw);
+}
+
+static int ApiGetScoreThread(void *data_raw)
{
- struct DownloadServerScoreToCacheThreadData *data = data_raw;
+ struct HttpRequest *request = checked_calloc(sizeof(struct HttpRequest));
+ struct HttpResponse *response = checked_calloc(sizeof(struct HttpResponse));
- DownloadServerScoreToCache(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 DownloadServerScoreToCacheAsThread(int nr)
+static void ApiGetScoreAsThread(int nr)
{
- struct DownloadServerScoreToCacheThreadData *data =
- checked_malloc(sizeof(struct DownloadServerScoreToCacheThreadData));
- char *score_cache_filename = getScoreCacheFilename(nr);
+ struct ApiGetScoreThreadData *data = CreateThreadData_ApiGetScore(nr);
- data->level_nr = nr;
- data->score_cache_filename = getStringCopy(score_cache_filename);
-
- ExecuteAsThread(DownloadServerScoreToCacheThread,
- "DownloadServerScoreToCache", data,
+ ExecuteAsThread(ApiGetScoreThread,
+ "ApiGetScore", data,
"download scores from server");
}
{
// 2nd step: download server scores from score server to cache file
// (as thread, as it might time out if the server is not reachable)
- DownloadServerScoreToCacheAsThread(nr);
+ ApiGetScoreAsThread(nr);
}
}
return buffer_encoded;
}
-static void UploadScoreToServerExt(struct HttpRequest *request,
- struct HttpResponse *response,
- int level_nr,
- char *score_tape_filename,
- struct ScoreEntry *score_entry)
+struct ApiAddScoreThreadData
{
+ 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;
{
Error("loading and base64 encoding score tape file failed");
- return;
+ return FALSE;
}
char *player_name_raw = score_entry->name;
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());
return;
}
- server_scores.uploaded = TRUE;
+ HandleResponse_ApiAddScore(response, data_raw);
}
-static void UploadScoreToServer(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));
-
- UploadScoreToServerExt(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);
}
-struct UploadScoreToServerThreadData
+static int ApiAddScoreThread(void *data_raw)
{
- int level_nr;
- char *score_tape_filename;
- struct ScoreEntry score_entry;
-};
-
-static int UploadScoreToServerThread(void *data_raw)
-{
- struct UploadScoreToServerThreadData *data = data_raw;
+ struct HttpRequest *request = checked_calloc(sizeof(struct HttpRequest));
+ struct HttpResponse *response = checked_calloc(sizeof(struct HttpResponse));
- UploadScoreToServer(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;
}
-static void UploadScoreToServerAsThread(int nr, char *score_tape_filename)
+static void ApiAddScoreAsThread(int nr, char *score_tape_filename)
{
- struct UploadScoreToServerThreadData *data =
- checked_malloc(sizeof(struct UploadScoreToServerThreadData));
- 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);
+ struct ApiAddScoreThreadData *data =
+ CreateThreadData_ApiAddScore(nr, score_tape_filename);
- ExecuteAsThread(UploadScoreToServerThread,
- "UploadScoreToServer", data,
+ ExecuteAsThread(ApiAddScoreThread,
+ "ApiAddScore", data,
"upload score to server");
}
if (!runtime.use_api_server)
return;
- UploadScoreToServerAsThread(nr, NULL);
+ ApiAddScoreAsThread(nr, NULL);
}
void SaveServerScoreFromFile(int nr, char *score_tape_filename)
if (!runtime.use_api_server)
return;
- UploadScoreToServerAsThread(nr, score_tape_filename);
+ ApiAddScoreAsThread(nr, score_tape_filename);
}
void LoadLocalAndServerScore(int nr, boolean download_score)