commit 0c2c6365f8e2e5b832c9c91e6bec8f81bbe2df90 from: Omar Polo via: Thomas Adam date: Thu Jul 28 14:37:38 2022 UTC implement fcgi_gen_response on top of fcgi_gen_binary_response ok tracey@ commit - d54f10aa3fdb292115d93d868ae105413f812a7a commit + 0c2c6365f8e2e5b832c9c91e6bec8f81bbe2df90 blob - c7317172f7c1dd0eb9f2595f4a4d0f9976784174 blob + 3b6350631e42b62f4a9aa477c0a2aee5464fec6b --- gotwebd/fcgi.c +++ gotwebd/fcgi.c @@ -312,7 +312,7 @@ fcgi_gen_binary_response(struct request *c, const uint if (c->sock->client_status == CLIENT_DISCONNECT) return -1; - if (data == NULL) + if (data == NULL || len == 0) return 0; if ((resp = calloc(1, sizeof(struct fcgi_response))) == NULL) { @@ -343,43 +343,9 @@ fcgi_gen_binary_response(struct request *c, const uint int fcgi_gen_response(struct request *c, const char *data) { - struct fcgi_response *resp; - struct fcgi_record_header *header; - ssize_t n = 0; - int i; - - if (c->sock->client_status == CLIENT_DISCONNECT) - return -1; - - if (data == NULL) + if (data == NULL || *data == '\0') return 0; - - if (strlen(data) == 0) - return 0; - - if ((resp = calloc(1, sizeof(struct fcgi_response))) == NULL) { - log_warn("%s: cannot calloc fcgi_response", __func__); - return -1; - } - - header = (struct fcgi_record_header*) resp->data; - header->version = 1; - header->type = FCGI_STDOUT; - header->id = htons(c->id); - header->padding_len = 0; - header->reserved = 0; - - for (i = 0; i < strlen(data); i++) { - resp->data[i+8] = data[i]; - n++; - } - - header->content_len = htons(n); - resp->data_pos = 0; - resp->data_len = n + sizeof(struct fcgi_record_header); - fcgi_send_response(c, resp); - - return 0; + return fcgi_gen_binary_response(c, data, strlen(data)); } void