From 7a717ad8f02efb52f0f1f6e81dea381e8371ba0a Mon Sep 17 00:00:00 2001 From: Georg Hopp Date: Mon, 26 Mar 2012 09:13:30 +0200 Subject: [PATCH] moved logger to separate archive --- configure.ac | 3 +- include/http.h | 1 + include/{ => http}/interface/http_intro.h | 0 include/logger.h | 52 +------------------- include/{ => logger}/interface/logger.h | 6 +-- include/logger/logger.h | 57 ++++++++++++++++++++++ src/Makefile.am | 12 ++--- src/auth/libauth.a | Bin 32670 -> 32670 bytes src/cbuf/libcbuf.a | Bin 215682 -> 215682 bytes src/class/libclass.a | Bin 17066 -> 17066 bytes src/hash/libhash.a | Bin 50148 -> 50148 bytes src/http/Makefile.am | 2 +- src/{ => http}/interface/http_intro.c | 2 +- src/http/libhttp.a | Bin 1942268 -> 1950900 bytes src/http/message/header_size_get.c | 2 +- src/http/message/header_to_string.c | 2 +- src/http/parser/parse.c | 7 +-- src/http/request.c | 2 +- src/http/response.c | 4 +- src/interface/stream_reader.c | 2 +- src/logger/Makefile.am | 6 +++ src/{ => logger}/interface/logger.c | 4 +- src/logger/liblogger.a | Bin 0 -> 37140 bytes src/{ => logger}/logger.c | 4 +- src/logger/stderr.c | 4 +- src/logger/syslog.c | 4 +- src/server/handle_accept.c | 2 +- src/server/poll.c | 2 +- src/server/read.c | 2 +- src/server/run.c | 2 +- src/server/write.c | 2 +- src/socket.c | 1 - src/socket/accept.c | 2 +- src/socket/connect.c | 2 +- src/socket/listen.c | 2 +- src/taskrambler.c | 2 +- 36 files changed, 106 insertions(+), 89 deletions(-) rename include/{ => http}/interface/http_intro.h (100%) rename include/{ => logger}/interface/logger.h (90%) create mode 100644 include/logger/logger.h rename src/{ => http}/interface/http_intro.c (96%) create mode 100644 src/logger/Makefile.am rename src/{ => logger}/interface/logger.c (95%) create mode 100644 src/logger/liblogger.a rename src/{ => logger}/logger.c (94%) diff --git a/configure.ac b/configure.ac index 4c6f6cc..4606fbb 100644 --- a/configure.ac +++ b/configure.ac @@ -5,7 +5,7 @@ AC_PREREQ([2.68]) AC_INIT([taskrambler], [0.0.1], [Georg Hopp ]) LT_INIT AM_INIT_AUTOMAKE([subdir-objects]) -#AM_SILENT_RULES([yes]) +AM_SILENT_RULES([yes]) AC_COPYRIGHT([Copyright © 2012 Georg Hopp]) AC_REVISION([$Revision: 0.01 $]) AC_CONFIG_SRCDIR([src/taskrambler.c]) @@ -52,5 +52,6 @@ AC_CONFIG_FILES([Makefile src/class/Makefile src/hash/Makefile src/http/Makefile + src/logger/Makefile tests/Makefile]) AC_OUTPUT diff --git a/include/http.h b/include/http.h index fde505b..5eb5f04 100644 --- a/include/http.h +++ b/include/http.h @@ -10,6 +10,7 @@ #include "http/parser.h" #include "http/writer.h" #include "http/worker.h" +#include "http/interface/http_intro.h" #endif // __HTTP_H__ diff --git a/include/interface/http_intro.h b/include/http/interface/http_intro.h similarity index 100% rename from include/interface/http_intro.h rename to include/http/interface/http_intro.h diff --git a/include/logger.h b/include/logger.h index a9577db..5680044 100644 --- a/include/logger.h +++ b/include/logger.h @@ -1,56 +1,8 @@ -/** - * \file - * A generic logger class and two extended classes, One that logs to - * stderr and one that logs to the system syslog. - * - * \author Georg Hopp - * - * \copyright - * Copyright © 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 . - */ - #ifndef __LOGGER_H__ #define __LOGGER_H__ -#include "class.h" - -typedef enum logger_level { - LOGGER_DEBUG=0, - LOGGER_INFO, - LOGGER_NOTICE, - LOGGER_WARNING, - LOGGER_ERR, - LOGGER_CRIT, - LOGGER_ALERT, - LOGGER_EMERG -} logger_level; - -extern const char * const logger_level_str[]; - -CLASS(Logger) { - logger_level min_level; -}; - -CLASS(LoggerStderr) { - EXTENDS(Logger); -}; - -CLASS(LoggerSyslog) { - EXTENDS(Logger); -}; +#include "logger/logger.h" +#include "logger/interface/logger.h" #endif // __LOGGER_H__ diff --git a/include/interface/logger.h b/include/logger/interface/logger.h similarity index 90% rename from include/interface/logger.h rename to include/logger/interface/logger.h index 9f02f02..549f584 100644 --- a/include/interface/logger.h +++ b/include/logger/interface/logger.h @@ -21,8 +21,8 @@ * along with this program. If not, see . */ -#ifndef __INTERFACE_LOGGER_H__ -#define __INTERFACE_LOGGER_H__ +#ifndef __LOGGER_INTERFACE_LOGGER_H__ +#define __LOGGER_INTERFACE_LOGGER_H__ #include @@ -40,6 +40,6 @@ struct i_Logger { extern void loggerLog(void *, logger_level, const char * const, ...); -#endif // __INTERFACE_LOGGER_H__ +#endif // __LOGGER_INTERFACE_LOGGER_H__ // vim: set ts=4 sw=4: diff --git a/include/logger/logger.h b/include/logger/logger.h new file mode 100644 index 0000000..fc10124 --- /dev/null +++ b/include/logger/logger.h @@ -0,0 +1,57 @@ +/** + * \file + * A generic logger class and two extended classes, One that logs to + * stderr and one that logs to the system syslog. + * + * \author Georg Hopp + * + * \copyright + * Copyright © 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 . + */ + +#ifndef __LOGGER_LOGGER_H__ +#define __LOGGER_LOGGER_H__ + +#include "class.h" + +typedef enum logger_level { + LOGGER_DEBUG=0, + LOGGER_INFO, + LOGGER_NOTICE, + LOGGER_WARNING, + LOGGER_ERR, + LOGGER_CRIT, + LOGGER_ALERT, + LOGGER_EMERG +} logger_level; + +extern const char * const logger_level_str[]; + +CLASS(Logger) { + logger_level min_level; +}; + +CLASS(LoggerStderr) { + EXTENDS(Logger); +}; + +CLASS(LoggerSyslog) { + EXTENDS(Logger); +}; + +#endif // __LOGGER_LOGGER_H__ + +// vim: set ts=4 sw=4: diff --git a/src/Makefile.am b/src/Makefile.am index 076900a..7a28d74 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,13 +1,12 @@ ACLOCAL_AMFLAGS = -I m4 -IFACE = interface/stream_reader.c interface/logger.c \ - interface/stream_writer.c interface/http_intro.c \ +IFACE = interface/stream_reader.c \ + interface/stream_writer.c \ interface/subject.c interface/observer.c SOCKET = socket.c socket/accept.c socket/connect.c socket/listen.c STREAM = stream.c stream/read.c stream/write.c SERVER = server.c server/run.c server/close_conn.c server/poll.c \ server/handle_accept.c server/read.c server/write.c -LOGGER = logger.c logger/stderr.c logger/syslog.c SESSION = session.c session/add.c session/get.c session/delete.c UTILS = utils/hash.c \ utils/memory.c \ @@ -19,17 +18,18 @@ LIBS = ./http/libhttp.a \ ./auth/libauth.a \ ./cbuf/libcbuf.a \ ./class/libclass.a \ - ./hash/libhash.a + ./hash/libhash.a \ + ./logger/liblogger.a AM_CFLAGS = -Wall -I ../include/ bin_PROGRAMS = taskrambler taskrambler_SOURCES = taskrambler.c \ - $(IFACE) $(SOCKET) $(SERVER) $(LOGGER) \ + $(IFACE) $(SOCKET) $(SERVER) \ $(UTILS) $(SESSION) $(STREAM) taskrambler_CFLAGS = -Wall -I ../include/ $(COVERAGE_CFLAGS) taskrambler_LDADD = $(LIBS) -lrt -lssl -lldap taskrambler_LDFLAGS = $(COVERAGE_LDFLAGS) -SUBDIRS = auth cbuf class hash http +SUBDIRS = auth cbuf class hash http logger diff --git a/src/auth/libauth.a b/src/auth/libauth.a index 7c72fa397947e8362aac52631944a09cb3d6a225..c26ed76cbb03dc5000f33e47af1d2e12f78f07fe 100644 GIT binary patch delta 50 rcmbRDpK;!Q#tE{lCZ?9grW2LkLKvGx7}rC^HlL7lSBHtZby)%cqY4i( delta 50 rcmbRDpK;!Q#tE{lhGvFl788};LKvGx7}rC^HlL7lSBHtZby)%cp;8Ya diff --git a/src/cbuf/libcbuf.a b/src/cbuf/libcbuf.a index b04e3947d1569798a13ff1823316112d01f1e425..e12cb9ad9e9a3ffcf41bdf7ca482bdba4f8a41f1 100644 GIT binary patch delta 315 zcmZpg%G)%RcY-XdiK(Tr#YQDdW-!Zia{{w?5QI57fmv+xq)@|`V6GX6yZxRWxCig=|Hyl_H2Kq1|g{AheRfGD0}*XRwl{qt|d%if?!GW?LdKa zC>taxv0Y_4Q#@P%WYqi>OcziDx_2=>fN3u{gHR2$M`HV%yD-bl!LGLZ!1NO0N(+$r vUekA-VN%&Xi1KHx+v;CPGgrJfi5}C}Q?CA?ynIyNnmN110!gRJWr9;^u zNr~+$)0yJo0wAO2uVA_W7BDw}nBBdL=>b$=d%+o~YM><09*OO5?m{gyHvoBJyWIz- zmta?dbhk2jP2Y8fNoD&iR_31qAQu2dfksGd-yp`U4>8jaBJf9@*&InAfBSMv=Gy`Q D2OnM? diff --git a/src/class/libclass.a b/src/class/libclass.a index 6d3c5baf9f6e2ed789642e3d0270aa715bc6a133..9f49e8e36ef4d011d82cfeb31cdc4d9686888f8e 100644 GIT binary patch delta 39 lcmZ40%DAePae^$XiK(Tr#YCmI5XNQ^MtdIMUc2_d_0l4 Z0*NyrT+7YtO5f{%6B*t3m7*lA#rn5ZVDrD6D$lxkhp7nJdwEq Ui8GmVuIu}DV|0OTYly8r+H diff --git a/src/http/Makefile.am b/src/http/Makefile.am index 0285899..a60d27f 100644 --- a/src/http/Makefile.am +++ b/src/http/Makefile.am @@ -37,5 +37,5 @@ HEADER = header.c \ noinst_LIBRARIES = libhttp.a libhttp_a_SOURCES = $(MSG) $(MSGQ) $(REQ) $(RESP) $(PARSER) $(WRITER) \ - $(WORKER) $(HEADER) + $(WORKER) $(HEADER) interface/http_intro.c libhttp_a_CFLAGS = -Wall -I ../../include/ diff --git a/src/interface/http_intro.c b/src/http/interface/http_intro.c similarity index 96% rename from src/interface/http_intro.c rename to src/http/interface/http_intro.c index bf14c4d..125f475 100644 --- a/src/interface/http_intro.c +++ b/src/http/interface/http_intro.c @@ -21,7 +21,7 @@ */ #include "class.h" -#include "interface/http_intro.h" +#include "http/interface/http_intro.h" const struct interface i_HttpIntro = { "httpIntro", diff --git a/src/http/libhttp.a b/src/http/libhttp.a index 4c6537774895e6c067e18797884e1fe248ad7864..71d70d48ce1fdade0c0a1855b2f81ea68d94a4eb 100644 GIT binary patch delta 71706 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 diff --git a/src/http/message/header_size_get.c b/src/http/message/header_size_get.c index 5388db5..59b10b3 100644 --- a/src/http/message/header_size_get.c +++ b/src/http/message/header_size_get.c @@ -27,7 +27,7 @@ #include "http/message.h" #include "http/response.h" #include "http/header.h" -#include "interface/http_intro.h" +#include "http/interface/http_intro.h" #include "hash.h" static size_t size; diff --git a/src/http/message/header_to_string.c b/src/http/message/header_to_string.c index 1b615cb..37a2814 100644 --- a/src/http/message/header_to_string.c +++ b/src/http/message/header_to_string.c @@ -26,7 +26,7 @@ #include "http/response.h" #include "http/header.h" -#include "interface/http_intro.h" +#include "http/interface/http_intro.h" #include "hash.h" static char * string; diff --git a/src/http/parser/parse.c b/src/http/parser/parse.c index f392ede..84df37f 100644 --- a/src/http/parser/parse.c +++ b/src/http/parser/parse.c @@ -22,13 +22,14 @@ #include -#include "http/parser.h" -#include "http/header.h" #include "class.h" -#include "interface/http_intro.h" #include "cbuf.h" #include "stream.h" +#include "http/parser.h" +#include "http/header.h" +#include "http/interface/http_intro.h" + #include "utils/memory.h" #include "commons.h" diff --git a/src/http/request.c b/src/http/request.c index a352687..b380301 100644 --- a/src/http/request.c +++ b/src/http/request.c @@ -27,7 +27,7 @@ #include "class.h" #include "hash.h" -#include "interface/http_intro.h" +#include "http/interface/http_intro.h" #include "http/request.h" #include "utils/memory.h" diff --git a/src/http/response.c b/src/http/response.c index d1b9d45..db53354 100644 --- a/src/http/response.c +++ b/src/http/response.c @@ -27,10 +27,10 @@ #include #include "class.h" -#include "interface/http_intro.h" +#include "utils/memory.h" #include "http/response.h" -#include "utils/memory.h" +#include "http/interface/http_intro.h" static diff --git a/src/interface/stream_reader.c b/src/interface/stream_reader.c index ffaf49c..1797c60 100644 --- a/src/interface/stream_reader.c +++ b/src/interface/stream_reader.c @@ -21,8 +21,8 @@ */ #include "class.h" -#include "interface/stream_reader.h" #include "stream.h" +#include "interface/stream_reader.h" const struct interface i_StreamReader = { "streamReader", diff --git a/src/logger/Makefile.am b/src/logger/Makefile.am new file mode 100644 index 0000000..6e4f2cb --- /dev/null +++ b/src/logger/Makefile.am @@ -0,0 +1,6 @@ +ACLOCAL_AMFLAGS = -I m4 + +noinst_LIBRARIES = liblogger.a + +liblogger_a_SOURCES = interface/logger.c logger.c stderr.c syslog.c +liblogger_a_CFLAGS = -Wall -I ../../include/ diff --git a/src/interface/logger.c b/src/logger/interface/logger.c similarity index 95% rename from src/interface/logger.c rename to src/logger/interface/logger.c index 84e3dd9..1ab7c2d 100644 --- a/src/interface/logger.c +++ b/src/logger/interface/logger.c @@ -24,8 +24,8 @@ #include #include -#include "logger.h" -#include "interface/logger.h" +#include "logger/logger.h" +#include "logger/interface/logger.h" const struct interface i_Logger = { "logger", diff --git a/src/logger/liblogger.a b/src/logger/liblogger.a new file mode 100644 index 0000000000000000000000000000000000000000..567085f314c688fce5ae192e042cf202d209e824 GIT binary patch literal 37140 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 Ik@5C_01SCcY5)KL literal 0 HcmV?d00001 diff --git a/src/logger.c b/src/logger/logger.c similarity index 94% rename from src/logger.c rename to src/logger/logger.c index 6519f95..4d8ab63 100644 --- a/src/logger.c +++ b/src/logger/logger.c @@ -22,9 +22,9 @@ #include -#include "logger.h" #include "class.h" -#include "interface/logger.h" +#include "logger/logger.h" +#include "logger/interface/logger.h" const char * const diff --git a/src/logger/stderr.c b/src/logger/stderr.c index 104714b..8df121e 100644 --- a/src/logger/stderr.c +++ b/src/logger/stderr.c @@ -22,8 +22,8 @@ #include -#include "logger.h" -#include "interface/logger.h" +#include "logger/logger.h" +#include "logger/interface/logger.h" static void diff --git a/src/logger/syslog.c b/src/logger/syslog.c index 75fcd40..4f331ac 100644 --- a/src/logger/syslog.c +++ b/src/logger/syslog.c @@ -22,8 +22,8 @@ #include -#include "logger.h" -#include "interface/logger.h" +#include "logger/logger.h" +#include "logger/interface/logger.h" static const diff --git a/src/server/handle_accept.c b/src/server/handle_accept.c index 9e20aa1..ab0cb83 100644 --- a/src/server/handle_accept.c +++ b/src/server/handle_accept.c @@ -29,7 +29,7 @@ #include "http/worker.h" #include "server.h" #include "class.h" -#include "interface/logger.h" +#include "logger.h" #include "stream.h" int diff --git a/src/server/poll.c b/src/server/poll.c index 77cfe07..cf061c8 100644 --- a/src/server/poll.c +++ b/src/server/poll.c @@ -24,7 +24,7 @@ #include #include "server.h" -#include "interface/logger.h" +#include "logger.h" #include "utils/signalHandling.h" diff --git a/src/server/read.c b/src/server/read.c index 5eb1adc..d32e25c 100644 --- a/src/server/read.c +++ b/src/server/read.c @@ -21,7 +21,7 @@ */ #include "server.h" -#include "interface/logger.h" +#include "logger.h" #include "interface/stream_reader.h" void serverCloseConn(Server, unsigned int); diff --git a/src/server/run.c b/src/server/run.c index 6702be6..3ba416c 100644 --- a/src/server/run.c +++ b/src/server/run.c @@ -21,7 +21,7 @@ */ #include "server.h" -#include "interface/logger.h" +#include "logger.h" #include "utils/signalHandling.h" diff --git a/src/server/write.c b/src/server/write.c index bacbf81..9da1a62 100644 --- a/src/server/write.c +++ b/src/server/write.c @@ -21,7 +21,7 @@ */ #include "server.h" -#include "interface/logger.h" +#include "logger.h" #include "interface/stream_writer.h" void serverCloseConn(Server, unsigned int); diff --git a/src/socket.c b/src/socket.c index 8f761d0..ead4f00 100644 --- a/src/socket.c +++ b/src/socket.c @@ -27,7 +27,6 @@ #include "socket.h" #include "logger.h" #include "class.h" -#include "interface/logger.h" static int diff --git a/src/socket/accept.c b/src/socket/accept.c index f8b5a4e..3c7de3b 100644 --- a/src/socket/accept.c +++ b/src/socket/accept.c @@ -25,7 +25,7 @@ #include "socket.h" #include "class.h" -#include "interface/logger.h" +#include "logger.h" Sock socketAccept(Sock this, char (*remoteAddr)[16]) diff --git a/src/socket/connect.c b/src/socket/connect.c index 04bab48..6502288 100644 --- a/src/socket/connect.c +++ b/src/socket/connect.c @@ -25,7 +25,7 @@ #include "socket.h" #include "class.h" -#include "interface/logger.h" +#include "logger.h" void diff --git a/src/socket/listen.c b/src/socket/listen.c index 418a1d0..aff5273 100644 --- a/src/socket/listen.c +++ b/src/socket/listen.c @@ -25,7 +25,7 @@ #include "socket.h" #include "class.h" -#include "interface/logger.h" +#include "logger.h" void diff --git a/src/taskrambler.c b/src/taskrambler.c index f01b06a..5e900aa 100644 --- a/src/taskrambler.c +++ b/src/taskrambler.c @@ -41,7 +41,7 @@ #include "auth.h" #include "class.h" -#include "interface/logger.h" +#include "logger.h" #include "utils/signalHandling.h" #include "utils/memory.h"