return http_error;
}
+void ConvertHttpRequestBodyToServerEncoding(struct HttpRequest *request)
+{
+ char *body_utf8 = getUTF8FromLatin1(request->body);
+
+ strncpy(request->body, body_utf8, MAX_HTTP_BODY_SIZE);
+ request->body[MAX_HTTP_BODY_SIZE] = '\0';
+
+ checked_free(body_utf8);
+}
+
+void ConvertHttpResponseBodyToClientEncoding(struct HttpResponse *response)
+{
+ char *body_latin1 = getLatin1FromUTF8(response->body);
+
+ strncpy(response->body, body_latin1, MAX_HTTP_BODY_SIZE);
+ response->body[MAX_HTTP_BODY_SIZE] = '\0';
+
+ response->body_size = strlen(response->body);
+
+ checked_free(body_latin1);
+}
+
static void SetHttpResponseToDefaults(struct HttpResponse *response)
{
response->head[0] = '\0';
response->status_text[0] = '\0';
}
+struct HttpResponse *GetHttpResponseFromBuffer(void *buffer, int size)
+{
+ if (size > MAX_HTTP_BODY_SIZE)
+ return NULL;
+
+ struct HttpResponse *response = checked_calloc(sizeof(struct HttpResponse));
+
+ SetHttpResponseToDefaults(response);
+
+ strncpy(response->body, buffer, MAX_HTTP_BODY_SIZE);
+ response->body[MAX_HTTP_BODY_SIZE] = '\0';
+ response->body_size = MIN(size, MAX_HTTP_BODY_SIZE);
+
+ return response;
+}
+
static boolean SetHTTPResponseCode(struct HttpResponse *response, char *buffer)
{
char *prefix = "HTTP/1.1 ";
return TRUE;
}
-boolean DoHttpRequest(struct HttpRequest *request,
- struct HttpResponse *response)
+static boolean DoHttpRequestExt(struct HttpRequest *request,
+ struct HttpResponse *response,
+ char *send_buffer,
+ char *recv_buffer,
+ int max_http_buffer_size)
{
SDLNet_SocketSet socket_set;
TCPsocket socket;
request->hostname,
(int)strlen(request->body));
- int max_http_buffer_size = MAX_HTTP_HEAD_SIZE + MAX_HTTP_BODY_SIZE;
- char send_buffer[max_http_buffer_size + 1];
- char recv_buffer[max_http_buffer_size + 1];
-
snprintf(send_buffer, max_http_buffer_size,
"%s\r\n%s", request->head, request->body);
return TRUE;
}
+
+boolean DoHttpRequest(struct HttpRequest *request,
+ struct HttpResponse *response)
+{
+ int max_http_buffer_size = MAX_HTTP_HEAD_SIZE + MAX_HTTP_BODY_SIZE;
+ char *send_buffer = checked_malloc(max_http_buffer_size + 1);
+ char *recv_buffer = checked_malloc(max_http_buffer_size + 1);
+
+ boolean success = DoHttpRequestExt(request, response,
+ send_buffer, recv_buffer,
+ max_http_buffer_size);
+
+ checked_free(send_buffer);
+ checked_free(recv_buffer);
+
+ runtime.use_api_server = success;
+
+ return success;
+}