- char *levelset_identifier = getEscapedJSON(leveldir_current->identifier);
- char *levelset_name = getEscapedJSON(leveldir_current->name);
- char *levelset_author = getEscapedJSON(leveldir_current->author);
- char *level_name = getEscapedJSON(level.name);
- char *level_author = getEscapedJSON(level.author);
- char *player_name = getEscapedJSON(score_entry->name);
-
- snprintf(request->body, MAX_HTTP_BODY_SIZE,
- "{\n"
- " \"game_version\": \"%s\",\n"
- " \"levelset_identifier\": \"%s\",\n"
- " \"levelset_name\": \"%s\",\n"
- " \"levelset_author\": \"%s\",\n"
- " \"levelset_num_levels\": \"%d\",\n"
- " \"levelset_first_level\": \"%d\",\n"
- " \"level_nr\": \"%d\",\n"
- " \"level_name\": \"%s\",\n"
- " \"level_author\": \"%s\",\n"
- " \"rate_time_over_score\": \"%d\",\n"
- " \"player_name\": \"%s\",\n"
- " \"score\": \"%d\",\n"
- " \"time\": \"%d\",\n"
- " \"tape_basename\": \"%s\",\n"
- " \"tape\": \"%s\"\n"
- "}\n",
- getProgramRealVersionString(),
- levelset_identifier,
- levelset_name,
- levelset_author,
- leveldir_current->levels,
- leveldir_current->first_level,
- nr,
- level_name,
- level_author,
- level.rate_time_over_score,
- player_name,
- score_entry->score,
- score_entry->time,
- score_entry->tape_basename,
- tape_base64);
-
- checked_free(tape_base64);
-
- checked_free(levelset_identifier);
- checked_free(levelset_name);
- checked_free(levelset_author);
- checked_free(level_name);
- checked_free(level_author);
- checked_free(player_name);
-
- 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;
- }
-}
-
-static void UploadScoreToServer(int nr)
-{
- struct HttpRequest *request = checked_calloc(sizeof(struct HttpRequest));
- struct HttpResponse *response = checked_calloc(sizeof(struct HttpResponse));
-
- UploadScoreToServerExt(request, response, nr);
-
- checked_free(request);
- checked_free(response);
-}
-
-struct UploadScoreToServerThreadData
-{
- int level_nr;
-};
-
-static int UploadScoreToServerThread(void *data_raw)
-{
- struct UploadScoreToServerThreadData *data = data_raw;
-
- UploadScoreToServer(data->level_nr);
-
- return 0;
-}
-
-static void UploadScoreToServerAsThread(int nr)
-{
- static struct UploadScoreToServerThreadData data;
-
- data.level_nr = nr;
-
- ExecuteAsThread(UploadScoreToServerThread,
- "UploadScoreToServer", &data,
- "upload score to server");