diff --git a/Makefile.am b/Makefile.am index 54bf88f..bc54517 100644 --- a/Makefile.am +++ b/Makefile.am @@ -4,7 +4,8 @@ ACLOCAL_AMFLAGS = -I m4 #create_token_SOURCES = base64.c createToken.c #create_token_LDADD = src/libtoken.la $(LIBOBJS) #create_token_CFLAGS = -Wall -I include -# -#EXTRA_DIST = base64.h + + +EXTRA_DIST = include SUBDIRS = src tests diff --git a/doc/cclass-thoughts.c b/doc/cclass-thoughts.c index 3f375c4..5b9a4f6 100644 --- a/doc/cclass-thoughts.c +++ b/doc/cclass-thoughts.c @@ -1,4 +1,13 @@ /* + * Klassen sind eine Vereinigung von Daten und der Art wie diese auf + * messages reagieren. Oft reagieren Sie auf eine message identisch, aber + * die Details koennen variieren. Ein beispiel dafuer waere die message + * "fahre an einen bestimmten Ort". Die meisten Objekte die auf diese + * message reagieren koennen brauchen dafuer ein Rad...ein Luftschiff + * allerdings faehrt auch (sprachliche definition) benoetigt dafuer aber + * kein Rad. Das Ergebnis der message ist allerdings das gleiche wenn + * alles korrekt functioniert. Das Objekt erreicht das definierte Ziel. + * * Was wir unter C tun müssen ist separate definition von Interface und * und Daten sowie Methoden....das Interface ist dabei immer verantwortlich * dafür die zur Klasse gehörende Implementation einer Methode aufzurufen. @@ -67,7 +76,7 @@ void * draw(const __SHAPE_PTR shape) } } -// === KLASSEN IMPLEMENTATION ======== +// === KLASSEN INITIALIZATION ======== static void draw(CIRCLE * this); diff --git a/include/server.h b/include/server.h index 96a5248..2352b8f 100644 --- a/include/server.h +++ b/include/server.h @@ -21,7 +21,7 @@ MOVE_SIZE(sizeof(((server)->conns)[0]),(idx))) -typedef void (*server_read_hook)(const char *); +typedef void (*server_read_hook)(const char *, size_t); CLASS(SERVER) { LOGGER logger; diff --git a/src/Makefile.am b/src/Makefile.am index 7e4bde3..c1cf958 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -3,8 +3,9 @@ ACLOCAL_AMFLAGS = -I m4 CCLASS = cclass.c SOCKET = socket.c socket/accept.c socket/connect.c socket/listen.c SERVER = server.c server/run.c server/close_conn.c +LOGGER = logger.c logger/add.c logger/log.c logger/syslog.c bin_PROGRAMS = testserver -testserver_SOURCES = testserver.c $(CCLASS) $(SOCKET) $(SERVER) signalHandling.c logger.c +testserver_SOURCES = testserver.c $(CCLASS) $(SOCKET) $(SERVER) $(LOGGER) signalHandling.c testserver_CFLAGS = -Wall -I ../include diff --git a/src/cclass.c b/src/cclass.c index b896614..3f02a69 100644 --- a/src/cclass.c +++ b/src/cclass.c @@ -34,7 +34,7 @@ void * _new(const CCLASS _class, ...) { const CCLASS class = _class; - void * object = calloc(1, class->size + sizeof(CCLASS)); + void * object = calloc(1, class->size + sizeof(void *)); * (const struct _CCLASS **)object = class; object += sizeof(CCLASS); @@ -86,16 +86,16 @@ clear(void * _object) } void -delete(void * _object) +delete(void ** _object) { - const CCLASS * class = (*(void**)_object) - sizeof(CCLASS); + const CCLASS * class = (*_object) - sizeof(CCLASS); - if (*(void**)_object && *class && (*class)->__destruct) { - (*class)->__destruct(*(void**)_object); + if (*_object && *class && (*class)->__destruct) { + (*class)->__destruct(*_object); } free((void *)class); - *(void**)_object = NULL; + *_object = NULL; } void diff --git a/src/logger.c b/src/logger.c index 3f1a104..96ad785 100644 --- a/src/logger.c +++ b/src/logger.c @@ -1,33 +1,12 @@ -#define _ISOC99_SOURCE - -#include -#include -#include - #include "logger.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 -}; +extern void logger_syslog(int level, const char * msg); INIT_CLASS(LOGGER); -static void -logger_syslog(int level, const char * msg) -{ - syslog(priority[level], "%s", msg); -} - __construct(LOGGER) { - this->logfncts[0] = logger_syslog; + this->logfncts[0] = logger_syslog; this->logfncts_count = 1; } @@ -36,34 +15,4 @@ __jsonConst(LOGGER) {} __toJson(LOGGER) {} __clear(LOGGER) {} -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++; - } -} - -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: diff --git a/src/server/run.c b/src/server/run.c index 976af4b..90bfd52 100644 --- a/src/server/run.c +++ b/src/server/run.c @@ -14,7 +14,7 @@ static int -server_select(SERVER this) { +server_poll(SERVER this) { int events; /* @@ -73,8 +73,7 @@ server_read(SERVER this) for (i=1; infds; i++) { if (0 != ((this->fds)[i].revents & POLLIN)) { - memset(buffer, 0, 1024); - switch (_read = read((this->fds)[i].fd, buffer, 1023)) { + switch (_read = read((this->fds)[i].fd, buffer, 1024)) { case 0: /* * normal close: write remaining data @@ -92,7 +91,7 @@ server_read(SERVER this) default: (this->fds)[i].revents |= POLLIN; if (NULL != this->read_hook) { - this->read_hook(buffer); + this->read_hook(buffer, _read); } break; } @@ -117,7 +116,7 @@ server_run(SERVER this) * @TODO take return value of poll into account with * further handling! */ - events = server_select(this); + events = server_poll(this); if (doShutdown) break; /* diff --git a/src/testserver.c b/src/testserver.c index d08f85a..96bcba3 100644 --- a/src/testserver.c +++ b/src/testserver.c @@ -1,13 +1,19 @@ #include #include +#include #include "server.h" #include "signalHandling.h" static void -read_hook(const char * _buffer) +read_hook(const char * _buffer, size_t size) { - printf("%s\n", _buffer); + char buffer[1025]; + + memset(buffer, 0, 1025); + snprintf(buffer, size, _buffer); + + printf("%s\n", buffer); } int diff --git a/tests/Makefile.am b/tests/Makefile.am index 4b899ef..7fe0217 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -6,7 +6,8 @@ check_PROGRAMS = cclassTest loggerTest socketTest serverTest COMMON = runtest.c ../src/cclass.c CCLASS = $(COMMON) mock/class.c -LOGGER = $(COMMON) ../src/logger.c +LOGGER = $(COMMON) ../src/logger.c ../src/logger/add.c \ + ../src/logger/log.c ../src/logger/syslog.c SOCKET = $(LOGGER) ../src/socket.c ../src/socket/listen.c \ ../src/socket/accept.c ../src/socket/connect.c SERVER = $(SOCKET) ../src/server.c ../src/server/run.c \ diff --git a/tests/serverTest.c b/tests/serverTest.c index fb314a7..3eae940 100644 --- a/tests/serverTest.c +++ b/tests/serverTest.c @@ -17,13 +17,15 @@ int level = -1; char msg[1024]; -char buffer[1024]; +char buffer[1025]; static void -read_hook(const char * _buffer) +read_hook(const char * _buffer, size_t size) { + memset(buffer, 0, 1025); + if (NULL != _buffer) { - strncpy(buffer, _buffer, 1023); + strncpy(buffer, _buffer, 1024>size? size : 1024); } doShutdown = 1; @@ -86,7 +88,6 @@ testDummy() { SOCK con; pid_t pid; - int status; pid = fork();