X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fhttp.c;h=592aeb17c0a4220a7688527a0a01293ae92e93b5;hb=a4e95e0a6d4b53732ea0a585be0b6df55ae41e42;hp=2a41b5bb612fc5eaf0f25eebdcd4cd18ceaa6aec;hpb=dde5b6f0ddf3293cea59da9ef623ff0f7c94b5c9;p=rocksndiamonds.git diff --git a/src/libgame/http.c b/src/libgame/http.c index 2a41b5bb..592aeb17 100644 --- a/src/libgame/http.c +++ b/src/libgame/http.c @@ -33,6 +33,24 @@ char *GetHttpError(void) return http_error; } +void ConvertHttpRequestBodyToServerEncoding(struct HttpRequest *request) +{ + char *body_utf8 = getUTF8FromLatin1(request->body); + + strcpy(request->body, body_utf8); + checked_free(body_utf8); +} + +void ConvertHttpResponseBodyToClientEncoding(struct HttpResponse *response) +{ + char *body_latin1 = getLatin1FromUTF8(response->body); + + strcpy(response->body, body_latin1); + checked_free(body_latin1); + + response->body_size = strlen(response->body); +} + static void SetHttpResponseToDefaults(struct HttpResponse *response) { response->head[0] = '\0'; @@ -128,8 +146,11 @@ static boolean SetHTTPResponseBody(struct HttpResponse *response, char *buffer, 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; @@ -195,10 +216,6 @@ boolean DoHttpRequest(struct HttpRequest *request, 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); @@ -258,3 +275,22 @@ boolean DoHttpRequest(struct HttpRequest *request, 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.api_server = success; + + return success; +}