From f6de9deec5bf7ab8f95112286a9dfce716ecb461 Mon Sep 17 00:00:00 2001 From: Georg Hopp Date: Sat, 10 Mar 2012 01:06:41 +0100 Subject: [PATCH] some fixes i have done in server --- src/Makefile.am | 2 +- src/cbuf/skip_non_alpha.c | 2 +- src/http/parser/body.c | 4 +- src/http/parser/parse.c | 31 +++--- src/webgameserver.c | 196 -------------------------------------- 5 files changed, 20 insertions(+), 215 deletions(-) delete mode 100644 src/webgameserver.c diff --git a/src/Makefile.am b/src/Makefile.am index 3f687a0..7830b46 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -58,7 +58,7 @@ AM_CFLAGS = -Wall -I ../include/ bin_PROGRAMS = taskrambler -taskrambler_SOURCES = webgameserver.c \ +taskrambler_SOURCES = taskrambler.c \ $(IFACE) $(SOCKET) $(SERVER) $(LOGGER) $(MSG) $(REQ) \ $(WRITER) $(RESP) $(HEADER) $(PARSER) $(WORKER) $(CB) \ $(UTILS) $(MSGQ) $(SESSION) $(STREAM) diff --git a/src/cbuf/skip_non_alpha.c b/src/cbuf/skip_non_alpha.c index 0021d18..72ef3aa 100644 --- a/src/cbuf/skip_non_alpha.c +++ b/src/cbuf/skip_non_alpha.c @@ -27,7 +27,7 @@ void cbufSkipNonAlpha(Cbuf this) { - while(0 > this->bused && isalpha(*cbufGetRead(this))) + while(0 < this->bused && !isalpha(*cbufGetRead(this))) cbufIncRead(this, 1); } diff --git a/src/http/parser/body.c b/src/http/parser/body.c index 8557217..6901c8d 100644 --- a/src/http/parser/body.c +++ b/src/http/parser/body.c @@ -28,7 +28,7 @@ #include "http/parser.h" #include "cbuf.h" -#define MAX(a,b) (((a) > (b))? (a) : (b)) +#define MIN(a,b) (((a) < (b))? (a) : (b)) size_t httpParserBody(HttpParser this, const char * buf, size_t nbuf) @@ -37,7 +37,7 @@ httpParserBody(HttpParser this, const char * buf, size_t nbuf) HttpMessage current = this->current; if (current->dbody < current->nbody) { - len = MAX(current->nbody - current->dbody, nbuf); + len = MIN(current->nbody - current->dbody, nbuf); memcpy(current->body, buf, len); diff --git a/src/http/parser/parse.c b/src/http/parser/parse.c index 72d9db7..9bef455 100644 --- a/src/http/parser/parse.c +++ b/src/http/parser/parse.c @@ -120,23 +120,24 @@ httpParserParse(void * _this, Stream st) break; case HTTP_MESSAGE_HEADERS_DONE: - { - cbufIncRead( - this->buffer, - httpParserBody( - this, - cbufGetRead(this->buffer), - this->buffer->bused)); - - if (cbufIsEmpty(this->buffer)) { - cbufRelease(this->buffer); - this->ourLock = FALSE; - } + if (this->current->dbody == this->current->nbody) { + this->state = HTTP_MESSAGE_DONE; + break; + } - if (this->current->dbody == this->current->nbody) { - this->state = HTTP_MESSAGE_DONE; - } + if (cbufIsEmpty(this->buffer)) { + cbufRelease(this->buffer); + this->ourLock = FALSE; + cont = 0; + break; } + + cbufIncRead( + this->buffer, + httpParserBody( + this, + cbufGetRead(this->buffer), + this->buffer->bused)); break; case HTTP_MESSAGE_DONE: diff --git a/src/webgameserver.c b/src/webgameserver.c deleted file mode 100644 index 5125956..0000000 --- a/src/webgameserver.c +++ /dev/null @@ -1,196 +0,0 @@ -/** - * \file - * - * \author Georg Hopp - * - * \copyright - * Copyright (C) 2012 Georg Hopp - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "server.h" -#include "logger.h" -#include "http/worker.h" - -#include "interface/class.h" -#include "interface/logger.h" - -#include "utils/signalHandling.h" - -#define DEFAULT_SECS 10 -//#define DEFAULT_USECS (1000000 / HZ * 2) -//#define DEFAULT_SECS 1 -#define DEFAULT_USECS 0 - -void nullhandler() {} - -void daemonize(void); - -int -main() -{ - pid_t pid; - long psize = sysconf(_SC_PAGESIZE); - int status; - int shm; - struct randval * value; - - struct rlimit limit = {RLIM_INFINITY, RLIM_INFINITY}; - setrlimit(RLIMIT_CPU, &limit); - - getrlimit(RLIMIT_NOFILE, &limit); - limit.rlim_cur = limit.rlim_max; - setrlimit(RLIMIT_NOFILE, &limit); - - init_signals(); - - shm = shm_open("/fooshm", O_RDWR|O_CREAT, S_IRWXU); - ftruncate(shm, psize); - - switch((pid = fork())) { - case -1: - break; - - case 0: - { - sigset_t block_these, pause_mask; - struct sigaction s; - struct itimerval interval; - - value = mmap (0, sizeof(struct randval), PROT_READ|PROT_WRITE, - MAP_SHARED, shm, 0); - value->timestamp = 0; - value->value = 0; - - close(shm); - - // Block SIGALRM - sigemptyset(&block_these); - sigaddset(&block_these, SIGALRM); - sigprocmask(SIG_BLOCK, &block_these, &pause_mask); - - // Set up handler for SIGALRM - sigemptyset(&s.sa_mask); - sigaddset(&s.sa_mask, SIGINT); - s.sa_flags = 0; - s.sa_handler = nullhandler; - if (sigaction(SIGALRM, &s, NULL) < 0) { - perror("sigaction SIGALRM"); - exit (1); - } - - interval.it_value.tv_sec = DEFAULT_SECS; - interval.it_value.tv_usec = DEFAULT_USECS; - interval.it_interval.tv_sec = DEFAULT_SECS; - interval.it_interval.tv_usec = DEFAULT_USECS; - - setitimer(ITIMER_REAL, &interval, NULL); - - // child - while(!doShutdown) { - value->timestamp = time(NULL); - value->value = rand() % 100; - sigsuspend(&pause_mask); - } - - _exit(EXIT_SUCCESS); - } - - default: - { - Logger logger; - HttpWorker worker; - Server server; - - value = mmap (0, sizeof(int), PROT_READ|PROT_WRITE, - MAP_SHARED, shm, 0); - - shm_unlink("/fooshm"); - close(shm); - - logger = new(LoggerStderr, LOGGER_DEBUG); - worker = new(HttpWorker, "testserver", value); - server = new(Server, logger, worker, 11212, SOMAXCONN); - - //daemonize(); - if (NULL != server) { - serverRun(server); - } - else { - doShutdown = 1; - kill(pid, SIGINT); - } - - do { - pid_t w; - - w = waitpid(pid, &status, 0); - - while (w == -1) { - switch(errno) { - case EINTR: w = waitpid(pid, &status, 0); - break; - case ECHILD: perror("no child"); - // DROP THROUGH - default: w = 0; - } - } - - if (0 < w) { - if (WIFEXITED(status)) { - loggerLog(logger, LOGGER_INFO, - "child exited, status=%d\n", - WEXITSTATUS(status)); - } else if (WIFSIGNALED(status)) { - loggerLog(logger, LOGGER_INFO, - "killed by signal %d\n", - WTERMSIG(status)); - } else if (WIFSTOPPED(status)) { - loggerLog(logger, LOGGER_INFO, - "stopped by signal %d\n", - WSTOPSIG(status)); - } else if (WIFCONTINUED(status)) { - loggerLog(logger, LOGGER_INFO, "continued\n"); - } - } - } while (!WIFEXITED(status) && !WIFSIGNALED(status)); - - if (NULL != server) delete(server); - if (NULL != worker) delete(worker); - if (NULL != logger) delete(logger); - } - - break; - } - - return 0; -} - -// vim: set ts=4 sw=4: