diff --git a/include/utils/memory.h b/include/utils/memory.h index 105ff1d..4755cac 100644 --- a/include/utils/memory.h +++ b/include/utils/memory.h @@ -23,8 +23,12 @@ #ifndef __UTILS_MEMORY_H__ #define __UTILS_MEMORY_H__ +#define CSTRA(val) val, sizeof(val)-1 //!< Const STRing Argument + #define FREE(val) (ffree((void**)&(val))) void ffree(void **); #endif // __UTILS_MEMORY_H__ + +// vim: set ts=4 sw=4: diff --git a/src/http/message/has_keep_alive.c b/src/http/message/has_keep_alive.c index e92e575..c499e8b 100644 --- a/src/http/message/has_keep_alive.c +++ b/src/http/message/has_keep_alive.c @@ -28,6 +28,8 @@ #include "http/request.h" #include "http/header.h" +#include "utils/memory.h" + #ifndef TRUE #define TRUE 1 #endif @@ -43,10 +45,7 @@ httpMessageHasKeepAlive(HttpMessage message) size_t size; char * value; - header = httpHeaderGet( - &(message->header), - "connection", - sizeof("connection")-1); + header = httpHeaderGet(&(message->header), CSTRA("connection")); if (NULL == header) { return 0; diff --git a/src/http/response/304.c b/src/http/response/304.c index b1a591b..28fa1aa 100644 --- a/src/http/response/304.c +++ b/src/http/response/304.c @@ -29,6 +29,7 @@ #include "http/message.h" #include "http/header.h" +#include "utils/memory.h" HttpResponse httpResponse304( @@ -47,23 +48,11 @@ httpResponse304( message->body = NULL; httpHeaderAdd(&(message->header), - new(HttpHeader, - "Content-Type", - sizeof("Content-Type")-1, - mime, - nmime)); + new(HttpHeader, CSTRA("Content-Type"), mime, nmime)); httpHeaderAdd(&(message->header), - new(HttpHeader, - "ETag", - sizeof("ETag")-1, - etag, - netag)); + new(HttpHeader, CSTRA("ETag"), etag, netag)); httpHeaderAdd(&(message->header), - new(HttpHeader, - "Last-Modified", - sizeof("Last-Modified")-1, - mtime, - nmtime)); + new(HttpHeader, CSTRA("Last-Modified"), mtime, nmtime)); return response; } diff --git a/src/http/response/403.c b/src/http/response/403.c index 611f271..ded0e4d 100644 --- a/src/http/response/403.c +++ b/src/http/response/403.c @@ -38,8 +38,6 @@ httpResponse403() { HttpResponse response; HttpMessage message; - char buffer[200]; - size_t nbuf; response = new(HttpResponse, "HTTP/1.1", 403, "Forbidden"); message = (HttpMessage)response; @@ -48,15 +46,6 @@ httpResponse403() message->nbody = 0; message->body = NULL; - nbuf = sprintf(buffer, "%d", message->nbody); - - httpHeaderAdd(&(message->header), - new(HttpHeader, - "Content-Length", - sizeof("Content-Length")-1, - buffer, - nbuf)); - return response; } diff --git a/src/http/response/404.c b/src/http/response/404.c index e17ac1c..eb76df7 100644 --- a/src/http/response/404.c +++ b/src/http/response/404.c @@ -32,6 +32,7 @@ #include "http/message.h" #include "http/header.h" +#include "utils/memory.h" #define RESP_DATA "\n" \ "header), - new(HttpHeader, - "Content-Type", - sizeof("Content-Type")-1, - "text/html", - sizeof("text/html")-1)); + new(HttpHeader, CSTRA("Content-Type"), CSTRA("text/html"))); message->type = HTTP_MESSAGE_BUFFERED; message->nbody = sizeof(RESP_DATA) - 1; message->body = malloc(sizeof(RESP_DATA)); memcpy(message->body, RESP_DATA, sizeof(RESP_DATA)); - nbuf = sprintf(buffer, "%d", message->nbody); - - httpHeaderAdd(&(message->header), - new(HttpHeader, - "Content-Length", - sizeof("Content-Length")-1, - buffer, - nbuf)); - return response; } diff --git a/src/http/response/asset.c b/src/http/response/asset.c index 1641708..862ce15 100644 --- a/src/http/response/asset.c +++ b/src/http/response/asset.c @@ -33,6 +33,8 @@ #include "http/message.h" #include "http/header.h" +#include "utils/memory.h" + HttpResponse httpResponseAsset( @@ -47,8 +49,6 @@ httpResponseAsset( size_t netag; char mtime[200]; size_t nmtime; - char clen[200]; - size_t nclen; struct stat st; HttpResponse response; HttpMessage message; @@ -72,32 +72,12 @@ httpResponseAsset( message->handle = handle; message->nbody = st.st_size; - nclen = sprintf(clen, "%d", message->nbody); - - httpHeaderAdd(&(message->header), - new(HttpHeader, - "Content-Type", - sizeof("Content-Type")-1, - mime, - nmime)); httpHeaderAdd(&(message->header), - new(HttpHeader, - "Content-Length", - sizeof("Content-Length")-1, - clen, - nclen)); + new(HttpHeader, CSTRA("Content-Type"), mime, nmime)); httpHeaderAdd(&(message->header), - new(HttpHeader, - "ETag", - sizeof("ETag")-1, - etag, - netag)); + new(HttpHeader, CSTRA("ETag"), etag, netag)); httpHeaderAdd(&(message->header), - new(HttpHeader, - "Last-Modified", - sizeof("Last-Modified")-1, - mtime, - nmtime)); + new(HttpHeader, CSTRA("Last-Modified"), mtime, nmtime)); return response; } diff --git a/src/http/response/login_form.c b/src/http/response/login_form.c index 8e04b1b..c2f790b 100644 --- a/src/http/response/login_form.c +++ b/src/http/response/login_form.c @@ -33,6 +33,8 @@ #include "http/message.h" #include "http/header.h" +#include "utils/memory.h" + #define RESP_DATA "
" \ "" \ "" \ @@ -41,20 +43,14 @@ HttpResponse httpResponseLoginForm() { - char buffer[200]; HttpResponse response; HttpMessage message; - size_t nbuf; response = new(HttpResponse, "HTTP/1.1", 200, "OK"); message = (HttpMessage)response; httpHeaderAdd(&(message->header), - new(HttpHeader, - "Content-Type", - sizeof("Content-Type")-1, - "text/html", - sizeof("text/html")-1)); + new(HttpHeader, CSTRA("Content-Type"), CSTRA("text/html"))); message->type = HTTP_MESSAGE_BUFFERED; @@ -62,15 +58,6 @@ httpResponseLoginForm() message->body = malloc(message->nbody); memcpy(message->body, RESP_DATA, message->nbody); - nbuf = sprintf(buffer, "%d", message->nbody); - - httpHeaderAdd(&(message->header), - new(HttpHeader, - "Content-Length", - sizeof("Content-Length")-1, - buffer, - nbuf)); - return response; } diff --git a/src/http/response/me.c b/src/http/response/me.c index 3c6a333..47bff72 100644 --- a/src/http/response/me.c +++ b/src/http/response/me.c @@ -33,6 +33,8 @@ #include "http/message.h" #include "http/header.h" +#include "utils/memory.h" + #define RESP_DATA "\n" \ "header), - new(HttpHeader, - "Content-Type", - sizeof("Content-Type")-1, - "text/html", - sizeof("text/html")-1)); + new(HttpHeader, CSTRA("Content-Type"), CSTRA("text/html"))); httpHeaderAdd(&(message->header), - new(HttpHeader, - "Set-Cookie", - sizeof("Set-Cookie")-1, - "name=\"Georg Hopp\"", - sizeof("name=\"Georg Hopp\"")-1)); + new(HttpHeader, CSTRA("Set-Cookie"), CSTRA("name=Georg+Hopp"))); httpHeaderAdd(&(message->header), - new(HttpHeader, - "Set-Cookie", - sizeof("Set-Cookie")-1, - "profession=\"coder\"", - sizeof("profession=\"coder\"")-1)); + new(HttpHeader, CSTRA("Set-Cookie"), CSTRA("profession=coder"))); message->type = HTTP_MESSAGE_BUFFERED; message->nbody = sizeof(RESP_DATA)-1-2+strlen(uname); //!< the two are the %s @@ -157,15 +145,6 @@ httpResponseMe(char * uname) sprintf(message->body, RESP_DATA, uname); //memcpy(message->body, RESP_DATA, sizeof(RESP_DATA)-1); - nbuf = sprintf(buffer, "%d", message->nbody); - - httpHeaderAdd(&(message->header), - new(HttpHeader, - "Content-Length", - sizeof("Content-Length")-1, - buffer, - nbuf)); - return response; } diff --git a/src/http/response/randval.c b/src/http/response/randval.c index c9a1108..059effa 100644 --- a/src/http/response/randval.c +++ b/src/http/response/randval.c @@ -33,6 +33,8 @@ #include "http/message.h" #include "http/header.h" +#include "utils/memory.h" + #define RESP_DATA "{\"ctime\":%ld,\"vnext\":%ld,\"value\":\"%02d\"}" HttpResponse @@ -48,11 +50,7 @@ httpResponseRandval(time_t ctime, int value) message = (HttpMessage)response; httpHeaderAdd(&(message->header), - new(HttpHeader, - "Content-Type", - sizeof("Content-Type")-1, - "application/json", - sizeof("application/json")-1)); + new(HttpHeader, CSTRA("Content-Type"), CSTRA("application/json"))); message->type = HTTP_MESSAGE_BUFFERED; @@ -64,15 +62,6 @@ httpResponseRandval(time_t ctime, int value) message->body = malloc(nbuf); memcpy(message->body, buffer, nbuf); - nbuf = sprintf(buffer, "%d", message->nbody); - - httpHeaderAdd(&(message->header), - new(HttpHeader, - "Content-Length", - sizeof("Content-Length")-1, - buffer, - nbuf)); - return response; } diff --git a/src/http/worker/add_common_header.c b/src/http/worker/add_common_header.c index 9b0a97c..36fbf6d 100644 --- a/src/http/worker/add_common_header.c +++ b/src/http/worker/add_common_header.c @@ -7,49 +7,45 @@ #include "http/message.h" #include "http/response.h" +#include "utils/memory.h" + void httpWorkerAddCommonHeader(HttpMessage request, HttpMessage response) { time_t t; struct tm * tmp; char buffer[200]; - size_t ndate; + size_t nbuf; if (httpMessageHasKeepAlive(request)) { httpHeaderAdd( &(response->header), - new(HttpHeader, - "Connection", - sizeof("Connection")-1, - "Keep-Alive", - sizeof("Keep-Alive")-1)); + new(HttpHeader, CSTRA("Connection"), CSTRA("Keep-Alive"))); } else { httpHeaderAdd( &(response->header), - new(HttpHeader, - "Connection", - sizeof("Connection")-1, - "Close", - sizeof("Close")-1)); + new(HttpHeader, CSTRA("Connection"), CSTRA("Close"))); } httpHeaderAdd(&(response->header), - new(HttpHeader, - "Server", - sizeof("Server")-1, - "testserver", - sizeof("testserver")-1)); - - t = time(NULL); - tmp = localtime(&t); - ndate = strftime(buffer, sizeof(buffer), "%a, %d %b %Y %T %Z", tmp); + new(HttpHeader, CSTRA("Server"), CSTRA("testserver"))); + + switch(((HttpResponse)response)->status) { + case 304: + break; + + default: + nbuf = sprintf(buffer, "%d", response->nbody); + httpHeaderAdd(&(response->header), + new(HttpHeader, CSTRA("Content-Length"), buffer, nbuf)); + } + + t = time(NULL); + tmp = localtime(&t); + nbuf = strftime(buffer, sizeof(buffer), "%a, %d %b %Y %T %Z", tmp); httpHeaderAdd(&(response->header), - new(HttpHeader, - "Date", - sizeof("Date")-1, - buffer, - ndate)); + new(HttpHeader, CSTRA("Date"), buffer, nbuf)); } // vim: set ts=4 sw=4: diff --git a/src/http/worker/get_asset.c b/src/http/worker/get_asset.c index 3a03281..180729b 100644 --- a/src/http/worker/get_asset.c +++ b/src/http/worker/get_asset.c @@ -5,6 +5,8 @@ #include "http/request.h" #include "http/response.h" +#include "utils/memory.h" + HttpMessage httpWorkerGetAsset( HttpRequest request, @@ -18,8 +20,7 @@ httpWorkerGetAsset( header = httpHeaderGet( &(((HttpMessage)request)->header), - "If-None-Match", - sizeof("If-None-Match")-1); + CSTRA("If-None-Match")); if (NULL == header) { match = ""; diff --git a/src/http/worker/process.c b/src/http/worker/process.c index 542a35e..c1d5e95 100644 --- a/src/http/worker/process.c +++ b/src/http/worker/process.c @@ -36,6 +36,8 @@ #include "http/parser.h" #include "session.h" +#include "utils/memory.h" + HttpMessage httpWorkerGetAsset(HttpRequest, const char *, const char *, size_t); void httpWorkerAddCommonHeader(HttpMessage, HttpMessage); @@ -58,8 +60,7 @@ httpWorkerProcess(HttpWorker this, int fd) HttpMessage response = NULL; HttpHeader cookie = httpHeaderGet( &(rmessage->header), - "cookie", - sizeof("Cookie")-1); + CSTRA("cookie")); if (NULL == this->session && NULL != cookie) { int i; @@ -111,11 +112,7 @@ httpWorkerProcess(HttpWorker this, int fd) httpHeaderAdd( &(response->header), - new(HttpHeader, - "Set-Cookie", - sizeof("Set-Cookie")-1, - buffer, - nbuf)); + new(HttpHeader, CSTRA("Set-Cookie"), buffer, nbuf)); } } @@ -144,16 +141,14 @@ httpWorkerProcess(HttpWorker this, int fd) response = httpWorkerGetAsset( request, "./assets/waldschrat.jpg", - "image/jpeg", - sizeof("image/jpeg")-1); + CSTRA("image/jpeg")); } if (0 == strcmp("/jquery/", request->uri)) { response = httpWorkerGetAsset( request, "./assets/jquery-1.7.1.min.js", - "text/javascript", - sizeof("text/javascript")-1); + CSTRA("text/javascript")); } } diff --git a/src/server/poll.c b/src/server/poll.c index 4ed8a98..49839f8 100644 --- a/src/server/poll.c +++ b/src/server/poll.c @@ -51,7 +51,6 @@ serverPoll(Server this) { if (fda < fdb) { memcpy(fda, fdb, sizeof(struct pollfd)); - //memset(fdb, 0, sizeof(struct pollfd)); // this might be unneccessary fdb--; this->nfds--; } diff --git a/src/socket.c b/src/socket.c index 3106861..3603513 100644 --- a/src/socket.c +++ b/src/socket.c @@ -56,7 +56,7 @@ socketCtor(void * _this, va_list * params) } //! Make the socket REUSE a TIME_WAIT socket - setsockopt(this->handle, SOL_SOCKET, SO_REUSEADDR, &reUse, sizeof (reUse)); + setsockopt(this->handle, SOL_SOCKET, SO_REUSEADDR, &reUse, sizeof(reUse)); return 0; }