X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fhttp.c;h=b494ac42bd9d57d04bf84f14ed3d6189ef35c305;hb=97b1e9813e532b9065a841f2d185d632df19bf7a;hp=2a41b5bb612fc5eaf0f25eebdcd4cd18ceaa6aec;hpb=dde5b6f0ddf3293cea59da9ef623ff0f7c94b5c9;p=rocksndiamonds.git diff --git a/src/libgame/http.c b/src/libgame/http.c index 2a41b5bb..b494ac42 100644 --- a/src/libgame/http.c +++ b/src/libgame/http.c @@ -33,6 +33,28 @@ char *GetHttpError(void) 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'; @@ -128,8 +150,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 +220,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 +279,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.use_api_server = success; + + return success; +}