Commit 2dcc288a404fba348269a1aa9d23d003d22fd62b

Authored by Georg Hopp
1 parent 96cd6914

some latest work

  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:
  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:
  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:
  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:
  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:
  1 +#include "logger.h"
  2 +
  3 +void
  4 +logger_add(LOGGER this, logger_logfnct logfunc) {
  5 + if (this->logfncts_count < MAX_LOG_FNCTS) {
  6 + this->logfncts[this->logfncts_count] = logfunc;
  7 + this->logfncts_count++;
  8 + }
  9 +}
  10 +
  11 +// vim: set ts=4 sw=4:
  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:
  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