Browse Source

some latest work

master
Georg Hopp 14 years ago
parent
commit
2dcc288a40
  1. 23
      include/http/request.h
  2. 32
      include/http/request_parser.h
  3. 17
      include/http/request_queue.h
  4. 38
      src/http/request.c
  5. 51
      src/http/request_parser.c
  6. 11
      src/logger/add.c
  7. 30
      src/logger/log.c
  8. 20
      src/logger/syslog.c

23
include/http/request.h

@ -0,0 +1,23 @@
#ifndef __HTTP_REQUEST_H__
#define __HTTP_REQUEST_H__
#include "cclass.h"
CLASS(HTTP_REQUEST) {
char * http_version;
char * uri;
char * method;
struct {
char * name;
char * value;
} header[128];
char * body;
unsigned char done;
};
#endif /* __HTTP_REQUEST_H__ */
// vim: set ts=4 sw=4:

32
include/http/request_parser.h

@ -0,0 +1,32 @@
#ifndef __HTTP_REQUEST_PARSER_H__
#define __HTTP_REQUEST_PARSER_H__
#include "cclass.h"
#include "server.h"
#include "http/request.h"
#include "http/request_queue.h"
#define HTTP_REQUEST_PARSER_READ_CHUNK 1024
#define HTTP_REQUEST_PARSER_START 0
#define HTTP_REQUEST_PARSER_REQUEST_LINE_DONE 1
#define HTTP_REQUEST_PARSER_HEADERS_DONE 2
#define HTTP_REQUEST_PARSER_DONE 3
CLASS(HTTP_REQUEST_PARSER) {
server_read_hook get_data;
char * buffer;
size_t buffer_used;
HTTP_REQUEST_QUEUE request_queue;
unsigned char state;
};
void http_request_parser_parse(const char * buffer, size_t size);
#endif /* __HTTP_REQUEST_PARSER_H__ */
// vim: set ts=4 sw=4:

17
include/http/request_queue.h

@ -0,0 +1,17 @@
#ifndef __HTTP_REQUEST_QUEUE_H__
#define __HTTP_REQUEST_QUEUE_H__
#include "cclass.h"
#include "http/request.h"
#define HTTP_REQUEST_QUEUE_MAX 1024
CLASS(HTTP_REQUEST_QUEUE) {
REQUEST requests[HTTP_REQUEST_QUEUE_MAX];
size_t nrequests;
}
#endif /* __HTTP_REQUEST_QUEUE_H__ */
// vim: set ts=4 sw=4:

38
src/http/request.c

@ -0,0 +1,38 @@
#include <stdlib.h>
#include "cclass.h"
#include "http/request.h"
INIT_CLASS(HTTP_REQUEST);
static void
_free(void ** data)
{
if (NULL != *data) {
free(*data);
}
}
__construct(LOGGER) {}
__destruct(LOGGER)
{
int i;
_free(&(this->http_version));
_free(&(this->uri));
_free(&(this->method));
for (i=0; i<128; i++) {
_free(&((this->header)[i].name));
_free(&((this->header)[i].value));
}
_free(&(this->body));
}
__jsonConst(LOGGER) {}
__toJson(LOGGER) {}
__clear(LOGGER) {}
// vim: set ts=4 sw=4:

51
src/http/request_parser.c

@ -0,0 +1,51 @@
#include <stdlib.h>
#include "cclass.h"
#include "http/request.h"
#include "http/request_parser.h"
INIT_CLASS(HTTP_REQUEST_PARSER);
__construct(LOGGER)
{
this->request_queue = va_arg(*params, HTTP_REQUEST_QUEUE);
this->buffer = malloc(HTTP_REQUEST_PARSER_READ_CHUNK);
}
__destruct(LOGGER)
{
free(this->buffer);
}
__jsonConst(LOGGER) {}
__toJson(LOGGER) {}
__clear(LOGGER) {}
static void
get_data(HTTP_REQUEST_PARSER this, const char * data, size_t size)
{
size_t remaining, chunks;
remaining = this->buffer_used % HTTP_REQUEST_PARSER_READ_CHUNK;
chunks = this->buffer_used / HTTP_REQUEST_PARSER_READ_CHUNK;
chunks = (0 == remaining) ? chunks++ : chunks;
if (size > remaining) {
this->buffer =
realloc(this->buffer, chunks * HTTP_REQUEST_PARSER_READ_CHUNK);
}
memcpy(this->buffer + this->buffer_used, data, size);
this->buffer_used += size;
}
void http_request_parser_parse(const char * data, size_t size)
{
}
// vim: set ts=4 sw=4:

11
src/logger/add.c

@ -0,0 +1,11 @@
#include "logger.h"
void
logger_add(LOGGER this, logger_logfnct logfunc) {
if (this->logfncts_count < MAX_LOG_FNCTS) {
this->logfncts[this->logfncts_count] = logfunc;
this->logfncts_count++;
}
}
// vim: set ts=4 sw=4:

30
src/logger/log.c

@ -0,0 +1,30 @@
#define _ISOC99_SOURCE
#include <stdio.h>
#include <string.h>
#include "logger.h"
void
logger_log(LOGGER this, int level, const char * message, ...) {
va_list args;
char buffer[1025];
logger_logfnct * logfnct;
int maxBuf = sizeof(buffer)/sizeof(buffer[0]);
memset(buffer, 0, maxBuf);
va_start(args, message);
vsnprintf(buffer, 1024, message, args);
va_end(args);
logfnct = this->logfncts;
while (NULL != *logfnct) {
(*logfnct)(level, buffer);
logfnct++;
}
}
// vim: set ts=4 sw=4:

20
src/logger/syslog.c

@ -0,0 +1,20 @@
#include <syslog.h>
const int priority[] = {
LOG_USER | LOG_EMERG,
LOG_USER | LOG_ALERT,
LOG_USER | LOG_CRIT,
LOG_USER | LOG_ERR,
LOG_USER | LOG_WARNING,
LOG_USER | LOG_NOTICE,
LOG_USER | LOG_INFO,
LOG_USER | LOG_DEBUG
};
void
logger_syslog(int level, const char * msg)
{
syslog(priority[level], "%s", msg);
}
// vim: set ts=4 sw=4:
Loading…
Cancel
Save