tinywebd

annotate src/http.c @ 2:7bb4c2a0a360

foo
author John Tsiombikas <nuclear@member.fsf.org>
date Wed, 15 Apr 2015 23:44:22 +0300
parents f425a9805d17
children 852a745503cf
rev   line source
nuclear@1 1 #include "http.h"
nuclear@1 2
nuclear@2 3 int http_parse_header(struct http_req_header *hdr, const char *buf, int bufsz)
nuclear@2 4 {
nuclear@2 5 int i, nlines = 0;
nuclear@2 6 char *endhdr;
nuclear@2 7 char *rqline = 0;
nuclear@2 8
nuclear@2 9 for(i=1; i<bufsz; i++) {
nuclear@2 10 if(buf[i] == '\n' && buf[i - 1] == '\r') {
nuclear@2 11 if(!rqline) {
nuclear@2 12 rqline = alloca(i);
nuclear@2 13 memcpy(rqline, buf, i - 1);
nuclear@2 14 rqline[i - 1] = 0;
nuclear@2 15 }
nuclear@2 16 ++nlines;
nuclear@2 17 }
nuclear@2 18 }
nuclear@2 19
nuclear@2 20 if(!rqline)
nuclear@2 21 return -1;
nuclear@2 22
nuclear@2 23
nuclear@2 24 }
nuclear@2 25
nuclear@1 26 const char *http_strmsg(int code)
nuclear@1 27 {
nuclear@1 28 static const char **msgxxx[] = {
nuclear@1 29 0, http_msg1xx, http_msg2xx, http_msg3xx, http_msg4xx, http_msg5xx
nuclear@1 30 };
nuclear@1 31 static int msgcount[] = {
nuclear@1 32 0,
nuclear@1 33 sizeof http_msg1xx / sizeof *http_msg1xx,
nuclear@1 34 sizeof http_msg2xx / sizeof *http_msg2xx,
nuclear@1 35 sizeof http_msg3xx / sizeof *http_msg3xx,
nuclear@1 36 sizeof http_msg4xx / sizeof *http_msg4xx,
nuclear@1 37 sizeof http_msg5xx / sizeof *http_msg5xx
nuclear@1 38 };
nuclear@1 39
nuclear@1 40 int type = code / 100;
nuclear@1 41 int idx = code % 100;
nuclear@1 42
nuclear@1 43 if(type < 1 || type >= sizeof msgxxx / sizeof *msgxxx) {
nuclear@1 44 return "Invalid HTTP Status";
nuclear@1 45 }
nuclear@1 46
nuclear@1 47 if(idx < 0 || idx >= msgcount[type]) {
nuclear@1 48 return "Unknown HTTP Status";
nuclear@1 49 }
nuclear@1 50
nuclear@1 51 return msgxxx[type][idx];
nuclear@1 52 }