From 02c17cbbe441bb15bbab9deccfd8c3dd6c90d4d6 Mon Sep 17 00:00:00 2001 From: Nakidai Date: Mon, 25 Nov 2024 15:13:27 +0300 Subject: Add LibHTTPC_writeResponse --- src/response.c | 66 ++++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 50 insertions(+), 16 deletions(-) (limited to 'src/response.c') diff --git a/src/response.c b/src/response.c index 154cd8d..6776da3 100644 --- a/src/response.c +++ b/src/response.c @@ -4,6 +4,30 @@ #include #include +#include + + +#define WRITE() \ + do \ + { \ + append(response->version); \ + append(" "); \ + append(status); \ + append(" "); \ + append(response->phrase); \ + append("\r\n"); \ + for (size_t i = 0; i < response->header_count; ++i) \ + { \ + append(response->headers[i].name); \ + append(": "); \ + append(response->headers[i].value); \ + append("\r\n"); \ + } \ + append("\r\n"); \ + if (response->body) \ + append(response->body); \ + } while (0) + char *LibHTTPC_dumpResponse(struct LibHTTPC_Response *response, char *buf, size_t buf_len) { @@ -19,23 +43,33 @@ char *LibHTTPC_dumpResponse(struct LibHTTPC_Response *response, char *buf, size_ snprintf(status, sizeof(status), "%d", response->status); #define append(X) strncat(buf, (X), buf_len - strlen(buf)) - append(response->version); - append(" "); - append(status); - append(" "); - append(response->phrase); - append("\r\n"); - for (size_t i = 0; i < response->header_count; ++i) - { - append(response->headers[i].name); - append(": "); - append(response->headers[i].value); - append("\r\n"); - } - append("\r\n"); - if (response->body) - append(response->body); + WRITE(); #undef append return NULL; } + +int LibHTTPC_writeResponse(int sockfd, struct LibHTTPC_Response *response) +{ + char status[10]; + + if (!response->version) + response->version = "HTTP/1.1"; + if (!response->status) + response->status = LibHTTPC_Status_OK; + if (!response->phrase) + response->phrase = LibHTTPC_dumpStatus(response->status); + + snprintf(status, sizeof(status), "%d", response->status); + +#define append(X) \ + do \ + { \ + if (send(sockfd, (X), strlen(X), 0) == -1) \ + return 1; \ + } while(0) + WRITE(); +#undef append + + return 0; +} -- cgit 1.4.1