process.c 1.34 KB
#include "class.h"
#include "interface/class.h"

#include "http/worker.h"
#include "http/request/parser.h"

size_t
httpWorkerProcess(HttpWorker this, int fd)
{
	size_t size;

	if (0 < (size = httpRequestParserRead(this->parser, fd))) {
		int              i;
		HttpMessageQueue reqq  = this->parser->request_queue;
		HttpMessageQueue respq = this->writer->response_queue;

		for (i=0; i<reqq->nmsgs; i++) {
			/**
			 * @TODO: for now simply remove request and send not found.
			 * Make this sane.
			 */
			HttpRequest  request  = (HttpRequest)(reqq->msgs[i]);
			HttpMessage  response = NULL;

			if (0 == strcmp("GET", request->method) &&
					0 == strcmp("/me/", request->uri)) {
				response = (HttpMessage)httpResponseMe();
			}
			else if (0 == strcmp("GET", request->method) &&
					0 == strcmp("/image/", request->uri)) {
				response = (HttpMessage)httpResponseImage();
			}
			else {
				response = (HttpMessage)httpResponse404();
			}

			if (httpMessageHasKeepAlive(reqq->msgs[i])) {
				httpHeaderAdd(
						&(response->header),
						new(HttpHeader, "Connection", "Keep-Alive"));
			}
			else {
				httpHeaderAdd(
						&(response->header),
						new(HttpHeader, "Connection", "Close"));
			}

			respq->msgs[(respq->nmsgs)++] = response;
			response = NULL;
			delete(&(reqq->msgs[i]));
		}

		reqq->nmsgs = 0;
	}

	return size;
}

// vim: set ts=4 sw=4: