Browse Source

changes related to server code

master
Georg Hopp 14 years ago
parent
commit
1884143dbf
  1. 5
      Makefile.am
  2. 11
      doc/cclass-thoughts.c
  3. 2
      include/server.h
  4. 3
      src/Makefile.am
  5. 12
      src/cclass.c
  6. 55
      src/logger.c
  7. 9
      src/server/run.c
  8. 10
      src/testserver.c
  9. 3
      tests/Makefile.am
  10. 9
      tests/serverTest.c

5
Makefile.am

@ -4,7 +4,8 @@ ACLOCAL_AMFLAGS = -I m4
#create_token_SOURCES = base64.c createToken.c #create_token_SOURCES = base64.c createToken.c
#create_token_LDADD = src/libtoken.la $(LIBOBJS) #create_token_LDADD = src/libtoken.la $(LIBOBJS)
#create_token_CFLAGS = -Wall -I include #create_token_CFLAGS = -Wall -I include
#
#EXTRA_DIST = base64.h
EXTRA_DIST = include
SUBDIRS = src tests SUBDIRS = src tests

11
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 * Was wir unter C tun müssen ist separate definition von Interface und
* und Daten sowie Methoden....das Interface ist dabei immer verantwortlich * und Daten sowie Methoden....das Interface ist dabei immer verantwortlich
* dafür die zur Klasse gehörende Implementation einer Methode aufzurufen. * 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); static void draw(CIRCLE * this);

2
include/server.h

@ -21,7 +21,7 @@
MOVE_SIZE(sizeof(((server)->conns)[0]),(idx))) 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) { CLASS(SERVER) {
LOGGER logger; LOGGER logger;

3
src/Makefile.am

@ -3,8 +3,9 @@ ACLOCAL_AMFLAGS = -I m4
CCLASS = cclass.c CCLASS = cclass.c
SOCKET = socket.c socket/accept.c socket/connect.c socket/listen.c SOCKET = socket.c socket/accept.c socket/connect.c socket/listen.c
SERVER = server.c server/run.c server/close_conn.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 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 testserver_CFLAGS = -Wall -I ../include

12
src/cclass.c

@ -34,7 +34,7 @@ void *
_new(const CCLASS _class, ...) _new(const CCLASS _class, ...)
{ {
const CCLASS class = _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; * (const struct _CCLASS **)object = class;
object += sizeof(CCLASS); object += sizeof(CCLASS);
@ -86,16 +86,16 @@ clear(void * _object)
} }
void 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); free((void *)class);
*(void**)_object = NULL;
*_object = NULL;
} }
void void

55
src/logger.c

@ -1,33 +1,12 @@
#define _ISOC99_SOURCE
#include <syslog.h>
#include <stdio.h>
#include <string.h>
#include "logger.h" #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); INIT_CLASS(LOGGER);
static void
logger_syslog(int level, const char * msg)
{
syslog(priority[level], "%s", msg);
}
__construct(LOGGER) __construct(LOGGER)
{ {
this->logfncts[0] = logger_syslog;
this->logfncts[0] = logger_syslog;
this->logfncts_count = 1; this->logfncts_count = 1;
} }
@ -36,34 +15,4 @@ __jsonConst(LOGGER) {}
__toJson(LOGGER) {} __toJson(LOGGER) {}
__clear(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: // vim: set ts=4 sw=4:

9
src/server/run.c

@ -14,7 +14,7 @@
static static
int int
server_select(SERVER this) {
server_poll(SERVER this) {
int events; int events;
/* /*
@ -73,8 +73,7 @@ server_read(SERVER this)
for (i=1; i<this->nfds; i++) { for (i=1; i<this->nfds; i++) {
if (0 != ((this->fds)[i].revents & POLLIN)) { 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: case 0:
/* /*
* normal close: write remaining data * normal close: write remaining data
@ -92,7 +91,7 @@ server_read(SERVER this)
default: default:
(this->fds)[i].revents |= POLLIN; (this->fds)[i].revents |= POLLIN;
if (NULL != this->read_hook) { if (NULL != this->read_hook) {
this->read_hook(buffer);
this->read_hook(buffer, _read);
} }
break; break;
} }
@ -117,7 +116,7 @@ server_run(SERVER this)
* @TODO take return value of poll into account with * @TODO take return value of poll into account with
* further handling! * further handling!
*/ */
events = server_select(this);
events = server_poll(this);
if (doShutdown) break; if (doShutdown) break;
/* /*

10
src/testserver.c

@ -1,13 +1,19 @@
#include <stdio.h> #include <stdio.h>
#include <socket.h> #include <socket.h>
#include <string.h>
#include "server.h" #include "server.h"
#include "signalHandling.h" #include "signalHandling.h"
static void 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 int

3
tests/Makefile.am

@ -6,7 +6,8 @@ check_PROGRAMS = cclassTest loggerTest socketTest serverTest
COMMON = runtest.c ../src/cclass.c COMMON = runtest.c ../src/cclass.c
CCLASS = $(COMMON) mock/class.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 \ SOCKET = $(LOGGER) ../src/socket.c ../src/socket/listen.c \
../src/socket/accept.c ../src/socket/connect.c ../src/socket/accept.c ../src/socket/connect.c
SERVER = $(SOCKET) ../src/server.c ../src/server/run.c \ SERVER = $(SOCKET) ../src/server.c ../src/server/run.c \

9
tests/serverTest.c

@ -17,13 +17,15 @@
int level = -1; int level = -1;
char msg[1024]; char msg[1024];
char buffer[1024];
char buffer[1025];
static void static void
read_hook(const char * _buffer)
read_hook(const char * _buffer, size_t size)
{ {
memset(buffer, 0, 1025);
if (NULL != _buffer) { if (NULL != _buffer) {
strncpy(buffer, _buffer, 1023);
strncpy(buffer, _buffer, 1024>size? size : 1024);
} }
doShutdown = 1; doShutdown = 1;
@ -86,7 +88,6 @@ testDummy()
{ {
SOCK con; SOCK con;
pid_t pid; pid_t pid;
int status;
pid = fork(); pid = fork();

Loading…
Cancel
Save