moved code for HTTP request handling to separate functions
[rocksndiamonds.git] / src / screens.c
index 61aff99a31f99a07bc1ee51cecde52bc81e07640..55aa0c22f855bd6abad91e51fcfd88a8353108d5 100644 (file)
@@ -4042,11 +4042,39 @@ void HandleInfoScreen(int mx, int my, int dx, int dy, int button)
 // change name functions
 // ============================================================================
 
-static void ApiRenamePlayerExt(struct HttpRequest *request,
-                              struct HttpResponse *response,
-                              char *player_name_raw,
-                              char *player_uuid_raw)
+struct ApiRenamePlayerThreadData
+{
+  char *player_name;
+  char *player_uuid;
+};
+
+static void *CreateThreadData_ApiRenamePlayer(void)
+{
+  struct ApiRenamePlayerThreadData *data =
+    checked_malloc(sizeof(struct ApiRenamePlayerThreadData));
+
+  data->player_name = getStringCopy(setup.player_name);
+  data->player_uuid = getStringCopy(setup.player_uuid);
+
+  return data;
+}
+
+static void FreeThreadData_ApiRenamePlayer(void *data_raw)
 {
+  struct ApiRenamePlayerThreadData *data = data_raw;
+
+  checked_free(data->player_name);
+  checked_free(data->player_uuid);
+  checked_free(data);
+}
+
+static boolean SetRequest_ApiRenamePlayer(struct HttpRequest *request,
+                                         void *data_raw)
+{
+  struct ApiRenamePlayerThreadData *data = data_raw;
+  char *player_name_raw = data->player_name;
+  char *player_uuid_raw = data->player_uuid;
+
   request->hostname = setup.api_server_hostname;
   request->port     = API_SERVER_PORT;
   request->method   = API_SERVER_METHOD;
@@ -4074,6 +4102,22 @@ static void ApiRenamePlayerExt(struct HttpRequest *request,
 
   ConvertHttpRequestBodyToServerEncoding(request);
 
+  return TRUE;
+}
+
+static void HandleResponse_ApiRenamePlayer(struct HttpResponse *response,
+                                          void *data_raw)
+{
+  // nothing to do here
+}
+
+static void ApiRenamePlayer_HttpRequestExt(struct HttpRequest *request,
+                                          struct HttpResponse *response,
+                                          void *data_raw)
+{
+  if (!SetRequest_ApiRenamePlayer(request, data_raw))
+    return;
+
   if (!DoHttpRequest(request, response))
   {
     Error("HTTP request failed: %s", GetHttpError());
@@ -4089,34 +4133,28 @@ static void ApiRenamePlayerExt(struct HttpRequest *request,
 
     return;
   }
+
+  HandleResponse_ApiRenamePlayer(response, data_raw);
 }
 
-static void ApiRenamePlayer(char *player_name, char *player_uuid)
+static void ApiRenamePlayer_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));
+  ApiRenamePlayer_HttpRequestExt(request, response, data_raw);
 
-  ApiRenamePlayerExt(request, response, player_name, player_uuid);
-
-  checked_free(request);
-  checked_free(response);
+  FreeThreadData_ApiRenamePlayer(data_raw);
 }
 
-struct ApiRenamePlayerThreadData
-{
-  char *player_name;
-  char *player_uuid;
-};
-
 static int ApiRenamePlayerThread(void *data_raw)
 {
-  struct ApiRenamePlayerThreadData *data = data_raw;
+  struct HttpRequest *request = checked_calloc(sizeof(struct HttpRequest));
+  struct HttpResponse *response = checked_calloc(sizeof(struct HttpResponse));
 
-  ApiRenamePlayer(data->player_name, data->player_uuid);
+  ApiRenamePlayer_HttpRequest(request, response, data_raw);
 
-  checked_free(data->player_name);
-  checked_free(data->player_uuid);
-  checked_free(data);
+  checked_free(request);
+  checked_free(response);
 
   return 0;
 }
@@ -4124,10 +4162,7 @@ static int ApiRenamePlayerThread(void *data_raw)
 static void ApiRenamePlayerAsThread(void)
 {
   struct ApiRenamePlayerThreadData *data =
-    checked_malloc(sizeof(struct ApiRenamePlayerThreadData));
-
-  data->player_name = getStringCopy(setup.player_name);
-  data->player_uuid = getStringCopy(setup.player_uuid);
+    CreateThreadData_ApiRenamePlayer();
 
   ExecuteAsThread(ApiRenamePlayerThread,
                  "ApiRenamePlayer", data,