romele / git-trace public
62 commits · 1 branch · 1 tag · 1 contributor (top: Romele) · first commit 3d ago · last push 10m ago
src/httpd.h
#ifndef GT_HTTPD_H #define GT_HTTPD_H #include "util.h" #define HDR_MAX 16384 #define URI_MAX 2048 #define PATH_MAX_LEN 1024 #define QUERY_MAX 1024 struct request { int fd; char method[8]; char path[PATH_MAX_LEN]; /* url-decoded path */ char query[QUERY_MAX]; /* raw query string */ long content_length; /* -1 if absent */ long body_left; /* unread body bytes */ int chunked; /* Transfer-Encoding: chunked seen */ char *over; /* body bytes already buffered */ size_t over_len, over_off; char *hdrs; /* header lines block, '\n'-separated */ int user_id; /* 0 = anonymous */ char user_name[64]; char session_tok[65]; /* raw gt_session cookie, "" if absent */ char remote_ip[64]; /* peer address (rate limiting) */ int open_reg; /* instance allows public signup */ }; /* case-insensitive header lookup; NULL if absent */ const char *req_header(struct request *r, const char *name); /* malloc'd, trimmed header value; NULL if absent */ char *req_header_dup(struct request *r, const char *name); /* extract ?k=v (url-decoded) into out; returns 0 on success */ int req_query(struct request *r, const char *key, char *out, size_t outlen); /* consume request body: buffered overread first, then socket */ long body_read(struct request *r, void *buf, size_t n); void http_respond_csp(struct request *r, int code, const char *ctype, const char *csp, const char *body, size_t n); void http_respond(struct request *r, int code, const char *ctype, const char *body, size_t n); void http_error(struct request *r, int code, const char *msg); void http_unauthorized(struct request *r, const char *msg); void http_redirect(struct request *r, const char *location); /* 302 + Set-Cookie, used by login/logout */ void http_redirect_cookie(struct request *r, const char *location, const char *set_cookie); void http_write_all(int fd, const void *p, size_t n); struct server; typedef void (*route_fn)(void *ctx, struct request *r); void httpd_run(int port, void *ctx, route_fn route, const char *alt_origin); #endif