Browse Source

moved httpMessageQueue to a generalized Queue class as in fact it was nothing else except that it only stored HttpMessages.

release0.1.5
Georg Hopp 14 years ago
parent
commit
b615fb8b01
  1. 3
      configure.ac
  2. 4
      include/http/parser.h
  3. 4
      include/http/writer.h
  4. 23
      include/queue.h
  5. 3
      src/Makefile.am
  6. 5
      src/http/Makefile.am
  7. 4
      src/http/parser.c
  8. 3
      src/http/parser/parse.c
  9. 15
      src/http/worker/process.c
  10. 4
      src/http/writer.c
  11. 7
      src/http/writer/write.c
  12. 6
      src/queue/Makefile.am
  13. 11
      src/queue/get.c
  14. 9
      src/queue/put.c
  15. 18
      src/queue/queue.c

3
configure.ac

@ -8,7 +8,7 @@ AM_INIT_AUTOMAKE
#AM_INIT_AUTOMAKE([subdir-objects])
AM_SILENT_RULES([yes])
AC_COPYRIGHT([Copyright © 2012 Georg Hopp])
AC_REVISION([$Revision: 0.01 $])
AC_REVISION([$Revision: 0.02 $])
AC_CONFIG_SRCDIR([src/taskrambler.c])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_MACRO_DIR([m4])
@ -52,6 +52,7 @@ AC_CONFIG_FILES([Makefile
src/cbuf/Makefile
src/class/Makefile
src/hash/Makefile
src/queue/Makefile
src/http/Makefile
src/logger/Makefile
src/server/Makefile

4
include/http/parser.h

@ -26,7 +26,7 @@
#include "class.h"
#include "http/message.h"
#include "http/message/queue.h"
#include "queue.h"
#include "cbuf.h"
#include "stream.h"
@ -51,7 +51,7 @@ CLASS(HttpParser) {
char * incomplete;
size_t isize;
HttpMessageQueue queue;
Queue queue;
HttpMessage current;
HttpMessageState state;

4
include/http/writer.h

@ -28,7 +28,7 @@
#include "class.h"
#include "http/message.h"
#include "http/message/queue.h"
#include "queue.h"
#include "cbuf.h"
#include "stream.h"
@ -48,7 +48,7 @@ CLASS(HttpWriter) {
Cbuf buffer;
Bool ourLock;
HttpMessageQueue queue;
Queue queue;
HttpMessage current;
size_t nheader;

23
include/http/message/queue.h → include/queue.h

@ -23,35 +23,34 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __HTTP_MESSAGE_QUEUE_H__
#define __HTTP_MESSAGE_QUEUE_H__
#ifndef __QUEUE_H__
#define __QUEUE_H__
#include <sys/types.h>
#include "class.h"
#include "http/message.h"
#include "commons.h"
CLASS(HttpMessageQueue) {
HttpMessage msg;
HttpMessageQueue next;
CLASS(Queue) {
void * msg;
Queue next;
/**
* first and last are only available in the initial queue
* element (the root). This elelment does not contain any message
* and exists only for organizational purpose.
*/
HttpMessageQueue first;
HttpMessageQueue last;
Queue first;
Queue last;
size_t nmsg;
};
void httpMessageQueuePut(HttpMessageQueue, HttpMessage);
HttpMessage httpMessageQueueGet(HttpMessageQueue);
void queuePut(Queue, void *);
void * queueGet(Queue);
#define httpMessageQueueEmpty(this) (0 >= (this)->nmsg)
#define queueEmpty(this) (0 >= (this)->nmsg)
#endif // __HTTP_MESSAGE_QUEUE_H__
#endif // __QUEUE_H__
// vim: set ts=4 sw=4:

3
src/Makefile.am

@ -13,6 +13,7 @@ LIBS = ./http/libhttp.a \
./cbuf/libcbuf.a \
./class/libclass.a \
./hash/libhash.a \
./queue/libqueue.a \
./logger/liblogger.a \
./server/libserver.a \
./session/libsession.a \
@ -28,4 +29,4 @@ taskrambler_CFLAGS = -Wall -I ../include/# $(COVERAGE_CFLAGS)
taskrambler_LDADD = $(LIBS) -lrt -lssl -lldap
#taskrambler_LDFLAGS = $(COVERAGE_LDFLAGS)
SUBDIRS = auth cbuf class hash http logger server session socket stream
SUBDIRS = auth cbuf class hash queue http logger server session socket stream

5
src/http/Makefile.am

@ -6,9 +6,6 @@ MSG = message.c \
message/header_to_string.c \
message/get_version.c \
message/has_valid_version.c
MSGQ = message/queue.c \
message/queue/get.c \
message/queue/put.c
REQ = request.c \
request/has_valid_method.c
RESP = response.c \
@ -38,6 +35,6 @@ HEADER = header.c \
noinst_LIBRARIES = libhttp.a
libhttp_a_SOURCES = $(MSG) $(MSGQ) $(REQ) $(RESP) $(PARSER) $(WRITER) \
libhttp_a_SOURCES = $(MSG) $(REQ) $(RESP) $(PARSER) $(WRITER) \
$(WORKER) $(HEADER) interface/i_http_intro.c
libhttp_a_CFLAGS = -Wall -I ../../include/

4
src/http/parser.c

@ -28,7 +28,7 @@
#include "stream.h"
#include "http/parser.h"
#include "http/message/queue.h"
#include "queue.h"
#include "http/request.h"
#include "http/response.h"
#include "cbuf.h"
@ -48,7 +48,7 @@ httpParserCtor(void * _this, va_list * params)
return -1;
}
this->queue = new(HttpMessageQueue);
this->queue = new(Queue);
return 0;
}

3
src/http/parser/parse.c

@ -25,6 +25,7 @@
#include "class.h"
#include "cbuf.h"
#include "stream.h"
#include "queue.h"
#include "http/parser.h"
#include "http/header.h"
@ -170,7 +171,7 @@ httpParserParse(void * _this, Stream st)
/**
* enqueue current request
*/
httpMessageQueuePut(this->queue, this->current);
queuePut(this->queue, this->current);
this->current = NULL;
/**

15
src/http/worker/process.c

@ -29,20 +29,19 @@
#include "class.h"
#include "auth.h"
#include "queue.h"
#include "session.h"
#include "stream.h"
#include "hash.h"
#include "http/worker.h"
#include "http/header.h"
#include "http/message.h"
#include "http/request.h"
#include "http/response.h"
#include "http/message/queue.h"
#include "http/parser.h"
#include "session.h"
#include "stream.h"
#include "hash.h"
#include "utils/memory.h"
#include "hash.h"
#include "commons.h"
@ -57,8 +56,8 @@ httpWorkerProcess(HttpWorker this, Stream st)
if (0 < (size = httpParserParse(this->parser, st))) {
while (! httpMessageQueueEmpty(this->parser->queue)) {
HttpRequest request = (HttpRequest)httpMessageQueueGet(
while (! queueEmpty(this->parser->queue)) {
HttpRequest request = queueGet(
this->parser->queue);
HttpMessage response = NULL;
@ -234,7 +233,7 @@ httpWorkerProcess(HttpWorker this, Stream st)
delete(request);
httpMessageQueuePut(this->writer->queue, response);
queuePut(this->writer->queue, response);
response = NULL;
}
}

4
src/http/writer.c

@ -25,7 +25,7 @@
#include "class.h"
#include "stream.h"
#include "http/message/queue.h"
#include "queue.h"
#include "http/writer.h"
static
@ -35,7 +35,7 @@ httpWriterCtor(void * _this, va_list * params)
HttpWriter this = _this;
this->buffer = va_arg(*params, Cbuf);
this->queue = new(HttpMessageQueue);
this->queue = new(Queue);
return 0;
}

7
src/http/writer/write.c

@ -25,7 +25,7 @@
#include "class.h"
#include "http/message.h"
#include "http/message/queue.h"
#include "queue.h"
#include "http/writer.h"
#include "cbuf.h"
#include "stream.h"
@ -51,9 +51,8 @@ httpWriterWrite(void * _this, Stream st)
while (cont) {
switch (this->state) {
case HTTP_WRITER_GET:
if (NULL == this->current &&
! httpMessageQueueEmpty(this->queue)) {
this->current = httpMessageQueueGet(this->queue);
if (NULL == this->current && ! queueEmpty(this->queue)) {
this->current = queueGet(this->queue);
this->written = 0;
this->nbody = 0;

6
src/queue/Makefile.am

@ -0,0 +1,6 @@
ACLOCAL_AMFLAGS = -I m4
noinst_LIBRARIES = libqueue.a
libqueue_a_SOURCES = queue.c get.c put.c
libqueue_a_CFLAGS = -Wall -I ../../include/

11
src/http/message/queue/get.c → src/queue/get.c

@ -21,14 +21,13 @@
*/
#include "class.h"
#include "http/message.h"
#include "http/message/queue.h"
#include "queue.h"
HttpMessage
httpMessageQueueGet(HttpMessageQueue this)
void *
queueGet(Queue this)
{
HttpMessageQueue first;
HttpMessage msg;
Queue first;
void * msg;
if (NULL == this->first) {
return NULL;

9
src/http/message/queue/put.c → src/queue/put.c

@ -21,15 +21,14 @@
*/
#include "class.h"
#include "http/message.h"
#include "http/message/queue.h"
#include "queue.h"
void
httpMessageQueuePut(HttpMessageQueue this, HttpMessage msg)
queuePut(Queue this, void * msg)
{
HttpMessageQueue node = (this->last)? this->last : this;
Queue node = (this->last)? this->last : this;
node->next = new(HttpMessageQueue);
node->next = new(Queue);
this->last = node->next;
if (node == this) {

18
src/http/message/queue.c → src/queue/queue.c

@ -23,33 +23,31 @@
#include <stdarg.h>
#include "class.h"
#include "http/message/queue.h"
#include "queue.h"
static
int
messageQueueCtor(void * _this, va_list * params)
queueCtor(void * _this, va_list * params)
{
return 0;
}
static
void
messageQueueDtor(void * _this)
queueDtor(void * _this)
{
HttpMessageQueue this = _this;
HttpMessageQueue node = this->first;
int i;
Queue this = _this;
Queue node = this->first;
while (NULL != node) {
HttpMessageQueue next = node->next;
Queue next = node->next;
delete(node->msg);
delete(node);
node = next;
}
}
INIT_IFACE(Class, messageQueueCtor, messageQueueDtor, NULL);
CREATE_CLASS(HttpMessageQueue, NULL, IFACE(Class));
INIT_IFACE(Class, queueCtor, queueDtor, NULL);
CREATE_CLASS(Queue, NULL, IFACE(Class));
// vim: set ts=4 sw=4:
Loading…
Cancel
Save