mirror of
https://github.com/sigmasternchen/CShore
synced 2025-03-15 16:18:56 +00:00
added response header to context
This commit is contained in:
parent
70bf93a3ed
commit
47747af272
6 changed files with 27 additions and 6 deletions
2
Makefile
2
Makefile
|
@ -8,7 +8,7 @@ LIBARGO = libargo/libargo.a
|
||||||
LIBPARCIVAL = libparcival/libparcival.a
|
LIBPARCIVAL = libparcival/libparcival.a
|
||||||
LIBS = $(CFLOOR_LIB) $(LIBARGO) $(LIBPARCIVAL)
|
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)
|
DEPS = $(OBJS:%.o=%.d)
|
||||||
|
|
||||||
DEMO_OBJS = obj/demo.o obj/entities.tab.o obj/template.tab.o
|
DEMO_OBJS = obj/demo.o obj/entities.tab.o obj/template.tab.o
|
||||||
|
|
|
@ -23,7 +23,8 @@ static void handler(struct request request, struct response _response) {
|
||||||
peerAddr: request.peer.addr,
|
peerAddr: request.peer.addr,
|
||||||
peerPort: request.peer.port,
|
peerPort: request.peer.port,
|
||||||
auth: getAuthData(request.headers),
|
auth: getAuthData(request.headers),
|
||||||
headers: *request.headers
|
requestHeaders: *request.headers,
|
||||||
|
responseHeaders: headers_create()
|
||||||
};
|
};
|
||||||
|
|
||||||
response_t response = routerHandler(ctx);
|
response_t response = routerHandler(ctx);
|
||||||
|
@ -32,9 +33,12 @@ static void handler(struct request request, struct response _response) {
|
||||||
}
|
}
|
||||||
|
|
||||||
freeAuthData(ctx.auth);
|
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(&response.headers);
|
||||||
|
headers_free(&ctx.responseHeaders);
|
||||||
|
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
error("csite: sendHeader: %s", strerror(errno));
|
error("csite: sendHeader: %s", strerror(errno));
|
||||||
|
|
|
@ -110,7 +110,8 @@ int main(int argc, char** argv) {
|
||||||
peerAddr: or(getenv("REMOTE_ADDR"), ""),
|
peerAddr: or(getenv("REMOTE_ADDR"), ""),
|
||||||
peerPort: 0, // TODO
|
peerPort: 0, // TODO
|
||||||
auth: getAuthData(request.headers),
|
auth: getAuthData(request.headers),
|
||||||
headers: headers
|
requestHeaders: headers,
|
||||||
|
responseHeaders: headers_create()
|
||||||
};
|
};
|
||||||
|
|
||||||
response_t response = routerHandler(ctx);
|
response_t response = routerHandler(ctx);
|
||||||
|
@ -119,13 +120,17 @@ int main(int argc, char** argv) {
|
||||||
}
|
}
|
||||||
|
|
||||||
headers_free(&headers);
|
headers_free(&headers);
|
||||||
|
|
||||||
|
headers_merge(&ctx.responseHeaders, &response.headers);
|
||||||
|
|
||||||
freeAuthData(ctx.auth);
|
freeAuthData(ctx.auth);
|
||||||
|
|
||||||
printf("Status: %d\n\r", response.status);
|
printf("Status: %d\n\r", response.status);
|
||||||
headers_dump(&response.headers, stdout);
|
headers_dump(&ctx.responseHeaders, stdout);
|
||||||
printf("\n\r");
|
printf("\n\r");
|
||||||
|
|
||||||
headers_free(&response.headers);
|
headers_free(&response.headers);
|
||||||
|
headers_free(&ctx.responseHeaders);
|
||||||
|
|
||||||
response.output(stdout, response._userData, ctx);
|
response.output(stdout, response._userData, ctx);
|
||||||
|
|
||||||
|
|
9
src/common.c
Normal file
9
src/common.c
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -15,4 +15,6 @@ typedef enum method method_t;
|
||||||
#define HTTP_CONNECT (CONNECT)
|
#define HTTP_CONNECT (CONNECT)
|
||||||
#define HTTP_PATCH (PATCH)
|
#define HTTP_PATCH (PATCH)
|
||||||
|
|
||||||
|
void headers_merge(struct headers*, struct headers*);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -18,7 +18,8 @@ typedef struct {
|
||||||
const char* peerAddr;
|
const char* peerAddr;
|
||||||
int peerPort;
|
int peerPort;
|
||||||
struct auth auth;
|
struct auth auth;
|
||||||
struct headers headers;
|
struct headers requestHeaders;
|
||||||
|
struct headers responseHeaders;
|
||||||
} ctx_t;
|
} ctx_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
Loading…
Reference in a new issue