diff --git a/cmoe.c b/cmoe.c index d9bc5db..f5a53d4 100644 --- a/cmoe.c +++ b/cmoe.c @@ -22,7 +22,7 @@ static void headers(uint32_t content_len, const char* content_type) { char buf[1024]; uint32_t offset = 0; - ADD_HERDER(HTTP200 SERVER_STRING); + ADD_HERDER(H200 SERVER_STRING); ADD_HERDER(CACHE_CTRL); ADD_HERDER_PARAM(CONTENT_TYPE, content_type); ADD_HERDER_PARAM(CONTENT_LEN "\r\n", content_len); @@ -31,11 +31,10 @@ static void headers(uint32_t content_len, const char* content_type) { write(1, buf, offset); } -static void http_error(const char* type, const char* msg) { - char* str = malloc(strlen(type) + strlen(msg)); - uint32_t len = strlen(str); - sprintf(str, type, msg); - fflush(stdout); +static void http_error(RESPCODE code, char* msg) { + uint32_t len = strlen(msg) + typel[code]; + char* str = malloc(len); + sprintf(str, types[code], msg); write(1, (char*)&len, sizeof(uint32_t)); write(1, str, len); free(str); diff --git a/cmoe.h b/cmoe.h index 05633cd..c06cb48 100644 --- a/cmoe.h +++ b/cmoe.h @@ -1,6 +1,8 @@ #ifndef _CMOE_H_ #define _CMOE_H_ +#include + #define DATFILE "dat.sp" #define TOKEN "fumiama" @@ -13,10 +15,14 @@ typedef struct COUNTER COUNTER; #define SERVER_STRING "Server: CMoe Counter by Fumiama/1.0\r\n" -#define HTTP200 "HTTP/1.0 200 OK\r\n" -#define HTTP400 "HTTP/1.0 400 BAD REQUEST\r\nContent-Type: text/html\r\n\r\n

%s\r\n" -#define HTTP404 "HTTP/1.0 404 NOT FOUND\r\nContent-Type: text/html\r\n\r\nNot Found\r\n

%s\r\n\r\n" -#define HTTP500 "HTTP/1.0 500 Internal Server Error\r\nContent-Type: text/html\r\n\r\n

%s\r\n" +#define H200 "HTTP/1.0 200 OK\r\n" +#define H400 "HTTP/1.0 400 BAD REQUEST\r\nContent-Type: text/html\r\n\r\n

%s\r\n" +#define H404 "HTTP/1.0 404 NOT FOUND\r\nContent-Type: text/html\r\n\r\nNot Found\r\n

%s\r\n\r\n" +#define H500 "HTTP/1.0 500 Internal Server Error\r\nContent-Type: text/html\r\n\r\n

%s\r\n" +const char* types[] = {H200, H400, H404, H500}; +const uint8_t typel[] = {18, 59, 111, 69}; +enum RESPCODE {HTTP200, HTTP400, HTTP404, HTTP500}; +typedef enum RESPCODE RESPCODE; #define CONTENT_TYPE "Content-Type: %s\r\n" #define CONTENT_LEN "Content-Length: %d\r\n"