Showing
8 changed files
with
222 additions
and
0 deletions
include/http/request.h
0 → 100644
| 1 | +#ifndef __HTTP_REQUEST_H__ | |
| 2 | +#define __HTTP_REQUEST_H__ | |
| 3 | + | |
| 4 | +#include "cclass.h" | |
| 5 | + | |
| 6 | +CLASS(HTTP_REQUEST) { | |
| 7 | + char * http_version; | |
| 8 | + char * uri; | |
| 9 | + char * method; | |
| 10 | + | |
| 11 | + struct { | |
| 12 | + char * name; | |
| 13 | + char * value; | |
| 14 | + } header[128]; | |
| 15 | + | |
| 16 | + char * body; | |
| 17 | + | |
| 18 | + unsigned char done; | |
| 19 | +}; | |
| 20 | + | |
| 21 | +#endif /* __HTTP_REQUEST_H__ */ | |
| 22 | + | |
| 23 | +// vim: set ts=4 sw=4: | ... | ... |
include/http/request_parser.h
0 → 100644
| 1 | +#ifndef __HTTP_REQUEST_PARSER_H__ | |
| 2 | +#define __HTTP_REQUEST_PARSER_H__ | |
| 3 | + | |
| 4 | +#include "cclass.h" | |
| 5 | +#include "server.h" | |
| 6 | +#include "http/request.h" | |
| 7 | +#include "http/request_queue.h" | |
| 8 | + | |
| 9 | +#define HTTP_REQUEST_PARSER_READ_CHUNK 1024 | |
| 10 | + | |
| 11 | +#define HTTP_REQUEST_PARSER_START 0 | |
| 12 | +#define HTTP_REQUEST_PARSER_REQUEST_LINE_DONE 1 | |
| 13 | +#define HTTP_REQUEST_PARSER_HEADERS_DONE 2 | |
| 14 | +#define HTTP_REQUEST_PARSER_DONE 3 | |
| 15 | + | |
| 16 | + | |
| 17 | +CLASS(HTTP_REQUEST_PARSER) { | |
| 18 | + server_read_hook get_data; | |
| 19 | + | |
| 20 | + char * buffer; | |
| 21 | + size_t buffer_used; | |
| 22 | + | |
| 23 | + HTTP_REQUEST_QUEUE request_queue; | |
| 24 | + | |
| 25 | + unsigned char state; | |
| 26 | +}; | |
| 27 | + | |
| 28 | +void http_request_parser_parse(const char * buffer, size_t size); | |
| 29 | + | |
| 30 | +#endif /* __HTTP_REQUEST_PARSER_H__ */ | |
| 31 | + | |
| 32 | +// vim: set ts=4 sw=4: | ... | ... |
include/http/request_queue.h
0 → 100644
| 1 | +#ifndef __HTTP_REQUEST_QUEUE_H__ | |
| 2 | +#define __HTTP_REQUEST_QUEUE_H__ | |
| 3 | + | |
| 4 | +#include "cclass.h" | |
| 5 | +#include "http/request.h" | |
| 6 | + | |
| 7 | +#define HTTP_REQUEST_QUEUE_MAX 1024 | |
| 8 | + | |
| 9 | + | |
| 10 | +CLASS(HTTP_REQUEST_QUEUE) { | |
| 11 | + REQUEST requests[HTTP_REQUEST_QUEUE_MAX]; | |
| 12 | + size_t nrequests; | |
| 13 | +} | |
| 14 | + | |
| 15 | +#endif /* __HTTP_REQUEST_QUEUE_H__ */ | |
| 16 | + | |
| 17 | +// vim: set ts=4 sw=4: | ... | ... |
src/http/request.c
0 → 100644
| 1 | +#include <stdlib.h> | |
| 2 | + | |
| 3 | +#include "cclass.h" | |
| 4 | +#include "http/request.h" | |
| 5 | + | |
| 6 | +INIT_CLASS(HTTP_REQUEST); | |
| 7 | + | |
| 8 | +static void | |
| 9 | +_free(void ** data) | |
| 10 | +{ | |
| 11 | + if (NULL != *data) { | |
| 12 | + free(*data); | |
| 13 | + } | |
| 14 | +} | |
| 15 | + | |
| 16 | +__construct(LOGGER) {} | |
| 17 | + | |
| 18 | +__destruct(LOGGER) | |
| 19 | +{ | |
| 20 | + int i; | |
| 21 | + | |
| 22 | + _free(&(this->http_version)); | |
| 23 | + _free(&(this->uri)); | |
| 24 | + _free(&(this->method)); | |
| 25 | + | |
| 26 | + for (i=0; i<128; i++) { | |
| 27 | + _free(&((this->header)[i].name)); | |
| 28 | + _free(&((this->header)[i].value)); | |
| 29 | + } | |
| 30 | + | |
| 31 | + _free(&(this->body)); | |
| 32 | +} | |
| 33 | + | |
| 34 | +__jsonConst(LOGGER) {} | |
| 35 | +__toJson(LOGGER) {} | |
| 36 | +__clear(LOGGER) {} | |
| 37 | + | |
| 38 | +// vim: set ts=4 sw=4: | ... | ... |
src/http/request_parser.c
0 → 100644
| 1 | +#include <stdlib.h> | |
| 2 | + | |
| 3 | +#include "cclass.h" | |
| 4 | +#include "http/request.h" | |
| 5 | +#include "http/request_parser.h" | |
| 6 | + | |
| 7 | + | |
| 8 | +INIT_CLASS(HTTP_REQUEST_PARSER); | |
| 9 | + | |
| 10 | + | |
| 11 | +__construct(LOGGER) | |
| 12 | +{ | |
| 13 | + this->request_queue = va_arg(*params, HTTP_REQUEST_QUEUE); | |
| 14 | + | |
| 15 | + this->buffer = malloc(HTTP_REQUEST_PARSER_READ_CHUNK); | |
| 16 | +} | |
| 17 | + | |
| 18 | +__destruct(LOGGER) | |
| 19 | +{ | |
| 20 | + free(this->buffer); | |
| 21 | +} | |
| 22 | + | |
| 23 | +__jsonConst(LOGGER) {} | |
| 24 | +__toJson(LOGGER) {} | |
| 25 | +__clear(LOGGER) {} | |
| 26 | + | |
| 27 | + | |
| 28 | +static void | |
| 29 | +get_data(HTTP_REQUEST_PARSER this, const char * data, size_t size) | |
| 30 | +{ | |
| 31 | + size_t remaining, chunks; | |
| 32 | + | |
| 33 | + remaining = this->buffer_used % HTTP_REQUEST_PARSER_READ_CHUNK; | |
| 34 | + chunks = this->buffer_used / HTTP_REQUEST_PARSER_READ_CHUNK; | |
| 35 | + | |
| 36 | + chunks = (0 == remaining) ? chunks++ : chunks; | |
| 37 | + | |
| 38 | + if (size > remaining) { | |
| 39 | + this->buffer = | |
| 40 | + realloc(this->buffer, chunks * HTTP_REQUEST_PARSER_READ_CHUNK); | |
| 41 | + } | |
| 42 | + | |
| 43 | + memcpy(this->buffer + this->buffer_used, data, size); | |
| 44 | + this->buffer_used += size; | |
| 45 | +} | |
| 46 | + | |
| 47 | +void http_request_parser_parse(const char * data, size_t size) | |
| 48 | +{ | |
| 49 | +} | |
| 50 | + | |
| 51 | +// vim: set ts=4 sw=4: | ... | ... |
src/logger/add.c
0 → 100644
src/logger/log.c
0 → 100644
| 1 | +#define _ISOC99_SOURCE | |
| 2 | + | |
| 3 | +#include <stdio.h> | |
| 4 | +#include <string.h> | |
| 5 | + | |
| 6 | +#include "logger.h" | |
| 7 | + | |
| 8 | +void | |
| 9 | +logger_log(LOGGER this, int level, const char * message, ...) { | |
| 10 | + va_list args; | |
| 11 | + char buffer[1025]; | |
| 12 | + logger_logfnct * logfnct; | |
| 13 | + | |
| 14 | + int maxBuf = sizeof(buffer)/sizeof(buffer[0]); | |
| 15 | + | |
| 16 | + memset(buffer, 0, maxBuf); | |
| 17 | + | |
| 18 | + va_start(args, message); | |
| 19 | + vsnprintf(buffer, 1024, message, args); | |
| 20 | + va_end(args); | |
| 21 | + | |
| 22 | + logfnct = this->logfncts; | |
| 23 | + | |
| 24 | + while (NULL != *logfnct) { | |
| 25 | + (*logfnct)(level, buffer); | |
| 26 | + logfnct++; | |
| 27 | + } | |
| 28 | +} | |
| 29 | + | |
| 30 | +// vim: set ts=4 sw=4: | ... | ... |
src/logger/syslog.c
0 → 100644
| 1 | +#include <syslog.h> | |
| 2 | + | |
| 3 | +const int priority[] = { | |
| 4 | + LOG_USER | LOG_EMERG, | |
| 5 | + LOG_USER | LOG_ALERT, | |
| 6 | + LOG_USER | LOG_CRIT, | |
| 7 | + LOG_USER | LOG_ERR, | |
| 8 | + LOG_USER | LOG_WARNING, | |
| 9 | + LOG_USER | LOG_NOTICE, | |
| 10 | + LOG_USER | LOG_INFO, | |
| 11 | + LOG_USER | LOG_DEBUG | |
| 12 | +}; | |
| 13 | + | |
| 14 | +void | |
| 15 | +logger_syslog(int level, const char * msg) | |
| 16 | +{ | |
| 17 | + syslog(priority[level], "%s", msg); | |
| 18 | +} | |
| 19 | + | |
| 20 | +// vim: set ts=4 sw=4: | ... | ... |
Please
register
or
login
to post a comment