added response header to context

This commit is contained in:
overflowerror 2021-06-12 21:47:57 +02:00
parent 70bf93a3ed
commit 47747af272
6 changed files with 27 additions and 6 deletions

View file

@ -8,7 +8,7 @@ LIBARGO = libargo/libargo.a
LIBPARCIVAL = libparcival/libparcival.a
LIBS = $(CFLOOR_LIB) $(LIBARGO) $(LIBPARCIVAL)
OBJS = obj/router.o obj/request.o obj/base_cfloor.o obj/base_cgi.o obj/auth.o obj/base64.o
OBJS = obj/router.o obj/request.o obj/base_cfloor.o obj/base_cgi.o obj/auth.o obj/base64.o obj/common.o
DEPS = $(OBJS:%.o=%.d)
DEMO_OBJS = obj/demo.o obj/entities.tab.o obj/template.tab.o

View file

@ -23,7 +23,8 @@ static void handler(struct request request, struct response _response) {
peerAddr: request.peer.addr,
peerPort: request.peer.port,
auth: getAuthData(request.headers),
headers: *request.headers
requestHeaders: *request.headers,
responseHeaders: headers_create()
};
response_t response = routerHandler(ctx);
@ -32,9 +33,12 @@ static void handler(struct request request, struct response _response) {
}
freeAuthData(ctx.auth);
headers_merge(&ctx.responseHeaders, &response.headers);
int fd = _response.sendHeader(response.status, &response.headers, &request);
int fd = _response.sendHeader(response.status, &ctx.responseHeaders, &request);
headers_free(&response.headers);
headers_free(&ctx.responseHeaders);
if (fd < 0) {
error("csite: sendHeader: %s", strerror(errno));

View file

@ -110,7 +110,8 @@ int main(int argc, char** argv) {
peerAddr: or(getenv("REMOTE_ADDR"), ""),
peerPort: 0, // TODO
auth: getAuthData(request.headers),
headers: headers
requestHeaders: headers,
responseHeaders: headers_create()
};
response_t response = routerHandler(ctx);
@ -119,13 +120,17 @@ int main(int argc, char** argv) {
}
headers_free(&headers);
headers_merge(&ctx.responseHeaders, &response.headers);
freeAuthData(ctx.auth);
printf("Status: %d\n\r", response.status);
headers_dump(&response.headers, stdout);
headers_dump(&ctx.responseHeaders, stdout);
printf("\n\r");
headers_free(&response.headers);
headers_free(&ctx.responseHeaders);
response.output(stdout, response._userData, ctx);

9
src/common.c Normal file
View file

@ -0,0 +1,9 @@
#include <headers.h>
#include "common.h"
void headers_merge(struct headers* dst, struct headers* src) {
for (int i = 0; i < src->number; i++) {
headers_mod(dst, src->headers[i].key, src->headers[i].value);
}
}

View file

@ -15,4 +15,6 @@ typedef enum method method_t;
#define HTTP_CONNECT (CONNECT)
#define HTTP_PATCH (PATCH)
void headers_merge(struct headers*, struct headers*);
#endif

View file

@ -18,7 +18,8 @@ typedef struct {
const char* peerAddr;
int peerPort;
struct auth auth;
struct headers headers;
struct headers requestHeaders;
struct headers responseHeaders;
} ctx_t;
typedef struct {