summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile.in2
-rw-r--r--TODO8
-rw-r--r--config.h.in3
-rw-r--r--configure.ac2
-rw-r--r--examples/csoap/Makefile.in2
-rwxr-xr-xexamples/csoap/echoattachments-server.c4
-rw-r--r--examples/csoap/simpleserver.c4
-rw-r--r--examples/nanohttp/Makefile.in2
-rw-r--r--examples/nanohttp/http_client.c5
-rw-r--r--examples/nanohttp/http_server.c7
-rwxr-xr-xexamples/nanohttp/mime_client.c6
-rw-r--r--libcsoap/Makefile.am40
-rw-r--r--libcsoap/Makefile.in171
-rw-r--r--libcsoap/soap-addressing.c20
-rw-r--r--libcsoap/soap-admin.c74
-rw-r--r--libcsoap/soap-admin.h24
-rw-r--r--libcsoap/soap-client.c34
-rwxr-xr-xlibcsoap/soap-ctx.c6
-rw-r--r--libcsoap/soap-env.c120
-rw-r--r--libcsoap/soap-fault.c18
-rw-r--r--libcsoap/soap-logging.c150
-rw-r--r--libcsoap/soap-logging.h150
-rw-r--r--libcsoap/soap-nhttp.c33
-rw-r--r--libcsoap/soap-nudp.c34
-rw-r--r--libcsoap/soap-router.c26
-rw-r--r--libcsoap/soap-server.c36
-rw-r--r--libcsoap/soap-server.h83
-rw-r--r--libcsoap/soap-service.c12
-rw-r--r--libcsoap/soap-transport.c42
-rw-r--r--libcsoap/soap-transport.h6
-rw-r--r--libcsoap/soap-xml.c33
-rw-r--r--libcsoap/soap-xml.h20
-rw-r--r--libcsoap/soap-xmlsec.c116
-rw-r--r--libcsoap/soap-xmlsec.h170
-rw-r--r--nanohttp/Makefile.am34
-rw-r--r--nanohttp/Makefile.in142
-rw-r--r--nanohttp/nanohttp-admin.c124
-rw-r--r--nanohttp/nanohttp-admin.h100
-rw-r--r--nanohttp/nanohttp-base64.c5
-rw-r--r--nanohttp/nanohttp-base64.h44
-rw-r--r--nanohttp/nanohttp-client.c45
-rw-r--r--nanohttp/nanohttp-client.h13
-rw-r--r--nanohttp/nanohttp-common.c23
-rw-r--r--nanohttp/nanohttp-common.h366
-rw-r--r--nanohttp/nanohttp-error.c11
-rw-r--r--nanohttp/nanohttp-error.h39
-rw-r--r--nanohttp/nanohttp-logging.c209
-rw-r--r--nanohttp/nanohttp-logging.h162
-rwxr-xr-xnanohttp/nanohttp-mime.c45
-rwxr-xr-xnanohttp/nanohttp-mime.h25
-rwxr-xr-xnanohttp/nanohttp-request.c15
-rwxr-xr-xnanohttp/nanohttp-request.h25
-rwxr-xr-xnanohttp/nanohttp-response.c15
-rwxr-xr-xnanohttp/nanohttp-response.h44
-rw-r--r--nanohttp/nanohttp-server.c107
-rw-r--r--nanohttp/nanohttp-server.h177
-rw-r--r--nanohttp/nanohttp-socket.c39
-rw-r--r--nanohttp/nanohttp-socket.h127
-rw-r--r--nanohttp/nanohttp-ssl.c57
-rw-r--r--nanohttp/nanohttp-ssl.h99
-rwxr-xr-xnanohttp/nanohttp-stream.c29
-rwxr-xr-xnanohttp/nanohttp-stream.h158
-rw-r--r--nanohttp/nanohttp-url.c27
-rw-r--r--nanohttp/nanohttp-url.h87
-rw-r--r--wsdl2c/Makefile.in2
65 files changed, 2012 insertions, 1846 deletions
diff --git a/Makefile.in b/Makefile.in
index 53739b8..0c32702 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -15,7 +15,7 @@
@SET_MAKE@
#
-# $Revision: 1.1 $
+# $Revision: 1.2 $
#
diff --git a/TODO b/TODO
index abe2b30..291cb0b 100644
--- a/TODO
+++ b/TODO
@@ -1,4 +1,4 @@
-$Id: TODO,v 1.18 2007/01/03 13:41:52 m0gg Exp $
+$Id: TODO,v 1.19 2007/11/03 22:40:09 m0gg Exp $
===============================================================================
Things to do _before_ 1.2 release:
@@ -7,6 +7,8 @@ Things to do _before_ 1.2 release:
nanohttp:
---------
- improve error handling!!!!
+ - write tests (for each??) error case
+ - trigger tests after build
- cleanup/improve nanohttp request parsing
- "GET http://fdqn/service HTTP/1.1" segfaults
- Check portability to Win32/MaxOS (only tested on FreeBSD/Solaris/Linux)
@@ -44,14 +46,14 @@ Additional things that could be done:
=====================================
nanohttp:
----------
+=========
- add DIME attachments (SOAP MTOM)
- add BASE64 decoding for MIME attachments (?)
- cleanup circular module dependencies
- e.g. nanohttp-stream should hide hsocket, hssl
csoap:
-------
+======
- add examples from http://www.xmethods.org (Google, UDDI)
- soap-nudp.c one thread per request (see soap_nudp_server_run)
- http://www.ws-i.org/Profiles/BasicProfile-1.0.html conformance testing
diff --git a/config.h.in b/config.h.in
index 4353094..70e5ae5 100644
--- a/config.h.in
+++ b/config.h.in
@@ -133,6 +133,9 @@
/* Define to 1 if you have the `strtol' function. */
#undef HAVE_STRTOL
+/* Define to 1 if you have the <syslog.h> header file. */
+#undef HAVE_SYSLOG_H
+
/* Define to 1 if you have the <sys/select.h> header file. */
#undef HAVE_SYS_SELECT_H
diff --git a/configure.ac b/configure.ac
index 45e4b9a..7c00430 100644
--- a/configure.ac
+++ b/configure.ac
@@ -43,7 +43,7 @@ dnl checks for headers
dnl
AC_HEADER_STDC
AC_HEADER_TIME
-AC_CHECK_HEADERS([arpa/inet.h fcntl.h inttypes.h malloc.h netdb.h netinet/in.h stdint.h stdlib.h signal.h pthread.h string.h sys/socket.h sys/wait.h time.h sys/time.h unistd.h io.h stdio.h stdarg.h errno.h ctype.h openssl/ssl.h openssl/rand.h openssl/err.h])
+AC_CHECK_HEADERS([arpa/inet.h fcntl.h inttypes.h malloc.h netdb.h netinet/in.h stdint.h stdlib.h signal.h pthread.h string.h sys/socket.h sys/wait.h time.h sys/time.h unistd.h io.h stdio.h stdarg.h errno.h ctype.h openssl/ssl.h openssl/rand.h openssl/err.h syslog.h])
dnl
dnl Checks for typedefs, structures, and compiler characteristics.
diff --git a/examples/csoap/Makefile.in b/examples/csoap/Makefile.in
index a2d9fa9..2d4062b 100644
--- a/examples/csoap/Makefile.in
+++ b/examples/csoap/Makefile.in
@@ -219,7 +219,7 @@ sysconfdir = @sysconfdir@
target_alias = @target_alias@
#
-# $Revision: 1.1 $
+# $Revision: 1.2 $
#
LDADD = ../../nanohttp/libnanohttp.la ../../libcsoap/libcsoap.la
INCLUDES = -I${top_srcdir}
diff --git a/examples/csoap/echoattachments-server.c b/examples/csoap/echoattachments-server.c
index e6b4872..7bda226 100755
--- a/examples/csoap/echoattachments-server.c
+++ b/examples/csoap/echoattachments-server.c
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: echoattachments-server.c,v 1.13 2007/01/01 22:54:46 m0gg Exp $
+ * $Id: echoattachments-server.c,v 1.14 2007/11/03 22:40:09 m0gg Exp $
*
* CSOAP Project: CSOAP examples project
* Copyright (C) 2003-2004 Ferhat Ayaz
@@ -72,7 +72,7 @@ main(int argc, char **argv)
herror_t err;
struct SoapRouter *router;
- hlog_set_level(HLOG_VERBOSE);
+ nanohttp_log_set_loglevel(NANOHTTP_LOG_VERBOSE);
err = soap_server_init_args(argc, argv);
if (err != H_OK)
diff --git a/examples/csoap/simpleserver.c b/examples/csoap/simpleserver.c
index 0bd7341..6c6b154 100644
--- a/examples/csoap/simpleserver.c
+++ b/examples/csoap/simpleserver.c
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: simpleserver.c,v 1.29 2007/01/01 18:58:05 m0gg Exp $
+ * $Id: simpleserver.c,v 1.30 2007/11/03 22:40:09 m0gg Exp $
*
* CSOAP Project: CSOAP examples project
* Copyright (C) 2003-2004 Ferhat Ayaz
@@ -74,7 +74,7 @@ say_hello(struct SoapCtx *req, struct SoapCtx *res)
soap_env_add_itemf(res->env, "xsd:string", "echo", "Hello '%s'", name);
if (name)
xmlFree(name);
- node = soap_xml_get_next(node);
+ node = soap_xml_get_next_element(node);
}
printf("service request done\n");
diff --git a/examples/nanohttp/Makefile.in b/examples/nanohttp/Makefile.in
index f918782..9f2aabe 100644
--- a/examples/nanohttp/Makefile.in
+++ b/examples/nanohttp/Makefile.in
@@ -200,7 +200,7 @@ sysconfdir = @sysconfdir@
target_alias = @target_alias@
#
-# $Revision: 1.1 $
+# $Revision: 1.2 $
#
LDADD = ../../nanohttp/libnanohttp.la
INCLUDES = -I${top_srcdir}
diff --git a/examples/nanohttp/http_client.c b/examples/nanohttp/http_client.c
index 1b9c912..adcd199 100644
--- a/examples/nanohttp/http_client.c
+++ b/examples/nanohttp/http_client.c
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: http_client.c,v 1.9 2006/12/10 19:21:06 m0gg Exp $
+* $Id: http_client.c,v 1.10 2007/11/03 22:40:09 m0gg Exp $
*
* CSOAP Project: A http client/server library in C (example)
* Copyright (C) 2003-2004 Ferhat Ayaz
@@ -25,6 +25,7 @@
#include <stdlib.h>
#include <string.h>
+#include <nanohttp/nanohttp-logging.h>
#include <nanohttp/nanohttp-client.h>
#define MAX_BUFFER_SIZE 1024
@@ -105,7 +106,7 @@ int main(int argc, char **argv)
}
/* Set log level to see more information written by the library */
- hlog_set_level(HLOG_INFO);
+ nanohttp_log_set_loglevel(NANOHTTP_LOG_INFO);
/* Initialize httpc module */
if (httpc_init(argc, argv))
diff --git a/examples/nanohttp/http_server.c b/examples/nanohttp/http_server.c
index eb98d33..5daad9a 100644
--- a/examples/nanohttp/http_server.c
+++ b/examples/nanohttp/http_server.c
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: http_server.c,v 1.14 2007/01/05 09:02:50 m0gg Exp $
+* $Id: http_server.c,v 1.15 2007/11/03 22:40:09 m0gg Exp $
*
* CSOAP Project: A http client/server library in C (example)
* Copyright (C) 2003 Ferhat Ayaz
@@ -25,6 +25,7 @@
#include <stdlib.h>
#include <string.h>
+#include <nanohttp/nanohttp-logging.h>
#include <nanohttp/nanohttp-server.h>
static int
@@ -142,12 +143,12 @@ int
main(int argc, char **argv)
{
herror_t status;
- hlog_set_level(HLOG_INFO);
+
+ nanohttp_log_set_loglevel(NANOHTTP_LOG_INFO);
if (httpd_init(argc, argv))
{
fprintf(stderr, "Cannot init httpd\n");
- httpd_destroy();
exit(1);
}
diff --git a/examples/nanohttp/mime_client.c b/examples/nanohttp/mime_client.c
index e4d50ba..ffa8de7 100755
--- a/examples/nanohttp/mime_client.c
+++ b/examples/nanohttp/mime_client.c
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: mime_client.c,v 1.1 2007/01/03 21:31:44 m0gg Exp $
+* $Id: mime_client.c,v 1.2 2007/11/03 22:40:09 m0gg Exp $
*
* CSOAP Project: A http client/server library in C (example)
* Copyright (C) 2003 Ferhat Ayaz
@@ -122,7 +122,7 @@ int main(int argc, char **argv)
}
/* Set log level to see more information written by the library */
- // log_set_level(HLOG_VERBOSE);
+ // log_set_level(NANOHTTP_LOG_VERBOSE);
/* Initialize httpc module */
if ((status = httpc_init(argc, argv)) != H_OK)
@@ -142,7 +142,7 @@ int main(int argc, char **argv)
*/
if ((status = httpc_mime_begin(conn, argv[1], argv[3], "", argv[4])) != H_OK)
{
- log_error2("Can not start MIME: %s\n", herror_message(status));
+ fprintf(stderr, "Can not start MIME: %s\n", herror_message(status));
herror_release(status);
exit(1);
}
diff --git a/libcsoap/Makefile.am b/libcsoap/Makefile.am
index abcde74..a19775f 100644
--- a/libcsoap/Makefile.am
+++ b/libcsoap/Makefile.am
@@ -1,19 +1,41 @@
#
-# $Revision: 1.15 $
+# $Revision: 1.16 $
#
lib_LTLIBRARIES=libcsoap.la
libcsoap_ladir=$(includedir)/libcsoap-@csoap_release@/libcsoap
-libcsoap_la_SOURCES=soap-xml.c soap-fault.c soap-env.c soap-service.c \
- soap-router.c soap-client.c soap-server.c soap-ctx.c \
- soap-admin.c soap-addressing.c soap-transport.c \
- soap-nudp.c soap-nhttp.c soap-wsil.c
+libcsoap_la_SOURCES=soap-addressing.c \
+ soap-admin.c \
+ soap-client.c \
+ soap-ctx.c \
+ soap-env.c \
+ soap-fault.c \
+ soap-logging.c \
+ soap-nhttp.c \
+ soap-nudp.c \
+ soap-router.c \
+ soap-service.c \
+ soap-server.c \
+ soap-transport.c \
+ soap-wsil.c \
+ soap-xml.c
-libcsoap_la_HEADERS=soap-fault.h soap-env.h soap-service.h soap-router.h \
- soap-client.h soap-server.h soap-ctx.h soap-addressing.h \
- soap-transport.h soap-admin.h soap-wsil.h soap-nudp.h \
- soap-nhttp.h soap-xml.h
+libcsoap_la_HEADERS=soap-addressing.h \
+ soap-admin.h \
+ soap-client.h \
+ soap-ctx.h \
+ soap-env.h \
+ soap-fault.h \
+ soap-logging.h \
+ soap-nhttp.h \
+ soap-nudp.h \
+ soap-router.h \
+ soap-service.h \
+ soap-server.h \
+ soap-transport.h \
+ soap-wsil.h \
+ soap-xml.h
if BUILD_WITH_XMLSEC1
libcsoap_la_SOURCES+=soap-xmlsec.c
diff --git a/libcsoap/Makefile.in b/libcsoap/Makefile.in
index 093f5f6..1408cbb 100644
--- a/libcsoap/Makefile.in
+++ b/libcsoap/Makefile.in
@@ -59,19 +59,21 @@ am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(libcsoap_ladir)"
libLTLIBRARIES_INSTALL = $(INSTALL)
LTLIBRARIES = $(lib_LTLIBRARIES)
libcsoap_la_LIBADD =
-am__libcsoap_la_SOURCES_DIST = soap-xml.c soap-fault.c soap-env.c \
- soap-service.c soap-router.c soap-client.c soap-server.c \
- soap-ctx.c soap-admin.c soap-addressing.c soap-transport.c \
- soap-nudp.c soap-nhttp.c soap-wsil.c soap-xmlsec.c
+am__libcsoap_la_SOURCES_DIST = soap-addressing.c soap-admin.c \
+ soap-client.c soap-ctx.c soap-env.c soap-fault.c \
+ soap-logging.c soap-nhttp.c soap-nudp.c soap-router.c \
+ soap-service.c soap-server.c soap-transport.c soap-wsil.c \
+ soap-xml.c soap-xmlsec.c
@BUILD_WITH_XMLSEC1_TRUE@am__objects_1 = libcsoap_la-soap-xmlsec.lo
-am_libcsoap_la_OBJECTS = libcsoap_la-soap-xml.lo \
- libcsoap_la-soap-fault.lo libcsoap_la-soap-env.lo \
- libcsoap_la-soap-service.lo libcsoap_la-soap-router.lo \
- libcsoap_la-soap-client.lo libcsoap_la-soap-server.lo \
- libcsoap_la-soap-ctx.lo libcsoap_la-soap-admin.lo \
- libcsoap_la-soap-addressing.lo libcsoap_la-soap-transport.lo \
- libcsoap_la-soap-nudp.lo libcsoap_la-soap-nhttp.lo \
- libcsoap_la-soap-wsil.lo $(am__objects_1)
+am_libcsoap_la_OBJECTS = libcsoap_la-soap-addressing.lo \
+ libcsoap_la-soap-admin.lo libcsoap_la-soap-client.lo \
+ libcsoap_la-soap-ctx.lo libcsoap_la-soap-env.lo \
+ libcsoap_la-soap-fault.lo libcsoap_la-soap-logging.lo \
+ libcsoap_la-soap-nhttp.lo libcsoap_la-soap-nudp.lo \
+ libcsoap_la-soap-router.lo libcsoap_la-soap-service.lo \
+ libcsoap_la-soap-server.lo libcsoap_la-soap-transport.lo \
+ libcsoap_la-soap-wsil.lo libcsoap_la-soap-xml.lo \
+ $(am__objects_1)
libcsoap_la_OBJECTS = $(am_libcsoap_la_OBJECTS)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
@@ -86,10 +88,11 @@ LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = $(libcsoap_la_SOURCES)
DIST_SOURCES = $(am__libcsoap_la_SOURCES_DIST)
-am__libcsoap_la_HEADERS_DIST = soap-fault.h soap-env.h soap-service.h \
- soap-router.h soap-client.h soap-server.h soap-ctx.h \
- soap-addressing.h soap-transport.h soap-admin.h soap-wsil.h \
- soap-nudp.h soap-nhttp.h soap-xml.h soap-xmlsec.h
+am__libcsoap_la_HEADERS_DIST = soap-addressing.h soap-admin.h \
+ soap-client.h soap-ctx.h soap-env.h soap-fault.h \
+ soap-logging.h soap-nhttp.h soap-nudp.h soap-router.h \
+ soap-service.h soap-server.h soap-transport.h soap-wsil.h \
+ soap-xml.h soap-xmlsec.h
libcsoap_laHEADERS_INSTALL = $(INSTALL_HEADER)
HEADERS = $(libcsoap_la_HEADERS)
ETAGS = etags
@@ -217,18 +220,18 @@ sysconfdir = @sysconfdir@
target_alias = @target_alias@
#
-# $Revision: 1.1 $
+# $Revision: 1.2 $
#
lib_LTLIBRARIES = libcsoap.la
libcsoap_ladir = $(includedir)/libcsoap-@csoap_release@/libcsoap
-libcsoap_la_SOURCES = soap-xml.c soap-fault.c soap-env.c \
- soap-service.c soap-router.c soap-client.c soap-server.c \
- soap-ctx.c soap-admin.c soap-addressing.c soap-transport.c \
- soap-nudp.c soap-nhttp.c soap-wsil.c $(am__append_1)
-libcsoap_la_HEADERS = soap-fault.h soap-env.h soap-service.h \
- soap-router.h soap-client.h soap-server.h soap-ctx.h \
- soap-addressing.h soap-transport.h soap-admin.h soap-wsil.h \
- soap-nudp.h soap-nhttp.h soap-xml.h $(am__append_2)
+libcsoap_la_SOURCES = soap-addressing.c soap-admin.c soap-client.c \
+ soap-ctx.c soap-env.c soap-fault.c soap-logging.c soap-nhttp.c \
+ soap-nudp.c soap-router.c soap-service.c soap-server.c \
+ soap-transport.c soap-wsil.c soap-xml.c $(am__append_1)
+libcsoap_la_HEADERS = soap-addressing.h soap-admin.h soap-client.h \
+ soap-ctx.h soap-env.h soap-fault.h soap-logging.h soap-nhttp.h \
+ soap-nudp.h soap-router.h soap-service.h soap-server.h \
+ soap-transport.h soap-wsil.h soap-xml.h $(am__append_2)
libcsoap_la_LDFLAGS = -version-info @csoap_version@ -release @csoap_release@
libcsoap_la_CFLAGS = -I${top_srcdir} -D__CSOAP_INTERNAL=1
all: all-am
@@ -306,6 +309,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcsoap_la-soap-ctx.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcsoap_la-soap-env.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcsoap_la-soap-fault.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcsoap_la-soap-logging.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcsoap_la-soap-nhttp.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcsoap_la-soap-nudp.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcsoap_la-soap-router.Plo@am__quote@
@@ -337,19 +341,33 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
-libcsoap_la-soap-xml.lo: soap-xml.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -MT libcsoap_la-soap-xml.lo -MD -MP -MF "$(DEPDIR)/libcsoap_la-soap-xml.Tpo" -c -o libcsoap_la-soap-xml.lo `test -f 'soap-xml.c' || echo '$(srcdir)/'`soap-xml.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libcsoap_la-soap-xml.Tpo" "$(DEPDIR)/libcsoap_la-soap-xml.Plo"; else rm -f "$(DEPDIR)/libcsoap_la-soap-xml.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='soap-xml.c' object='libcsoap_la-soap-xml.lo' libtool=yes @AMDEPBACKSLASH@
+libcsoap_la-soap-addressing.lo: soap-addressing.c
+@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -MT libcsoap_la-soap-addressing.lo -MD -MP -MF "$(DEPDIR)/libcsoap_la-soap-addressing.Tpo" -c -o libcsoap_la-soap-addressing.lo `test -f 'soap-addressing.c' || echo '$(srcdir)/'`soap-addressing.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libcsoap_la-soap-addressing.Tpo" "$(DEPDIR)/libcsoap_la-soap-addressing.Plo"; else rm -f "$(DEPDIR)/libcsoap_la-soap-addressing.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='soap-addressing.c' object='libcsoap_la-soap-addressing.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -c -o libcsoap_la-soap-xml.lo `test -f 'soap-xml.c' || echo '$(srcdir)/'`soap-xml.c
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -c -o libcsoap_la-soap-addressing.lo `test -f 'soap-addressing.c' || echo '$(srcdir)/'`soap-addressing.c
-libcsoap_la-soap-fault.lo: soap-fault.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -MT libcsoap_la-soap-fault.lo -MD -MP -MF "$(DEPDIR)/libcsoap_la-soap-fault.Tpo" -c -o libcsoap_la-soap-fault.lo `test -f 'soap-fault.c' || echo '$(srcdir)/'`soap-fault.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libcsoap_la-soap-fault.Tpo" "$(DEPDIR)/libcsoap_la-soap-fault.Plo"; else rm -f "$(DEPDIR)/libcsoap_la-soap-fault.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='soap-fault.c' object='libcsoap_la-soap-fault.lo' libtool=yes @AMDEPBACKSLASH@
+libcsoap_la-soap-admin.lo: soap-admin.c
+@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -MT libcsoap_la-soap-admin.lo -MD -MP -MF "$(DEPDIR)/libcsoap_la-soap-admin.Tpo" -c -o libcsoap_la-soap-admin.lo `test -f 'soap-admin.c' || echo '$(srcdir)/'`soap-admin.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libcsoap_la-soap-admin.Tpo" "$(DEPDIR)/libcsoap_la-soap-admin.Plo"; else rm -f "$(DEPDIR)/libcsoap_la-soap-admin.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='soap-admin.c' object='libcsoap_la-soap-admin.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -c -o libcsoap_la-soap-fault.lo `test -f 'soap-fault.c' || echo '$(srcdir)/'`soap-fault.c
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -c -o libcsoap_la-soap-admin.lo `test -f 'soap-admin.c' || echo '$(srcdir)/'`soap-admin.c
+
+libcsoap_la-soap-client.lo: soap-client.c
+@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -MT libcsoap_la-soap-client.lo -MD -MP -MF "$(DEPDIR)/libcsoap_la-soap-client.Tpo" -c -o libcsoap_la-soap-client.lo `test -f 'soap-client.c' || echo '$(srcdir)/'`soap-client.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libcsoap_la-soap-client.Tpo" "$(DEPDIR)/libcsoap_la-soap-client.Plo"; else rm -f "$(DEPDIR)/libcsoap_la-soap-client.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='soap-client.c' object='libcsoap_la-soap-client.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -c -o libcsoap_la-soap-client.lo `test -f 'soap-client.c' || echo '$(srcdir)/'`soap-client.c
+
+libcsoap_la-soap-ctx.lo: soap-ctx.c
+@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -MT libcsoap_la-soap-ctx.lo -MD -MP -MF "$(DEPDIR)/libcsoap_la-soap-ctx.Tpo" -c -o libcsoap_la-soap-ctx.lo `test -f 'soap-ctx.c' || echo '$(srcdir)/'`soap-ctx.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libcsoap_la-soap-ctx.Tpo" "$(DEPDIR)/libcsoap_la-soap-ctx.Plo"; else rm -f "$(DEPDIR)/libcsoap_la-soap-ctx.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='soap-ctx.c' object='libcsoap_la-soap-ctx.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -c -o libcsoap_la-soap-ctx.lo `test -f 'soap-ctx.c' || echo '$(srcdir)/'`soap-ctx.c
libcsoap_la-soap-env.lo: soap-env.c
@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -MT libcsoap_la-soap-env.lo -MD -MP -MF "$(DEPDIR)/libcsoap_la-soap-env.Tpo" -c -o libcsoap_la-soap-env.lo `test -f 'soap-env.c' || echo '$(srcdir)/'`soap-env.c; \
@@ -358,12 +376,33 @@ libcsoap_la-soap-env.lo: soap-env.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -c -o libcsoap_la-soap-env.lo `test -f 'soap-env.c' || echo '$(srcdir)/'`soap-env.c
-libcsoap_la-soap-service.lo: soap-service.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -MT libcsoap_la-soap-service.lo -MD -MP -MF "$(DEPDIR)/libcsoap_la-soap-service.Tpo" -c -o libcsoap_la-soap-service.lo `test -f 'soap-service.c' || echo '$(srcdir)/'`soap-service.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libcsoap_la-soap-service.Tpo" "$(DEPDIR)/libcsoap_la-soap-service.Plo"; else rm -f "$(DEPDIR)/libcsoap_la-soap-service.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='soap-service.c' object='libcsoap_la-soap-service.lo' libtool=yes @AMDEPBACKSLASH@
+libcsoap_la-soap-fault.lo: soap-fault.c
+@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -MT libcsoap_la-soap-fault.lo -MD -MP -MF "$(DEPDIR)/libcsoap_la-soap-fault.Tpo" -c -o libcsoap_la-soap-fault.lo `test -f 'soap-fault.c' || echo '$(srcdir)/'`soap-fault.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libcsoap_la-soap-fault.Tpo" "$(DEPDIR)/libcsoap_la-soap-fault.Plo"; else rm -f "$(DEPDIR)/libcsoap_la-soap-fault.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='soap-fault.c' object='libcsoap_la-soap-fault.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -c -o libcsoap_la-soap-service.lo `test -f 'soap-service.c' || echo '$(srcdir)/'`soap-service.c
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -c -o libcsoap_la-soap-fault.lo `test -f 'soap-fault.c' || echo '$(srcdir)/'`soap-fault.c
+
+libcsoap_la-soap-logging.lo: soap-logging.c
+@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -MT libcsoap_la-soap-logging.lo -MD -MP -MF "$(DEPDIR)/libcsoap_la-soap-logging.Tpo" -c -o libcsoap_la-soap-logging.lo `test -f 'soap-logging.c' || echo '$(srcdir)/'`soap-logging.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libcsoap_la-soap-logging.Tpo" "$(DEPDIR)/libcsoap_la-soap-logging.Plo"; else rm -f "$(DEPDIR)/libcsoap_la-soap-logging.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='soap-logging.c' object='libcsoap_la-soap-logging.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -c -o libcsoap_la-soap-logging.lo `test -f 'soap-logging.c' || echo '$(srcdir)/'`soap-logging.c
+
+libcsoap_la-soap-nhttp.lo: soap-nhttp.c
+@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -MT libcsoap_la-soap-nhttp.lo -MD -MP -MF "$(DEPDIR)/libcsoap_la-soap-nhttp.Tpo" -c -o libcsoap_la-soap-nhttp.lo `test -f 'soap-nhttp.c' || echo '$(srcdir)/'`soap-nhttp.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libcsoap_la-soap-nhttp.Tpo" "$(DEPDIR)/libcsoap_la-soap-nhttp.Plo"; else rm -f "$(DEPDIR)/libcsoap_la-soap-nhttp.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='soap-nhttp.c' object='libcsoap_la-soap-nhttp.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -c -o libcsoap_la-soap-nhttp.lo `test -f 'soap-nhttp.c' || echo '$(srcdir)/'`soap-nhttp.c
+
+libcsoap_la-soap-nudp.lo: soap-nudp.c
+@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -MT libcsoap_la-soap-nudp.lo -MD -MP -MF "$(DEPDIR)/libcsoap_la-soap-nudp.Tpo" -c -o libcsoap_la-soap-nudp.lo `test -f 'soap-nudp.c' || echo '$(srcdir)/'`soap-nudp.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libcsoap_la-soap-nudp.Tpo" "$(DEPDIR)/libcsoap_la-soap-nudp.Plo"; else rm -f "$(DEPDIR)/libcsoap_la-soap-nudp.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='soap-nudp.c' object='libcsoap_la-soap-nudp.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -c -o libcsoap_la-soap-nudp.lo `test -f 'soap-nudp.c' || echo '$(srcdir)/'`soap-nudp.c
libcsoap_la-soap-router.lo: soap-router.c
@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -MT libcsoap_la-soap-router.lo -MD -MP -MF "$(DEPDIR)/libcsoap_la-soap-router.Tpo" -c -o libcsoap_la-soap-router.lo `test -f 'soap-router.c' || echo '$(srcdir)/'`soap-router.c; \
@@ -372,12 +411,12 @@ libcsoap_la-soap-router.lo: soap-router.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -c -o libcsoap_la-soap-router.lo `test -f 'soap-router.c' || echo '$(srcdir)/'`soap-router.c
-libcsoap_la-soap-client.lo: soap-client.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -MT libcsoap_la-soap-client.lo -MD -MP -MF "$(DEPDIR)/libcsoap_la-soap-client.Tpo" -c -o libcsoap_la-soap-client.lo `test -f 'soap-client.c' || echo '$(srcdir)/'`soap-client.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libcsoap_la-soap-client.Tpo" "$(DEPDIR)/libcsoap_la-soap-client.Plo"; else rm -f "$(DEPDIR)/libcsoap_la-soap-client.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='soap-client.c' object='libcsoap_la-soap-client.lo' libtool=yes @AMDEPBACKSLASH@
+libcsoap_la-soap-service.lo: soap-service.c
+@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -MT libcsoap_la-soap-service.lo -MD -MP -MF "$(DEPDIR)/libcsoap_la-soap-service.Tpo" -c -o libcsoap_la-soap-service.lo `test -f 'soap-service.c' || echo '$(srcdir)/'`soap-service.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libcsoap_la-soap-service.Tpo" "$(DEPDIR)/libcsoap_la-soap-service.Plo"; else rm -f "$(DEPDIR)/libcsoap_la-soap-service.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='soap-service.c' object='libcsoap_la-soap-service.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -c -o libcsoap_la-soap-client.lo `test -f 'soap-client.c' || echo '$(srcdir)/'`soap-client.c
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -c -o libcsoap_la-soap-service.lo `test -f 'soap-service.c' || echo '$(srcdir)/'`soap-service.c
libcsoap_la-soap-server.lo: soap-server.c
@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -MT libcsoap_la-soap-server.lo -MD -MP -MF "$(DEPDIR)/libcsoap_la-soap-server.Tpo" -c -o libcsoap_la-soap-server.lo `test -f 'soap-server.c' || echo '$(srcdir)/'`soap-server.c; \
@@ -386,27 +425,6 @@ libcsoap_la-soap-server.lo: soap-server.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -c -o libcsoap_la-soap-server.lo `test -f 'soap-server.c' || echo '$(srcdir)/'`soap-server.c
-libcsoap_la-soap-ctx.lo: soap-ctx.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -MT libcsoap_la-soap-ctx.lo -MD -MP -MF "$(DEPDIR)/libcsoap_la-soap-ctx.Tpo" -c -o libcsoap_la-soap-ctx.lo `test -f 'soap-ctx.c' || echo '$(srcdir)/'`soap-ctx.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libcsoap_la-soap-ctx.Tpo" "$(DEPDIR)/libcsoap_la-soap-ctx.Plo"; else rm -f "$(DEPDIR)/libcsoap_la-soap-ctx.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='soap-ctx.c' object='libcsoap_la-soap-ctx.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -c -o libcsoap_la-soap-ctx.lo `test -f 'soap-ctx.c' || echo '$(srcdir)/'`soap-ctx.c
-
-libcsoap_la-soap-admin.lo: soap-admin.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -MT libcsoap_la-soap-admin.lo -MD -MP -MF "$(DEPDIR)/libcsoap_la-soap-admin.Tpo" -c -o libcsoap_la-soap-admin.lo `test -f 'soap-admin.c' || echo '$(srcdir)/'`soap-admin.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libcsoap_la-soap-admin.Tpo" "$(DEPDIR)/libcsoap_la-soap-admin.Plo"; else rm -f "$(DEPDIR)/libcsoap_la-soap-admin.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='soap-admin.c' object='libcsoap_la-soap-admin.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -c -o libcsoap_la-soap-admin.lo `test -f 'soap-admin.c' || echo '$(srcdir)/'`soap-admin.c
-
-libcsoap_la-soap-addressing.lo: soap-addressing.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -MT libcsoap_la-soap-addressing.lo -MD -MP -MF "$(DEPDIR)/libcsoap_la-soap-addressing.Tpo" -c -o libcsoap_la-soap-addressing.lo `test -f 'soap-addressing.c' || echo '$(srcdir)/'`soap-addressing.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libcsoap_la-soap-addressing.Tpo" "$(DEPDIR)/libcsoap_la-soap-addressing.Plo"; else rm -f "$(DEPDIR)/libcsoap_la-soap-addressing.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='soap-addressing.c' object='libcsoap_la-soap-addressing.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -c -o libcsoap_la-soap-addressing.lo `test -f 'soap-addressing.c' || echo '$(srcdir)/'`soap-addressing.c
-
libcsoap_la-soap-transport.lo: soap-transport.c
@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -MT libcsoap_la-soap-transport.lo -MD -MP -MF "$(DEPDIR)/libcsoap_la-soap-transport.Tpo" -c -o libcsoap_la-soap-transport.lo `test -f 'soap-transport.c' || echo '$(srcdir)/'`soap-transport.c; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libcsoap_la-soap-transport.Tpo" "$(DEPDIR)/libcsoap_la-soap-transport.Plo"; else rm -f "$(DEPDIR)/libcsoap_la-soap-transport.Tpo"; exit 1; fi
@@ -414,20 +432,6 @@ libcsoap_la-soap-transport.lo: soap-transport.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -c -o libcsoap_la-soap-transport.lo `test -f 'soap-transport.c' || echo '$(srcdir)/'`soap-transport.c
-libcsoap_la-soap-nudp.lo: soap-nudp.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -MT libcsoap_la-soap-nudp.lo -MD -MP -MF "$(DEPDIR)/libcsoap_la-soap-nudp.Tpo" -c -o libcsoap_la-soap-nudp.lo `test -f 'soap-nudp.c' || echo '$(srcdir)/'`soap-nudp.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libcsoap_la-soap-nudp.Tpo" "$(DEPDIR)/libcsoap_la-soap-nudp.Plo"; else rm -f "$(DEPDIR)/libcsoap_la-soap-nudp.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='soap-nudp.c' object='libcsoap_la-soap-nudp.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -c -o libcsoap_la-soap-nudp.lo `test -f 'soap-nudp.c' || echo '$(srcdir)/'`soap-nudp.c
-
-libcsoap_la-soap-nhttp.lo: soap-nhttp.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -MT libcsoap_la-soap-nhttp.lo -MD -MP -MF "$(DEPDIR)/libcsoap_la-soap-nhttp.Tpo" -c -o libcsoap_la-soap-nhttp.lo `test -f 'soap-nhttp.c' || echo '$(srcdir)/'`soap-nhttp.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libcsoap_la-soap-nhttp.Tpo" "$(DEPDIR)/libcsoap_la-soap-nhttp.Plo"; else rm -f "$(DEPDIR)/libcsoap_la-soap-nhttp.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='soap-nhttp.c' object='libcsoap_la-soap-nhttp.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -c -o libcsoap_la-soap-nhttp.lo `test -f 'soap-nhttp.c' || echo '$(srcdir)/'`soap-nhttp.c
-
libcsoap_la-soap-wsil.lo: soap-wsil.c
@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -MT libcsoap_la-soap-wsil.lo -MD -MP -MF "$(DEPDIR)/libcsoap_la-soap-wsil.Tpo" -c -o libcsoap_la-soap-wsil.lo `test -f 'soap-wsil.c' || echo '$(srcdir)/'`soap-wsil.c; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libcsoap_la-soap-wsil.Tpo" "$(DEPDIR)/libcsoap_la-soap-wsil.Plo"; else rm -f "$(DEPDIR)/libcsoap_la-soap-wsil.Tpo"; exit 1; fi
@@ -435,6 +439,13 @@ libcsoap_la-soap-wsil.lo: soap-wsil.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -c -o libcsoap_la-soap-wsil.lo `test -f 'soap-wsil.c' || echo '$(srcdir)/'`soap-wsil.c
+libcsoap_la-soap-xml.lo: soap-xml.c
+@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -MT libcsoap_la-soap-xml.lo -MD -MP -MF "$(DEPDIR)/libcsoap_la-soap-xml.Tpo" -c -o libcsoap_la-soap-xml.lo `test -f 'soap-xml.c' || echo '$(srcdir)/'`soap-xml.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libcsoap_la-soap-xml.Tpo" "$(DEPDIR)/libcsoap_la-soap-xml.Plo"; else rm -f "$(DEPDIR)/libcsoap_la-soap-xml.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='soap-xml.c' object='libcsoap_la-soap-xml.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -c -o libcsoap_la-soap-xml.lo `test -f 'soap-xml.c' || echo '$(srcdir)/'`soap-xml.c
+
libcsoap_la-soap-xmlsec.lo: soap-xmlsec.c
@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcsoap_la_CFLAGS) $(CFLAGS) -MT libcsoap_la-soap-xmlsec.lo -MD -MP -MF "$(DEPDIR)/libcsoap_la-soap-xmlsec.Tpo" -c -o libcsoap_la-soap-xmlsec.lo `test -f 'soap-xmlsec.c' || echo '$(srcdir)/'`soap-xmlsec.c; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libcsoap_la-soap-xmlsec.Tpo" "$(DEPDIR)/libcsoap_la-soap-xmlsec.Plo"; else rm -f "$(DEPDIR)/libcsoap_la-soap-xmlsec.Tpo"; exit 1; fi
diff --git a/libcsoap/soap-addressing.c b/libcsoap/soap-addressing.c
index 6e894f1..53ec0b4 100644
--- a/libcsoap/soap-addressing.c
+++ b/libcsoap/soap-addressing.c
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: soap-addressing.c,v 1.11 2006/12/14 19:39:05 m0gg Exp $
+* $Id: soap-addressing.c,v 1.12 2007/11/03 22:40:09 m0gg Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2006 Heiko Ronsdorf
@@ -58,15 +58,15 @@
#endif
#include <libxml/tree.h>
-#include <libxml/xpath.h>
#include <libxml/uri.h>
#include <nanohttp/nanohttp-error.h>
-#include <nanohttp/nanohttp-logging.h>
+#include "soap-logging.h"
#include "soap-xml.h"
#include "soap-fault.h"
#include "soap-env.h"
+#include "soap-ctx.h"
#include "soap-server.h"
#include "soap-addressing.h"
@@ -81,7 +81,7 @@ _soap_addressing_uuid_error(uint32_t status)
case uuid_s_invalid_string_uuid:
return "The string representation of an UUID is not valid";
case uuid_s_no_memory:
- /* XXX: From FreeBSD 6.2 UUID(3) ??? */
+ /** @todo: From FreeBSD 6.2 UUID(3), replace with app. msg! */
return "The meaning of the code escaped the writers mind";
default:
return "Unkown error during UUID creation";
@@ -98,20 +98,20 @@ _soap_addressing_generate_id(void)
uuid_create(&uuid, &status);
if (status != uuid_s_ok)
{
- log_error2("uuidcreate failed (%s)", _soap_addressing_uuid_error(status));
+ log_error("uuidcreate failed (%s)", _soap_addressing_uuid_error(status));
return NULL;
}
uuid_to_string(&uuid, &buf, &status);
if (status != uuid_s_ok)
{
- log_error2("uuid_to_string failed (%s)", _soap_addressing_uuid_error(status));
+ log_error("uuid_to_string failed (%s)", _soap_addressing_uuid_error(status));
return NULL;
}
if (!(ret = (char *)malloc(128)))
{
- log_error2("malloc failed (%s)", strerror(errno));
+ log_error("malloc failed (%s)", strerror(errno));
free(buf);
return NULL;
}
@@ -132,7 +132,7 @@ _soap_addressing_generate_id(void)
if (!(ret = (char *)malloc(128)))
{
- log_error2("malloc failed (%s)", strerror(errno));
+ log_error("malloc failed (%s)", strerror(errno));
return NULL;
}
@@ -192,7 +192,7 @@ _soap_addressing_get_child_element(xmlNodePtr parent, const xmlChar *name)
{
xmlNodePtr walker;
- for (walker = soap_xml_get_children(parent); walker; walker = soap_xml_get_next(walker))
+ for (walker = soap_xml_get_children(parent); walker; walker = soap_xml_get_next_element(walker))
{
if (!xmlStrcmp(walker->name, name) && !xmlStrcmp(walker->ns->href, WSA_NAMESPACE))
return walker;
@@ -338,7 +338,7 @@ soap_addressing_set_message_id_string(struct SoapEnv *envelope, xmlChar *id)
else
tmp = id;
- log_verbose2("setting message id = \"%s\"", tmp);
+ log_verbose("setting message id = \"%s\"", tmp);
node = _soap_addressing_get_child_element(envelope->header, WSA_MESSAGE_ID);
if (node == NULL)
diff --git a/libcsoap/soap-admin.c b/libcsoap/soap-admin.c
index efc9651..2e6853d 100644
--- a/libcsoap/soap-admin.c
+++ b/libcsoap/soap-admin.c
@@ -1,5 +1,6 @@
+/** @file soap-admin.c SOAP administrator application */
/******************************************************************
-* $Id: soap-admin.c,v 1.11 2006/12/31 17:24:22 m0gg Exp $
+* $Id: soap-admin.c,v 1.12 2007/11/03 22:40:09 m0gg Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -44,8 +45,8 @@
#include <libxml/tree.h>
#include <libxml/uri.h>
-#include <nanohttp/nanohttp-error.h>
#include <nanohttp/nanohttp-common.h>
+#include <nanohttp/nanohttp-error.h>
#include <nanohttp/nanohttp-stream.h>
#include <nanohttp/nanohttp-request.h>
#include <nanohttp/nanohttp-server.h>
@@ -68,31 +69,31 @@ _soap_admin_send_title(httpd_conn_t *conn, const char *title)
"<head>");
http_output_stream_write_string(conn->out,
- "<style>"
- ".logo {"
- " color: #005177;"
- " background-color: transparent;"
- " font-family: Calligraphic, arial, sans-serif;"
- " font-size: 36px;"
- "}"
- "</style>");
+ "<style>"
+ ".logo {"
+ " color: #005177;"
+ " background-color: transparent;"
+ " font-family: Calligraphic, arial, sans-serif;"
+ " font-size: 36px;"
+ "}"
+ "</style>"
+ "</head>"
+ "<body>"
+ "<span class=\"logo\">csoap</span> ");
- http_output_stream_write_string(conn->out,
- "</head>"
- "<body>"
- "<span class=\"logo\">csoap</span> ");
http_output_stream_write_string(conn->out, title);
http_output_stream_write_string(conn->out, "<hr />");
-
- return;
}
static inline void
_soap_admin_send_footer(httpd_conn_t *conn)
{
- http_output_stream_write_string(conn->out, "</body></html>");
-
- return;
+ http_output_stream_write_string(conn->out,
+ "<hr />"
+ "<a href=\"" CSOAP_ADMIN_CONTEXT "\">Admin page</a> "
+ "<a href=\"http://csoap.sf.net/\">cSOAP Home</a>"
+ "</body>"
+ "</html>");
}
static void
@@ -118,8 +119,6 @@ _soap_admin_list_routers(httpd_conn_t *conn)
http_output_stream_write_string(conn->out, "</ul>");
_soap_admin_send_footer(conn);
-
- return;
}
static void
@@ -136,7 +135,7 @@ _soap_admin_list_services(httpd_conn_t *conn, const char *routername)
if (!router)
{
http_output_stream_write_string(conn->out, "Router not found!");
- http_output_stream_write_string(conn->out, "</body></html>");
+ _soap_admin_send_footer(conn);
return;
}
@@ -174,8 +173,6 @@ _soap_admin_list_services(httpd_conn_t *conn, const char *routername)
http_output_stream_write_string(conn->out, "</ul>");
_soap_admin_send_footer(conn);
-
- return;
}
static void
@@ -211,16 +208,13 @@ _soap_admin_handle_get(httpd_conn_t * conn, struct hrequest_t * req)
"<ul>"
"<li><a href=\"?" CSOAP_ADMIN_QUERY_ROUTERS "\">Routers</a></li>"
"<li><a href=\"../inspection.wsil\">inspection.wsil</a> (try: -CSOAPwsil)</li>"
- "<li><a href=\"../nhttp\">nanoHTTP</a></li>"
+ "<li><a href=\"" NHTTPD_ADMIN_CONTEXT "\">nanoHTTP</a> (try: -NHTTPDadmin)</li>"
"</ul>");
_soap_admin_send_footer(conn);
}
-
- return;
}
-
static void
_soap_admin_entry(httpd_conn_t * conn, struct hrequest_t * req)
{
@@ -232,21 +226,18 @@ _soap_admin_entry(httpd_conn_t * conn, struct hrequest_t * req)
{
httpd_send_header(conn, 200, HTTP_STATUS_200_REASON_PHRASE);
http_output_stream_write_string(conn->out,
- "<html>"
- "<head>"
- "</head>"
- "<body>"
- "<h1>Sorry!</h1>"
- "<hr />"
- "<div>POST Service is not implemented now. Use your browser</div>"
- "</body>"
- "</html>");
+ "<html>"
+ "<head>"
+ "</head>"
+ "<body>"
+ "<h1>Sorry!</h1>"
+ "<hr />"
+ "<div>Only GET method is implemented now. Use your browser.</div>"
+ "</body>"
+ "</html>");
}
-
- return;
}
-
herror_t
soap_admin_init_args(int argc, char **argv)
{
@@ -256,10 +247,9 @@ soap_admin_init_args(int argc, char **argv)
if (!strcmp(argv[i], CSOAP_ENABLE_ADMIN)) {
- httpd_register("/csoap", _soap_admin_entry);
+ httpd_register(CSOAP_ADMIN_CONTEXT, _soap_admin_entry);
break;
}
}
-
return H_OK;
}
diff --git a/libcsoap/soap-admin.h b/libcsoap/soap-admin.h
index 2e0ca80..838a75b 100644
--- a/libcsoap/soap-admin.h
+++ b/libcsoap/soap-admin.h
@@ -1,8 +1,9 @@
/******************************************************************
- * $Id: soap-admin.h,v 1.5 2006/12/31 17:24:22 m0gg Exp $
+ * $Id: soap-admin.h,v 1.6 2007/11/03 22:40:09 m0gg Exp $
*
* CSOAP Project: A SOAP client/server library in C
- * Copyright (C) 2003 Ferhat Ayaz
+ * Copyright (C) 2003-2006 Ferhat Ayaz
+ * Copyright (C) 2007 Heiko Ronsdorf
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -24,6 +25,13 @@
#ifndef __csoap_admin_h
#define __csoap_admin_h
+/** @file soap-admin.h HTTP administrator interface
+ *
+ * @defgroup CSOAP_ADMIN
+ * @ingroup CSOAP
+ */
+/**@{*/
+
#define CSOAP_ENABLE_ADMIN "-CSOAPadmin"
#define CSOAP_ADMIN_QUERY_ROUTERS "routers"
@@ -36,19 +44,19 @@
#define CSOAP_ADMIN_URN "urn"
#define CSOAP_ADMIN_METHOD "method"
+#define CSOAP_ADMIN_CONTEXT "csoap"
+
#ifdef __cplusplus
extern "C" {
#endif
-/**
- *
- * Initializes the soap admin HTTP interface with commandline arguments.
+/** This function initializes the cSOAP admin HTTP interface with
+ * commandline arguments.
*
* @param argc commandline arg count
* @param argv commandline arg vector
*
- * @returns 1 if success, 0 otherwise
- *
+ * @returns H_OK on success.
*/
extern herror_t soap_admin_init_args(int argc, char **argv);
@@ -56,4 +64,6 @@ extern herror_t soap_admin_init_args(int argc, char **argv);
}
#endif
+/**@}*/
+
#endif
diff --git a/libcsoap/soap-client.c b/libcsoap/soap-client.c
index cf2479f..65e21f4 100644
--- a/libcsoap/soap-client.c
+++ b/libcsoap/soap-client.c
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: soap-client.c,v 1.33 2006/11/29 11:04:24 m0gg Exp $
+* $Id: soap-client.c,v 1.34 2007/11/03 22:40:09 m0gg Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -33,8 +33,8 @@
#include <libxml/uri.h>
#include <nanohttp/nanohttp-error.h>
-#include <nanohttp/nanohttp-logging.h>
+#include "soap-logging.h"
#include "soap-fault.h"
#include "soap-env.h"
#include "soap-ctx.h"
@@ -91,14 +91,14 @@ soap_client_init_args(int argc, char **argv)
if ((status = soap_xmlsec_client_init_args(argc, argv)) != H_OK)
{
- log_error2("soap_xmlsec_client_init_args failed (%s)", herror_message(status));
+ log_error("soap_xmlsec_client_init_args failed (%s)", herror_message(status));
return status;
}
#endif
if ((status = soap_transport_client_init_args(argc, argv)) != H_OK)
{
- log_error2("soap_transport_client_init_args failed (%s)", herror_message(status));
+ log_error("soap_transport_client_init_args failed (%s)", herror_message(status));
return status;
}
@@ -119,71 +119,71 @@ soap_client_invoke(struct SoapCtx *req, struct SoapCtx **res, const char *url, c
herror_t status;
char *id;
- log_verbose2("action = \"%s\"", action);
+ log_verbose("action = \"%s\"", action);
soap_addressing_set_action_string(req->env, action);
- log_verbose2("url = \"%s\"", url);
+ log_verbose("url = \"%s\"", url);
soap_addressing_set_to_address_string(req->env, url);
- log_verbose2("from = \"%s\"", soap_transport_get_name());
+ log_verbose("from = \"%s\"", soap_transport_get_name());
soap_addressing_set_from_address_string(req->env, soap_transport_get_name());
soap_addressing_set_message_id_string(req->env, NULL);
id = soap_addressing_get_message_id_string(req->env);
- log_verbose2("generated message id = \"%s\"", id);
+ log_verbose("generated message id = \"%s\"", id);
free(id);
#ifdef HAVE_XMLSEC1
if ((status = soap_xmlsec_encrypt(req)) != H_OK)
{
- log_error2("soap_xmlsec_encrypt failed (%s)", herror_message(status));
+ log_error("soap_xmlsec_encrypt failed (%s)", herror_message(status));
if (_soap_client_force_encrypt)
return status;
}
else
{
- log_verbose1("soap_xmlsec_encrypt succeed");
+ log_verbose("soap_xmlsec_encrypt succeed");
}
if ((status = soap_xmlsec_sign(req)) != H_OK)
{
- log_error2("soap_xmlsec_sign failed (%s)", herror_message(status));
+ log_error("soap_xmlsec_sign failed (%s)", herror_message(status));
if (_soap_client_force_sign)
return status;
}
else
{
- log_verbose1("soap_xmlsec_encrypt succeed");
+ log_verbose("soap_xmlsec_encrypt succeed");
}
#endif
if ((status = soap_transport_client_invoke(req, res)) != H_OK)
{
- log_error2("soap_transport_client_invoke failed (%s)", herror_message(status));
+ log_error("soap_transport_client_invoke failed (%s)", herror_message(status));
return status;
}
#ifdef HAVE_XMLSEC1
if ((status = soap_xmlsec_verify(*res)) != H_OK)
{
- log_error2("soap_xmlsec_verify failed (%s)", herror_message(status));
+ log_error("soap_xmlsec_verify failed (%s)", herror_message(status));
if (_soap_client_force_verify)
return status;
}
else
{
- log_verbose1("soap_xmlsec_verify succeed");
+ log_verbose("soap_xmlsec_verify succeed");
}
if ((status = soap_xmlsec_decrypt(*res)) != H_OK)
{
- log_error2("soap_xmlsec_decrypt failed (%s)", herror_message(status));
+ log_error("soap_xmlsec_decrypt failed (%s)", herror_message(status));
if (_soap_client_force_decrypt)
return status;
}
else
{
- log_verbose1("soap_xmlsec_decrypt succeed");
+ log_verbose("soap_xmlsec_decrypt succeed");
}
#endif
diff --git a/libcsoap/soap-ctx.c b/libcsoap/soap-ctx.c
index 4d595f4..3adbc5e 100755
--- a/libcsoap/soap-ctx.c
+++ b/libcsoap/soap-ctx.c
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: soap-ctx.c,v 1.14 2006/11/25 15:06:57 m0gg Exp $
+ * $Id: soap-ctx.c,v 1.15 2007/11/03 22:40:09 m0gg Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003-2004 Ferhat Ayaz
@@ -45,8 +45,8 @@
#include <nanohttp/nanohttp-error.h>
#include <nanohttp/nanohttp-common.h>
-#include <nanohttp/nanohttp-logging.h>
+#include "soap-logging.h"
#include "soap-fault.h"
#include "soap-env.h"
#include "soap-ctx.h"
@@ -58,7 +58,7 @@ soap_ctx_new(struct SoapEnv * env) /* should only be used internally */
if (!(ctx = (struct SoapCtx *) malloc(sizeof(struct SoapCtx))))
{
- log_error2("malloc failed (%s)", strerror(errno));
+ log_error("malloc failed (%s)", strerror(errno));
return NULL;
}
diff --git a/libcsoap/soap-env.c b/libcsoap/soap-env.c
index 99cf3ba..09386c4 100644
--- a/libcsoap/soap-env.c
+++ b/libcsoap/soap-env.c
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: soap-env.c,v 1.27 2006/11/26 20:13:05 m0gg Exp $
+* $Id: soap-env.c,v 1.28 2007/11/03 22:40:09 m0gg Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -50,12 +50,11 @@
#endif
#include <libxml/tree.h>
-#include <libxml/xpath.h>
#include <libxml/xmlstring.h>
#include <nanohttp/nanohttp-error.h>
-#include <nanohttp/nanohttp-logging.h>
+#include "soap-logging.h"
#include "soap-xml.h"
#include "soap-fault.h"
#include "soap-env.h"
@@ -172,7 +171,7 @@ soap_env_new_from_doc(xmlDocPtr doc, struct SoapEnv ** out)
if (doc == NULL)
{
- log_error1("Cannot create XML document!");
+ log_error("Cannot create XML document!");
return herror_new("soap_env_new_from_doc",
GENERAL_INVALID_PARAM,
"XML Document (xmlDocPtr) is NULL");
@@ -180,14 +179,14 @@ soap_env_new_from_doc(xmlDocPtr doc, struct SoapEnv ** out)
if (!(root = xmlDocGetRootElement(doc)))
{
- log_error1("XML document is empty!");
+ log_error("XML document is empty!");
return herror_new("soap_env_new_from_doc",
XML_ERROR_EMPTY_DOCUMENT, "XML Document is empty!");
}
if (!(env = (struct SoapEnv *) malloc(sizeof(struct SoapEnv))))
{
- log_error2("malloc failed (%s)", strerror(errno));
+ log_error("malloc failed (%s)", strerror(errno));
return herror_new("soap_env_from_doc", GENERAL_INVALID_PARAM, "malloc failed (%s)", strerror(errno));
}
@@ -294,8 +293,8 @@ soap_env_new_with_method(const char *urn, const char *method, struct SoapEnv **
xmlDocPtr env;
xmlChar buffer[1054];
- log_verbose2("URN = '%s'", urn);
- log_verbose2("Method = '%s'", method);
+ log_verbose("URN = '%s'", urn);
+ log_verbose("Method = '%s'", method);
if (!strcmp(urn, ""))
{
@@ -327,7 +326,7 @@ soap_env_add_item(struct SoapEnv * call, const char *type, const char *name, con
if (newNode == NULL)
{
- log_error1("Can not create new XML node");
+ log_error("Can not create new XML node");
return NULL;
}
@@ -335,7 +334,7 @@ soap_env_add_item(struct SoapEnv * call, const char *type, const char *name, con
{
if (!xmlNewProp(newNode, BAD_CAST "xsi:type", BAD_CAST type))
{
- log_error1("Can not create new XML attribute");
+ log_error("Can not create new XML attribute");
return NULL;
}
}
@@ -368,7 +367,7 @@ soap_env_add_attachment(struct SoapEnv * call, const char *name, const char *hre
if (newNode == NULL)
{
- log_error1("Can not create new xml node");
+ log_error("Can not create new xml node");
return NULL;
}
@@ -376,7 +375,7 @@ soap_env_add_attachment(struct SoapEnv * call, const char *name, const char *hre
{
if (!xmlNewProp(newNode, BAD_CAST "href", BAD_CAST href))
{
- log_error1("Can not create new xml attribute");
+ log_error("Can not create new xml attribute");
return NULL;
}
}
@@ -437,7 +436,6 @@ soap_env_free(struct SoapEnv * env)
return;
}
-
xmlNodePtr
soap_env_get_body(struct SoapEnv * env)
{
@@ -445,24 +443,24 @@ soap_env_get_body(struct SoapEnv * env)
if (env == NULL)
{
- log_error1("SOAP envelope is NULL");
+ log_error("SOAP envelope is NULL");
return NULL;
}
if (env->root == NULL)
{
- log_error1("SOAP envelope contains no XML");
+ log_error("SOAP envelope contains no XML");
return NULL;
}
- for (node = soap_xml_get_children(env->root); node; node = soap_xml_get_next(node))
+ for (node = soap_xml_get_children(env->root); node; node = soap_xml_get_next_element(node))
{
if (!xmlStrcmp(node->name, BAD_CAST "Body")
&& !xmlStrcmp(node->ns->href, BAD_CAST soap_env_ns))
return node;
}
- log_error1("Body tag not found!");
+ log_error("Body tag not found!");
return NULL;
}
@@ -474,17 +472,17 @@ soap_env_get_header(struct SoapEnv *env)
if (!env)
{
- log_error1("SoapEnv is NULL");
+ log_error("SoapEnv is NULL");
return NULL;
}
if (!env->root)
{
- log_error1("SoapEnv contains no document");
+ log_error("SoapEnv contains no document");
return NULL;
}
- for (node = soap_xml_get_children(env->root); node; node = soap_xml_get_next(node))
+ for (node = soap_xml_get_children(env->root); node; node = soap_xml_get_next_element(node))
{
if (!xmlStrcmp(node->name, BAD_CAST "Header")
&& !xmlStrcmp(node->ns->href, BAD_CAST soap_env_ns))
@@ -500,19 +498,19 @@ soap_env_get_fault(struct SoapEnv * env)
{
xmlNodePtr node;
- node = soap_env_get_body(env);
-
- if (!node)
+ if (!(node = soap_env_get_body(env)))
+ {
return NULL;
+ }
while (node != NULL)
{
if (!xmlStrcmp(node->name, BAD_CAST "Fault"))
return node;
- node = soap_xml_get_next(node);
+ node = soap_xml_get_next_element(node);
}
-/* log_warn1 ("Node Fault tag found!");*/
+/* log_warn("Node Fault tag found!");*/
return NULL;
}
@@ -524,65 +522,15 @@ soap_env_get_method(struct SoapEnv * env)
if (!(body = soap_env_get_body(env)))
{
- log_verbose1("SoapEnv contains no Body element");
+ log_verbose("SoapEnv contains no Body element");
return NULL;
}
- /* method is the first child */
+ /* The method element has to be the first child element */
return soap_xml_get_children(body);
}
-/* XXX: unused function? */
-xmlNodePtr
-_soap_env_get_body(struct SoapEnv * env)
-{
- xmlNodePtr body;
- xmlNodeSetPtr nodeset;
- xmlXPathObjectPtr xpathobj;
-
- if (env == NULL)
- {
- log_error1("struct SoapEnv is NULL");
- return NULL;
- }
-
- if (env->root == NULL)
- {
- log_error1("struct SoapEnv contains no XML document");
- return NULL;
- }
-
- /*
- find <Body> tag find out namespace xpath: //Envelope/Body/ */
- xpathobj = soap_xpath_eval(env->root->doc, "//Envelope/Body");
-
- if (!xpathobj)
- {
- log_error1("No Body (xpathobj)!");
- return NULL;
- }
-
- if (!(nodeset = xpathobj->nodesetval))
- {
- log_error1("No Body (nodeset)!");
- xmlXPathFreeObject(xpathobj);
- return NULL;
- }
-
- if (nodeset->nodeNr < 1)
- {
- log_error1("No Body (nodeNr)!");
- xmlXPathFreeObject(xpathobj);
- return NULL;
- }
-
- body = nodeset->nodeTab[0]; /* body is <Body> */
- xmlXPathFreeObject(xpathobj);
- return body;
-}
-
-
const char *
soap_env_find_urn(struct SoapEnv * env)
{
@@ -591,14 +539,14 @@ soap_env_find_urn(struct SoapEnv * env)
if (!(body = soap_env_get_body(env)))
{
- log_verbose1("body is NULL");
+ log_verbose("body is NULL");
return NULL;
}
/* node is the first child */
if (!(node = soap_xml_get_children(body)))
{
- log_error1("No namespace found");
+ log_error("No namespace found");
return NULL;
}
@@ -613,8 +561,8 @@ soap_env_find_urn(struct SoapEnv * env)
}
else
{
- static char *empty = "";
- log_warn1("No namespace found");
+ static const char *empty = "";
+ log_warn("No namespace found");
return(empty);
}
@@ -630,19 +578,17 @@ soap_env_find_methodname(struct SoapEnv * env)
if (!(body = soap_env_get_body(env)))
return NULL;
- node = soap_xml_get_children(body); /* node is the first child */
-
- if (node == NULL)
+ /* node is the first child */
+ if (!(node = soap_xml_get_children(body)))
{
- log_error1("No method found");
+ log_error("No method found");
return NULL;
}
if (node->name == NULL)
{
- log_error1("No methodname found");
+ log_error("No methodname found");
return NULL;
-
}
return ((char *) node->name);
diff --git a/libcsoap/soap-fault.c b/libcsoap/soap-fault.c
index 3341f7a..ab56979 100644
--- a/libcsoap/soap-fault.c
+++ b/libcsoap/soap-fault.c
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: soap-fault.c,v 1.16 2006/12/14 19:36:49 m0gg Exp $
+* $Id: soap-fault.c,v 1.17 2007/11/03 22:40:09 m0gg Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -33,11 +33,11 @@
#include <errno.h>
#endif
-#include <libxml/xpath.h>
-
#include <nanohttp/nanohttp-error.h>
-#include <nanohttp/nanohttp-logging.h>
+#include <libxml/tree.h>
+
+#include "soap-logging.h"
#include "soap-xml.h"
#include "soap-env.h"
#include "soap-ctx.h"
@@ -91,7 +91,7 @@ soap_fault_build(int fault_code, const char *fault_string, const char *fault_act
char *buffer;
xmlDocPtr fault; /* result */
- log_verbose1("Build fault");
+ log_verbose("Build fault");
switch (fault_code)
{
@@ -121,10 +121,10 @@ soap_fault_build(int fault_code, const char *fault_string, const char *fault_act
if (detail)
bufferlen += strlen(detail);
- log_verbose2("Creating buffer with %d bytes", bufferlen);
+ log_verbose("Creating buffer with %d bytes", bufferlen);
if (!(buffer = (char *) malloc(bufferlen)))
{
- log_error2("malloc failed (%s)", errno);
+ log_error("malloc failed (%s)", errno);
return NULL;
}
@@ -139,11 +139,11 @@ soap_fault_build(int fault_code, const char *fault_string, const char *fault_act
if (fault == NULL)
{
- log_error1("Cannot create XML document!");
+ log_error("Cannot create XML document!");
return soap_fault_build(fault_code, "Cannot create fault object in XML", soap_server_get_name(), NULL);
}
- log_verbose2("Returning fault (%p)", fault);
+ log_verbose("Returning fault (%p)", fault);
return fault;
}
diff --git a/libcsoap/soap-logging.c b/libcsoap/soap-logging.c
new file mode 100644
index 0000000..1fd0eef
--- /dev/null
+++ b/libcsoap/soap-logging.c
@@ -0,0 +1,150 @@
+/******************************************************************
+* $Id: soap-logging.c,v 1.1 2007/11/03 22:40:09 m0gg Exp $
+*
+* CSOAP Project: A http client/server library in C
+* Copyright (C) 2003 Ferhat Ayaz
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU Library General Public
+* License as published by the Free Software Foundation; either
+* version 2 of the License, or (at your option) any later version.
+*
+* This library 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
+* Library General Public License for more details.
+*
+* You should have received a copy of the GNU Library General Public
+* License along with this library; if not, write to the
+* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+* Boston, MA 02111-1307, USA.
+*
+* Email: ayaz@jprogrammer.net
+******************************************************************/
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_STDIO_H
+#include <stdio.h>
+#endif
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#ifdef HAVE_STDARG_H
+#include <stdarg.h>
+#endif
+
+#ifdef HAVE_SYSLOG_H
+#include <syslog.h>
+#endif
+
+#include "soap-logging.h"
+
+static int _soap_logtype = SOAP_LOG_FOREGROUND;
+static soap_loglevel_t _soap_loglevel = SOAP_LOG_DEBUG;
+static char *_soap_log_logfile = NULL;
+
+soap_loglevel_t
+soap_log_set_loglevel(soap_loglevel_t level)
+{
+ soap_loglevel_t old = _soap_loglevel;
+ _soap_loglevel = level;
+ return old;
+}
+
+soap_loglevel_t
+soap_log_get_loglevel(void)
+{
+ return _soap_loglevel;
+}
+
+int
+soap_log_set_logtype(int type)
+{
+ int old;
+
+ old = _soap_logtype;
+ _soap_logtype = type;
+
+ return old;
+}
+
+const char *
+soap_log_get_logfile(void)
+{
+ return _soap_log_logfile;
+}
+
+void
+soap_log_set_logfile(const char *filename)
+{
+ if (_soap_log_logfile)
+ free(_soap_log_logfile);
+
+ if (filename)
+ _soap_log_logfile = strdup(filename);
+}
+
+void
+_soap_log_printf(soap_loglevel_t level, const char *format, ...)
+{
+ const char *filename;
+ va_list ap;
+
+ if (level < _soap_loglevel)
+ return;
+
+ va_start(ap, format);
+
+ if (_soap_logtype & SOAP_LOG_FOREGROUND)
+ vfprintf(stdout, format, ap);
+
+#ifdef HAVE_SYSLOG_H
+ if (_nanohttp_logtype & SOAP_LOG_SYSLOG)
+ {
+ int syslog_level;
+
+ switch (level)
+ {
+ case SOAP_LOGLEVEL_VERBOSE:
+ case SOAP_LOGLEVEL_DEBUG:
+ syslog_level = LOG_DEBUG;
+ break;
+ case SOAP_LOGLEVEL_INFO:
+ syslog_level = LOG_INFO;
+ break;
+ case SOAP_LOGLEVEL_WARN:
+ syslog_level = LOG_WARNING;
+ break;
+ case SOAP_LOGLEVEL_ERROR:
+ syslog_level = LOG_ERR;
+ break;
+ case SOAP_LOGLEVEL_FATAL:
+ syslog_level = LOG_CRIT;
+ break;
+ }
+ vsyslog(syslog_level, format, ap);
+ }
+#endif
+
+ if ((filename = soap_log_get_logfile()))
+ {
+ FILE *fp;
+
+ if (!(fp = fopen(filename, "a")))
+ fp = fopen(filename, "w");
+
+ if (fp)
+ {
+ vfprintf(fp, format, ap);
+ fflush(fp);
+ fclose(fp);
+ }
+ }
+
+ va_end(ap);
+}
+
diff --git a/libcsoap/soap-logging.h b/libcsoap/soap-logging.h
new file mode 100644
index 0000000..68c9728
--- /dev/null
+++ b/libcsoap/soap-logging.h
@@ -0,0 +1,150 @@
+/******************************************************************
+ * $Id: soap-logging.h,v 1.1 2007/11/03 22:40:09 m0gg Exp $
+ *
+ * CSOAP Project: A http client/server library in C
+ * Copyright (C) 2003-2006 Ferhat Ayaz
+ * Copyright (C) 2007 Heiko Ronsdorf
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Email: hero@persua.de
+ ******************************************************************/
+#ifndef __soap_logging_h
+#define __soap_logging_h
+
+/** @file soap-logging.h Logging definitions and prototypes
+ *
+ * @defgrpoup CSOAP_LOGGING Logging interface
+ * @ingroup CSOAP
+ */
+/**@{*/
+
+/** @defgroup CSOAP_CDMLINE_LOGGING Commandline flags
+ * @ingroup CSOAP_CMDLINE
+ */
+/**@{*/
+#define CSOAP_ARG_LOGFILE "-CSOAPlog"
+#define CSOAP_ARG_LOGLEVEL "-CSOAPloglevel"
+/**@}*/
+
+/** Loglevel definition */
+typedef enum soap_loglevel
+{
+ SOAP_LOG_OFF, /**< Logging completely turned off (use at your own
+ risk). */
+ SOAP_LOG_VERBOSE, /**< Debugging messages thath may overlfow the
+ log */
+ SOAP_LOG_DEBUG, /**< Messages that contain information normallu of
+ use only when debugging the library. */
+ SOAP_LOG_INFO, /**< Infmormational messages */
+ SOAP_LOG_WARN, /**< Warning messages. */
+ SOAP_LOG_ERROR, /**< A condition that should be corrected
+ immediately, such as a broken network
+ connection. */
+ SOAP_LOG_FATAL /**< A panic condition. */
+} soap_loglevel_t;
+
+#define SOAP_LOG_LEVEL_OFF_STRING "OFF"
+#define SOAP_LOG_LEVEL_VERBOSE_STRING "VERBOSE"
+#define SOAP_LOG_LEVEL_DEBUG_STRING "DEBUG"
+#define SOAP_LOG_LEVEL_INFO_STRING "INFO"
+#define SOAP_LOG_LEVEL_WARN_STRING "WARN"
+#define SOAP_LOG_LEVEL_ERROR_STRING "ERROR"
+#define SOAP_LOG_LEVEL_FATAL_STRING "FATAL"
+#define SOAP_LOG_LEVEL_UNKNOWN_STRING "UNKNWON"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** Set the loglevel.
+ *
+ * @param level The new loglevel.
+ *
+ * @return The old loglevel.
+ */
+extern soap_loglevel_t soap_set_loglevel(soap_loglevel_t loglevel);
+
+/** Get the loglevel.
+ *
+ * @return The current loglevel.
+ */
+extern soap_loglevel_t soap_get_loglevel(void);
+
+/** Set the logfile.
+ *
+ * @param filename The filename of the logfile.
+ */
+extern void soap_set_logfile(const char *filename);
+
+/** Get the filename of the logfile.
+ *
+ * @return Pointer to the filename or null otherwise.
+ */
+extern char *soap_get_logfile(void);
+
+#define SOAP_LOG_DISABLED 0x00 /**< Logging disabled */
+#define SOAP_LOG_FOREGROUND 0x01 /**< Logging to stdout enabled */
+#define SOAP_LOG_SYSLOG 0x02 /**< Syslog logging enabled */
+
+/** This function sets the type of logging.
+ *
+ * @return The old logtype.
+ *
+ * @see - SOAP_LOG_DISABLED
+ * - SOAP_LOG_FOREGROUND
+ * - SOAP_LOG_SYSLOG
+ */
+extern int soap_log_set_logtype(int type);
+
+#ifdef WIN32
+#if defined(_MSC_VER) && _MSC_VER <= 1200
+extern char *VisualC_funcname(const char *file, int line); /* not thread safe! */
+#define __FUNCTION__ VisualC_funcname(__FILE__, __LINE__)
+#endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#define log_verbose(fmt, ...) _nanohttp_log_printf(SOAP_LOG_VERBOSE, \
+ SOAP_LOG_LEVEL_VERBOSE_STRING " %s: " fmt "\n", \
+ __FUNCTION__, ## __VA_ARGS__)
+
+#define log_debug(fmt, ...) _nanohttp_log_printf(SOAP_LOG_DEBUG, \
+ SOAP_LOG_LEVEL_DEBUG_STRING " %s: " fmt "\n", \
+ __FUNCTION__, ## __VA_ARGS__)
+
+#define log_info(fmt, ...) _nanohttp_log_printf(SOAP_LOG_INFO, \
+ SOAP_LOG_LEVEL_INFO_STRING " %s: " fmt "\n", \
+ __FUNCTION__, ## __VA_ARGS__)
+
+#define log_warn(fmt, ...) _nanohttp_log_printf(SOAP_LOG_WARN, \
+ SOAP_LOG_LEVEL_WARN_STRING " %s: " fmt "\n", \
+ __FUNCTION__, ## __VA_ARGS__)
+
+#define log_error(fmt, ...) _nanohttp_log_printf(SOAP_LOG_ERROR, \
+ SOAP_LOG_LEVEL_ERROR_STRING " %s: " fmt "\n", \
+ __FUNCTION__, ## __VA_ARGS__)
+
+#define log_fatal(fmt, ...) _nanohttp_log_printf(SOAP_LOG_FATAL, \
+ SOAP_LOG_LEVEL_FATAL_STRING " %s: " fmt "\n", \
+ __FUNCTION__, ## __VA_ARGS__)
+
+/**@}*/
+
+#endif
diff --git a/libcsoap/soap-nhttp.c b/libcsoap/soap-nhttp.c
index 833b78f..1637754 100644
--- a/libcsoap/soap-nhttp.c
+++ b/libcsoap/soap-nhttp.c
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: soap-nhttp.c,v 1.12 2007/01/01 18:58:05 m0gg Exp $
+* $Id: soap-nhttp.c,v 1.13 2007/11/03 22:40:09 m0gg Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -19,7 +19,7 @@
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*
-* Email: ayaz@jprogrammer.net
+* Email: hero@persua.de
******************************************************************/
#ifdef HAVE_CONFIG_H
#include <config.h>
@@ -39,11 +39,9 @@
#include <libxml/tree.h>
#include <libxml/uri.h>
-#include <libxml/xpath.h>
#include <nanohttp/nanohttp-error.h>
#include <nanohttp/nanohttp-common.h>
-#include <nanohttp/nanohttp-logging.h>
#include <nanohttp/nanohttp-stream.h>
#include <nanohttp/nanohttp-request.h>
#include <nanohttp/nanohttp-response.h>
@@ -51,6 +49,7 @@
#include <nanohttp/nanohttp-client.h>
#include <nanohttp/nanohttp-server.h>
+#include "soap-logging.h"
#include "soap-fault.h"
#include "soap-env.h"
#include "soap-ctx.h"
@@ -109,10 +108,14 @@ _soap_nhttp_xml_io_read(void *ctx, char *buffer, int len)
in = (struct http_input_stream_t *)ctx;
if (!http_input_stream_is_ready(in))
+ {
return 0;
+ }
if ((ret = http_input_stream_read(in, buffer, len)) == -1)
+ {
return 0;
+ }
return ret;
}
@@ -211,19 +214,19 @@ soap_nhttp_server_init_args(int argc, char **argv)
if ((err = httpd_init(argc, argv)) != H_OK)
{
- log_error2("httpd_init failed (%s)", herror_message(err));
+ log_error("httpd_init failed (%s)", herror_message(err));
return err;
}
if ((err = soap_wsil_init_args(argc, argv)) != H_OK)
{
- log_error2("soap_wsil_init_args failed (%s)", herror_message(err));
+ log_error("soap_wsil_init_args failed (%s)", herror_message(err));
return err;
}
if ((err = soap_admin_init_args(argc, argv)) != H_OK)
{
- log_error2("soap_admin_init_args failed (%s)", herror_message(err));
+ log_error("soap_admin_init_args failed (%s)", herror_message(err));
return err;
}
@@ -233,7 +236,7 @@ soap_nhttp_server_init_args(int argc, char **argv)
static herror_t
_soap_nhttp_client_build_result(hresponse_t * res, struct SoapEnv ** env)
{
- log_verbose2("Building result (%p)", res);
+ log_verbose("Building result (%p)", res);
if (res == NULL)
return herror_new("_soap_client_build_result",
@@ -275,7 +278,7 @@ _soap_nhttp_client_invoke(void *unused, struct SoapCtx *request, struct SoapCtx
/* for copy attachments */
char href[MAX_HREF_SIZE];
- /* log_verbose1("nanohttp client"); */
+ /* log_verbose("nanohttp client"); */
xmlDocDumpMemory(request->env->root->doc, &buffer, &size);
@@ -291,14 +294,14 @@ _soap_nhttp_client_invoke(void *unused, struct SoapCtx *request, struct SoapCtx
httpc_set_header(conn, SOAP_NHTTP_SOAP_ACTION, action);
else
httpc_set_header(conn, SOAP_NHTTP_SOAP_ACTION, "");
- log_verbose2("action is \"%s\"", action);
+ log_verbose("action is \"%s\"", action);
free(action);
httpc_set_header(conn, HEADER_CONNECTION, "Close");
if (!(url = soap_addressing_get_to_address_string(request->env)))
return herror_new("soap_nhttp_client_invoke", 0, "Missing client URL");
- log_verbose2("url is \"%s\"", url);
+ log_verbose("url is \"%s\"", url);
if (!request->attachments)
{
@@ -359,7 +362,7 @@ _soap_nhttp_client_invoke(void *unused, struct SoapCtx *request, struct SoapCtx
{
if ((status = httpc_mime_send_file(conn, part->id, part->content_type, part->transfer_encoding, part->filename)) != H_OK)
{
- log_error2("httpc_mime_send_file failed (%s)", herror_message(status));
+ log_error("httpc_mime_send_file failed (%s)", herror_message(status));
httpc_close_free(conn);
xmlFree(buffer);
return status;
@@ -401,7 +404,7 @@ _soap_nhttp_client_invoke(void *unused, struct SoapCtx *request, struct SoapCtx
hresponse_free(res);
httpc_close_free(conn);
- /* log_verbose1("done"); */
+ /* log_verbose("done"); */
return H_OK;
}
@@ -413,7 +416,7 @@ soap_nhttp_client_init_args(int argc, char **argv)
if ((status = httpc_init(argc, argv)) != H_OK)
{
- log_error2("httpc_init failed (%s)", herror_message(status));
+ log_error("httpc_init failed (%s)", herror_message(status));
return status;
}
@@ -430,7 +433,7 @@ soap_nhttp_register(const char *context)
if ((status = httpd_register(context, soap_nhttp_process)) != H_OK)
{
- log_error2("httpd_register_secure failed (%s)", herror_message(status));
+ log_error("httpd_register_secure failed (%s)", herror_message(status));
return status;
}
diff --git a/libcsoap/soap-nudp.c b/libcsoap/soap-nudp.c
index e7f4dc1..2e5ab83 100644
--- a/libcsoap/soap-nudp.c
+++ b/libcsoap/soap-nudp.c
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: soap-nudp.c,v 1.9 2006/12/16 15:55:24 m0gg Exp $
+* $Id: soap-nudp.c,v 1.10 2007/11/03 22:40:09 m0gg Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2006 Heiko Ronsdorf
@@ -73,8 +73,8 @@
#include <libxml/uri.h>
#include <nanohttp/nanohttp-error.h>
-#include <nanohttp/nanohttp-logging.h>
+#include "soap-logging.h"
#include "soap-fault.h"
#include "soap-env.h"
#include "soap-ctx.h"
@@ -98,7 +98,7 @@ _soap_nudp_server_set_port(void)
if (!(entry = getservbyname("soap", "udp")))
{
- log_warn1("getservbyname(\"soap\", \"udp\") returned NULL, please edit services database");
+ log_warn("getservbyname(\"soap\", \"udp\") returned NULL, please edit services database");
_soap_nudp_port = NUDP_DEFAULT_PORT;
}
else
@@ -121,7 +121,7 @@ _soap_nudp_server_parse_arguments(int argc, char **argv)
}
}
- log_verbose2("socket bind to port \"%d\"", _soap_nudp_port);
+ log_verbose("socket bind to port \"%d\"", _soap_nudp_port);
return;
}
@@ -139,7 +139,7 @@ _soap_nudp_send_document(int socket, xmlDocPtr doc, const struct sockaddr *addr,
xmlDocDumpMemory(doc, &buf, &size);
if ((sent = sendto(socket, buf, size, 0, addr, addr_len)) == -1)
{
- log_error2("sendto failed (%s)", strerror(errno));
+ log_error("sendto failed (%s)", strerror(errno));
ret = herror_new("soap_nudp_client_invoke", 0, "Cannot send message");
}
@@ -157,14 +157,14 @@ _soap_nudp_receive_document(int socket, xmlDocPtr *doc, struct sockaddr *addr, s
/** @todo: use a timeout ??? */
if ((cnt = recvfrom(socket, buf, 4095, 0, addr, addr_len)) < 0)
{
- log_error2("recvfrom failed (%s)", strerror(errno));
+ log_error("recvfrom failed (%s)", strerror(errno));
return herror_new("_soap_nudp_receive_document", 0, "Receiving document failed");
}
buf[cnt] = '\0';
if (!(*doc = xmlReadDoc(buf, NULL, NULL, XML_PARSE_NONET)))
{
- log_error1("xmlReadDoc failed");
+ log_error("xmlReadDoc failed");
return herror_new("_soap_nudp_receive_document", 0, "Cannot parse received data");
}
@@ -184,7 +184,7 @@ _soap_nudp_client_invoke(void *unused, struct SoapCtx *request, struct SoapCtx *
if (!(to = soap_addressing_get_to_address(request->env)))
{
- log_error1("soap_addressing_get_to_address returned NULL");
+ log_error("soap_addressing_get_to_address returned NULL");
return herror_new("soap_nudp_client_invoke", 0, "Destination address is missing");
}
@@ -197,13 +197,13 @@ _soap_nudp_client_invoke(void *unused, struct SoapCtx *request, struct SoapCtx *
if (inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr) != 1)
{
- log_error2("inet_pton failed (%s)", strerror(errno));
+ log_error("inet_pton failed (%s)", strerror(errno));
return herror_new("soap_nudp_client_invoke", 0, "Cannot resolve destination address");
}
if ((sd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
{
- log_error2("socket failed (%s)", strerror(errno));
+ log_error("socket failed (%s)", strerror(errno));
return herror_new("soap_nudp_client_invoke", 0, "Cannot create socket");
}
@@ -212,14 +212,14 @@ _soap_nudp_client_invoke(void *unused, struct SoapCtx *request, struct SoapCtx *
saddr_len = sizeof(struct sockaddr);
if ((status = _soap_nudp_receive_document(sd, &doc, &saddr, &saddr_len)) != H_OK)
{
- log_error2("_soap_nudp_receive_document failed (%s)", herror_message(status));
+ log_error("_soap_nudp_receive_document failed (%s)", herror_message(status));
return status;
}
*response = soap_ctx_new(NULL);
if ((status = soap_env_new_from_doc(doc, &(*response)->env)) != H_OK)
{
- log_error2("soap_env_new_from_doc failed (%s)", herror_message(status));
+ log_error("soap_env_new_from_doc failed (%s)", herror_message(status));
return status;
}
@@ -239,7 +239,7 @@ soap_nudp_server_init_args(int argc, char **argv)
if ((_soap_nudp_socket = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
{
- log_error2("socket failed (%s)", strerror(errno));
+ log_error("socket failed (%s)", strerror(errno));
return herror_new("soap_nudp_server_init_args", 0, "Cannot create socket (%s)", strerror(errno));
}
@@ -250,7 +250,7 @@ soap_nudp_server_init_args(int argc, char **argv)
if (bind(_soap_nudp_socket, (struct sockaddr *)&addr, sizeof(struct sockaddr_in)) < 0)
{
- log_error2("bind failed (%s)", strerror(errno));
+ log_error("bind failed (%s)", strerror(errno));
return herror_new("soap_nudp_server_init_args", 0, "Cannot bind socket (%s)", strerror(errno));
}
@@ -281,12 +281,12 @@ soap_nudp_server_run(void *unused)
addr_len = sizeof(struct sockaddr);
if (_soap_nudp_receive_document(_soap_nudp_socket, &doc, &addr, &addr_len) != H_OK)
{
- log_error2("_soap_nudp_receive_document failed (%s)", herror_message(status));
+ log_error("_soap_nudp_receive_document failed (%s)", herror_message(status));
herror_release(status);
continue;
}
- /* log_error1(__FUNCTION__);
+ /* log_error(__FUNCTION__);
xmlDocFormatDump(stdout, doc, 1); */
req = soap_ctx_new(NULL);
@@ -324,7 +324,7 @@ soap_nudp_server_run_threaded(void)
if ((err = pthread_create(&_soap_nudp_thread, &_soap_nudp_attr, soap_nudp_server_run, NULL)) < 0)
{
- log_error2("pthread_create failed (%s)", strerror(err));
+ log_error("pthread_create failed (%s)", strerror(err));
return herror_new("soap_nudp_server_run_threaded", 0, "pthread_create failed (%s)", strerror(err));
}
diff --git a/libcsoap/soap-router.c b/libcsoap/soap-router.c
index cc443ca..1d1be64 100644
--- a/libcsoap/soap-router.c
+++ b/libcsoap/soap-router.c
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: soap-router.c,v 1.14 2006/11/25 15:06:57 m0gg Exp $
+* $Id: soap-router.c,v 1.15 2007/11/03 22:40:09 m0gg Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -40,8 +40,8 @@
#include <libxml/tree.h>
#include <nanohttp/nanohttp-error.h>
-#include <nanohttp/nanohttp-logging.h>
+#include "soap-logging.h"
#include "soap-fault.h"
#include "soap-ctx.h"
#include "soap-service.h"
@@ -55,7 +55,7 @@ soap_router_new(void)
if (!(router = (struct SoapRouter *) malloc(sizeof(struct SoapRouter))))
{
- log_error2("malloc failed (%s)", strerror(errno));
+ log_error("malloc failed (%s)", strerror(errno));
return NULL;
}
memset(router, 0, sizeof(struct SoapRouter));
@@ -68,7 +68,7 @@ soap_router_register_service(struct SoapRouter *router, SoapServiceFunc func, co
{
SoapService *service;
- log_verbose4("registering service (router=%p, method=\"%s\", urn=\"%s\")", router, method, urn);
+ log_verbose("registering service (router=%p, method=\"%s\", urn=\"%s\")", router, method, urn);
if (!(service = soap_service_new(urn, method, func)))
return herror_new("soap_router_register_service", 0, "soap_service_new failed");
@@ -136,24 +136,24 @@ soap_router_find_service(struct SoapRouter *router, const char *urn, const char
if (router == NULL)
{
- log_verbose1("router is null");
+ log_verbose("router is null");
return NULL;
}
if (urn == NULL)
{
- log_verbose1("URN is null");
+ log_verbose("URN is null");
return NULL;
}
if (method == NULL)
{
- log_verbose1("method is null");
+ log_verbose("method is null");
return NULL;
}
- log_verbose2("router = %p", router);
- log_verbose2("router->service_head = %p", router->service_head);
+ log_verbose("router = %p", router);
+ log_verbose("router->service_head = %p", router->service_head);
node = router->service_head;
@@ -161,7 +161,7 @@ soap_router_find_service(struct SoapRouter *router, const char *urn, const char
{
if (node->service && node->service->urn && node->service->method)
{
- log_verbose4("checking service (node=%p, method=\"%s\", urn=\"%s\")", node->service, node->service->method, node->service->urn);
+ log_verbose("checking service (node=%p, method=\"%s\", urn=\"%s\")", node->service, node->service->method, node->service->urn);
if (!strcmp(node->service->urn, urn) && !strcmp(node->service->method, method))
return node->service;
}
@@ -174,7 +174,7 @@ void
soap_router_free(struct SoapRouter * router)
{
SoapServiceNode *node;
- log_verbose2("enter: router=%p", router);
+ log_verbose("enter: router=%p", router);
if (!router)
return;
@@ -182,7 +182,7 @@ soap_router_free(struct SoapRouter * router)
while (router->service_head)
{
node = router->service_head->next;
- /* log_verbose2("soap_service_free(%p)\n",
+ /* log_verbose("soap_service_free(%p)\n",
router->service_head->service); */
soap_service_free(router->service_head->service);
free(router->service_head);
@@ -192,7 +192,7 @@ soap_router_free(struct SoapRouter * router)
xmlFreeDoc(router->description);
free(router);
- log_verbose1("leave with success");
+ log_verbose("leave with success");
return;
}
diff --git a/libcsoap/soap-server.c b/libcsoap/soap-server.c
index 34b053f..5b23b8c 100644
--- a/libcsoap/soap-server.c
+++ b/libcsoap/soap-server.c
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: soap-server.c,v 1.36 2006/12/31 17:24:22 m0gg Exp $
+* $Id: soap-server.c,v 1.37 2007/11/03 22:40:09 m0gg Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -41,8 +41,8 @@
#include <libxml/uri.h>
#include <nanohttp/nanohttp-error.h>
-#include <nanohttp/nanohttp-logging.h>
+#include "soap-logging.h"
#include "soap-fault.h"
#include "soap-env.h"
#include "soap-ctx.h"
@@ -66,7 +66,7 @@ router_node_new(struct SoapRouter * router, const char *context, SoapRouterNode
if (!(node = (SoapRouterNode *) malloc(sizeof(SoapRouterNode))))
{
- log_error2("malloc failed (%s)", strerror(errno));
+ log_error("malloc failed (%s)", strerror(errno));
return NULL;
}
@@ -76,7 +76,7 @@ router_node_new(struct SoapRouter * router, const char *context, SoapRouterNode
}
else
{
- log_warn2("context is null, using '%s'", noname);
+ log_warn("context is null, using '%s'", noname);
node->context = strdup(noname);
}
@@ -97,7 +97,7 @@ _soap_server_fillup_header(struct SoapEnv *envelope)
{
xmlURI *uri;
- log_verbose1(__FUNCTION__);
+ log_verbose("");
if (!(uri = soap_addressing_get_message_id(envelope)))
soap_addressing_set_message_id_string(envelope, NULL);
@@ -139,16 +139,16 @@ soap_server_process(struct SoapCtx *request, struct SoapCtx **response)
SoapService *service;
herror_t err;
- log_verbose1("**** processing ****");
+ log_verbose("**** processing ****");
xmlDocDump(stdout, request->env->root->doc);
- log_verbose1("********************");
+ log_verbose("********************");
*response = soap_ctx_new(NULL);
#ifdef HAVE_XMLSEC1
if ((err = soap_xmlsec_verify(request)) != H_OK)
{
- log_error2("soap_xmlsec_verify failed (%s)", herror_message(err));
+ log_error("soap_xmlsec_verify failed (%s)", herror_message(err));
sprintf(buffer, "Verification of message signature failed (%s)", herror_message(err));
_soap_server_env_new_with_fault("Internal server error", buffer, &((*response)->env));
@@ -157,7 +157,7 @@ soap_server_process(struct SoapCtx *request, struct SoapCtx **response)
if ((err = soap_xmlsec_decrypt(request)) != H_OK)
{
- log_error2("soap_xmlsec_decrypt failed (%s)", herror_message(err));
+ log_error("soap_xmlsec_decrypt failed (%s)", herror_message(err));
sprintf(buffer, "Decryption of message body failed (%s)", herror_message(err));
_soap_server_env_new_with_fault("Internal server error", buffer, &((*response)->env));
return H_OK;
@@ -166,19 +166,19 @@ soap_server_process(struct SoapCtx *request, struct SoapCtx **response)
if ((method = soap_env_find_methodname(request->env)))
{
- log_verbose2("method: \"%s\"", method);
+ log_verbose("method: \"%s\"", method);
if ((urn = soap_env_find_urn(request->env)))
{
- log_verbose2("urn: \"%s\"", urn);
+ log_verbose("urn: \"%s\"", urn);
if ((uri = soap_addressing_get_to_address(request->env)))
{
- log_verbose2("searching router for \"%s\"", uri->path);
+ log_verbose("searching router for \"%s\"", uri->path);
if ((router = soap_server_find_router(uri->path)))
{
- log_verbose2("router: %p", router);
+ log_verbose("router: %p", router);
if ((service = soap_router_find_service(router, urn, method)))
{
- log_verbose3("service (%p) found, function (%p)", service, service->func);
+ log_verbose("service (%p) found, function (%p)", service, service->func);
switch (service->status)
{
case CSOAP_SERVICE_UP:
@@ -251,14 +251,14 @@ soap_server_init_args(int argc, char **argv)
if ((status = soap_transport_server_init_args(argc, argv)) != H_OK)
{
- log_error2("soap_transport_server_init_args failed (%s)", herror_message(status));
+ log_error("soap_transport_server_init_args failed (%s)", herror_message(status));
return status;
}
#ifdef HAVE_XMLSEC1
if ((status = soap_xmlsec_server_init_args(argc, argv)) != H_OK)
{
- log_error2("soap_xmlsec_server_init_args failed (%s)", herror_message(status));
+ log_error("soap_xmlsec_server_init_args failed (%s)", herror_message(status));
return status;
}
#endif
@@ -279,7 +279,7 @@ soap_server_register_router(struct SoapRouter *router, const char *context)
if ((status = soap_transport_register(context)) != H_OK)
{
- log_error2("soap_transport_register failed (%s)", herror_message(status));
+ log_error("soap_transport_register failed (%s)", herror_message(status));
return status;
}
@@ -322,7 +322,7 @@ soap_server_destroy(void)
while (node != NULL)
{
tmp = node->next;
- log_verbose2("soap_router_free(%p)", node->router);
+ log_verbose("soap_router_free(%p)", node->router);
soap_router_free(node->router);
free(node->context);
free(node);
diff --git a/libcsoap/soap-server.h b/libcsoap/soap-server.h
index a97da1c..f2cebe5 100644
--- a/libcsoap/soap-server.h
+++ b/libcsoap/soap-server.h
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: soap-server.h,v 1.27 2007/01/25 10:28:30 m0gg Exp $
+ * $Id: soap-server.h,v 1.28 2007/11/03 22:40:09 m0gg Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -279,80 +279,79 @@
*
*/
+/** @file soap-server.h SOAP server interface
+ *
+ * @defgroup CSOAP cSOAP
+ */
+
+/** @defgroup CSOAP_SERVER Server
+ * @ingroup CSOAP */
+/**@{*/
+
+typedef struct _SoapRouterNode
+{
+ char *context;
+ struct SoapRouter *router;
+ struct _SoapRouterNode *next;
+
+} SoapRouterNode;
+
#ifdef __cplusplus
extern "C" {
#endif
-/**
- *
- * Initializes the soap server with commandline arguments.
+/** This function initializes the soap server with commandline
+ * arguments.
*
* @param argc commandline arg count
* @param argv commandline arg vector
*
- * @returns H_OK on success
- *
- * @see httpd_init_args
- * @see udpd_init_args
+ * @return H_OK on success.
*
+ * @see httpd_init_args()
+ * @see udpd_init_args()
*/
herror_t soap_server_init_args(int argc, char **argv);
-/**
+/** This function registers a router to the SOAP server.
*
- * Register a router to the SOAP server.
- *
- * <p><i>scheme</i>://<i>host</i>:<i>port</i>/<b>[context]</b>
+ @verbatim
+ scheme://host:port/[context]
+ @endverbatim
*
* @param router The router to register
* @param context the url context
*
- * @returns H_OK on success
+ * @return H_OK on success.
*
- * @see soap_router_new
- * @see soap_router_register_service
- *
+ * @see soap_router_new()
+ * @see soap_router_register_service()
*/
extern herror_t soap_server_register_router(struct SoapRouter * router, const char *context);
-/**
- *
- * Returns an URI name of the server.
- *
+/** This function returns an URI name of the server.
*/
extern const char *soap_server_get_name(void);
-/**
- *
- * Enters the server loop and starts to listen to incoming requests.
- *
- * @see httpd_run
- * @see udpd_run
- * @see smptd_run
+/** This function enters the server loop and starts to listen to
+ * incoming requests.
*
+ * @see httpd_run()
+ * @see udpd_run()
+ * @see smptd_run()
*/
extern herror_t soap_server_run(void);
-/**
- *
- * Frees the SOAP server.
- *
- * @see httpd_destroy
- * @see udpd_destroy
+/** This function frees the SOAP server.
*
+ * @see httpd_destroy()
+ * @see udpd_destroy()
+ * @see smtpd_destroy()
*/
extern void soap_server_destroy(void);
#ifdef __CSOAP_INTERNAL
-typedef struct _SoapRouterNode
-{
- char *context;
- struct SoapRouter *router;
- struct _SoapRouterNode *next;
-
-} SoapRouterNode;
-
extern struct SoapRouter *soap_server_find_router(const char *context);
extern SoapRouterNode * soap_server_get_routers(void);
@@ -365,4 +364,6 @@ extern herror_t soap_server_process(struct SoapCtx *request, struct SoapCtx **re
}
#endif
+/**@}*/
+
#endif
diff --git a/libcsoap/soap-service.c b/libcsoap/soap-service.c
index b731d76..813ca5b 100644
--- a/libcsoap/soap-service.c
+++ b/libcsoap/soap-service.c
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: soap-service.c,v 1.13 2006/12/31 17:24:22 m0gg Exp $
+* $Id: soap-service.c,v 1.14 2007/11/03 22:40:09 m0gg Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -49,8 +49,8 @@
#include <libxml/uri.h>
#include <nanohttp/nanohttp-error.h>
-#include <nanohttp/nanohttp-logging.h>
+#include "soap-logging.h"
#include "soap-fault.h"
#include "soap-env.h"
#include "soap-ctx.h"
@@ -64,7 +64,7 @@ soap_service_node_new(SoapService * service, SoapServiceNode * next)
if (!(node = (SoapServiceNode *) malloc(sizeof(SoapServiceNode)))) {
- log_error2("malloc failed (%s)", strerror(errno));
+ log_error("malloc failed (%s)", strerror(errno));
return NULL;
}
node->service = service;
@@ -80,7 +80,7 @@ soap_service_new(const char *urn, const char *method, SoapServiceFunc f)
if (!(service = (SoapService *) malloc(sizeof(SoapService)))) {
- log_error2("malloc failed (%s)", strerror(errno));
+ log_error("malloc failed (%s)", strerror(errno));
return NULL;
}
@@ -88,14 +88,14 @@ soap_service_new(const char *urn, const char *method, SoapServiceFunc f)
if (urn == NULL) {
- log_warn1("urn is NULL");
+ log_warn("urn is NULL");
urn = "";
}
service->urn = strdup(urn);
if (method == NULL) {
- log_warn1("method is NULL");
+ log_warn("method is NULL");
method = "";
}
service->method = strdup(method);
diff --git a/libcsoap/soap-transport.c b/libcsoap/soap-transport.c
index 765fa8f..cce1272 100644
--- a/libcsoap/soap-transport.c
+++ b/libcsoap/soap-transport.c
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: soap-transport.c,v 1.9 2006/12/14 19:36:49 m0gg Exp $
+* $Id: soap-transport.c,v 1.10 2007/11/03 22:40:09 m0gg Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2007 Heiko Ronsdorf
@@ -45,8 +45,8 @@
#include <libxml/uri.h>
#include <nanohttp/nanohttp-error.h>
-#include <nanohttp/nanohttp-logging.h>
+#include "soap-logging.h"
#include "soap-fault.h"
#include "soap-env.h"
#include "soap-ctx.h"
@@ -78,7 +78,7 @@ _soap_transport_new(const char *scheme, void *data, msg_exchange invoke)
if (!(ret = (struct soap_transport *)malloc(sizeof(struct soap_transport))))
{
- log_error2("malloc failed (%s)", strerror(errno));
+ log_error("malloc failed (%s)", strerror(errno));
return NULL;
}
@@ -88,7 +88,7 @@ _soap_transport_new(const char *scheme, void *data, msg_exchange invoke)
ret->data = data;
ret->invoke = invoke;
- log_verbose4("scheme=\"%s\", data=%p, invoke=%p", ret->scheme, ret->data, ret->invoke);
+ log_verbose("scheme=\"%s\", data=%p, invoke=%p", ret->scheme, ret->data, ret->invoke);
return ret;
}
@@ -138,19 +138,19 @@ soap_transport_server_init_args(int argc, char **argv)
if ((status = soap_nhttp_server_init_args(argc, argv)) != H_OK)
{
- log_error2("soap_nhttp_server_init_args failed (%s)", herror_message(status));
+ log_error("soap_nhttp_server_init_args failed (%s)", herror_message(status));
return status;
}
if ((status = soap_nudp_server_init_args(argc, argv)) != H_OK)
{
- log_error2("soap_nudp_server_init_args failed (%s)", herror_message(status));
+ log_error("soap_nudp_server_init_args failed (%s)", herror_message(status));
return status;
}
if ((status = _soap_transport_set_name()) != H_OK)
{
- log_error2("_soap_transport_set_name failed (%s)", herror_message(status));
+ log_error("_soap_transport_set_name failed (%s)", herror_message(status));
return status;
}
@@ -164,13 +164,13 @@ soap_transport_register(const void *data)
if ((status = soap_nhttp_register(data)) != H_OK)
{
- log_error2("soap_nhttp_register failed (%s)", herror_message(status));
+ log_error("soap_nhttp_register failed (%s)", herror_message(status));
return status;
}
if ((status = soap_nudp_register(data)) != H_OK)
{
- log_error2("soap_nudp_register failed (%s)", herror_message(status));
+ log_error("soap_nudp_register failed (%s)", herror_message(status));
return status;
}
@@ -185,7 +185,7 @@ soap_transport_add(const char *scheme, void *data, msg_exchange invoke)
if (!(transport = _soap_transport_new(scheme, data, invoke)))
{
- log_error1("_soap_transport_new failed");
+ log_error("_soap_transport_new failed");
return herror_new("soap_transport_add", 0, "_soap_transport_new failed");
}
@@ -209,14 +209,14 @@ soap_transport_server_run(void)
if ((status = soap_nudp_server_run_threaded()) != H_OK)
{
- log_error2("soap_nudp_server_run failed (%s)", herror_message(status));
+ log_error("soap_nudp_server_run failed (%s)", herror_message(status));
return status;
}
/* nanoHTTP blocks in this call */
if ((status = soap_nhttp_server_run()) != H_OK)
{
- log_error2("soap_nhttp_server_run failed (%s)", herror_message(status));
+ log_error("soap_nhttp_server_run failed (%s)", herror_message(status));
return status;
}
@@ -246,19 +246,19 @@ soap_transport_client_init_args(int argc, char **argv)
if ((status = soap_nhttp_client_init_args(argc, argv)) != H_OK)
{
- log_error2("soap_nhttp_client_init_args failed (%s)", herror_message(status));
+ log_error("soap_nhttp_client_init_args failed (%s)", herror_message(status));
return status;
}
if ((status = soap_nudp_client_init_args(argc, argv)) != H_OK)
{
- log_error2("soap_nudp_client_init_args failed (%s)", herror_message(status));
+ log_error("soap_nudp_client_init_args failed (%s)", herror_message(status));
return status;
}
if ((status = _soap_transport_set_name()) != H_OK)
{
- log_error2("_soap_transport_set_name failed (%s)", herror_message(status));
+ log_error("_soap_transport_set_name failed (%s)", herror_message(status));
return status;
}
@@ -272,29 +272,29 @@ soap_transport_client_invoke(struct SoapCtx *request, struct SoapCtx **response)
herror_t ret;
xmlURI *dest;
- /* log_verbose1(__FUNCTION__);
+ /* log_verbose(__FUNCTION__);
xmlDocFormatDump(stdout, request->env->root->doc, 1); */
if (!(dest = soap_addressing_get_to_address(request->env)))
{
- log_verbose1("soap_addressing_get_to_address failed");
+ log_verbose("soap_addressing_get_to_address failed");
return herror_new("soap_transport_client_invoke", 0, "cannot find to address in SOAP envelope");
}
if (!dest->scheme)
{
- log_verbose1("missing scheme (protocol) in to address");
+ log_verbose("missing scheme (protocol) in to address");
return herror_new("soap_transport_client_invoke", 0, "cannot find protocol in destination address");
}
- log_verbose2("trying to contact \"%s\"", soap_addressing_get_to_address_string(request->env));
+ log_verbose("trying to contact \"%s\"", soap_addressing_get_to_address_string(request->env));
for (walker=head; walker; walker=walker->next)
{
- log_verbose3("testing transport server \"%s\" for \"%s\"", walker->scheme, dest->scheme);
+ log_verbose("testing transport server \"%s\" for \"%s\"", walker->scheme, dest->scheme);
if (!strcmp(walker->scheme, dest->scheme))
{
- log_verbose3("found transport layer for \"%s\" (%p)", dest->scheme, walker->invoke);
+ log_verbose("found transport layer for \"%s\" (%p)", dest->scheme, walker->invoke);
ret = walker->invoke(walker->data, request, response);
xmlFreeURI(dest);
return ret;
diff --git a/libcsoap/soap-transport.h b/libcsoap/soap-transport.h
index 5cc3e68..18501fa 100644
--- a/libcsoap/soap-transport.h
+++ b/libcsoap/soap-transport.h
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: soap-transport.h,v 1.2 2006/11/23 15:27:33 m0gg Exp $
+* $Id: soap-transport.h,v 1.3 2007/11/03 22:40:09 m0gg Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2007 Heiko Ronsdorf
@@ -25,6 +25,10 @@
#define __csoap_transport_h
#ifdef __CSOAP_INTERNAL
+#pragma You should not include this file...
+#endif
+
+#ifdef __CSOAP_INTERNAL
typedef herror_t (*msg_exchange)(void *data, struct SoapCtx *request, struct SoapCtx **response);
#ifdef __cplusplus
diff --git a/libcsoap/soap-xml.c b/libcsoap/soap-xml.c
index f718faf..ffbfbec 100644
--- a/libcsoap/soap-xml.c
+++ b/libcsoap/soap-xml.c
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: soap-xml.c,v 1.13 2006/11/26 20:13:05 m0gg Exp $
+* $Id: soap-xml.c,v 1.14 2007/11/03 22:40:10 m0gg Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -26,11 +26,8 @@
#endif
#include <libxml/tree.h>
-#include <libxml/xpath.h>
-#include <libxml/xpathInternals.h>
-
-#include <nanohttp/nanohttp-logging.h>
+#include "soap-logging.h"
#include "soap-xml.h"
xmlNodePtr
@@ -40,26 +37,28 @@ soap_xml_get_children(xmlNodePtr node)
if (node == NULL)
{
- log_error1("Invalid node (null)");
+ log_error("Invalid node (null)");
return NULL;
}
for (child = node->children; child; child=child->next)
{
if (child->type == XML_ELEMENT_NODE)
+ {
return child;
+ }
}
return NULL;
}
xmlNodePtr
-soap_xml_get_next(xmlNodePtr param)
+soap_xml_get_next_element(xmlNodePtr param)
{
if (param == NULL)
{
- log_error1("Invalid node (null)");
+ log_error("Invalid node (null)");
return NULL;
}
@@ -76,24 +75,6 @@ soap_xml_get_next(xmlNodePtr param)
return node;
}
-xmlXPathObjectPtr
-soap_xpath_eval(xmlDocPtr doc, const char *xpath)
-{
- xmlXPathContextPtr context;
- xmlXPathObjectPtr result;
-
- context = xmlXPathNewContext(doc);
- result = xmlXPathEvalExpression(BAD_CAST xpath, context);
- if (xmlXPathNodeSetIsEmpty(result->nodesetval))
- {
- /* no result */
- return NULL;
- }
-
- xmlXPathFreeContext(context);
- return result;
-}
-
char *
soap_xml_get_text(xmlNodePtr node)
{
diff --git a/libcsoap/soap-xml.h b/libcsoap/soap-xml.h
index c03c6ea..1136e38 100644
--- a/libcsoap/soap-xml.h
+++ b/libcsoap/soap-xml.h
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: soap-xml.h,v 1.12 2006/12/03 17:30:57 m0gg Exp $
+ * $Id: soap-xml.h,v 1.13 2007/11/03 22:40:10 m0gg Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -24,14 +24,21 @@
#ifndef __csoap_xml_h
#define __csoap_xml_h
-/**
- *
- * XML Errors
+/** @file soap-xml.h SOAP XML functions
*
+ * @defgroup CSOAP_XML XML handling
+ * @ingroup CSOAP
+ */
+/**@{*/
+
+/** @defgroup CSOAP_XML_ERRORS XML errors
+ * @ingroup CSOAP_ERRORS
*/
+/**@{*/
#define XML_ERROR 1600
#define XML_ERROR_EMPTY_DOCUMENT (XML_ERROR + 1)
#define XML_ERROR_PARSE (XML_ERROR + 2)
+/**@}*/
static const char * const soap_env_enc = "http://schemas.xmlsoap.org/soap/encoding/";
static const char * const soap_xsi_ns = "http://www.w3.org/1999/XMLSchema-instance";
@@ -42,9 +49,8 @@ extern "C" {
#endif
extern xmlNodePtr soap_xml_get_children(xmlNodePtr param);
-extern xmlNodePtr soap_xml_get_next(xmlNodePtr param);
-extern xmlXPathObjectPtr soap_xpath_eval(xmlDocPtr doc, const char *xpath);
+extern xmlNodePtr soap_xml_get_next_element(xmlNodePtr param);
extern char *soap_xml_get_text(xmlNodePtr node);
@@ -52,4 +58,6 @@ extern char *soap_xml_get_text(xmlNodePtr node);
}
#endif
+/**@}*/
+
#endif
diff --git a/libcsoap/soap-xmlsec.c b/libcsoap/soap-xmlsec.c
index 01e5ae0..df04e28 100644
--- a/libcsoap/soap-xmlsec.c
+++ b/libcsoap/soap-xmlsec.c
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: soap-xmlsec.c,v 1.8 2006/12/14 19:36:49 m0gg Exp $
+* $Id: soap-xmlsec.c,v 1.9 2007/11/03 22:40:10 m0gg Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -70,8 +70,6 @@
#include <libxml/parser.h>
#include <libxml/xmlmemory.h>
#include <libxml/xmlstring.h>
-#include <libxml/xpath.h>
-#include <libxml/xpathInternals.h>
#ifndef XMLSEC_NO_XSLT
#include <libxslt/xslt.h>
@@ -85,7 +83,6 @@
#include <xmlsec/crypto.h>
#include <xmlsec/errors.h>
-#include <nanohttp/nanohttp-logging.h>
#include <nanohttp/nanohttp-error.h>
#include <nanohttp/nanohttp-common.h>
#include <nanohttp/nanohttp-stream.h>
@@ -94,6 +91,7 @@
#include <nanohttp/nanohttp-client.h>
#include <nanohttp/nanohttp-server.h>
+#include "soap-logging.h"
#include "soap-env.h"
#include "soap-ctx.h"
#include "soap-service.h"
@@ -115,7 +113,7 @@ static xmlSecKeyPtr _soap_xmlsec_key = NULL;
static void _soap_xmlsec_error_callback(const char *file, int line, const char *func, const char *errorObject, const char *errorSubject, int reason, const char *msg)
{
- log_error5("xmlsec error func=\"%s\" obj=\"%s\" sub=\"%s\" %s", func, errorObject, errorSubject, msg);
+ log_error("xmlsec error func=\"%s\" obj=\"%s\" sub=\"%s\" %s", func, errorObject, errorSubject, msg);
return;
}
@@ -139,7 +137,7 @@ _soap_xmlsec_files_keys_store_find_key(xmlSecKeyStorePtr store, const xmlChar *
xmlURI *uri;
char *file;
- log_verbose2("trying to find key \"%s\"\n", name);
+ log_verbose("trying to find key \"%s\"\n", name);
/*
* it's possible to do not have the key name or desired key type but we could
@@ -205,7 +203,7 @@ _soap_xmlsec_files_keys_store_find_key(xmlSecKeyStorePtr store, const xmlChar *
if ((status = (httpc_get(conn, &res, name))) != H_OK)
{
- log_error2("httpc_get failed (%s)", herror_message(status));
+ log_error("httpc_get failed (%s)", herror_message(status));
herror_release(status);
return NULL;
}
@@ -254,7 +252,7 @@ _soap_xmlsec_files_keys_store_find_key(xmlSecKeyStorePtr store, const xmlChar *
if (unlink(file) < 0)
{
- log_error2("unlink file failed (%s)", strerror(errno));
+ log_error("unlink file failed (%s)", strerror(errno));
}
free(file);
@@ -289,14 +287,14 @@ _soap_xmlsec_create_key_manager(void)
keysStore = xmlSecKeyStoreCreate(_soap_xmlsec_files_keys_store_get_klass());
if (keysStore == NULL)
{
- log_error1("failed to create keys store");
+ log_error("failed to create keys store");
return herror_new("_soap_xmlxec_create_key_manager", XMLSEC_ERROR_KEYSTORE, "failed to create keys store");
}
/* create keys manager */
if ((_soap_xmlsec_key_manager = xmlSecKeysMngrCreate()) == NULL)
{
- log_error1("failed to create keys manager");
+ log_error("failed to create keys manager");
xmlSecKeyStoreDestroy(keysStore);
return herror_new("_soap_xmlsec_key_manager", XMLSEC_ERROR_KEYMANAGER, "failed to create keys manager");
}
@@ -307,7 +305,7 @@ _soap_xmlsec_create_key_manager(void)
*/
if (xmlSecKeysMngrAdoptKeysStore(_soap_xmlsec_key_manager, keysStore) < 0)
{
- log_error1("failed to add keys store to keys manager");
+ log_error("failed to add keys store to keys manager");
xmlSecKeyStoreDestroy(keysStore);
xmlSecKeysMngrDestroy(_soap_xmlsec_key_manager);
_soap_xmlsec_key_manager = NULL;
@@ -317,7 +315,7 @@ _soap_xmlsec_create_key_manager(void)
/* initialize crypto library specific data in keys manager */
if (xmlSecCryptoKeysMngrInit(_soap_xmlsec_key_manager) < 0)
{
- log_error1("failed to initialize crypto data in keys manager");
+ log_error("failed to initialize crypto data in keys manager");
xmlSecKeysMngrDestroy(_soap_xmlsec_key_manager);
_soap_xmlsec_key_manager = NULL;
return herror_new("_soap_xmlsec_create_key_manager", XMLSEC_ERROR_KEYMANAGER, "failed to initialize crypto data in keys manager");
@@ -337,7 +335,7 @@ _soap_xmlsec_load_key(void)
if ((_soap_xmlsec_key = xmlSecCryptoAppKeyLoad(_soap_xmlsec_keyfile, xmlSecKeyDataFormatPem, _soap_xmlsec_password, NULL, NULL)) == NULL)
{
- log_error2("xmlSecCryptoAppKeyLoad(\"%s\") failed", _soap_xmlsec_keyfile);
+ log_error("xmlSecCryptoAppKeyLoad(\"%s\") failed", _soap_xmlsec_keyfile);
return herror_new("_soap_xmlsec_load_key", XMLSEC_ERROR_KEY, "xmlSecCryptoAppKeyLoad(\"%s\") failed", _soap_xmlsec_keyfile);
}
@@ -345,18 +343,18 @@ _soap_xmlsec_load_key(void)
{
if (xmlSecCryptoAppKeyCertLoad(_soap_xmlsec_key, _soap_xmlsec_certfile, xmlSecKeyDataFormatPem) < 0)
{
- log_error2("xmlSecCryptoAppKeyCertLoad(\"%s\") failed", _soap_xmlsec_certfile);
+ log_error("xmlSecCryptoAppKeyCertLoad(\"%s\") failed", _soap_xmlsec_certfile);
xmlSecKeyDestroy(_soap_xmlsec_key);
return herror_new("_soap_xmlsec_load_key", XMLSEC_ERROR_CERTIFICATE, "xmlSecCryptoAppKeyCertLoad(\"%s\") failed", _soap_xmlsec_certfile);
}
}
xmlStrPrintf(keyName, 256, "%s/key.pem", soap_server_get_name());
- log_error2("keyName is \"%s\"", keyName);
+ log_error("keyName is \"%s\"", keyName);
if ((err = xmlSecKeySetName(_soap_xmlsec_key, keyName)) < 0)
{
xmlSecKeyDestroy(_soap_xmlsec_key);
- log_error3("xmlSecKeySetName(\"%s\") failed (%i)", keyName, err);
+ log_error("xmlSecKeySetName(\"%s\") failed (%i)", keyName, err);
return herror_new("_soap_xmlsec_load_key", XMLSEC_ERROR_KEY, "xmlSecKeySetName(\"%s\") failed (%i)", keyName, err);
}
@@ -397,7 +395,7 @@ _soap_xmlsec_publish_key(void)
if ((status = httpd_register("/key.pem", _soap_xmlsec_key_service)) != H_OK)
{
- log_error2("Cannot register key service (%s)", herror_message(status));
+ log_error("Cannot register key service (%s)", herror_message(status));
return status;
}
@@ -441,59 +439,59 @@ _soap_xmlsec_init(void)
if (initialized)
return H_OK;
- log_info1("initializing xmlsec1");
+ log_info("initializing xmlsec1");
xmlSecErrorsDefaultCallbackEnableOutput(1);
xmlSecErrorsSetCallback(_soap_xmlsec_error_callback);
if (xmlSecInit() < 0)
{
- log_error1("xmlSecInit failed");
+ log_error("xmlSecInit failed");
return herror_new("soap_xmlsec_init", XMLSEC_ERROR_INIT, "xmlSecInit failed");
}
if (xmlSecCheckVersion() != 1)
{
- log_error1("xmlSecCheckVersion failed, wrong xmlsec version");
+ log_error("xmlSecCheckVersion failed, wrong xmlsec version");
return herror_new("soap_xmlsec_init", XMLSEC_ERROR_VERSION, "Wrong xmlsec version");
}
#ifdef XMLSEC_CRYPTO_DYNAMIC_LOADING
- log_verbose2("loading \"%s\" dynamic", XMLSEC_CRYPTO);
+ log_verbose("loading \"%s\" dynamic", XMLSEC_CRYPTO);
if (xmlSecCryptoDLLoadLibrary(BAD_CAST XMLSEC_CRYPTO) < 0)
{
- log_error1("xmlSecCryptoDLLoadLibrary failed");
+ log_error("xmlSecCryptoDLLoadLibrary failed");
return herror_new("soap_xmlsec_init", XMLSEC_ERROR_DLLOAD, "xmlSecCryptoDLLoadLibrary failed");
}
#endif
if (xmlSecCryptoAppInit(NULL) < 0)
{
- log_error1("xmlSecCryptoAppInit failed");
+ log_error("xmlSecCryptoAppInit failed");
return herror_new("soap_xmlsec_init", XMLSEC_ERROR_INIT, "xmlSecCryptoAppInit failed");
}
if (xmlSecCryptoInit() < 0)
{
- log_error1("xmlSecCryptoInit failed");
+ log_error("xmlSecCryptoInit failed");
return herror_new("soap_xmlsec_init", XMLSEC_ERROR_INIT, "xmlSecCryptoInit failed");
}
if ((status = _soap_xmlsec_create_key_manager()) != H_OK)
{
- log_error2("_soap_xmlsec_create_key_manager failed (%s)", herror_message(status));
+ log_error("_soap_xmlsec_create_key_manager failed (%s)", herror_message(status));
return status;
}
if ((err = pthread_mutex_init(&_soap_xmlsec_lock, NULL)) < 0)
{
- log_error2("pthread_mutex_init failed (%s)", strerror(err));
+ log_error("pthread_mutex_init failed (%s)", strerror(err));
return herror_new("soap_xmlsec_init", XMLSEC_ERROR_INIT, "pthread_mutex_init failed (%s)", strerror(err));
}
if ((status = _soap_xmlsec_load_key()) != H_OK)
{
- log_error2("_soap_xmlsec_load_key failed (%s)", herror_message(status));
+ log_error("_soap_xmlsec_load_key failed (%s)", herror_message(status));
return status;
}
@@ -525,13 +523,13 @@ soap_xmlsec_server_init_args(int argc, char **argv)
if ((status = _soap_xmlsec_init()) != H_OK)
{
- log_error2("_soap_xmlsec_init failed (%s)", herror_message(status));
+ log_error("_soap_xmlsec_init failed (%s)", herror_message(status));
return status;
}
if ((status = _soap_xmlsec_publish_key()) != H_OK)
{
- log_error2("_soap_xmlsec_publish_key failed (%s)", herror_message(status));
+ log_error("_soap_xmlsec_publish_key failed (%s)", herror_message(status));
return status;
}
@@ -560,7 +558,7 @@ herror_t soap_xmlsec_sign(struct SoapCtx *context)
if (!(signNode = xmlSecTmplSignatureCreate(envelope->root->doc, xmlSecTransformExclC14NId, xmlSecTransformRsaSha1Id, NULL)))
{
- log_error1("xmlSecTmplSignatureCreate failed");
+ log_error("xmlSecTmplSignatureCreate failed");
ret = herror_new("soap_xmlsec_sign", XMLSEC_ERROR_SIGN_INIT, "xmlSecTmplSignatureCreate failed");
goto out;
}
@@ -578,28 +576,28 @@ herror_t soap_xmlsec_sign(struct SoapCtx *context)
if (!(refNode = xmlSecTmplSignatureAddReference(signNode, xmlSecTransformSha1Id, "#Body", NULL, NULL)))
{
- log_error1("xmlSecTmplSignatureAddReference failed");
+ log_error("xmlSecTmplSignatureAddReference failed");
ret = herror_new("soap_xmlsec_sign", XMLSEC_ERROR_SIGN_INIT, "xmlSecTmplSignatureAddReference failed");
goto out;
}
if (!(keyInfoNode = xmlSecTmplSignatureEnsureKeyInfo(signNode, NULL)))
{
- log_error1("xmlSecTmplSignatureEnsureKeyInfo failed");
+ log_error("xmlSecTmplSignatureEnsureKeyInfo failed");
ret = herror_new("soap_xmlsec_sign", XMLSEC_ERROR_SIGN_INIT, "xmlSecTmplSignatureEnsureKeyInfo failed");
goto out;
}
if (xmlSecTmplKeyInfoAddKeyName(keyInfoNode, soap_server_get_name()) == NULL)
{
- log_error1("xmlSecTmplKeyInfoAddKeyName failed");
+ log_error("xmlSecTmplKeyInfoAddKeyName failed");
ret = herror_new("soap_xmlsec_sign", XMLSEC_ERROR_SIGN_INIT, "xmlSecTmplKeyInfoAddKeyName failed");
goto out;
}
if (!(dsigCtx = xmlSecDSigCtxCreate(_soap_xmlsec_key_manager)))
{
- log_error1("xmlSecDSigCtxCreate failed");
+ log_error("xmlSecDSigCtxCreate failed");
ret = herror_new("soap_xmlsec_sign", XMLSEC_ERROR_SIGN_INIT, "xmlSecDSigCtxCreate failed");
goto out;
}
@@ -608,7 +606,7 @@ herror_t soap_xmlsec_sign(struct SoapCtx *context)
if (xmlSecDSigCtxSign(dsigCtx, signNode) < 0)
{
- log_error1("xmlSecDSigCtxSign failed");
+ log_error("xmlSecDSigCtxSign failed");
ret = herror_new("soap_xmlsec_sign", XMLSEC_ERROR_SIGN, "xmlSecDSigCtxSign failed");
goto out;
}
@@ -651,14 +649,14 @@ herror_t soap_xmlsec_encrypt(struct SoapCtx *context)
encDataNode = xmlSecTmplEncDataCreate(doc, xmlSecTransformDes3CbcId, NULL, xmlSecTypeEncElement, NULL, NULL);
if (encDataNode == NULL)
{
- log_error1("xmlSecTmplEnvDataCreate failed");
+ log_error("xmlSecTmplEnvDataCreate failed");
ret = herror_new("soap_xmlsec_encrypt", XMLSEC_ERROR_ENCRYPT_INIT, "xmlSecTmplEnvDataCreate failed");
goto out;
}
if (xmlSecTmplEncDataEnsureCipherValue(encDataNode) == NULL)
{
- log_error1("failed to add CipherValue node");
+ log_error("failed to add CipherValue node");
ret = herror_new("soap_xmlsec_encrypt", XMLSEC_ERROR_ENCRYPT_INIT, "failed to add CipherValue node");
goto out;
}
@@ -666,7 +664,7 @@ herror_t soap_xmlsec_encrypt(struct SoapCtx *context)
keyInfoNode = xmlSecTmplEncDataEnsureKeyInfo(encDataNode, NULL);
if (keyInfoNode == NULL)
{
- log_error1("failed to add KeyInfo node");
+ log_error("failed to add KeyInfo node");
ret = herror_new("soap_xmlsec_encrypt", XMLSEC_ERROR_ENCRYPT_INIT, "failed to add KeyInfo node");
goto out;
}
@@ -674,14 +672,14 @@ herror_t soap_xmlsec_encrypt(struct SoapCtx *context)
encKeyNode = xmlSecTmplKeyInfoAddEncryptedKey(keyInfoNode, xmlSecTransformRsaOaepId, NULL, NULL, NULL);
if (encKeyNode == NULL)
{
- log_error1("failed to add KeyInfo");
+ log_error("failed to add KeyInfo");
ret = herror_new("soap_xmlsec_encrypt", XMLSEC_ERROR_ENCRYPT_INIT, "failed to add KeyInfo");
goto out;
}
if (xmlSecTmplEncDataEnsureCipherValue(encKeyNode) == NULL)
{
- log_error1("failed to add CipherValue node");
+ log_error("failed to add CipherValue node");
ret = herror_new("soap_xmlsec_encrypt", XMLSEC_ERROR_ENCRYPT_INIT, "failed to add CipherValue node");
goto out;
}
@@ -689,24 +687,24 @@ herror_t soap_xmlsec_encrypt(struct SoapCtx *context)
keyInfoNode2 = xmlSecTmplEncDataEnsureKeyInfo(encKeyNode, NULL);
if (keyInfoNode2 == NULL)
{
- log_error1("failed to add key info (2)\n");
+ log_error("failed to add key info (2)\n");
ret = herror_new("soap_xmlsec_encrypt", XMLSEC_ERROR_ENCRYPT_INIT, "failed to add key info (2)");
goto out;
}
if (!(to = soap_addressing_get_to_address(envelope)))
{
- log_error1("cannot get to address");
+ log_error("cannot get to address");
ret = herror_new("soap_xmlsec_encrypt", XMLSEC_ERROR_ENCRYPT, "cannot get to address");
goto out;
}
xmlStrPrintf(buf, 256, "http://%s:%i/key.pem", to->server, to->port);
- log_error2("adding key \"%s\"", buf);
+ log_error("adding key \"%s\"", buf);
xmlFreeURI(to);
if (xmlSecTmplKeyInfoAddKeyName(keyInfoNode2, buf) == NULL)
{
- log_error2("failed to add key name \"%s\"", buf);
+ log_error("failed to add key name \"%s\"", buf);
ret = herror_new("soap_xmlsec_encrypt", XMLSEC_ERROR_ENCRYPT_INIT, "failed to add key name \"%s\"", buf);
goto out;
}
@@ -714,7 +712,7 @@ herror_t soap_xmlsec_encrypt(struct SoapCtx *context)
encCtx = xmlSecEncCtxCreate(_soap_xmlsec_key_manager);
if (encCtx == NULL)
{
- log_error1("failed to create encryption context");
+ log_error("failed to create encryption context");
ret = herror_new("soap_xmlsec_encrypt", XMLSEC_ERROR_ENCRYPT_INIT, "failed to create encryption context");
goto out;
}
@@ -722,7 +720,7 @@ herror_t soap_xmlsec_encrypt(struct SoapCtx *context)
encCtx->encKey = xmlSecKeyGenerate(xmlSecKeyDataDesId, 192, xmlSecKeyDataTypeSession);
if (encCtx->encKey == NULL)
{
- log_error1("failed to generate session key");
+ log_error("failed to generate session key");
ret = herror_new("soap_xmlsec_encrypt", XMLSEC_ERROR_ENCRYPT_INIT, "failed to generate session key");
goto out;
}
@@ -733,7 +731,7 @@ herror_t soap_xmlsec_encrypt(struct SoapCtx *context)
if (xmlSecEncCtxXmlEncrypt(encCtx, encDataNode, soap_env_get_method(envelope)) < 0)
{
- log_error1("encryption failed");
+ log_error("encryption failed");
ret = herror_new("soap_xmlsec_encrypt", XMLSEC_ERROR_ENCRYPT, "encryption failed");
goto out;
}
@@ -772,19 +770,19 @@ herror_t soap_xmlsec_decrypt(struct SoapCtx *context)
if (!(method = soap_env_get_method(envelope)))
{
- log_error1("cannot find messages method");
+ log_error("cannot find messages method");
return herror_new("soap_xmlsec_decrypt", 0, "cannot find message method");
}
if (xmlStrcmp(method->name, BAD_CAST "EncryptedData"))
{
- log_error2("message doesn't contain encrypted data (%s)", method->name);
+ log_error("message doesn't contain encrypted data (%s)", method->name);
return H_OK;
}
if (xmlStrcmp(method->ns->href, "http://www.w3.org/2001/04/xmlenc#"))
{
- log_error2("message encryption isn't understood (%s)", method->ns->href);
+ log_error("message encryption isn't understood (%s)", method->ns->href);
return herror_new("soap_xmlsec_decrypt", 0, "message encryption isn't understood (%s)", method->ns->href);
}
@@ -794,7 +792,7 @@ herror_t soap_xmlsec_decrypt(struct SoapCtx *context)
node = xmlSecFindNode(envelope->root, xmlSecNodeEncryptedData, xmlSecEncNs);
if (node == NULL)
{
- log_error1("start node not found");
+ log_error("start node not found");
ret = herror_new("soap_xmlsec_decrypt", 0, "start node not found");
goto done;
}
@@ -803,7 +801,7 @@ herror_t soap_xmlsec_decrypt(struct SoapCtx *context)
encCtx = xmlSecEncCtxCreate(_soap_xmlsec_key_manager);
if (encCtx == NULL)
{
- log_error1("failed to create encryption context");
+ log_error("failed to create encryption context");
ret = herror_new("soap_xmlsec_decrypt", 0, "failed to create encryption context");
goto done;
}
@@ -811,7 +809,7 @@ herror_t soap_xmlsec_decrypt(struct SoapCtx *context)
/* decrypt the data */
if ((xmlSecEncCtxDecrypt(encCtx, node) < 0) || (encCtx->result == NULL))
{
- log_error1("decryption failed");
+ log_error("decryption failed");
ret = herror_new("soap_xmlsec_decrypt", 0, "decryption failed");
goto done;
}
@@ -855,7 +853,7 @@ herror_t soap_xmlsec_verify(struct SoapCtx *context)
if (!envelope->header)
{
- log_error1("message doesn't contain a SOAP header");
+ log_error("message doesn't contain a SOAP header");
return herror_new("soap_xmlsec_verify", 0, "message doesn't contain a SOAP header");
}
@@ -873,20 +871,20 @@ herror_t soap_xmlsec_verify(struct SoapCtx *context)
node = xmlSecFindNode(envelope->root, xmlSecNodeSignature, xmlSecDSigNs);
if (node == NULL)
{
- log_error1("cannot find message signature");
+ log_error("cannot find message signature");
return herror_new("soap_xmlsec_verify", 0, "message signature wasn't found");
}
dsigCtx = xmlSecDSigCtxCreate(_soap_xmlsec_key_manager);
if (dsigCtx == NULL)
{
- log_error1("cannot create signature context");
+ log_error("cannot create signature context");
return herror_new("soap_xmlsec_verify", 0, "cannot create signatur context");
}
if (xmlSecDSigCtxVerify(dsigCtx, node) < 0)
{
- log_error1("xmlsecDSigCtxVerify failed");
+ log_error("xmlsecDSigCtxVerify failed");
return herror_new("soap_xmlsec_verify", 0, "verification failed");
}
@@ -896,13 +894,13 @@ herror_t soap_xmlsec_verify(struct SoapCtx *context)
}
else
{
- log_error1("signature invalid");
+ log_error("signature invalid");
return herror_new("soap_xmlsec_verify", 0, "signature invalid");
}
}
else
{
- log_error2("message signature isn't understood (%s)", walker->ns->href);
+ log_error("message signature isn't understood (%s)", walker->ns->href);
return herror_new("soap_xmlsec_verify", 0, "message signature isn't understood (%s)", walker->ns->href);
}
}
diff --git a/libcsoap/soap-xmlsec.h b/libcsoap/soap-xmlsec.h
index 2952368..89b00e7 100644
--- a/libcsoap/soap-xmlsec.h
+++ b/libcsoap/soap-xmlsec.h
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: soap-xmlsec.h,v 1.9 2007/01/25 10:28:30 m0gg Exp $
+ * $Id: soap-xmlsec.h,v 1.10 2007/11/03 22:40:10 m0gg Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2006 Heiko Ronsdorf
@@ -49,57 +49,48 @@
*
* @see nanohttp_ssl_page
* @see http://www.aleksey.com/xmlsec/
- *
*/
-/** @file
+/** @file soap-xmlsec.h xmlsec wrapper
+ *
+ * @defgroup CSOAP_WSS Web Service Security
+ * @ingroup CSOAP
*
* @section soap_wss_sec Web Services Security
*
* This module is implemented using the xmlsec1 library.
*
* @author H. Ronsdorf
- * @version $Revision: 1.9 $
+ * @version $Revision: 1.10 $
*
* @see http://www.w3.org/TR/SOAP-dsig/
* @see http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=wss
* @see http://www.aleksey.com/xmlsec/
- *
*/
+/**@{*/
#define SOAP_SECURITY_NAMESPACE "http://schemas.xmlsoap.org/soap/security/2000-12"
#define SOAP_SECURITY_PREFIX "SOAP-SEC"
-/**
- *
- * Commandline argument to enable WS-Security.
- *
+/** Commandline argument to enable WS-Security.
*/
#define CSOAP_ENABLE_XMLSEC "-CSOAPxmlsec"
-/**
- *
- * Commandline argument to set the keyfile. If this argument is not specified, a
- * random key will be used.
- *
+/** Commandline argument to set the keyfile. If this argument is not
+ * specified, a random key will be used.
*/
#define CSOAP_XMLSEC_KEYFILE "-CSOAPkeyfile"
-/**
- *
- * Commandline argument to set the password of the key.
- *
+/** Commandline argument to set the password of the key.
*/
#define CSOAP_XMLSEC_PASSWORD "-CSOAPpassword"
-/**
- *
- * Commandline argument to set a file of certificates.
- *
+/** Commandline argument to set a file of certificates.
*/
#define CSOAP_XMLSEC_CERTFILE "-CSOAPcertfile"
-/** @defgroup xmlsec_errors XML-security errors
+/** @defgroup CSOAP_XMLSEC_ERRORS XML-security errors
+ * @ingroup CSOAP_ERRORS
*
* Various errors related to XML-security
*
@@ -124,123 +115,116 @@
extern "C" {
#endif
-/**
- *
- * Initializes the WS-Security subsystem.
+/** This function initializes the WS-Security subsystem for a SOAP
+ * server.
*
* @param argc commandline arg count
* @param argv commandline arg vector
*
- * @return H_OK on success
+ * @return H_OK on success.
*
+ * @see soap_xmlsec_destroy()
*/
extern herror_t soap_xmlsec_server_init_args(int argc, char **argv);
-/**
- *
- * Initializes the WS-Security subsystem.
+/** This function initializes the WS-Security subsystem for a SOAP
+ * client.
*
* @param argc commandline arg count
* @param argv commandline arg vector
*
- * @return H_OK on success
+ * @return H_OK on success.
*
+ * @see soap_xmlsec_destroy()
*/
extern herror_t soap_xmlsec_client_init_args(int argc, char **argv);
-/**
- *
- * Sign a XML document contained in a SOAP Envelope with the key specified on
- * the commandline. Our way to create a <SOAP-SEC:Signature> header entry is as
- * follows:
- *
- * - Prepare the target SOAP Envelope with the body and necessary headers.
- * - Create a template of a <ds:Signature> element. The template is assumed to
- * contain empty contents for <ds:DigestValue> or <ds:SignatureValue> elements,
- * but contains appropriate values for the elements such as
- * <ds:SignatureMethod> and <ds:Reference> required to calculate them.
- * - Create a new header entry <SOAP-SEC:Signature> and add the template to this
- * entry.
+/** This function signs an XML document contained in a SOAP Envelope
+ * with the key specified on the commandline. Our way to create a
+ * <SOAP-SEC:Signature> header entry is as follows:
+ *
+ * - Prepare the target SOAP Envelope with the body and necessary
+ * headers.
+ * - Create a template of a <ds:Signature> element. The template is
+ * assumed to contain empty contents for <ds:DigestValue> or
+ * <ds:SignatureValue> elements, but contains appropriate values for
+ * the elements such as <ds:SignatureMethod> and <ds:Reference>
+ * required to calculate them.
+ * - Create a new header entry <SOAP-SEC:Signature> and add the
+ * template to this entry.
* - Add the header entry <SOAP-SEC:Signature> to the SOAP Header.
- * - Add the SOAP "actor" and "mustUnderstand" attributes to the entry, if
- * necessary.
- * - Calculate the <ds:DigestValue> and <ds:SignatureValue> elements according
- * to the core generation of the XML-Signature specification.
- *
- * XPath filtering can be used to specify objects to be signed, as described in
- * the XML-Signature specification. However, since the SOAP message exchange
- * model allows intermediate applications to modify the Envelope (add or delete
- * a header entry, for example), XPath filtering does not always result in the
- * same objects after message delivery. Care should be taken in using XPath
- * filtering so that there is no subsequent validation failure due to such
- * modifications.
- *
- * The transform http://www.w3.org/2000/09/xmldsig#enveloped-signature defined
- * in the XML-Signature specification may be useful when signing the entire
- * Envelope including other header entries, if any.
+ * - Add the SOAP "actor" and "mustUnderstand" attributes to the entry,
+ * if necessary.
+ * - Calculate the <ds:DigestValue> and <ds:SignatureValue> elements
+ * according to the core generation of the XML-Signature specification.
+ *
+ * XPath filtering can be used to specify objects to be signed, as
+ * described in the XML-Signature specification. However, since the SOAP
+ * message exchange model allows intermediate applications to modify the
+ * Envelope (add or delete a header entry, for example), XPath filtering
+ * does not always result in the same objects after message delivery.
+ * Care should be taken in using XPath filtering so that there is no
+ * subsequent validation failure due to such modifications.
+ *
+ * The transform http://www.w3.org/2000/09/xmldsig#enveloped-signature
+ * defined in the XML-Signature specification may be useful when
+ * signing the entire Envelope including other header entries, if any.
*
* @param context The SOAP context to be signed.
*
- * @return H_OK on success
+ * @return H_OK on success.
*
* @see http://www.w3.org/TR/SOAP-dsig/
* @see http://www.w3.org/TR/xmldsig-core/
- *
*/
extern herror_t soap_xmlsec_sign(struct SoapCtx *context);
-/**
- *
- * Verify a XML documents signature contained in a SOAP Envelope. The validation
- * of a <SOAP-SEC:Signature> header entry fails if:
- *
- * - The syntax of the content of the header entry does not conform to SOAP
- * Security Extensions: Digital Signature specification, or
- * - The validation of the signature contained in the header entry fails
- * according to the core validation of the XML-Signature specification, or
- * - The receiving application program rejects the signature for some reason
- * (e.g., the signature is created by an untrusted key).
- *
- * If the validation of the signature header entry fails, applications MAY report
- * the failure to the sender. It is out of the scope of this library how to deal
- * with it.
+/** This function verifies an XML documents signature contained in a
+ * SOAP Envelope. The validation of a <SOAP-SEC:Signature> header entry
+ * fails if:
+ * - The syntax of the content of the header entry does not conform to
+ * SOAP Security Extensions: Digital Signature specification, or
+ * - the validation of the signature contained in the header entry fails
+ * according to the core validation of the XML-Signature
+ * specification, or
+ * - the receiving application program rejects the signature for some
+ * reason (e.g., the signature is created by an untrusted key).
+ *
+ * If the validation of the signature header entry fails, applications
+ * MAY report the failure to the sender. It is out of the scope of this
+ * library how to deal with it.
*
* @param context The SOAP context to be verified.
*
- * @return H_OK on success
+ * @return H_OK on success.
*
* @see http://www.w3.org/TR/SOAP-dsig/
* @see http://www.w3.org/TR/xmldsig-core/
- *
*/
extern herror_t soap_xmlsec_verify(struct SoapCtx *context);
-/**
- *
- * Encrypt a XML document contained in a SOAP envelope.
+/** This function encrypts an XML document contained in a SOAP
+ * envelope.
*
* @param context The SOAP context to be encrypted.
*
- * @return H_OK on success
- *
+ * @return H_OK on success.
*/
extern herror_t soap_xmlsec_encrypt(struct SoapCtx *context);
-/**
- *
- * Decrupt a XML document contained in a SOAP envelope.
+/** This function decrypts an XML document contained in a SOAP
+ * envelope.
*
* @param context The SOAP context to be decrypted.
*
- * @return H_OK on success
- *
+ * @return H_OK on success.
*/
extern herror_t soap_xmlsec_decrypt(struct SoapCtx *context);
-/**
- *
- * Frees the resources needed by the XML security subsystem.
+/** This function frees the resources needed by the XML security
+ * subsystem.
*
+ * @see soap_xmlsec_init()
*/
extern void soap_xmlsec_destroy(void);
@@ -248,4 +232,6 @@ extern void soap_xmlsec_destroy(void);
}
#endif
+/**@}*/
+
#endif
diff --git a/nanohttp/Makefile.am b/nanohttp/Makefile.am
index 04933d3..a82cd00 100644
--- a/nanohttp/Makefile.am
+++ b/nanohttp/Makefile.am
@@ -1,20 +1,36 @@
#
-# $Revision: 1.16 $
+# $Revision: 1.17 $
#
lib_LTLIBRARIES=libnanohttp.la
libnanohttp_ladir=$(includedir)/nanohttp-@nanohttp_release@/nanohttp
-libnanohttp_la_SOURCES=nanohttp-common.c nanohttp-socket.c nanohttp-client.c \
- nanohttp-server.c nanohttp-stream.c nanohttp-mime.c \
- nanohttp-request.c nanohttp-response.c nanohttp-base64.c \
- nanohttp-logging.c nanohttp-admin.c nanohttp-error.c \
+libnanohttp_la_SOURCES=nanohttp-admin.c \
+ nanohttp-base64.c \
+ nanohttp-client.c \
+ nanohttp-common.c \
+ nanohttp-error.c \
+ nanohttp-logging.c \
+ nanohttp-mime.c \
+ nanohttp-request.c \
+ nanohttp-response.c \
+ nanohttp-server.c \
+ nanohttp-socket.c \
+ nanohttp-stream.c \
nanohttp-url.c
-libnanohttp_la_HEADERS=nanohttp-common.h nanohttp-socket.h nanohttp-client.h \
- nanohttp-server.h nanohttp-stream.h nanohttp-mime.h \
- nanohttp-request.h nanohttp-response.h nanohttp-logging.h \
- nanohttp-error.h nanohttp-base64.h nanohttp-admin.h \
+libnanohttp_la_HEADERS=nanohttp-admin.h \
+ nanohttp-base64.h \
+ nanohttp-client.h \
+ nanohttp-common.h \
+ nanohttp-error.h \
+ nanohttp-logging.h \
+ nanohttp-mime.h \
+ nanohttp-request.h \
+ nanohttp-response.h \
+ nanohttp-server.h \
+ nanohttp-socket.h \
+ nanohttp-stream.h \
nanohttp-url.h
if BUILD_WITH_SSL
diff --git a/nanohttp/Makefile.in b/nanohttp/Makefile.in
index c09d8b4..6545e07 100644
--- a/nanohttp/Makefile.in
+++ b/nanohttp/Makefile.in
@@ -60,24 +60,24 @@ am__installdirs = "$(DESTDIR)$(libdir)" \
libLTLIBRARIES_INSTALL = $(INSTALL)
LTLIBRARIES = $(lib_LTLIBRARIES)
libnanohttp_la_LIBADD =
-am__libnanohttp_la_SOURCES_DIST = nanohttp-common.c nanohttp-socket.c \
- nanohttp-client.c nanohttp-server.c nanohttp-stream.c \
- nanohttp-mime.c nanohttp-request.c nanohttp-response.c \
- nanohttp-base64.c nanohttp-logging.c nanohttp-admin.c \
- nanohttp-error.c nanohttp-url.c nanohttp-ssl.c
+am__libnanohttp_la_SOURCES_DIST = nanohttp-admin.c nanohttp-base64.c \
+ nanohttp-client.c nanohttp-common.c nanohttp-error.c \
+ nanohttp-logging.c nanohttp-mime.c nanohttp-request.c \
+ nanohttp-response.c nanohttp-server.c nanohttp-socket.c \
+ nanohttp-stream.c nanohttp-url.c nanohttp-ssl.c
@BUILD_WITH_SSL_TRUE@am__objects_1 = libnanohttp_la-nanohttp-ssl.lo
-am_libnanohttp_la_OBJECTS = libnanohttp_la-nanohttp-common.lo \
- libnanohttp_la-nanohttp-socket.lo \
+am_libnanohttp_la_OBJECTS = libnanohttp_la-nanohttp-admin.lo \
+ libnanohttp_la-nanohttp-base64.lo \
libnanohttp_la-nanohttp-client.lo \
- libnanohttp_la-nanohttp-server.lo \
- libnanohttp_la-nanohttp-stream.lo \
+ libnanohttp_la-nanohttp-common.lo \
+ libnanohttp_la-nanohttp-error.lo \
+ libnanohttp_la-nanohttp-logging.lo \
libnanohttp_la-nanohttp-mime.lo \
libnanohttp_la-nanohttp-request.lo \
libnanohttp_la-nanohttp-response.lo \
- libnanohttp_la-nanohttp-base64.lo \
- libnanohttp_la-nanohttp-logging.lo \
- libnanohttp_la-nanohttp-admin.lo \
- libnanohttp_la-nanohttp-error.lo \
+ libnanohttp_la-nanohttp-server.lo \
+ libnanohttp_la-nanohttp-socket.lo \
+ libnanohttp_la-nanohttp-stream.lo \
libnanohttp_la-nanohttp-url.lo $(am__objects_1)
libnanohttp_la_OBJECTS = $(am_libnanohttp_la_OBJECTS)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
@@ -93,11 +93,11 @@ LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = $(libnanohttp_la_SOURCES)
DIST_SOURCES = $(am__libnanohttp_la_SOURCES_DIST)
-am__libnanohttp_la_HEADERS_DIST = nanohttp-common.h nanohttp-socket.h \
- nanohttp-client.h nanohttp-server.h nanohttp-stream.h \
- nanohttp-mime.h nanohttp-request.h nanohttp-response.h \
- nanohttp-logging.h nanohttp-error.h nanohttp-base64.h \
- nanohttp-admin.h nanohttp-url.h nanohttp-ssl.h
+am__libnanohttp_la_HEADERS_DIST = nanohttp-admin.h nanohttp-base64.h \
+ nanohttp-client.h nanohttp-common.h nanohttp-error.h \
+ nanohttp-logging.h nanohttp-mime.h nanohttp-request.h \
+ nanohttp-response.h nanohttp-server.h nanohttp-socket.h \
+ nanohttp-stream.h nanohttp-url.h nanohttp-ssl.h
libnanohttp_laHEADERS_INSTALL = $(INSTALL_HEADER)
HEADERS = $(libnanohttp_la_HEADERS)
ETAGS = etags
@@ -225,20 +225,20 @@ sysconfdir = @sysconfdir@
target_alias = @target_alias@
#
-# $Revision: 1.1 $
+# $Revision: 1.2 $
#
lib_LTLIBRARIES = libnanohttp.la
libnanohttp_ladir = $(includedir)/nanohttp-@nanohttp_release@/nanohttp
-libnanohttp_la_SOURCES = nanohttp-common.c nanohttp-socket.c \
- nanohttp-client.c nanohttp-server.c nanohttp-stream.c \
- nanohttp-mime.c nanohttp-request.c nanohttp-response.c \
- nanohttp-base64.c nanohttp-logging.c nanohttp-admin.c \
- nanohttp-error.c nanohttp-url.c $(am__append_1)
-libnanohttp_la_HEADERS = nanohttp-common.h nanohttp-socket.h \
- nanohttp-client.h nanohttp-server.h nanohttp-stream.h \
- nanohttp-mime.h nanohttp-request.h nanohttp-response.h \
- nanohttp-logging.h nanohttp-error.h nanohttp-base64.h \
- nanohttp-admin.h nanohttp-url.h $(am__append_2)
+libnanohttp_la_SOURCES = nanohttp-admin.c nanohttp-base64.c \
+ nanohttp-client.c nanohttp-common.c nanohttp-error.c \
+ nanohttp-logging.c nanohttp-mime.c nanohttp-request.c \
+ nanohttp-response.c nanohttp-server.c nanohttp-socket.c \
+ nanohttp-stream.c nanohttp-url.c $(am__append_1)
+libnanohttp_la_HEADERS = nanohttp-admin.h nanohttp-base64.h \
+ nanohttp-client.h nanohttp-common.h nanohttp-error.h \
+ nanohttp-logging.h nanohttp-mime.h nanohttp-request.h \
+ nanohttp-response.h nanohttp-server.h nanohttp-socket.h \
+ nanohttp-stream.h nanohttp-url.h $(am__append_2)
libnanohttp_la_LDFLAGS = -version-info @nanohttp_version@ -release @nanohttp_release@
libnanohttp_la_CFLAGS = -I${top_srcdir} -D__NHTTP_INTERNAL=1
all: all-am
@@ -346,19 +346,19 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
-libnanohttp_la-nanohttp-common.lo: nanohttp-common.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -MT libnanohttp_la-nanohttp-common.lo -MD -MP -MF "$(DEPDIR)/libnanohttp_la-nanohttp-common.Tpo" -c -o libnanohttp_la-nanohttp-common.lo `test -f 'nanohttp-common.c' || echo '$(srcdir)/'`nanohttp-common.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libnanohttp_la-nanohttp-common.Tpo" "$(DEPDIR)/libnanohttp_la-nanohttp-common.Plo"; else rm -f "$(DEPDIR)/libnanohttp_la-nanohttp-common.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nanohttp-common.c' object='libnanohttp_la-nanohttp-common.lo' libtool=yes @AMDEPBACKSLASH@
+libnanohttp_la-nanohttp-admin.lo: nanohttp-admin.c
+@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -MT libnanohttp_la-nanohttp-admin.lo -MD -MP -MF "$(DEPDIR)/libnanohttp_la-nanohttp-admin.Tpo" -c -o libnanohttp_la-nanohttp-admin.lo `test -f 'nanohttp-admin.c' || echo '$(srcdir)/'`nanohttp-admin.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libnanohttp_la-nanohttp-admin.Tpo" "$(DEPDIR)/libnanohttp_la-nanohttp-admin.Plo"; else rm -f "$(DEPDIR)/libnanohttp_la-nanohttp-admin.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nanohttp-admin.c' object='libnanohttp_la-nanohttp-admin.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -c -o libnanohttp_la-nanohttp-common.lo `test -f 'nanohttp-common.c' || echo '$(srcdir)/'`nanohttp-common.c
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -c -o libnanohttp_la-nanohttp-admin.lo `test -f 'nanohttp-admin.c' || echo '$(srcdir)/'`nanohttp-admin.c
-libnanohttp_la-nanohttp-socket.lo: nanohttp-socket.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -MT libnanohttp_la-nanohttp-socket.lo -MD -MP -MF "$(DEPDIR)/libnanohttp_la-nanohttp-socket.Tpo" -c -o libnanohttp_la-nanohttp-socket.lo `test -f 'nanohttp-socket.c' || echo '$(srcdir)/'`nanohttp-socket.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libnanohttp_la-nanohttp-socket.Tpo" "$(DEPDIR)/libnanohttp_la-nanohttp-socket.Plo"; else rm -f "$(DEPDIR)/libnanohttp_la-nanohttp-socket.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nanohttp-socket.c' object='libnanohttp_la-nanohttp-socket.lo' libtool=yes @AMDEPBACKSLASH@
+libnanohttp_la-nanohttp-base64.lo: nanohttp-base64.c
+@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -MT libnanohttp_la-nanohttp-base64.lo -MD -MP -MF "$(DEPDIR)/libnanohttp_la-nanohttp-base64.Tpo" -c -o libnanohttp_la-nanohttp-base64.lo `test -f 'nanohttp-base64.c' || echo '$(srcdir)/'`nanohttp-base64.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libnanohttp_la-nanohttp-base64.Tpo" "$(DEPDIR)/libnanohttp_la-nanohttp-base64.Plo"; else rm -f "$(DEPDIR)/libnanohttp_la-nanohttp-base64.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nanohttp-base64.c' object='libnanohttp_la-nanohttp-base64.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -c -o libnanohttp_la-nanohttp-socket.lo `test -f 'nanohttp-socket.c' || echo '$(srcdir)/'`nanohttp-socket.c
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -c -o libnanohttp_la-nanohttp-base64.lo `test -f 'nanohttp-base64.c' || echo '$(srcdir)/'`nanohttp-base64.c
libnanohttp_la-nanohttp-client.lo: nanohttp-client.c
@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -MT libnanohttp_la-nanohttp-client.lo -MD -MP -MF "$(DEPDIR)/libnanohttp_la-nanohttp-client.Tpo" -c -o libnanohttp_la-nanohttp-client.lo `test -f 'nanohttp-client.c' || echo '$(srcdir)/'`nanohttp-client.c; \
@@ -367,19 +367,26 @@ libnanohttp_la-nanohttp-client.lo: nanohttp-client.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -c -o libnanohttp_la-nanohttp-client.lo `test -f 'nanohttp-client.c' || echo '$(srcdir)/'`nanohttp-client.c
-libnanohttp_la-nanohttp-server.lo: nanohttp-server.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -MT libnanohttp_la-nanohttp-server.lo -MD -MP -MF "$(DEPDIR)/libnanohttp_la-nanohttp-server.Tpo" -c -o libnanohttp_la-nanohttp-server.lo `test -f 'nanohttp-server.c' || echo '$(srcdir)/'`nanohttp-server.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libnanohttp_la-nanohttp-server.Tpo" "$(DEPDIR)/libnanohttp_la-nanohttp-server.Plo"; else rm -f "$(DEPDIR)/libnanohttp_la-nanohttp-server.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nanohttp-server.c' object='libnanohttp_la-nanohttp-server.lo' libtool=yes @AMDEPBACKSLASH@
+libnanohttp_la-nanohttp-common.lo: nanohttp-common.c
+@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -MT libnanohttp_la-nanohttp-common.lo -MD -MP -MF "$(DEPDIR)/libnanohttp_la-nanohttp-common.Tpo" -c -o libnanohttp_la-nanohttp-common.lo `test -f 'nanohttp-common.c' || echo '$(srcdir)/'`nanohttp-common.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libnanohttp_la-nanohttp-common.Tpo" "$(DEPDIR)/libnanohttp_la-nanohttp-common.Plo"; else rm -f "$(DEPDIR)/libnanohttp_la-nanohttp-common.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nanohttp-common.c' object='libnanohttp_la-nanohttp-common.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -c -o libnanohttp_la-nanohttp-server.lo `test -f 'nanohttp-server.c' || echo '$(srcdir)/'`nanohttp-server.c
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -c -o libnanohttp_la-nanohttp-common.lo `test -f 'nanohttp-common.c' || echo '$(srcdir)/'`nanohttp-common.c
-libnanohttp_la-nanohttp-stream.lo: nanohttp-stream.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -MT libnanohttp_la-nanohttp-stream.lo -MD -MP -MF "$(DEPDIR)/libnanohttp_la-nanohttp-stream.Tpo" -c -o libnanohttp_la-nanohttp-stream.lo `test -f 'nanohttp-stream.c' || echo '$(srcdir)/'`nanohttp-stream.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libnanohttp_la-nanohttp-stream.Tpo" "$(DEPDIR)/libnanohttp_la-nanohttp-stream.Plo"; else rm -f "$(DEPDIR)/libnanohttp_la-nanohttp-stream.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nanohttp-stream.c' object='libnanohttp_la-nanohttp-stream.lo' libtool=yes @AMDEPBACKSLASH@
+libnanohttp_la-nanohttp-error.lo: nanohttp-error.c
+@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -MT libnanohttp_la-nanohttp-error.lo -MD -MP -MF "$(DEPDIR)/libnanohttp_la-nanohttp-error.Tpo" -c -o libnanohttp_la-nanohttp-error.lo `test -f 'nanohttp-error.c' || echo '$(srcdir)/'`nanohttp-error.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libnanohttp_la-nanohttp-error.Tpo" "$(DEPDIR)/libnanohttp_la-nanohttp-error.Plo"; else rm -f "$(DEPDIR)/libnanohttp_la-nanohttp-error.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nanohttp-error.c' object='libnanohttp_la-nanohttp-error.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -c -o libnanohttp_la-nanohttp-stream.lo `test -f 'nanohttp-stream.c' || echo '$(srcdir)/'`nanohttp-stream.c
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -c -o libnanohttp_la-nanohttp-error.lo `test -f 'nanohttp-error.c' || echo '$(srcdir)/'`nanohttp-error.c
+
+libnanohttp_la-nanohttp-logging.lo: nanohttp-logging.c
+@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -MT libnanohttp_la-nanohttp-logging.lo -MD -MP -MF "$(DEPDIR)/libnanohttp_la-nanohttp-logging.Tpo" -c -o libnanohttp_la-nanohttp-logging.lo `test -f 'nanohttp-logging.c' || echo '$(srcdir)/'`nanohttp-logging.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libnanohttp_la-nanohttp-logging.Tpo" "$(DEPDIR)/libnanohttp_la-nanohttp-logging.Plo"; else rm -f "$(DEPDIR)/libnanohttp_la-nanohttp-logging.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nanohttp-logging.c' object='libnanohttp_la-nanohttp-logging.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -c -o libnanohttp_la-nanohttp-logging.lo `test -f 'nanohttp-logging.c' || echo '$(srcdir)/'`nanohttp-logging.c
libnanohttp_la-nanohttp-mime.lo: nanohttp-mime.c
@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -MT libnanohttp_la-nanohttp-mime.lo -MD -MP -MF "$(DEPDIR)/libnanohttp_la-nanohttp-mime.Tpo" -c -o libnanohttp_la-nanohttp-mime.lo `test -f 'nanohttp-mime.c' || echo '$(srcdir)/'`nanohttp-mime.c; \
@@ -402,33 +409,26 @@ libnanohttp_la-nanohttp-response.lo: nanohttp-response.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -c -o libnanohttp_la-nanohttp-response.lo `test -f 'nanohttp-response.c' || echo '$(srcdir)/'`nanohttp-response.c
-libnanohttp_la-nanohttp-base64.lo: nanohttp-base64.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -MT libnanohttp_la-nanohttp-base64.lo -MD -MP -MF "$(DEPDIR)/libnanohttp_la-nanohttp-base64.Tpo" -c -o libnanohttp_la-nanohttp-base64.lo `test -f 'nanohttp-base64.c' || echo '$(srcdir)/'`nanohttp-base64.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libnanohttp_la-nanohttp-base64.Tpo" "$(DEPDIR)/libnanohttp_la-nanohttp-base64.Plo"; else rm -f "$(DEPDIR)/libnanohttp_la-nanohttp-base64.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nanohttp-base64.c' object='libnanohttp_la-nanohttp-base64.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -c -o libnanohttp_la-nanohttp-base64.lo `test -f 'nanohttp-base64.c' || echo '$(srcdir)/'`nanohttp-base64.c
-
-libnanohttp_la-nanohttp-logging.lo: nanohttp-logging.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -MT libnanohttp_la-nanohttp-logging.lo -MD -MP -MF "$(DEPDIR)/libnanohttp_la-nanohttp-logging.Tpo" -c -o libnanohttp_la-nanohttp-logging.lo `test -f 'nanohttp-logging.c' || echo '$(srcdir)/'`nanohttp-logging.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libnanohttp_la-nanohttp-logging.Tpo" "$(DEPDIR)/libnanohttp_la-nanohttp-logging.Plo"; else rm -f "$(DEPDIR)/libnanohttp_la-nanohttp-logging.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nanohttp-logging.c' object='libnanohttp_la-nanohttp-logging.lo' libtool=yes @AMDEPBACKSLASH@
+libnanohttp_la-nanohttp-server.lo: nanohttp-server.c
+@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -MT libnanohttp_la-nanohttp-server.lo -MD -MP -MF "$(DEPDIR)/libnanohttp_la-nanohttp-server.Tpo" -c -o libnanohttp_la-nanohttp-server.lo `test -f 'nanohttp-server.c' || echo '$(srcdir)/'`nanohttp-server.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libnanohttp_la-nanohttp-server.Tpo" "$(DEPDIR)/libnanohttp_la-nanohttp-server.Plo"; else rm -f "$(DEPDIR)/libnanohttp_la-nanohttp-server.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nanohttp-server.c' object='libnanohttp_la-nanohttp-server.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -c -o libnanohttp_la-nanohttp-logging.lo `test -f 'nanohttp-logging.c' || echo '$(srcdir)/'`nanohttp-logging.c
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -c -o libnanohttp_la-nanohttp-server.lo `test -f 'nanohttp-server.c' || echo '$(srcdir)/'`nanohttp-server.c
-libnanohttp_la-nanohttp-admin.lo: nanohttp-admin.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -MT libnanohttp_la-nanohttp-admin.lo -MD -MP -MF "$(DEPDIR)/libnanohttp_la-nanohttp-admin.Tpo" -c -o libnanohttp_la-nanohttp-admin.lo `test -f 'nanohttp-admin.c' || echo '$(srcdir)/'`nanohttp-admin.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libnanohttp_la-nanohttp-admin.Tpo" "$(DEPDIR)/libnanohttp_la-nanohttp-admin.Plo"; else rm -f "$(DEPDIR)/libnanohttp_la-nanohttp-admin.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nanohttp-admin.c' object='libnanohttp_la-nanohttp-admin.lo' libtool=yes @AMDEPBACKSLASH@
+libnanohttp_la-nanohttp-socket.lo: nanohttp-socket.c
+@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -MT libnanohttp_la-nanohttp-socket.lo -MD -MP -MF "$(DEPDIR)/libnanohttp_la-nanohttp-socket.Tpo" -c -o libnanohttp_la-nanohttp-socket.lo `test -f 'nanohttp-socket.c' || echo '$(srcdir)/'`nanohttp-socket.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libnanohttp_la-nanohttp-socket.Tpo" "$(DEPDIR)/libnanohttp_la-nanohttp-socket.Plo"; else rm -f "$(DEPDIR)/libnanohttp_la-nanohttp-socket.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nanohttp-socket.c' object='libnanohttp_la-nanohttp-socket.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -c -o libnanohttp_la-nanohttp-admin.lo `test -f 'nanohttp-admin.c' || echo '$(srcdir)/'`nanohttp-admin.c
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -c -o libnanohttp_la-nanohttp-socket.lo `test -f 'nanohttp-socket.c' || echo '$(srcdir)/'`nanohttp-socket.c
-libnanohttp_la-nanohttp-error.lo: nanohttp-error.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -MT libnanohttp_la-nanohttp-error.lo -MD -MP -MF "$(DEPDIR)/libnanohttp_la-nanohttp-error.Tpo" -c -o libnanohttp_la-nanohttp-error.lo `test -f 'nanohttp-error.c' || echo '$(srcdir)/'`nanohttp-error.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libnanohttp_la-nanohttp-error.Tpo" "$(DEPDIR)/libnanohttp_la-nanohttp-error.Plo"; else rm -f "$(DEPDIR)/libnanohttp_la-nanohttp-error.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nanohttp-error.c' object='libnanohttp_la-nanohttp-error.lo' libtool=yes @AMDEPBACKSLASH@
+libnanohttp_la-nanohttp-stream.lo: nanohttp-stream.c
+@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -MT libnanohttp_la-nanohttp-stream.lo -MD -MP -MF "$(DEPDIR)/libnanohttp_la-nanohttp-stream.Tpo" -c -o libnanohttp_la-nanohttp-stream.lo `test -f 'nanohttp-stream.c' || echo '$(srcdir)/'`nanohttp-stream.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libnanohttp_la-nanohttp-stream.Tpo" "$(DEPDIR)/libnanohttp_la-nanohttp-stream.Plo"; else rm -f "$(DEPDIR)/libnanohttp_la-nanohttp-stream.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nanohttp-stream.c' object='libnanohttp_la-nanohttp-stream.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -c -o libnanohttp_la-nanohttp-error.lo `test -f 'nanohttp-error.c' || echo '$(srcdir)/'`nanohttp-error.c
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -c -o libnanohttp_la-nanohttp-stream.lo `test -f 'nanohttp-stream.c' || echo '$(srcdir)/'`nanohttp-stream.c
libnanohttp_la-nanohttp-url.lo: nanohttp-url.c
@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnanohttp_la_CFLAGS) $(CFLAGS) -MT libnanohttp_la-nanohttp-url.lo -MD -MP -MF "$(DEPDIR)/libnanohttp_la-nanohttp-url.Tpo" -c -o libnanohttp_la-nanohttp-url.lo `test -f 'nanohttp-url.c' || echo '$(srcdir)/'`nanohttp-url.c; \
diff --git a/nanohttp/nanohttp-admin.c b/nanohttp/nanohttp-admin.c
index 060cbb8..91ad0f0 100644
--- a/nanohttp/nanohttp-admin.c
+++ b/nanohttp/nanohttp-admin.c
@@ -1,5 +1,6 @@
+/** @file nanohttp-admin.c Administrator application */
/******************************************************************
-* $Id: nanohttp-admin.c,v 1.12 2007/01/01 22:54:46 m0gg Exp $
+* $Id: nanohttp-admin.c,v 1.13 2007/11/03 22:40:10 m0gg Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -21,6 +22,7 @@
*
* Email: ayaz@jprogrammer.net
******************************************************************/
+
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
@@ -42,6 +44,7 @@
#endif
#include "nanohttp-error.h"
+#include "nanohttp-logging.h"
#include "nanohttp-common.h"
#include "nanohttp-stream.h"
#include "nanohttp-request.h"
@@ -73,18 +76,17 @@ _httpd_admin_send_title(httpd_conn_t *conn, const char *title)
"<span class=\"logo\">nhttpd</span> ");
http_output_stream_write_string(conn->out, title);
http_output_stream_write_string(conn->out, "<hr />");
-
- return;
}
static inline void
_httpd_admin_send_footer(httpd_conn_t *conn)
{
http_output_stream_write_string(conn->out,
+ "<hr />"
+ "<a href=\"" NHTTPD_ADMIN_CONTEXT "\">Admin page</a> "
+ "<a href=\"http://csoap.sf.net/\">cSOAP Home</a>"
"</body>"
"</html>");
-
- return;
}
static void
@@ -125,8 +127,6 @@ _httpd_admin_list_services(httpd_conn_t *conn)
http_output_stream_write_string(conn->out, "</ul>");
_httpd_admin_send_footer(conn);
-
- return;
}
static void
@@ -135,10 +135,12 @@ _httpd_admin_list_statistics(httpd_conn_t *conn, const char *service_name)
char buffer[1024];
hservice_t *service;
+ log_verbose("Client requested statistics for \"%s\"", service_name);
+
sprintf(buffer, "Listing statistics for service <b>%s</b>", service_name);
_httpd_admin_send_title(conn, buffer);
- if (!(service = httpd_find_service(service_name)))
+ if (!service_name || !(service = httpd_find_service(service_name)))
{
http_output_stream_write_string(conn->out,
"<p>"
@@ -154,7 +156,7 @@ _httpd_admin_list_statistics(httpd_conn_t *conn, const char *service_name)
"<li>Bytes read: %lu</li>"
"<li>Bytes sent: %lu</li>"
"<li>Time used: %li.%li sec</li>"
- "<ul>",
+ "</ul>",
service->statistics->requests,
service->statistics->bytes_received,
service->statistics->bytes_transmitted,
@@ -165,8 +167,6 @@ _httpd_admin_list_statistics(httpd_conn_t *conn, const char *service_name)
http_output_stream_write_string(conn->out, buffer);
_httpd_admin_send_footer(conn);
-
- return;
}
static void
@@ -197,8 +197,6 @@ _httpd_admin_enable_service(httpd_conn_t *conn, const char *service_name)
"</p>");
_httpd_admin_send_footer(conn);
-
- return;
}
static void
@@ -227,8 +225,84 @@ _httpd_admin_disable_service(httpd_conn_t *conn, const char *service_name)
"Service is down"
"</p>");
_httpd_admin_send_footer(conn);
+}
+
+static void
+_httpd_admin_set_loglevel(httpd_conn_t *conn, const char *loglevel)
+{
+ nanohttp_loglevel_t old;
+ char buffer[256];
+ char *tmp;
- return;
+ if (strcmp(loglevel, NANOHTTP_LOG_LEVEL_OFF_STRING) == 0)
+ {
+ old = nanohttp_log_set_loglevel(NANOHTTP_LOG_OFF);
+ }
+ else if (strcmp(loglevel, NANOHTTP_LOG_LEVEL_VERBOSE_STRING) == 0)
+ {
+ old = nanohttp_log_set_loglevel(NANOHTTP_LOG_VERBOSE);
+ }
+ else if (strcmp(loglevel, NANOHTTP_LOG_LEVEL_DEBUG_STRING) == 0)
+ {
+ old = nanohttp_log_set_loglevel(NANOHTTP_LOG_DEBUG);
+ }
+ else if (strcmp(loglevel, NANOHTTP_LOG_LEVEL_INFO_STRING) == 0)
+ {
+ old = nanohttp_log_set_loglevel(NANOHTTP_LOG_INFO);
+ }
+ else if (strcmp(loglevel, NANOHTTP_LOG_LEVEL_WARN_STRING) == 0)
+ {
+ old = nanohttp_log_set_loglevel(NANOHTTP_LOG_WARN);
+ }
+ else if (strcmp(loglevel, NANOHTTP_LOG_LEVEL_ERROR_STRING) == 0)
+ {
+ old = nanohttp_log_set_loglevel(NANOHTTP_LOG_ERROR);
+ }
+ else if (strcmp(loglevel, NANOHTTP_LOG_LEVEL_FATAL_STRING) == 0)
+ {
+ old = nanohttp_log_set_loglevel(NANOHTTP_LOG_FATAL);
+ }
+ else
+ {
+ old = nanohttp_log_get_loglevel();
+ loglevel = NANOHTTP_LOG_LEVEL_UNKNOWN_STRING;
+ log_error("unknown loglevel requested");
+ }
+
+ switch (old)
+ {
+ case NANOHTTP_LOG_OFF:
+ tmp = NANOHTTP_LOG_LEVEL_OFF_STRING;
+ break;
+ case NANOHTTP_LOG_VERBOSE:
+ tmp = NANOHTTP_LOG_LEVEL_VERBOSE_STRING;
+ break;
+ case NANOHTTP_LOG_DEBUG:
+ tmp = NANOHTTP_LOG_LEVEL_DEBUG_STRING;
+ break;
+ case NANOHTTP_LOG_INFO:
+ tmp = NANOHTTP_LOG_LEVEL_INFO_STRING;
+ break;
+ case NANOHTTP_LOG_WARN:
+ tmp = NANOHTTP_LOG_LEVEL_WARN_STRING;
+ break;
+ case NANOHTTP_LOG_ERROR:
+ tmp = NANOHTTP_LOG_LEVEL_ERROR_STRING;
+ break;
+ case NANOHTTP_LOG_FATAL:
+ tmp = NANOHTTP_LOG_LEVEL_FATAL_STRING;
+ break;
+ default:
+ tmp = NANOHTTP_LOG_LEVEL_UNKNOWN_STRING;
+ break;
+ }
+
+ _httpd_admin_send_title(conn, "Adjusting loglevel");
+
+ sprintf(buffer, "<p>Switching from %s to %s</p>", tmp, loglevel);
+ http_output_stream_write_string(conn->out, buffer);
+
+ _httpd_admin_send_footer(conn);
}
static void
@@ -252,9 +326,13 @@ _httpd_admin_handle_get(httpd_conn_t * conn, struct hrequest_t *req)
{
_httpd_admin_disable_service(conn, param);
}
+ else if ((param = hpairnode_get_ignore_case(req->query, NHTTPD_ADMIN_QUERY_SET_LOGLEVEL)))
+ {
+ _httpd_admin_set_loglevel(conn, param);
+ }
else
{
- _httpd_admin_send_title(conn, "Welcome to the admin site");
+ _httpd_admin_send_title(conn, "Welcome to the admin page");
http_output_stream_write_string(conn->out,
"<ul>"
@@ -264,12 +342,19 @@ _httpd_admin_handle_get(httpd_conn_t * conn, struct hrequest_t *req)
"<li>"
"<a href=\"?" NHTTPD_ADMIN_QUERY_STATISTICS "\">Statistics</a>"
"</li>"
+ "<li>Set loglevel: "
+ "<a href=\"?" NHTTPD_ADMIN_QUERY_SET_LOGLEVEL "=" NANOHTTP_LOG_LEVEL_OFF_STRING "\">OFF</a> "
+ "<a href=\"?" NHTTPD_ADMIN_QUERY_SET_LOGLEVEL "=" NANOHTTP_LOG_LEVEL_VERBOSE_STRING "\">VERBOSE</a> "
+ "<a href=\"?" NHTTPD_ADMIN_QUERY_SET_LOGLEVEL "=" NANOHTTP_LOG_LEVEL_DEBUG_STRING "\">DEBUG</a> "
+ "<a href=\"?" NHTTPD_ADMIN_QUERY_SET_LOGLEVEL "=" NANOHTTP_LOG_LEVEL_INFO_STRING "\">INFO</a> "
+ "<a href=\"?" NHTTPD_ADMIN_QUERY_SET_LOGLEVEL "=" NANOHTTP_LOG_LEVEL_WARN_STRING "\">WARN</a> "
+ "<a href=\"?" NHTTPD_ADMIN_QUERY_SET_LOGLEVEL "=" NANOHTTP_LOG_LEVEL_ERROR_STRING "\">ERROR</a> "
+ "<a href=\"?" NHTTPD_ADMIN_QUERY_SET_LOGLEVEL "=" NANOHTTP_LOG_LEVEL_FATAL_STRING "\">FATAL</a> "
+ "</li>"
"</ul>");
_httpd_admin_send_footer(conn);
}
-
- return;
}
static void
@@ -289,11 +374,10 @@ _httpd_admin_entry(httpd_conn_t * conn, struct hrequest_t *req)
"<body>"
"<h1>Sorry!</h1>"
"<hr />"
- "<div>POST Service is not implemented now. Use your browser.</div>"
+ "<div>Only GET method is implemented now. Use your browser.</div>"
"</body>"
"</html>");
}
- return;
}
herror_t
@@ -305,7 +389,7 @@ httpd_admin_init_args(int argc, char **argv)
{
if (!strcmp(argv[i], NHTTPD_ARG_ENABLE_ADMIN))
{
- httpd_register("/nhttp", _httpd_admin_entry);
+ httpd_register(NHTTPD_ADMIN_CONTEXT, _httpd_admin_entry);
break;
}
}
diff --git a/nanohttp/nanohttp-admin.h b/nanohttp/nanohttp-admin.h
index bbbc0e2..0d90dcd 100644
--- a/nanohttp/nanohttp-admin.h
+++ b/nanohttp/nanohttp-admin.h
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: nanohttp-admin.h,v 1.6 2006/12/19 08:55:17 m0gg Exp $
+ * $Id: nanohttp-admin.h,v 1.7 2007/11/03 22:40:10 m0gg Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -24,93 +24,90 @@
#ifndef __nanohttp_admin_h
#define __nanohttp_admin_h
-/**
+/** @file nanohttp-admin.h Administrator application
*
- * Commandline argument to enabled the nanoHTTP admin interface. This service
- * will be reachable via the NHTTPD_ADMIN_CONTEXT.
+ * @defgroup NANOHTTP_ADMIN Administrator application
+ * @ingroup NANOHTTP_SERVER
+ */
+/**@{*/
+
+/** @defgrup NANOHTTP_ADMIN_CMDLINE_FLAGS Command line flags
+ */
+/**@{*/
+/** Commandline argument to enabled the nanoHTTP admin interface.
+ * This service will be reachable via the NHTTPD_ADMIN_CONTEXT.
*
* @see NHTTPD_ADMIN_CONTEXT
- *
*/
#define NHTTPD_ARG_ENABLE_ADMIN "-NHTTPDadmin"
-/**
- *
- * Context of the nanoHTTP admin interface.
+/**@}*/
+
+/** Context of the nanoHTTP admin interface.
*
* Example query:
- *
- * @code
- * http://localhost:10000/nhttp
- * @endcode
+ @verbatim
+ GET http://localhost:10000/nhttp
+ @endverbatim
*
* @see httpd_register
- *
*/
#define NHTTPD_ADMIN_CONTEXT "/nhttp"
-/**
- *
- * Query parameter for services.
+/** Query parameter for services.
*
* Example query:
- *
- * @code
- * http://localhost:10000/nhttp?services=list
- * @endcode
- *
+ @verbatim
+ GET http://localhost:10000/nhttp?services=list
+ @endverbatim
*/
#define NHTTPD_ADMIN_QUERY_SERVICES "services"
-/**
- *
- * Parameter to query service statistics.
+/** Parameter to query service statistics.
*
* Example query:
- *
- * @code
- * http://localhost:10000/nhttp?statistics=SERVICE_CONTEXT
- * @endcode
- *
+ @verbatim
+ GET http://localhost:10000/nhttp?statistics=SERVICE_CONTEXT
+ @endverbatim
*/
#define NHTTPD_ADMIN_QUERY_STATISTICS "statistics"
-/**
- *
- * Parameter to enable a server.
+/** Parameter to enable a server.
*
* Example query:
- *
- * @code
- * http://localhost:10000/nhttp?activate=SERVICE_CONTEXT
- * @endcode
- *
+ @verbatim
+ GET http://localhost:10000/nhttp?activate=SERVICE_CONTEXT
+ @endverbatim
*/
#define NHTTPD_ADMIN_QUERY_ACTIVATE_SERVICE "activate"
-/**
- *
- * Parameter to disable a service.
+/** Parameter to disable a service.
*
* Example query:
- *
- * @code
- * http://localhost:10000/nhttp?passivate=SERVICE_CONTEXT
- * @endcode
- *
+ @verbatim
+ GET http://localhost:10000/nhttp?passivate=SERVICE_CONTEXT
+ @endverbatim
*/
#define NHTTPD_ADMIN_QUERY_PASSIVATE_SERVICE "passivate"
+/** Parameter to switch loglevels.
+ *
+ * Example query:
+ @verbatim
+ GET http://localhost:10000/nhttp?loglevel=OFF
+ @endverbatim
+ */
+#define NHTTPD_ADMIN_QUERY_SET_LOGLEVEL "loglevel"
+
#ifdef __cplusplus
extern "C" {
#endif
-/**
- *
- * Initializes the nanoHTTP admin interface with commandline arguments, if
- * NHTTPD_ARG_ENABLED_ADMIN was specified in the commandline arguments. This
- * service will be reachable via the NHTTP_ADMIN_CONTEXT of the nanohttp server.
+/** This function initializes the nanoHTTP admin interface with
+ * commandline arguments, if NHTTPD_ARG_ENABLED_ADMIN was specified
+ * on the commandline. This service will be reachable via the
+ * NHTTP_ADMIN_CONTEXT of the nanohttp server.
*
* @param argc commandline arg count
* @param argv commandline arg vector
@@ -119,7 +116,6 @@ extern "C" {
*
* @see NHTTPD_ADMIN_CONTEXT
* @see NHTTPD_ARG_ENABLE_ADMIN
- *
*/
extern herror_t httpd_admin_init_args(int argc, char **argv);
@@ -127,4 +123,6 @@ extern herror_t httpd_admin_init_args(int argc, char **argv);
}
#endif
+/**@}*/
+
#endif
diff --git a/nanohttp/nanohttp-base64.c b/nanohttp/nanohttp-base64.c
index a0f4bec..7de9327 100644
--- a/nanohttp/nanohttp-base64.c
+++ b/nanohttp/nanohttp-base64.c
@@ -1,5 +1,6 @@
+/** @file nanohttp-base64.c Base64 data encoding/decoding */
/******************************************************************
-* $Id: nanohttp-base64.c,v 1.4 2006/12/11 08:13:19 m0gg Exp $
+* $Id: nanohttp-base64.c,v 1.5 2007/11/03 22:40:10 m0gg Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -87,7 +88,9 @@ static void _decodeblock(unsigned char in[4], unsigned char out[3])
}
/**
+ *
* decode a base64 encoded string (maybe broken...)
+ *
*/
void base64_decode_string(const unsigned char *instr, unsigned char *outstr)
{
diff --git a/nanohttp/nanohttp-base64.h b/nanohttp/nanohttp-base64.h
index 03301ff..c24c96c 100644
--- a/nanohttp/nanohttp-base64.h
+++ b/nanohttp/nanohttp-base64.h
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: nanohttp-base64.h,v 1.4 2006/12/13 08:18:53 m0gg Exp $
+* $Id: nanohttp-base64.h,v 1.5 2007/11/03 22:40:10 m0gg Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -24,56 +24,50 @@
#ifndef __nanohttp_base64_h
#define __nanohttp_base64_h
-/** @file
+/** @file nanohttp-base64.h Base64 data encoding/decoding
*
- * \section base64_data_enc_sec Base64 data encoding
+ * @section base64_data_enc_sec Base64 data encoding/decoding
*
- * Base encoding of data is used in many situations to store or transfer data in
- * environments that, perhaps for legacy reasons, are restricted to US-ASCII
- * data. Base64 encoding can also be used in new applications that do not have
- * legacy restrictions, simply because it makes it possible to manipulate objects
- * with text editors.
+ * Base encoding of data is used in many situations to store or
+ * transfer data in environments that, perhaps for legacy reasons,
+ * are restricted to US-ASCII data. Base64 encoding can also be used
+ * in new applications that do not have legacy restrictions, simply
+ * because it makes it possible to manipulate objects with text
+ * editors.
*
- * In the past, different applications have had different requirements and thus
- * sometimes implemented base encodings in slightly different ways. Today,
- * protocol specifications sometimes use base encodings in general, and "base64"
- * in particular, without a precise description or reference. Multipurpose
- * Internet Mail Extensions (MIME) is often used as a reference for base64
- * without considering the consequences for line-wrapping or non-alphabet
- * characters.
+ * In the past, different applications have had different requirements
+ * and thus sometimes implemented base encodings in slightly different
+ * ways. Today, protocol specifications sometimes use base encodings
+ * in general, and "base64" in particular, without a precise
+ * description or reference. Multipurpose Internet Mail Extensions
+ * (MIME) is often used as a reference for base64 without considering
+ * the consequences for line-wrapping or non-alphabet characters.
*
* @author H. Ronsdorf
- * @version $Revision: 1.4 $
+ * @version $Revision: 1.5 $
*
* @see http://www.ietf.org/rfc/rfc4648.txt
- *
*/
#ifdef __cplusplus
extern "C" {
#endif
-/**
- *
- * Base64 encodes a NUL terminated array of characters.
+/** Base64 encodes a NUL terminated array of characters.
*
* @param instr Pointer to the input string.
* @param outstr Pointer to the output destination.
*
* @see base64_decode_string
- *
*/
extern void base64_encode_string(const unsigned char *instr, unsigned char *outstr);
-/**
- *
- * Base64 decodes a NUL terminated array of characters.
+/** Base64 decodes a NUL terminated array of characters.
*
* @param instr Pointer to the input string.
* @param outstr Pointer to the output destination.
*
* @see base64_encode_string
- *
*/
extern void base64_decode_string(const unsigned char *instr, unsigned char *outstr);
diff --git a/nanohttp/nanohttp-client.c b/nanohttp/nanohttp-client.c
index 472c58f..84c2676 100644
--- a/nanohttp/nanohttp-client.c
+++ b/nanohttp/nanohttp-client.c
@@ -1,5 +1,6 @@
+/** @file nanohttp-client.c nanoHTTP client interface */
/******************************************************************
-* $Id: nanohttp-client.c,v 1.53 2007/01/01 22:54:46 m0gg Exp $
+* $Id: nanohttp-client.c,v 1.54 2007/11/03 22:40:10 m0gg Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -99,20 +100,20 @@ httpc_new(void)
if (!(res = (httpc_conn_t *) malloc(sizeof(httpc_conn_t))))
{
- log_error2("malloc failed (%s)", strerror(errno));
+ log_error("malloc failed (%s)", strerror(errno));
return NULL;
}
if (!(res->sock = (struct hsocket_t *)malloc(sizeof(struct hsocket_t))))
{
- log_error2("malloc failed (%s)", strerror(errno));
+ log_error("malloc failed (%s)", strerror(errno));
free(res);
return NULL;
}
if (!(res->url = (struct hurl_t *)malloc(sizeof(struct hurl_t))))
{
- log_error2("malloc failed (%s)", strerror(errno));
+ log_error("malloc failed (%s)", strerror(errno));
free(res->sock);
free(res);
return NULL;
@@ -120,7 +121,7 @@ httpc_new(void)
if ((status = hsocket_init(res->sock)) != H_OK)
{
- log_warn2("hsocket_init failed (%s)", herror_message(status));
+ log_warn("hsocket_init failed (%s)", herror_message(status));
hurl_free(res->url);
free(res->sock);
free(res);
@@ -183,7 +184,7 @@ httpc_add_header(httpc_conn_t *conn, const char *key, const char *value)
{
if (!conn)
{
- log_warn1("Connection object is NULL");
+ log_warn("Connection object is NULL");
return -1;
}
@@ -197,7 +198,7 @@ httpc_add_headers(httpc_conn_t *conn, const hpair_t *values)
{
if (conn == NULL)
{
- log_warn1("Connection object is NULL");
+ log_warn("Connection object is NULL");
return;
}
@@ -220,7 +221,7 @@ httpc_set_header(httpc_conn_t *conn, const char *key, const char *value)
if (conn == NULL)
{
- log_warn1("Connection object is NULL");
+ log_warn("Connection object is NULL");
return 0;
}
@@ -381,7 +382,7 @@ _httpc_talk_to_server(hreq_method_t method, httpc_conn_t * conn, const char *url
if ((status = hurl_parse(conn->url, urlstr)) != H_OK)
{
- log_error2("Cannot parse URL \"%s\"", SAVE_STR(urlstr));
+ log_error("Cannot parse URL \"%s\"", SAVE_STR(urlstr));
return status;
}
/* TODO (#1#): Check for HTTP protocol in URL */
@@ -390,12 +391,12 @@ _httpc_talk_to_server(hreq_method_t method, httpc_conn_t * conn, const char *url
httpc_set_header(conn, HEADER_HOST, conn->url->host);
ssl = conn->url->protocol == PROTOCOL_HTTPS ? 1 : 0;
- log_verbose4("ssl = %i (%i %i)", ssl, conn->url->protocol, PROTOCOL_HTTPS);
+ log_verbose("ssl = %i (%i %i)", ssl, conn->url->protocol, PROTOCOL_HTTPS);
/* Open connection */
if ((status = hsocket_open(conn->sock, conn->url->host, conn->url->port, ssl)) != H_OK)
{
- log_error2("hsocket_open failed (%s)", herror_message(status));
+ log_error("hsocket_open failed (%s)", herror_message(status));
return status;
}
@@ -416,24 +417,24 @@ _httpc_talk_to_server(hreq_method_t method, httpc_conn_t * conn, const char *url
break;
default:
- log_error1("Unknown method type!");
+ log_error("Unknown method type!");
return herror_new("httpc_talk_to_server",
GENERAL_INVALID_PARAM,
"hreq_method_t must be HTTP_REQUEST_GET or HTTP_REQUEST_POST");
}
- log_verbose1("Sending request...");
+ log_verbose("Sending request...");
if ((status = hsocket_send(conn->sock, buffer, len)) != H_OK)
{
- log_error2("Cannot send request (%s)", herror_message(status));
+ log_error("Cannot send request (%s)", herror_message(status));
hsocket_close(conn->sock);
return status;
}
- log_verbose1("Sending header...");
+ log_verbose("Sending header...");
if ((status = httpc_send_header(conn)) != H_OK)
{
- log_error2("Cannot send header (%s)", herror_message(status));
+ log_error("Cannot send header (%s)", herror_message(status));
hsocket_close(conn->sock);
return status;
}
@@ -448,13 +449,13 @@ httpc_get(httpc_conn_t *conn, hresponse_t **out, const char *urlstr)
if ((status = _httpc_talk_to_server(HTTP_REQUEST_GET, conn, urlstr)) != H_OK)
{
- log_error2("_httpc_talk_to_server failed (%s)", herror_message(status));
+ log_error("_httpc_talk_to_server failed (%s)", herror_message(status));
return status;
}
if ((status = hresponse_new_from_socket(conn->sock, out)) != H_OK)
{
- log_error2("hresponse_new_from_socket failed (%s)", herror_message(status));
+ log_error("hresponse_new_from_socket failed (%s)", herror_message(status));
return status;
}
@@ -468,7 +469,7 @@ httpc_post_begin(httpc_conn_t * conn, const char *url)
if ((status = _httpc_talk_to_server(HTTP_REQUEST_POST, conn, url)) != H_OK)
{
- log_error2("_httpc_talk_to_server failed (%s)", herror_message(status));
+ log_error("_httpc_talk_to_server failed (%s)", herror_message(status));
return status;
}
@@ -504,7 +505,7 @@ static void
_httpc_mime_get_boundary(httpc_conn_t * conn, char *dest)
{
sprintf(dest, "---=.Part_NH_%d", conn->id);
- log_verbose2("boundary= \"%s\"", dest);
+ log_verbose("boundary= \"%s\"", dest);
return;
}
@@ -617,7 +618,7 @@ httpc_mime_send_file(httpc_conn_t * conn, const char *content_id, const char *co
if ((fd = fopen(filename, "rb")) == NULL)
{
- log_error2("fopen failed (%s)", strerror(errno));
+ log_error("fopen failed (%s)", strerror(errno));
return herror_new("httpc_mime_send_file", FILE_ERROR_OPEN,
"Can not open file \"%s\" (%s)", filename, strerror(errno));
}
@@ -652,7 +653,7 @@ httpc_mime_send_file(httpc_conn_t * conn, const char *content_id, const char *co
}
fclose(fd);
- log_verbose1("file sent!");
+ log_verbose("file sent!");
return H_OK;
}
diff --git a/nanohttp/nanohttp-client.h b/nanohttp/nanohttp-client.h
index 41c812a..a181354 100644
--- a/nanohttp/nanohttp-client.h
+++ b/nanohttp/nanohttp-client.h
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: nanohttp-client.h,v 1.39 2007/01/03 08:33:44 m0gg Exp $
+ * $Id: nanohttp-client.h,v 1.40 2007/11/03 22:40:10 m0gg Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -31,7 +31,6 @@
#include <nanohttp/nanohttp-stream.h>
#include <nanohttp/nanohttp-request.h>
#include <nanohttp/nanohttp-response.h>
-#include <nanohttp/nanohttp-logging.h>
#endif
/** @page nanohttp_client_page Howto write an HTTP client
@@ -196,6 +195,14 @@
*
*/
+/** @file nanohttp-client.h nanoHTTP client interface
+ *
+ * @defgroup NANOHTTP_CLIENT Client
+ * @ingroup NANOHTTP
+ *
+ */
+/**@{*/
+
typedef struct httpc_conn
{
struct hsocket_t *sock;
@@ -437,4 +444,6 @@ extern herror_t httpc_mime_send_file(httpc_conn_t * conn,
}
#endif
+/**@}*/
+
#endif
diff --git a/nanohttp/nanohttp-common.c b/nanohttp/nanohttp-common.c
index de17bfe..d19554b 100644
--- a/nanohttp/nanohttp-common.c
+++ b/nanohttp/nanohttp-common.c
@@ -1,5 +1,6 @@
+/** @file nanohttp-common.c Common functions and definitions */
/******************************************************************
-* $Id: nanohttp-common.c,v 1.38 2007/01/01 22:54:46 m0gg Exp $
+* $Id: nanohttp-common.c,v 1.39 2007/11/03 22:40:10 m0gg Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -62,10 +63,10 @@ hpairnode_new(const char *key, const char *value, hpair_t * next)
{
hpair_t *pair;
- log_verbose3("new pair ('%s','%s')", SAVE_STR(key), SAVE_STR(value));
+ log_verbose("new pair ('%s','%s')", SAVE_STR(key), SAVE_STR(value));
if (!(pair = (hpair_t *) malloc(sizeof(hpair_t))))
{
- log_error2("malloc failed (%s)", strerror(errno));
+ log_error("malloc failed (%s)", strerror(errno));
return NULL;
}
@@ -159,10 +160,10 @@ hpairnode_dump(const hpair_t * pair)
{
if (pair == NULL)
{
- log_verbose1("(NULL)[]");
+ log_verbose("(NULL)[]");
return;
}
- log_verbose5("(%p)['%s','%s','%p']", pair,
+ log_verbose("(%p)['%s','%s','%p']", pair,
SAVE_STR(pair->key), SAVE_STR(pair->value), pair->next);
return;
@@ -173,12 +174,12 @@ hpairnode_dump_deep(const hpair_t * pairs)
{
const hpair_t *p;
- log_verbose1("-- BEGIN dump_deep hpair_t --");
+ log_verbose("-- BEGIN dump_deep hpair_t --");
for (p = pairs; p != NULL; p = p->next)
{
hpairnode_dump(p);
}
- log_verbose1("-- END dump_deep hpair_t --\n");
+ log_verbose("-- END dump_deep hpair_t --\n");
return;
}
@@ -221,7 +222,7 @@ hpairnode_get_ignore_case(hpair_t * pair, const char *key)
{
if (key == NULL)
{
- log_error1("key is NULL");
+ log_error("key is NULL");
return NULL;
}
@@ -245,7 +246,7 @@ hpairnode_get(hpair_t * pair, const char *key)
{
if (key == NULL)
{
- log_error1("key is NULL");
+ log_error("key is NULL");
return NULL;
}
while (pair != NULL)
@@ -369,7 +370,7 @@ part_new(const char *id, const char *filename, const char *content_type, const c
if (!(part = (struct part_t *) malloc(sizeof(struct part_t))))
{
- log_error2("malloc failed (%s)", strerror(errno));
+ log_error("malloc failed (%s)", strerror(errno));
return NULL;
}
@@ -426,7 +427,7 @@ attachments_new(void) /* should be used internally */
if (!(attachments = (struct attachments_t *) malloc(sizeof(struct attachments_t))))
{
- log_error2("malloc failed (%s)", strerror(errno));
+ log_error("malloc failed (%s)", strerror(errno));
return NULL;
}
diff --git a/nanohttp/nanohttp-common.h b/nanohttp/nanohttp-common.h
index 1e3d042..d3d725a 100644
--- a/nanohttp/nanohttp-common.h
+++ b/nanohttp/nanohttp-common.h
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: nanohttp-common.h,v 1.48 2007/01/03 08:33:44 m0gg Exp $
+ * $Id: nanohttp-common.h,v 1.49 2007/11/03 22:40:10 m0gg Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003-2004 Ferhat Ayaz
@@ -28,7 +28,15 @@
#define HEADER_CONTENT_TRANSFER_ENCODING "Content-Transfer-Encoding"
#define TRANSFER_ENCODING_CHUNKED "chunked"
-/** @defgroup http_general_header_fields General Header Fields
+/** @file nanohttp-common.h Common definitions and functions
+ *
+ * @defgroup NANOHTTP_COMMON Common stuff
+ * @ingroup NANOHTTP
+ */
+/**@{*/
+
+/** @defgroup HTTP_HEADER_FIELDS Header Fields
+ * @ingroup NANOHTTP
*
* There are a few header fields which have general applicability for both
* request and response messages, but which do not apply to the entity being
@@ -40,20 +48,17 @@
* entity-header fields.
*
* @see http://www.ietf.org/rfc/rfc2616.txt
- *
*/
/*@{*/
-/**
- *
- * The Cache-Control general-header field is used to specify directives that MUST
- * be obeyed by all caching mechanisms along the request/response chain. The
- * directives specify behavior intended to prevent caches from adversely
- * interfering with the request or response. These directives typically override
- * the default caching algorithms. Cache directives are unidirectional in that
- * the presence of a directive in a request does not imply that the same
- * directive is to be given in the response.
- *
+/** The Cache-Control general-header field is used to specify
+ * directives that MUST be obeyed by all caching mechanisms along the
+ * request/response chain. The directives specify behavior intended to
+ * prevent caches from adversely interfering with the request or
+ * response. These directives typically override the default caching
+ * algorithms. Cache directives are unidirectional in that the presence
+ * of a directive in a request does not imply that the same directive
+ * is to be given in the response.
*/
#define HEADER_CACHE_CONTROL "Cache-Control"
@@ -323,18 +328,15 @@ typedef enum _http_version
} http_version_t;
-/**
- *
- * Object representation of the content-type field in a HTTP header:
+/** Object representation of the content-type field in a HTTP header:
*
* Example:
*
- * @code
- * Content-Type: text/xml; key="value" key2="value2' ...
- * @endcode
+ * @verbatim
+ Content-Type: text/xml; key="value" key2="value2' ...
+ * @endverbatim
*
* @see HEADER_CONTENT_TYPE
- *
*/
typedef struct _content_type
{
@@ -342,11 +344,9 @@ typedef struct _content_type
hpair_t *params;
} content_type_t;
-/**
- *
- * The set of common methods for HTTP/1.1 is defined below. Although this set
- * can be expanded, additional methods cannot be assumed to share the same
- * semantics for separately extended clients and servers.
+/** The set of common methods for HTTP/1.1 is defined below. Although
+ * this set can be expanded, additional methods cannot be assumed to
+ * share the same semantics for separately extended clients and servers.
*
* The Host request-header field MUST accompany all HTTP/1.1 requests.
*
@@ -356,7 +356,6 @@ typedef struct _content_type
typedef enum _hreq_method
{
/**
- *
* The POST method is used to request that the origin server accept the entity
* enclosed in the request as a new subordinate of the resource identified by
* the Request-URI in the Request-Line. POST is designed to allow a uniform
@@ -367,32 +366,26 @@ typedef enum _hreq_method
* - Providing a block of data, such as the result of submitting a form, to a
* data-handling process;
* - Extending a database through an append operation.
- *
*/
HTTP_REQUEST_POST,
/**
- *
* The GET method means retrieve whatever information (in the form of an entity)
* is identified by the Request-URI. If the Request-URI refers to a
* data-producing process, it is the produced data which shall be returned as
* the entity in the response and not the source text of the process, unless
* that text happens to be the output of the process.
- *
*/
HTTP_REQUEST_GET,
/**
- *
* The OPTIONS method represents a request for information about the
* communication options available on the request/response chain identified by
* the Request-URI. This method allows the client to determine the options
* and/or requirements associated with a resource, or the capabilities of a
* server, without implying a resource action or initiating a resource
* retrieval.
- *
*/
HTTP_REQUEST_OPTIONS,
/**
- *
* The HEAD method is identical to GET except that the server MUST NOT return
* a message-body in the response. The metainformation contained in the HTTP
* headers in response to a HEAD request SHOULD be identical to the information
@@ -400,11 +393,9 @@ typedef enum _hreq_method
* metainformation about the entity implied by the request without transferring
* the entity-body itself. This method is often used for testing hypertext
* links for validity, accessibility, and recent modification.
- *
*/
HTTP_REQUEST_HEAD,
/**
- *
* The PUT method requests that the enclosed entity be stored under the
* supplied Request-URI. If the Request-URI refers to an already existing
* resource, the enclosed entity SHOULD be considered as a modified version of
@@ -420,11 +411,9 @@ typedef enum _hreq_method
* problem. The recipient of the entity MUST NOT ignore any Content-* (e.g.
* Content-Range) headers that it does not understand or implement and MUST
* return a 501 (Not Implemented) response in such cases.
- *
*/
HTTP_REQUEST_PUT,
/**
- *
* The DELETE method requests that the origin server delete the resource
* identified by the Request-URI. This method MAY be overridden by human
* intervention (or other means) on the origin server. The client cannot be
@@ -433,31 +422,27 @@ typedef enum _hreq_method
* successfully. However, the server SHOULD NOT indicate success unless, at the
* time the response is given, it intends to delete the resource or move it to
* an inaccessible location.
- *
*/
HTTP_REQUEST_DELETE,
/**
- *
* The TRACE method is used to invoke a remote, application-layer loop-back of
* the request message. The final recipient of the request SHOULD reflect the
* message received back to the client as the entity-body of a 200 (OK)
* response. The final recipient is either the origin server or the first proxy
* or gateway to receive a Max-Forwards value of zero (0) in the request (see
* section 14.31). A TRACE request MUST NOT include an entity.
- *
*/
HTTP_REQUEST_TRACE,
/**
- *
* This specification reserves the method name CONNECT for use with a proxy
* that can dynamically switch to being a tunnel (e.g. SSL tunneling [44]).
- *
*/
HTTP_REQUEST_CONNECT,
HTTP_REQUEST_UNKOWN
} hreq_method_t;
-/** @defgroup http_status_codes HTTP status-codes
+/** @defgroup HTTP_STATUS_CODES HTTP status-codes
+ * @ingroup NANOHTTP
*
* The Status-Code element is a 3-digit integer result code of the attempt to
* understand and satisfy the request. These codes are fully defined in section
@@ -563,113 +548,95 @@ typedef enum _hreq_method
*/
/*@{*/
-/**
- *
- * The client SHOULD continue with its request. This interim response is used to
- * inform the client that the initial part of the request has been received and
- * has not yet been rejected by the server. The client SHOULD continue by sending
- * the remainder of the request or, if the request has already been completed,
- * ignore this response. The server MUST send a final response after the request
- * has been completed. See RFC 2616 section 8.2.3 for detailed discussion of the
+/** The client SHOULD continue with its request. This interim response
+ * is used to inform the client that the initial part of the request
+ * has been received and has not yet been rejected by the server. The
+ * client SHOULD continue by sending the remainder of the request or,
+ * if the request has already been completed, ignore this response. The
+ * server MUST send a final response after the request has been
+ * completed. See RFC 2616 section 8.2.3 for detailed discussion of the
* use and handling of this status code.
*
* @see http://www.ietf.org/rfc/rfc2616.txt
- *
*/
#define HTTP_STATUS_100_REASON_PHRASE "Continue"
-/**
- *
- * The server understands and is willing to comply with the client's request,
- * via the Upgrade message header field (RFC 2616 section 14.42), for a change
- * in the application protocol being used on this connection. The server will
- * switch protocols to those defined by the response's Upgrade header field
- * immediately after the empty line which terminates the 101 response.
- *
- * The protocol SHOULD be switched only when it is advantageous to do so. For
- * example, switching to a newer version of HTTP is advantageous over older
- * versions, and switching to a real-time, synchronous protocol might be
- * advantageous when delivering resources that use such features.
+/** The server understands and is willing to comply with the client's
+ * request, via the Upgrade message header field (RFC 2616 section 14.42),
+ * for a change in the application protocol being used on this
+ * connection. The server will switch protocols to those defined by
+ * the response's Upgrade header field immediately after the empty line
+ * which terminates the 101 response.
*
+ * The protocol SHOULD be switched only when it is advantageous to do
+ * so. For example, switching to a newer version of HTTP is
+ * advantageous over older versions, and switching to a real-time,
+ * synchronous protocol might be advantageous when delivering resources
+ * that use such features.
*/
#define HTTP_STATUS_101_REASON_PHRASE "Switching Protocols"
-/**
- *
- * The request has succeeded. The information returned with the response is
- * dependent on the method used in the request, for example:
+/** The request has succeeded. The information returned with the response
+ * is dependent on the method used in the request, for example:
*
- * GET an entity corresponding to the requested resource is sent in
- * the response;
- *
- * HEAD the entity-header fields corresponding to the requested
+ * - GET an entity corresponding to the requested resource is sent in
+ * the response;
+ * - HEAD the entity-header fields corresponding to the requested
* resource are sent in the response without any message-body;
- *
- * POST an entity describing or containing the result of the action;
- *
- * TRACE an entity containing the request message as received by the
- * end server.
- *
+ * - POST an entity describing or containing the result of the action;
+ * - TRACE an entity containing the request message as received by the
+ * end server.
*/
#define HTTP_STATUS_200_REASON_PHRASE "OK"
-/**
- *
- * The request has been fulfilled and resulted in a new resource being created.
- * The newly created resource can be referenced by the URI(s) returned in the
- * entity of the response, with the most specific URI for the resource given by
- * a Location header field. The response SHOULD include an entity containing a
- * list of resource characteristics and location(s) from which the user or user
- * agent can choose the one most appropriate. The entity format is specified by
- * the media type given in the Content-Type header field. The origin server MUST
- * create the resource before returning the 201 status code. If the action cannot
- * be carried out immediately, the server SHOULD respond with 202 (Accepted)
- * response instead.
- *
- * A 201 response MAY contain an ETag response header field indicating the
- * current value of the entity tag for the requested variant just created, see
- * RFC 2616 section 14.19.
+/** The request has been fulfilled and resulted in a new resource being
+ * created. The newly created resource can be referenced by the URI(s)
+ * returned in the entity of the response, with the most specific URI
+ * for the resource given by a Location header field. The response
+ * SHOULD include an entity containing a list of resource
+ * characteristics and location(s) from which the user or user agent
+ * can choose the one most appropriate. The entity format is specified
+ * by the media type given in the Content-Type header field. The origin
+ * server MUST create the resource before returning the 201 status code.
+ * If the action cannot be carried out immediately, the server SHOULD
+ * respond with 202 (Accepted) response instead.
+ *
+ * A 201 response MAY contain an ETag response header field indicating
+ * the current value of the entity tag for the requested variant just
+ * created, see RFC 2616 section 14.19.
*
* @see http://www.ietf.org/rfc/rfc2616.txt
- *
*/
#define HTTP_STATUS_201_REASON_PHRASE "Created"
-/**
- *
- * The request has been accepted for processing, but the processing has not been
- * completed. The request might or might not eventually be acted upon, as it
- * might be disallowed when processing actually takes place. There is no
- * facility for re-sending a status code from an asynchronous operation such as
- * this.
- *
- * The 202 response is intentionally non-committal. Its purpose is to allow a
- * server to accept a request for some other process (perhaps a batch-oriented
- * process that is only run once per day) without requiring that the user
- * agent's connection to the server persist until the process is completed. The
- * entity returned with this response SHOULD include an indication of the
- * request's current status and either a pointer to a status monitor or some
- * estimate of when the user can expect the request to be fulfilled.
- *
+/** The request has been accepted for processing, but the processing
+ * has not been completed. The request might or might not eventually be
+ * acted upon, as it might be disallowed when processing actually takes
+ * place. There is no facility for re-sending a status code from an
+ * asynchronous operation such as this.
+ *
+ * The 202 response is intentionally non-committal. Its purpose is to
+ * allow a server to accept a request for some other process (perhaps a
+ * batch-oriented process that is only run once per day) without
+ * requiring that the user agent's connection to the server persist
+ * until the process is completed. The entity returned with this
+ * response SHOULD include an indication of the request's current
+ * status and either a pointer to a status monitor or some estimate of
+ * when the user can expect the request to be fulfilled.
*/
#define HTTP_STATUS_202_REASON_PHRASE "Accepted"
-/**
- *
- * The returned metainformation in the entity-header is not the definitive set
+/** The returned metainformation in the entity-header is not the definitive set
* as available from the origin server, but is gathered from a local or a
* third-party copy. The set presented MAY be a subset or superset of the
* original version. For example, including local annotation information about
* the resource might result in a superset of the metainformation known by the
* origin server. Use of this response code is not required and is only
* appropriate when the response would otherwise be 200 (OK).
- *
*/
#define HTTP_STATUS_203_REASON_PHRASE "Non-Authoritative Information"
-/**
- *
- * The server has fulfilled the request but does not need to return an
+/** The server has fulfilled the request but does not need to return an
* entity-body, and might want to return updated metainformation. The response
* MAY include new or updated metainformation in the form of entity-headers,
* which if present SHOULD be associated with the requested variant.
@@ -682,25 +649,19 @@ typedef enum _hreq_method
*
* The 204 response MUST NOT include a message-body, and thus is always
* terminated by the first empty line after the header fields.
- *
*/
#define HTTP_STATUS_204_REASON_PHRASE "No Content"
-/**
- *
- * The server has fulfilled the request and the user agent SHOULD reset the
+/** The server has fulfilled the request and the user agent SHOULD reset the
* document view which caused the request to be sent. This response is primarily
* intended to allow input for actions to take place via user input, followed by
* a clearing of the form in which the input is given so that the user can
* easily initiate another input action. The response MUST NOT include an
* entity.
- *
*/
#define HTTP_STATUS_205_REASON_PHRASE "Reset Content"
-/**
- *
- * The server has fulfilled the partial GET request for the resource. The request
+/** The server has fulfilled the partial GET request for the resource. The request
* MUST have included a Range header field (RFC 2616 section 14.35) indicating
* the desired range, and MAY have included an If-Range header field (RFC 2616
* section 14.27) to make the request conditional.
@@ -733,13 +694,10 @@ typedef enum _hreq_method
*
* A cache that does not support the Range and Content-Range headers MUST NOT
* cache 206 (Partial) responses.
- *
*/
#define HTTP_STATUS_206_REASON_PHRASE "Partial Content"
-/**
- *
- * The requested resource corresponds to any one of a set of representations,
+/** The requested resource corresponds to any one of a set of representations,
* each with its own specific location, and agent-driven negotiation information
* (RFC 2616 section 12) is being provided so that the user (or user agent) can
* select a preferred representation and redirect its request to that location.
@@ -756,13 +714,10 @@ typedef enum _hreq_method
* specific URI for that representation in the Location field; user agents MAY
* use the Location field value for automatic redirection. This response is
* cacheable unless indicated otherwise.
- *
*/
#define HTTP_STATUS_300_REASON_PHRASE "Multiple Choices"
-/**
- *
- * The requested resource has been assigned a new permanent URI and any future
+/** The requested resource has been assigned a new permanent URI and any future
* references to this resource SHOULD use one of the returned URIs. Clients
* with link editing capabilities ought to automatically re-link references to
* the Request-URI to one or more of the new references returned by the server,
@@ -776,13 +731,10 @@ typedef enum _hreq_method
* HEAD, the user agent MUST NOT automatically redirect the request unless it can
* be confirmed by the user, since this might change the conditions under which
* the request was issued.
- *
*/
#define HTTP_STATUS_301_REASON_PHRASE "Moved Permanently"
-/**
- *
- * The requested resource resides temporarily under a different URI. Since the
+/** The requested resource resides temporarily under a different URI. Since the
* redirection might be altered on occasion, the client SHOULD continue to use
* the Request-URI for future requests. This response is only cacheable if
* indicated by a Cache-Control or Expires header field.
@@ -806,9 +758,7 @@ typedef enum _hreq_method
*/
#define HTTP_STATUS_302_REASON_PHRASE "Found"
-/**
- *
- * The response to the request can be found under a different URI and SHOULD be
+/** The response to the request can be found under a different URI and SHOULD be
* retrieved using a GET method on that resource. This method exists primarily to
* allow the output of a POST-activated script to redirect the user agent to a
* selected resource. The new URI is not a substitute reference for the
@@ -823,13 +773,10 @@ typedef enum _hreq_method
* interoperability with such clients is a concern, the 302 status code may be
* used instead, since most user agents react to a 302 response as described
* here for 303.
- *
*/
#define HTTP_STATUS_303_REASON_PHRASE "See Other"
-/**
- *
- * If the client has performed a conditional GET request and access is allowed,
+/** If the client has performed a conditional GET request and access is allowed,
* but the document has not been modified, the server SHOULD respond with this
* status code. The 304 response MUST NOT contain a message-body, and thus is
* always terminated by the first empty line after the header fields.
@@ -858,13 +805,10 @@ typedef enum _hreq_method
*
* If a cache uses a received 304 response to update a cache entry, the cache
* MUST update the entry to reflect any new field values given in the response.
- *
*/
#define HTTP_STATUS_304_REASON_PHRASE "Not Modified"
-/**
- *
- * The requested resource MUST be accessed through the proxy given by the
+/** The requested resource MUST be accessed through the proxy given by the
* Location field. The Location field gives the URI of the proxy. The recipient
* is expected to repeat this single request via the proxy. 305 responses MUST
* only be generated by origin servers.
@@ -872,13 +816,10 @@ typedef enum _hreq_method
* Note: RFC 2068 was not clear that 305 was intended to redirect a single
* request, and to be generated by origin servers only. Not observing these
* limitations has significant security consequences.
- *
*/
#define HTTP_STATUS_305_REASON_PHRASE "Use Proxy"
-/**
- *
- * The requested resource resides temporarily under a different URI. Since the
+/** The requested resource resides temporarily under a different URI. Since the
* redirection MAY be altered on occasion, the client SHOULD continue to use the
* Request-URI for future requests. This response is only cacheable if indicated
* by a Cache-Control or Expires header field.
@@ -894,21 +835,15 @@ typedef enum _hreq_method
* HEAD, the user agent MUST NOT automatically redirect the request unless it can
* be confirmed by the user, since this might change the conditions under which
* the request was issued.
- *
*/
#define HTTP_STATUS_307_REASON_PHRASE "Temporary Redirect"
-/**
- *
- * The request could not be understood by the server due to malformed syntax.
+/** The request could not be understood by the server due to malformed syntax.
* The client SHOULD NOT repeat the request without modifications.
- *
*/
#define HTTP_STATUS_400_REASON_PHRASE "Bad Request"
-/**
- *
- * The request requires user authentication. The response MUST include a
+/** The request requires user authentication. The response MUST include a
* WWW-Authenticate header field (RFC 2616 section 14.47) containing a challenge
* applicable to the requested resource. The client MAY repeat the request with
* a suitable Authorization header field (RFC 2616 section 14.8). If the request
@@ -923,54 +858,39 @@ typedef enum _hreq_method
*
* @see http://www.ietf.org/rfc/rfc2616.txt
* @see http://www.ietf.org/rfc/rfc2617.txt
- *
*/
#define HTTP_STATUS_401_REASON_PHRASE "Unauthorized"
-/**
- *
- * This code is reserved for future use.
- *
+/** This code is reserved for future use.
*/
#define HTTP_STATUS_402_REASON_PHRASE "Payment Required"
-/**
- *
- * The server understood the request, but is refusing to fulfill it.
+/** The server understood the request, but is refusing to fulfill it.
* Authorization will not help and the request SHOULD NOT be repeated. If the
* request method was not HEAD and the server wishes to make public why the
* request has not been fulfilled, it SHOULD describe the reason for the refusal
* in the entity. If the server does not wish to make this information
* available to the client, the status code 404 (Not Found) can be used instead.
- *
*/
#define HTTP_STATUS_403_REASON_PHRASE "Forbidden"
-/**
- *
- * The server has not found anything matching the Request-URI. No indication is
+/** The server has not found anything matching the Request-URI. No indication is
* given of whether the condition is temporary or permanent. The 410 (Gone)
* status code SHOULD be used if the server knows, through some internally
* configurable mechanism, that an old resource is permanently unavailable and
* has no forwarding address. This status code is commonly used when the server
* does not wish to reveal exactly why the request has been refused, or when no
* other response is applicable.
- *
*/
#define HTTP_STATUS_404_REASON_PHRASE "Not Found"
-/**
- *
- * The method specified in the Request-Line is not allowed for the resource
+/** The method specified in the Request-Line is not allowed for the resource
* identified by the Request-URI. The response MUST include an Allow header
* containing a list of valid methods for the requested resource.
- *
*/
#define HTTP_STATUS_405_REASON_PHRASE "Method Not Allowed"
-/**
- *
- * The resource identified by the request is only capable of generating response
+/** The resource identified by the request is only capable of generating response
* entities which have content characteristics not acceptable according to the
* accept headers sent in the request.
*
@@ -990,13 +910,10 @@ typedef enum _hreq_method
*
* If the response could be unacceptable, a user agent SHOULD temporarily stop
* receipt of more data and query the user for a decision on further actions.
- *
*/
#define HTTP_STATUS_406_REASON_PHRASE "Not Acceptable"
-/**
- *
- * This code is similar to 401 (Unauthorized), but indicates that the client
+/** This code is similar to 401 (Unauthorized), but indicates that the client
* must first authenticate itself with the proxy. The proxy MUST return a
* Proxy-Authenticate header field (RFC 2616 section 14.33) containing a
* challenge applicable to the proxy for the requested resource. The client MAY
@@ -1006,22 +923,17 @@ typedef enum _hreq_method
*
* @see http://www.ietf.org/rfc/rfc2616.txt
* @see http://www.ietf.org/rfc/rfc2617.txt
- *
*/
#define HTTP_STATUS_407_REASON_PHRASE "Proxy Authentication Required"
-/**
- *
- * The client did not produce a request within the time that the server was
+/** The client did not produce a request within the time that the server was
* prepared to wait. The client MAY repeat the request without modifications at
* any later time.
*
*/
#define HTTP_STATUS_408_REASON_PHRASE "Request Time-out"
-/**
- *
- * The request could not be completed due to a conflict with the current state
+/** The request could not be completed due to a conflict with the current state
* of the resource. This code is only allowed in situations where it is expected
* that the user might be able to resolve the conflict and resubmit the request.
* The response body SHOULD include enough information for the user to recognize
@@ -1036,13 +948,10 @@ typedef enum _hreq_method
* request. In this case, the response entity would likely contain a list of the
* differences between the two versions in a format defined by the response
* Content-Type.
- *
*/
#define HTTP_STATUS_409_REASON_PHRASE "Conflict"
-/**
- *
- * The requested resource is no longer available at the server and no forwarding
+/** The requested resource is no longer available at the server and no forwarding
* address is known. This condition is expected to be considered permanent.
* Clients with link editing capabilities SHOULD delete references to the
* Request-URI after user approval. If the server does not know, or has no
@@ -1058,46 +967,34 @@ typedef enum _hreq_method
* is not necessary to mark all permanently unavailable resources as "gone" or to
* keep the mark for any length of time -- that is left to the discretion of the
* server owner.
- *
*/
#define HTTP_STATUS_410_REASON_PHRASE "Gone"
-/**
- *
- * The server refuses to accept the request without a defined Content- Length.
+/** The server refuses to accept the request without a defined Content- Length.
* The client MAY repeat the request if it adds a valid Content-Length header
* field containing the length of the message-body in the request message.
- *
*/
#define HTTP_STATUS_411_REASON_PHRASE "Length Required"
-/**
- *
- * The precondition given in one or more of the request-header fields evaluated
+/** The precondition given in one or more of the request-header fields evaluated
* to false when it was tested on the server. This response code allows the
* client to place preconditions on the current resource metainformation (header
* field data) and thus prevent the requested method from being applied to a
* resource other than the one intended.
- *
*/
#define HTTP_STATUS_412_REASON_PHRASE "Precondition Failed"
-/**
- *
- * The server is refusing to process a request because the request entity is
+/** The server is refusing to process a request because the request entity is
* larger than the server is willing or able to process. The server MAY close
* the connection to prevent the client from continuing the request.
*
* If the condition is temporary, the server SHOULD include a Retry-After header
* field to indicate that it is temporary and after what time the client MAY try
* again.
- *
*/
#define HTTP_STATUS_413_REASON_PHRASE "Request Entity Too Large"
-/**
- *
- * The server is refusing to service the request because the Request-URI is
+/** The server is refusing to service the request because the Request-URI is
* longer than the server is willing to interpret. This rare condition is only
* likely to occur when a client has improperly converted a POST request to a
* GET request with long query information, when the client has descended into a
@@ -1109,18 +1006,13 @@ typedef enum _hreq_method
*/
#define HTTP_STATUS_414_REASON_PHRASE "Request-URI Too Large"
-/**
- *
- * The server is refusing to service the request because the entity of the
+/** The server is refusing to service the request because the entity of the
* request is in a format not supported by the requested resource for the
* requested method.
- *
*/
#define HTTP_STATUS_415_REASON_PHRASE "Unsupported Media Type"
-/**
- *
- * A server SHOULD return a response with this status code if a request included
+/** A server SHOULD return a response with this status code if a request included
* a Range request-header field (RFC 2616 section 14.35), and none of the
* range-specifier values in this field overlap the current extent of the
* selected resource, and the request did not include an If-Range request-header
@@ -1132,48 +1024,33 @@ typedef enum _hreq_method
* SHOULD include a Content-Range entity-header field specifying the current
* length of the selected resource (see RFC 2616 section 14.16). This response
* MUST NOT use the multipart/byteranges content-type.
- *
*/
#define HTTP_STATUS_416_REASON_PHRASE "Requested range not satisfiable"
-/**
- *
- * The expectation given in an Expect request-header field (see RFC 2616 section
+/** The expectation given in an Expect request-header field (see RFC 2616 section
* 14.20) could not be met by this server, or, if the server is a proxy, the
* server has unambiguous evidence that the request could not be met by the
* next-hop server.
- *
*/
#define HTTP_STATUS_417_REASON_PHRASE "Expectation Failed"
-/**
- *
- * The server encountered an unexpected condition which prevented it from
+/** The server encountered an unexpected condition which prevented it from
* fulfilling the request.
- *
*/
#define HTTP_STATUS_500_REASON_PHRASE "Internal Server Error"
-/**
- *
- * The server does not support the functionality required to fulfill the request.
+/** The server does not support the functionality required to fulfill the request.
* This is the appropriate response when the server does not recognize the
* request method and is not capable of supporting it for any resource.
- *
*/
#define HTTP_STATUS_501_REASON_PHRASE "Not Implemented"
-/**
- *
- * The server, while acting as a gateway or proxy, received an invalid response
+/** The server, while acting as a gateway or proxy, received an invalid response
* from the upstream server it accessed in attempting to fulfill the request.
- *
*/
#define HTTP_STATUS_502_REASON_PHRASE "Bad Gateway"
-/**
- *
- * The server is currently unable to handle the request due to a temporary
+/** The server is currently unable to handle the request due to a temporary
* overloading or maintenance of the server. The implication is that this is a
* temporary condition which will be alleviated after some delay. If known, the
* length of the delay MAY be indicated in a Retry-After header. If no
@@ -1183,32 +1060,25 @@ typedef enum _hreq_method
* Note: The existence of the 503 status code does not imply that a server must
* use it when becoming overloaded. Some servers may wish to simply refuse the
* connection.
- *
*/
#define HTTP_STATUS_503_REASON_PHRASE "Service Unavailable"
-/**
- *
- * The server, while acting as a gateway or proxy, did not receive a timely
+/** The server, while acting as a gateway or proxy, did not receive a timely
* response from the upstream server specified by the URI (e.g. HTTP, FTP, LDAP)
* or some other auxiliary server (e.g. DNS) it needed to access in attempting
* to complete the request.
*
* Note: Note to implementors: some deployed proxies are known to return 400 or
* 500 when DNS lookups time out.
- *
*/
#define HTTP_STATUS_504_REASON_PHRASE "Gateway Time-out"
-/**
- *
- * The server does not support, or refuses to support, the HTTP protocol version
+/** The server does not support, or refuses to support, the HTTP protocol version
* that was used in the request message. The server is indicating that it is
* unable or unwilling to complete the request using the same major version as
* the client, as described in RFC 2616 section 3.1, other than with this error
* message. The response SHOULD contain an entity describing why that version is
* not supported and what other protocols are supported by that server.
- *
*/
#define HTTP_STATUS_505_REASON_PHRASE "HTTP Version not supported"
@@ -1416,4 +1286,6 @@ extern void attachments_add_part(struct attachments_t * attachments, struct part
}
#endif
+/**@}*/
+
#endif
diff --git a/nanohttp/nanohttp-error.c b/nanohttp/nanohttp-error.c
index a556af8..d2f48d7 100644
--- a/nanohttp/nanohttp-error.c
+++ b/nanohttp/nanohttp-error.c
@@ -1,5 +1,6 @@
+/** @file nanohttp-error.c Error handling */
/******************************************************************
-* $Id: nanohttp-error.c,v 1.1 2006/12/09 09:36:57 m0gg Exp $
+* $Id: nanohttp-error.c,v 1.2 2007/11/03 22:40:11 m0gg Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -63,16 +64,12 @@ herror_new(const char *func, int errcode, const char *format, ...)
if (!(impl = (herror_impl_t *) malloc(sizeof(herror_impl_t))))
{
- log_error2("malloc failed (%s)", strerror(errno));
+ log_error("malloc failed (%s)", strerror(errno));
return NULL;
}
impl->errcode = errcode;
-
- if (func)
- impl->func = strdup(func);
- else
- func = NULL;
+ impl->func = func ? strdup(func) : NULL;
va_start(ap, format);
vsprintf(impl->message, format, ap);
diff --git a/nanohttp/nanohttp-error.h b/nanohttp/nanohttp-error.h
index 77e5721..775f079 100644
--- a/nanohttp/nanohttp-error.h
+++ b/nanohttp/nanohttp-error.h
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: nanohttp-error.h,v 1.4 2006/12/10 19:21:06 m0gg Exp $
+ * $Id: nanohttp-error.h,v 1.5 2007/11/03 22:40:11 m0gg Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003-2004 Ferhat Ayaz
@@ -24,7 +24,7 @@
#ifndef __nanohttp_error_h
#define __nanohttp_error_h
-/** @file
+/** @file nanohttp-error.h Error handling
*
* nanoHTTP error handling
*
@@ -55,38 +55,37 @@
*
*/
-/**
- *
- * Success flag
- *
+/** @defgroup NANOHTTP_ERRORS nanoHTTP errors
+ * @ingroup NANOHTTP
*/
-#define H_OK 0
+/**@{*/
-/**
- *
- * General errors
- *
+/** @defgroup NANOHTTP_GENERAL_ERROS General errors
*/
+/**@{*/
+#define H_OK 0 /**< Success flag */
+
#define GENERAL_ERROR 1400
#define GENERAL_INVALID_PARAM (GENERAL_ERROR + 1)
#define GENERAL_HEADER_PARSE_ERROR (GENERAL_ERROR + 2)
+/**@}*/
-/**
- *
- * Thread errors
- *
+/** @defgroup NANOHTTP_THREAD_ERRORS Thread errors
*/
+/**@{*/
#define THREAD_ERROR 1500
#define THREAD_BEGIN_ERROR (THREAD_ERROR)
+/**@}*/
-/**
- *
- * File errors
- *
+/** @defgroup NANOHTTP_FILE_ERRORS File errors
*/
+/**@{*/
#define FILE_ERROR 8000
#define FILE_ERROR_OPEN (FILE_ERROR + 1)
#define FILE_ERROR_READ (FILE_ERROR + 2)
+/**@}*/
+
+/**@}*/
/**
*
@@ -119,7 +118,7 @@ extern int herror_code(herror_t err);
/**
*
- * Returns the name of the function, where the error was produced.
+ * @return The name of the function, where the error was produced.
*
*/
extern const char *herror_func(herror_t err);
diff --git a/nanohttp/nanohttp-logging.c b/nanohttp/nanohttp-logging.c
index 5e1244d..45fc01a 100644
--- a/nanohttp/nanohttp-logging.c
+++ b/nanohttp/nanohttp-logging.c
@@ -1,8 +1,9 @@
+/** @file nanohttp-logging.c Logging functions */
/******************************************************************
-* $Id: nanohttp-logging.c,v 1.2 2006/11/25 17:03:20 m0gg Exp $
+* $Id: nanohttp-logging.c,v 1.3 2007/11/03 22:40:11 m0gg Exp $
*
* CSOAP Project: A http client/server library in C
-* Copyright (C) 2003 Ferhat Ayaz
+* Copyright (C) 2007 Heiko Ronsdorf
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -19,12 +20,15 @@
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*
-* Email: ayaz@jprogrammer.net
******************************************************************/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
+#ifdef HAVE_CTYPE_H
+#include <ctype.h>
+#endif
+
#ifdef HAVE_STDIO_H
#include <stdio.h>
#endif
@@ -41,169 +45,130 @@
#include <string.h>
#endif
-#ifdef HAVE_CTYPE_H
-#include <ctype.h>
-#endif
-
-#ifdef HAVE_PTHREAD_H
-#include <pthread.h>
+#ifdef HAVE_SYSLOG_H
+#include <syslog.h>
#endif
#include "nanohttp-logging.h"
-#ifdef WIN32
-#ifndef __MINGW32__
+static int _nanohttp_logtype = NANOHTTP_LOG_FOREGROUND;
+static nanohttp_loglevel_t _nanohttp_log_loglevel = NANOHTTP_LOG_DEBUG;
+static char *_nanohttp_log_logfile = NULL;
-/* not thread safe!*/
+#if defined WIN32 && defined __MINGW32__
char *
VisualC_funcname(const char *file, int line)
{
static char buffer[256];
- int i = strlen(file) - 1;
- while (i > 0 && file[i] != '\\')
- i--;
+ int i;
+
+ for (i = strlen(file) - 1; i > 0 && file[i] != '\\'; i--)
+ /* nothing */ ;
sprintf(buffer, "%s:%d", (file[i] != '\\') ? file : (file + i + 1), line);
return buffer;
}
-
#endif
-#endif
-
-static log_level_t loglevel = HLOG_DEBUG;
-static char logfile[75] = { '\0' };
-static int log_background = 0;
-log_level_t
-hlog_set_level(log_level_t level)
+nanohttp_loglevel_t
+nanohttp_log_set_loglevel(nanohttp_loglevel_t loglevel)
{
- log_level_t old = loglevel;
- loglevel = level;
+ nanohttp_loglevel_t old;
+
+ old = _nanohttp_log_loglevel;
+ _nanohttp_log_loglevel = loglevel;
+
return old;
}
-log_level_t
-hlog_get_level(void)
+nanohttp_loglevel_t
+nanohttp_log_get_loglevel(void)
{
- return loglevel;
+ return _nanohttp_log_loglevel;
}
-void
-hlog_set_file(const char *filename)
+int
+nanohttp_log_set_logtype(int type)
{
- if (filename)
- strncpy(logfile, filename, 75);
- else
- logfile[0] = '\0';
+ int old;
- return;
-}
-
-void
-hlog_set_background(int state)
-{
- log_background = state;
+ old = _nanohttp_logtype;
+ _nanohttp_logtype = type;
- return;
-}
-
-char *
-hlog_get_file(void)
-{
- if (logfile[0] == '\0')
- return NULL;
- return logfile;
+ return old;
}
-static void
-_log_write(log_level_t level, const char *prefix,
- const char *func, const char *format, va_list ap)
+const char *
+nanohttp_log_get_logfile(void)
{
- char buffer[1054];
- char buffer2[1054];
- FILE *f;
-
- if (level < loglevel)
- return;
-
- if (!log_background || hlog_get_file())
- {
-#ifdef WIN32
- sprintf(buffer, "*%s*: [%s] %s\n", prefix, func, format);
-#else
- sprintf(buffer, "*%s*:(%ld) [%s] %s\n",
- prefix, pthread_self(), func, format);
-#endif
- vsprintf(buffer2, buffer, ap);
- if (!log_background)
- {
- printf(buffer2);
- fflush(stdout);
- }
-
- if (hlog_get_file())
- {
- f = fopen(hlog_get_file(), "a");
- if (!f)
- f = fopen(hlog_get_file(), "w");
- if (f)
- {
- fprintf(f, buffer2);
- fflush(f);
- fclose(f);
- }
- }
- }
-
- return;
+ return _nanohttp_log_logfile;
}
void
-hlog_verbose(const char *FUNC, const char *format, ...)
+nanohttp_log_set_logfile(const char *filename)
{
- va_list ap;
+ if (_nanohttp_log_logfile)
+ free(_nanohttp_log_logfile);
- va_start(ap, format);
- _log_write(HLOG_VERBOSE, "VERBOSE", FUNC, format, ap);
- va_end(ap);
+ if (filename)
+ _nanohttp_log_logfile = strdup(filename);
}
void
-hlog_debug(const char *FUNC, const char *format, ...)
+_nanohttp_log_printf(nanohttp_loglevel_t level, const char *format, ...)
{
+ const char *filename;
va_list ap;
+ if (level < _nanohttp_log_loglevel)
+ return;
+
va_start(ap, format);
- _log_write(HLOG_DEBUG, "DEBUG", FUNC, format, ap);
- va_end(ap);
-}
-void
-hlog_info(const char *FUNC, const char *format, ...)
-{
- va_list ap;
+ if (_nanohttp_logtype & NANOHTTP_LOG_FOREGROUND)
+ vfprintf(stdout, format, ap);
- va_start(ap, format);
- _log_write(HLOG_INFO, "INFO", FUNC, format, ap);
- va_end(ap);
-}
+#ifdef HAVE_SYSLOG_H
+ if (_nanohttp_logtype & NANOHTTP_LOG_SYSLOG)
+ {
+ int syslog_level;
-void
-hlog_warn(const char *FUNC, const char *format, ...)
-{
- va_list ap;
+ switch (level)
+ {
+ case NANOHTTP_LOGLEVEL_VERBOSE:
+ case NANOHTTP_LOGLEVEL_DEBUG:
+ syslog_level = LOG_DEBUG;
+ break;
+ case NANOHTTP_LOGLEVEL_INFO:
+ syslog_level = LOG_INFO;
+ break;
+ case NANOHTTP_LOGLEVEL_WARN:
+ syslog_level = LOG_WARNING;
+ break;
+ case NANOHTTP_LOGLEVEL_ERROR:
+ syslog_level = LOG_ERR;
+ break;
+ case NANOHTTP_LOGLEVEL_FATAL:
+ syslog_level = LOG_CRIT;
+ break;
+ }
+ vsyslog(syslog_level, format, ap);
+ }
+#endif
- va_start(ap, format);
- _log_write(HLOG_WARN, "WARN", FUNC, format, ap);
- va_end(ap);
-}
+ if ((filename = nanohttp_log_get_logfile()))
+ {
+ FILE *fp;
-void
-hlog_error(const char *FUNC, const char *format, ...)
-{
- va_list ap;
+ if (!(fp = fopen(filename, "a")))
+ fp = fopen(filename, "w");
+
+ if (fp)
+ {
+ vfprintf(fp, format, ap);
+ fflush(fp);
+ fclose(fp);
+ }
+ }
- va_start(ap, format);
- _log_write(HLOG_ERROR, "ERROR", FUNC, format, ap);
va_end(ap);
}
-
diff --git a/nanohttp/nanohttp-logging.h b/nanohttp/nanohttp-logging.h
index cf1fe3f..2ead973 100644
--- a/nanohttp/nanohttp-logging.h
+++ b/nanohttp/nanohttp-logging.h
@@ -1,8 +1,8 @@
/******************************************************************
- * $Id: nanohttp-logging.h,v 1.5 2006/12/10 19:21:06 m0gg Exp $
+ * $Id: nanohttp-logging.h,v 1.6 2007/11/03 22:40:11 m0gg Exp $
*
* CSOAP Project: A http client/server library in C
- * Copyright (C) 2003-2006 Ferhat Ayaz
+ * Copyright (C) 2007 Heiko Ronsdorf
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -19,122 +19,130 @@
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*
- * Email: hero@persua.de
******************************************************************/
#ifndef __nanohttp_logging_h
#define __nanohttp_logging_h
+/** @file nanohttp-logging.h Logging definitions and prototypes
+ *
+ * @defgroup NANOHTTP_LOGGING Logging interface
+ * @ingroup NANOHTTP
+ */
+/**@{*/
+
+/** @defgroup NANOHTTP_CMDLINE_LOGGING Commandline flags
+ * @ingroup NANOHTTP_CMDLINE
+ */
+/**@{*/
#define NHTTP_ARG_LOGFILE "-NHTTPlog"
#define NHTTP_ARG_LOGLEVEL "-NHTTPloglevel"
+/**@}*/
-/* logging stuff */
-typedef enum log_level
+/** Loglevel definition */
+typedef enum nanohttp_loglevel
{
- HLOG_VERBOSE,
- HLOG_DEBUG,
- HLOG_INFO,
- HLOG_WARN,
- HLOG_ERROR,
- HLOG_FATAL,
- HLOG_OFF
-} log_level_t;
-
+ NANOHTTP_LOG_OFF, /**< Logging completely turned off (use at your
+ own risk). */
+ NANOHTTP_LOG_VERBOSE, /**< Debugging messages that may overflow the
+ log */
+ NANOHTTP_LOG_DEBUG, /**< Message that contain information normally
+ of use only when debugging the library */
+ NANOHTTP_LOG_INFO, /**< Informaional messages */
+ NANOHTTP_LOG_WARN, /**< Warning messages */
+ NANOHTTP_LOG_ERROR, /**< A condition that should be corrected
+ immediately, such as a broken network
+ connection */
+ NANOHTTP_LOG_FATAL /**< A panic condition */
+} nanohttp_loglevel_t;
+
+#define NANOHTTP_LOG_LEVEL_OFF_STRING "OFF"
+#define NANOHTTP_LOG_LEVEL_VERBOSE_STRING "VERBOSE"
+#define NANOHTTP_LOG_LEVEL_DEBUG_STRING "DEBUG"
+#define NANOHTTP_LOG_LEVEL_INFO_STRING "INFO"
+#define NANOHTTP_LOG_LEVEL_WARN_STRING "WARN"
+#define NANOHTTP_LOG_LEVEL_ERROR_STRING "ERROR"
+#define NANOHTTP_LOG_LEVEL_FATAL_STRING "FATAL"
+#define NANOHTTP_LOG_LEVEL_UNKNOWN_STRING "UNKNOWN"
#ifdef __cplusplus
extern "C" {
#endif
-/**
- *
- * Set the loglevel.
+/** This function sets a new the loglevel and returns the previous
+ * one.
*
* @param level The new loglevel.
*
* @return The old loglevel.
- *
*/
-extern log_level_t hlog_set_level(log_level_t level);
+extern nanohttp_loglevel_t nanohttp_log_set_loglevel(nanohttp_loglevel_t level);
-/**
- *
- * Get the loglevel.
+/** This function returns the current loglevel.
*
* @return The current loglevel.
- *
*/
-extern log_level_t hlog_get_level(void);
+extern nanohttp_loglevel_t nanohttp_log_get_loglevel(void);
-/**
- *
- * Set the logfile.
+/** This function set the name of a logfile.
*
* @param filename The filename of the logfile.
- *
*/
-extern void hlog_set_file(const char *filename);
+extern void nanohttp_log_set_logfile(const char *filename);
-/**
+/** This function returns the filename of the current logfile.
*
- * Get the filename of the logfile.
+ * @return Pointer to the filename or NULL otherwise.
+ */
+extern const char *nanohttp_log_get_logfile(void);
+
+#define NANOHTTP_LOG_DISABLED 0x00 /**< Logging disabled */
+#define NANOHTTP_LOG_FOREGROUND 0x01 /**< Logging to stdout enabled */
+#define NANOHTTP_LOG_SYSLOG 0x02 /**< Syslog logging enabled */
+
+/** This function sets the type of logging
*
- * @return Pointer to the filename or null otherwise.
+ * @return The old logtype.
*
+ * @see - NANOHTTP_LOG_DISABLED
+ * - NANOHTTP_LOG_FOREGROUND
+ * - NANOHTTP_LOG_SYSLOG
*/
-extern char *hlog_get_file(void);
+extern int nanohttp_log_set_logtype(int type);
#ifdef WIN32
#if defined(_MSC_VER) && _MSC_VER <= 1200
-char *VisualC_funcname(const char *file, int line); /* not thread safe! */
+extern char *VisualC_funcname(const char *file, int line); /* not thread safe! */
#define __FUNCTION__ VisualC_funcname(__FILE__, __LINE__)
#endif
#endif
-extern void hlog_verbose(const char *FUNC, const char *format, ...);
-extern void hlog_debug(const char *FUNC, const char *format, ...);
-extern void hlog_info(const char *FUNC, const char *format, ...);
-extern void hlog_warn(const char *FUNC, const char *format, ...);
-extern void hlog_error(const char *FUNC, const char *format, ...);
-
#ifdef __cplusplus
}
#endif
-/**
- *
- * @todo This isn't the "right" way
- *
- * #define log_debug(fmt, ...) fprintf(stderr, "EMERGENCY: %s: " fmt "\n", \
- * __FUNCTION__, ## __VA_ARGS__)
- *
- */
-#define log_verbose1(a1) hlog_verbose(__FUNCTION__, a1)
-#define log_verbose2(a1,a2) hlog_verbose(__FUNCTION__, a1,a2)
-#define log_verbose3(a1,a2,a3) hlog_verbose(__FUNCTION__, a1,a2,a3)
-#define log_verbose4(a1,a2,a3,a4) hlog_verbose(__FUNCTION__, a1,a2,a3,a4)
-#define log_verbose5(a1,a2,a3,a4,a5) hlog_verbose(__FUNCTION__, a1,a2,a3,a4,a5)
-
-#define log_debug1(a1) hlog_debug(__FUNCTION__, a1)
-#define log_debug2(a1,a2) hlog_debug(__FUNCTION__, a1,a2)
-#define log_debug3(a1,a2,a3) hlog_debug(__FUNCTION__, a1,a2,a3)
-#define log_debug4(a1,a2,a3,a4) hlog_debug(__FUNCTION__, a1,a2,a3,a4)
-#define log_debug5(a1,a2,a3,a4,a5) hlog_debug(__FUNCTION__, a1,a2,a3,a4,a5)
-
-#define log_info1(a1) hlog_info(__FUNCTION__, a1)
-#define log_info2(a1,a2) hlog_info(__FUNCTION__, a1,a2)
-#define log_info3(a1,a2,a3) hlog_info(__FUNCTION__, a1,a2,a3)
-#define log_info4(a1,a2,a3,a4) hlog_info(__FUNCTION__, a1,a2,a3,a4)
-#define log_info5(a1,a2,a3,a4,a5) hlog_info(__FUNCTION__, a1,a2,a3,a4,a5)
-
-#define log_warn1(a1) hlog_warn(__FUNCTION__, a1)
-#define log_warn2(a1,a2) hlog_warn(__FUNCTION__, a1,a2)
-#define log_warn3(a1,a2,a3) hlog_warn(__FUNCTION__, a1,a2,a3)
-#define log_warn4(a1,a2,a3,a4) hlog_warn(__FUNCTION__, a1,a2,a3,a4)
-#define log_warn5(a1,a2,a3,a4,a5) hlog_warn(__FUNCTION__, a1,a2,a3,a4,a5)
-
-#define log_error1(a1) hlog_error(__FUNCTION__, a1)
-#define log_error2(a1,a2) hlog_error(__FUNCTION__, a1,a2)
-#define log_error3(a1,a2,a3) hlog_error(__FUNCTION__, a1,a2,a3)
-#define log_error4(a1,a2,a3,a4) hlog_error(__FUNCTION__, a1,a2,a3,a4)
-#define log_error5(a1,a2,a3,a4,a5) hlog_error(__FUNCTION__, a1,a2,a3,a4,a5)
+#define log_verbose(fmt, ...) _nanohttp_log_printf(NANOHTTP_LOG_VERBOSE, \
+ NANOHTTP_LOG_LEVEL_VERBOSE_STRING " %s: " fmt "\n", \
+ __FUNCTION__, ## __VA_ARGS__)
+
+#define log_debug(fmt, ...) _nanohttp_log_printf(NANOHTTP_LOG_DEBUG, \
+ NANOHTTP_LOG_LEVEL_DEBUG_STRING " %s: " fmt "\n", \
+ __FUNCTION__, ## __VA_ARGS__)
+
+#define log_info(fmt, ...) _nanohttp_log_printf(NANOHTTP_LOG_INFO, \
+ NANOHTTP_LOG_LEVEL_INFO_STRING " %s: " fmt "\n", \
+ __FUNCTION__, ## __VA_ARGS__)
+
+#define log_warn(fmt, ...) _nanohttp_log_printf(NANOHTTP_LOG_WARN, \
+ NANOHTTP_LOG_LEVEL_WARN_STRING " %s: " fmt "\n", \
+ __FUNCTION__, ## __VA_ARGS__)
+
+#define log_error(fmt, ...) _nanohttp_log_printf(NANOHTTP_LOG_ERROR, \
+ NANOHTTP_LOG_LEVEL_ERROR_STRING " %s: " fmt "\n", \
+ __FUNCTION__, ## __VA_ARGS__)
+
+#define log_fatal(fmt, ...) _nanohttp_log_printf(NANOHTTP_LOG_FATAL, \
+ NANOHTTP_LOG_LEVEL_FATAL_STRING " %s: " fmt "\n", \
+ __FUNCTION__, ## __VA_ARGS__)
+/**@}*/
#endif
diff --git a/nanohttp/nanohttp-mime.c b/nanohttp/nanohttp-mime.c
index 4798bf4..81b3387 100755
--- a/nanohttp/nanohttp-mime.c
+++ b/nanohttp/nanohttp-mime.c
@@ -1,9 +1,10 @@
+/** @file nanohttp-mime.c MIME handling */
/******************************************************************
* _ _ _ _ _ __
* | \/ | | | | \/ | | _/
* |_''_| |_| |_''_| |_'/ PARSER
*
-* $Id: nanohttp-mime.c,v 1.19 2006/12/16 15:55:24 m0gg Exp $
+* $Id: nanohttp-mime.c,v 1.20 2007/11/03 22:40:11 m0gg Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003-2004 Ferhat Ayaz
@@ -526,10 +527,10 @@ mime_streamreader_function(void *userdata, unsigned char *dest, int *size)
len = http_input_stream_read(in, dest, *size);
/*
- log_info1("http_input_stream_read() returned 0"); */
+ log_info("http_input_stream_read() returned 0"); */
if (len == -1)
{
- log_error4("[%d] %s():%s ", herror_code(in->err), herror_func(in->err),
+ log_error("[%d] %s():%s ", herror_code(in->err), herror_func(in->err),
herror_message(in->err));
}
@@ -551,7 +552,7 @@ _mime_parse_begin(void *data)
/* Nothing to do
mime_callback_data_t *cbdata = (mime_callback_data_t)data;
*/
- log_verbose2("Begin parse (%p)", data);
+ log_verbose("Begin parse (%p)", data);
return;
}
@@ -563,7 +564,7 @@ _mime_parse_end(void *data)
/* Nothing to do
mime_callback_data_t *cbdata = (mime_callback_data_t)data;
*/
- log_verbose2("End parse (%p)", data);
+ log_verbose("End parse (%p)", data);
return;
}
@@ -577,10 +578,10 @@ _mime_part_begin(void *data)
mime_callback_data_t *cbdata;
cbdata = (mime_callback_data_t *) data;
- log_verbose2("Begin Part (%p)", data);
+ log_verbose("Begin Part (%p)", data);
if (!(part = (struct part_t *) malloc(sizeof(struct part_t))))
{
- log_error2("malloc failed (%s)", strerror(errno));
+ log_error("malloc failed (%s)", strerror(errno));
return;
}
part->next = NULL;
@@ -606,13 +607,13 @@ _mime_part_begin(void *data)
cbdata, cbdata->part_id++);
#endif
-/* log_info2("Creating FILE ('%s') deleteOnExit=1", buffer);*/
+/* log_info("Creating FILE ('%s') deleteOnExit=1", buffer);*/
part->deleteOnExit = 1;
cbdata->current_fd = fopen(buffer, "wb");
if (cbdata->current_fd)
strcpy(cbdata->current_part->filename, buffer);
else
- log_error2("Can not open file for write '%s'", buffer);
+ log_error("Can not open file for write '%s'", buffer);
}
@@ -620,7 +621,7 @@ static void
_mime_part_end(void *data)
{
mime_callback_data_t *cbdata = (mime_callback_data_t *) data;
- log_verbose2("End Part (%p)", data);
+ log_verbose("End Part (%p)", data);
if (cbdata->current_fd)
{
fclose(cbdata->current_fd);
@@ -694,17 +695,17 @@ _mime_received_bytes(void *data, const unsigned char *bytes, int size)
if (!cbdata)
{
- log_error1
+ log_error
("MIME transport error Called <received bytes> without initializing\n");
return;
}
if (!cbdata->current_part)
{
- log_error1
+ log_error
("MIME transport error Called <received bytes> without initializing\n");
return;
}
-/* log_verbose4("Received %d bytes (%p), header_search = %d",
+/* log_verbose("Received %d bytes (%p), header_search = %d",
size, data, cbdata->header_search);
*/
if (cbdata->header_search < 4)
@@ -824,7 +825,7 @@ mime_message_parse(struct http_input_stream_t * in, const char *root_id,
if (!(cbdata = (mime_callback_data_t *) malloc(sizeof(mime_callback_data_t))))
{
- log_error2("malloc failed (%s)", strerror(errno));
+ log_error("malloc failed (%s)", strerror(errno));
return NULL;
}
@@ -839,7 +840,7 @@ mime_message_parse(struct http_input_stream_t * in, const char *root_id,
if (!(message = (struct attachments_t *) malloc(sizeof(struct attachments_t))))
{
- log_error2("malloc failed (%s)", strerror(errno));
+ log_error("malloc failed (%s)", strerror(errno));
free(cbdata);
return NULL;
}
@@ -863,7 +864,7 @@ mime_message_parse(struct http_input_stream_t * in, const char *root_id,
}
else
{
- log_error2("MIME parser error '%s'!",
+ log_error("MIME parser error '%s'!",
status ==
MIME_PARSER_READ_ERROR ? "read error" : "Incomplete message");
return NULL;
@@ -882,7 +883,7 @@ mime_message_parse_from_file(FILE * in, const char *root_id,
if (!(cbdata = (mime_callback_data_t *) malloc(sizeof(mime_callback_data_t))))
{
- log_error2("malloc failed (%s)", strerror(errno));
+ log_error("malloc failed (%s)", strerror(errno));
return NULL;
}
@@ -897,7 +898,7 @@ mime_message_parse_from_file(FILE * in, const char *root_id,
if (!(message = (struct attachments_t *) malloc(sizeof(struct attachments_t))))
{
- log_error2("malloc failed (%s)", strerror(errno));
+ log_error("malloc failed (%s)", strerror(errno));
free(cbdata);
return NULL;
}
@@ -924,7 +925,7 @@ mime_message_parse_from_file(FILE * in, const char *root_id,
{
/* TODO (#1#): Free objects */
- log_error2("MIME parser error '%s'!",
+ log_error("MIME parser error '%s'!",
status ==
MIME_PARSER_READ_ERROR ? "general error" :
"Incomplete message");
@@ -951,7 +952,7 @@ mime_get_attachments(content_type_t * ctype, struct http_input_stream_t * in,
if (boundary == NULL)
{
/* TODO (#1#): Handle Error in http form */
- log_error1("'boundary' not set for multipart/related");
+ log_error("'boundary' not set for multipart/related");
return herror_new("mime_get_attachments", MIME_ERROR_NO_BOUNDARY_PARAM,
"'boundary' not set for multipart/related");
}
@@ -959,7 +960,7 @@ mime_get_attachments(content_type_t * ctype, struct http_input_stream_t * in,
if (root_id == NULL)
{
/* TODO (#1#): Handle Error in http form */
- log_error1("'start' not set for multipart/related");
+ log_error("'start' not set for multipart/related");
return herror_new("mime_get_attachments", MIME_ERROR_NO_START_PARAM,
"'start' not set for multipart/related");
}
@@ -968,7 +969,7 @@ mime_get_attachments(content_type_t * ctype, struct http_input_stream_t * in,
if (mimeMessage == NULL)
{
/* TODO (#1#): Handle Error in http form */
- log_error1("MIME Parse Error");
+ log_error("MIME Parse Error");
return herror_new("mime_get_attachments", MIME_ERROR_PARSE_ERROR,
"MIME Parse Error");
}
diff --git a/nanohttp/nanohttp-mime.h b/nanohttp/nanohttp-mime.h
index 5ec1489..592559f 100755
--- a/nanohttp/nanohttp-mime.h
+++ b/nanohttp/nanohttp-mime.h
@@ -3,7 +3,7 @@
* | \/ | | | | \/ | | _/
* |_''_| |_| |_''_| |_'/ PARSER
*
-* $Id: nanohttp-mime.h,v 1.17 2007/01/03 08:33:44 m0gg Exp $
+* $Id: nanohttp-mime.h,v 1.18 2007/11/03 22:40:11 m0gg Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003-2004 Ferhat Ayaz
@@ -74,39 +74,46 @@
* @subsection nanohttp_mime_server_cleanup_sec Server cleanup
*
* @author Ferhat Ayaz
- * @version $Revision: 1.17 $
+ * @version $Revision: 1.18 $
*
* @see http://www.ietf.org/rfc/rfc2045.txt
* @see http://www.ietf.org/rfc/rfc2046.txt
* @see http://www.ietf.org/rfc/rfc4288.txt
* @see http://www.ietf.org/rfc/rfc4289.txt
- *
*/
-/**
+/** @file nanohttp-mime.h MIME handling
*
- * MIME errors
+ * @defgroup NANOHTTP_MIME MIME handling
+ * @ingroup NANOHTTP
*
*/
+/**@{*/
+
+/** @defgroup NANOHTTP_MIME_ERRORS MIME errors
+ */
+/**@{*/
#define MIME_ERROR 1300
#define MIME_ERROR_NO_BOUNDARY_PARAM (MIME_ERROR + 1)
#define MIME_ERROR_NO_START_PARAM (MIME_ERROR + 2)
#define MIME_ERROR_PARSE_ERROR (MIME_ERROR + 3)
#define MIME_ERROR_NO_ROOT_PART (MIME_ERROR + 4)
#define MIME_ERROR_NOT_MIME_MESSAGE (MIME_ERROR + 5)
+/**@}*/
#ifdef __cplusplus
extern "C" {
#endif
-/* ------------------------------------------------------------------
- "multipart/related" MIME Message Builder
- ------------------------------------------------------------------*/
-
+/** "multipart/related" MIME Message Builder
+ *
+ */
extern herror_t mime_get_attachments(content_type_t * ctype, struct http_input_stream_t * in, struct attachments_t ** dest);
#ifdef __cplusplus
}
#endif
+/**@}*/
+
#endif
diff --git a/nanohttp/nanohttp-request.c b/nanohttp/nanohttp-request.c
index f7bd307..7a6745d 100755
--- a/nanohttp/nanohttp-request.c
+++ b/nanohttp/nanohttp-request.c
@@ -1,5 +1,6 @@
+/** @file nanohttp-request.c HTTP request handling */
/******************************************************************
-* $Id: nanohttp-request.c,v 1.20 2006/12/01 10:56:00 m0gg Exp $
+* $Id: nanohttp-request.c,v 1.21 2007/11/03 22:40:11 m0gg Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -64,19 +65,19 @@ hrequest_new(void)
if (!(req = (struct hrequest_t *) malloc(sizeof(struct hrequest_t))))
{
- log_error2("malloc failed (%s)", strerror(errno));
+ log_error("malloc failed (%s)", strerror(errno));
return NULL;
}
if (!(req->statistics = (struct request_statistics *)malloc(sizeof(struct request_statistics))))
{
- log_error2("malloc failed (%s)", strerror(errno));
+ log_error("malloc failed (%s)", strerror(errno));
free(req);
return NULL;
}
if (gettimeofday(&(req->statistics->time), NULL) < 0)
- log_error2("gettimeofday failed (%s)", strerror(errno));
+ log_error("gettimeofday failed (%s)", strerror(errno));
req->method = HTTP_REQUEST_GET;
req->version = HTTP_1_1;
@@ -197,7 +198,7 @@ _hrequest_parse_header(char *data)
{
if (!(tmppair = (hpair_t *) malloc(sizeof(hpair_t))))
{
- log_error2("malloc failed (%s)", strerror(errno));
+ log_error("malloc failed (%s)", strerror(errno));
return NULL;
}
@@ -284,13 +285,13 @@ hrequest_new_from_socket(struct hsocket_t *sock, struct hrequest_t ** out)
{
if ((status = hsocket_recv(sock, &(buffer[i]), 1, 1, &readed)) != H_OK)
{
- log_error2("hsocket_recv failed (%s)", herror_message(status));
+ log_error("hsocket_recv failed (%s)", herror_message(status));
return status;
}
buffer[i + 1] = '\0'; /* for strmp */
-/* log_error2("buffer=\"%s\"", buffer); */
+/* log_error("buffer=\"%s\"", buffer); */
if (i > 3)
{
diff --git a/nanohttp/nanohttp-request.h b/nanohttp/nanohttp-request.h
index 95a89a0..90a4041 100755
--- a/nanohttp/nanohttp-request.h
+++ b/nanohttp/nanohttp-request.h
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: nanohttp-request.h,v 1.15 2007/01/03 08:33:44 m0gg Exp $
+ * $Id: nanohttp-request.h,v 1.16 2007/11/03 22:40:11 m0gg Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003-2004 Ferhat Ayaz
@@ -24,15 +24,24 @@
#ifndef __nhttp_request_h
#define __nhttp_request_h
-/** @defgroup http_request_header_fields Request Header Fields
+/** @file nanohttp-request.h HTTP request handling
*
- * The request-header fields allow the client to pass additional information
- * about the request, and about the client itself, to the server. These fields
- * act as request modifiers, with semantics equivalent to the parameters on a
- * programming language method invocation.
+ * @defgroup NANOHTTP_REQUEST HTTP request handling
+ * @ingroup NANOHTTP_SERVER
*
- * @see http://www.ietf.org/rfc/rfc2616.txt
+ */
+/**@{*/
+
+/** @defgroup HTTP_REQUEST_HEADER_FIELDS Request Header Fields
+ * @ingroup HTTP_HEADER_FIELDS
*
+ * The request-header fields allow the client to pass additional
+ * information about the request, and about the client itself, to the
+ * server. These fields act as request modifiers, with semantics
+ * equivalent to the parameters on a programming language method
+ * invocation.
+ *
+ * @see http://www.ietf.org/rfc/rfc2616.txt
*/
/*@{*/
@@ -298,4 +307,6 @@ extern void hrequest_free(struct hrequest_t *req);
}
#endif
+/**@}*/
+
#endif
diff --git a/nanohttp/nanohttp-response.c b/nanohttp/nanohttp-response.c
index ec35c40..54c05dc 100755
--- a/nanohttp/nanohttp-response.c
+++ b/nanohttp/nanohttp-response.c
@@ -1,5 +1,6 @@
+/** @file nanohttp-response.c HTTP response handling */
/******************************************************************
-* $Id: nanohttp-response.c,v 1.18 2006/12/16 15:55:24 m0gg Exp $
+* $Id: nanohttp-response.c,v 1.19 2007/11/03 22:40:11 m0gg Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003-2004 Ferhat Ayaz
@@ -60,7 +61,7 @@ _hresponse_new(void)
if (!(res = (hresponse_t *) malloc(sizeof(hresponse_t))))
{
- log_error2("malloc failed (%s)", strerror(errno));
+ log_error("malloc failed (%s)", strerror(errno));
return NULL;
}
@@ -92,7 +93,7 @@ _hresponse_parse_header(const char *buffer)
s1 = s2;
if (str == NULL)
{
- log_error1("Parse error reading HTTP spec");
+ log_error("Parse error reading HTTP spec");
return NULL;
}
@@ -106,7 +107,7 @@ _hresponse_parse_header(const char *buffer)
s1 = s2;
if (str == NULL)
{
- log_error1("Parse error reading HTTP code");
+ log_error("Parse error reading HTTP code");
return NULL;
}
res->errcode = atoi(str);
@@ -116,7 +117,7 @@ _hresponse_parse_header(const char *buffer)
s1 = s2;
if (str == NULL)
{
- log_error1("Parse error reading HTTP description");
+ log_error("Parse error reading HTTP description");
return NULL;
}
/* res->desc = (char *) malloc(strlen(str) + 1);*/
@@ -168,7 +169,7 @@ read_header: /* for errorcode: 100 (continue) */
{
if ((status = hsocket_recv(sock, &(buffer[i]), 1, 1, &count)) != H_OK)
{
- log_error1("Socket read error");
+ log_error("Socket read error");
return status;
}
@@ -187,7 +188,7 @@ read_header: /* for errorcode: 100 (continue) */
res = _hresponse_parse_header(buffer);
if (res == NULL)
{
- log_error1("Header parse error");
+ log_error("Header parse error");
return herror_new("hresponse_new_from_socket",
GENERAL_HEADER_PARSE_ERROR,
"Can not parse response header");
diff --git a/nanohttp/nanohttp-response.h b/nanohttp/nanohttp-response.h
index ddbee78..37f7486 100755
--- a/nanohttp/nanohttp-response.h
+++ b/nanohttp/nanohttp-response.h
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: nanohttp-response.h,v 1.15 2007/01/03 08:33:44 m0gg Exp $
+ * $Id: nanohttp-response.h,v 1.16 2007/11/03 22:40:11 m0gg Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003-2004 Ferhat Ayaz
@@ -24,7 +24,15 @@
#ifndef __nanohttp_response_h
#define __nanohttp_response_h
-/** @defgroup http_response_header_fields Response Header Fields
+/** @file nanohttp-response.h HTTP response handling
+ *
+ * @defgroup NANOHTTP_RESPONSE HTTP response handling
+ * @ingroup NANOHTTP_RESPONSE
+ */
+/**@{*/
+
+/** @defgroup HTTP_RESPONSE_HEADER_FIELDS Response Header Fields
+ * @ingroup HTTP_HEADER_FIELDS
*
* The response-header fields allow the server to pass additional information
* about the response which cannot be placed in the Status-Line. These header
@@ -32,7 +40,6 @@
* resource identified by the Request-URI. (see RFC 2616)
*
* @see http://www.ietf.org/rfc/rfc2616.txt
- *
*/
/*@{*/
@@ -129,24 +136,25 @@
*/
#define HEADER_VARY "Vary"
-/**
- *
- * The WWW-Authenticate response-header field MUST be included in 401
- * (Unauthorized) response messages. The field value consists of at least one
- * challenge that indicates the authentication scheme(s) and parameters
- * applicable to the Request-URI.
+/** The WWW-Authenticate response-header field MUST be included in 401
+ * Unauthorized response messages (@ref HTTP_STATUS_401_REASON_PHRASE).
+ * The field value consists of at least one challenge that indicates
+ * the authentication scheme(s) and parameters applicable to the
+ * Request-URI.
*
- * WWW-Authenticate = "WWW-Authenticate" ":" 1#challenge
+ @verbatim
+ WWW-Authenticate = "WWW-Authenticate" ":" 1#challenge
+ @endverbatim
*
- * The HTTP access authentication process is described in "HTTP Authentication:
- * Basic and Digest Access Authentication" [43]. User agents are advised to take
- * special care in parsing the WWW-Authenticate field value as it might contain
- * more than one challenge, or if more than one WWW-Authenticate header field is
- * provided, the contents of a challenge itself can contain a comma-separated
- * list of authentication parameters.
+ * The HTTP access authentication process is described in "HTTP
+ * Authentication: Basic and Digest Access Authentication". User agents
+ * are advised to take special care in parsing the WWW-Authenticate
+ * field value as it might contain more than one challenge, or if more
+ * than one WWW-Authenticate header field is provided, the contents of
+ * a challenge itself can contain a comma-separated list of
+ * authentication parameters.
*
* @see http://www.ietf.org/rfc/rfc2617.txt
- *
*/
#define HEADER_WWW_AUTHENTICATE "WWW-Authenticate"
@@ -185,4 +193,6 @@ extern void hresponse_free(hresponse_t * res);
}
#endif
+/**@}*/
+
#endif
diff --git a/nanohttp/nanohttp-server.c b/nanohttp/nanohttp-server.c
index e7fe6d6..fee63fc 100644
--- a/nanohttp/nanohttp-server.c
+++ b/nanohttp/nanohttp-server.c
@@ -1,5 +1,6 @@
+/** @file nanohttp-server.c HTTP server */
/******************************************************************
-* $Id: nanohttp-server.c,v 1.80 2007/01/01 22:54:46 m0gg Exp $
+* $Id: nanohttp-server.c,v 1.81 2007/11/03 22:40:12 m0gg Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -170,7 +171,7 @@ static pthread_mutex_t _httpd_connection_lock;
BOOL WINAPI
_httpd_term(DWORD sig)
{
- /* log_debug2 ("Got signal %d", sig); */
+ /* log_debug ("Got signal %d", sig); */
if (sig == _httpd_terminate_signal)
_httpd_run = 0;
@@ -187,7 +188,7 @@ static void _httpd_sys_sleep(int secs)
static void
_httpd_term(int sig)
{
- log_debug2("Got signal %d", sig);
+ log_debug("Got signal %d", sig);
if (sig == _httpd_terminate_signal)
_httpd_run = 0;
@@ -228,7 +229,7 @@ _httpd_parse_arguments(int argc, char **argv)
}
}
- log_verbose2("socket bind to port '%d'", _httpd_port);
+ log_verbose("socket bind to port '%d'", _httpd_port);
return;
}
@@ -259,7 +260,7 @@ _httpd_register_builtin_services(int argc, char **argv)
if ((status = httpd_admin_init_args(argc, argv)) != H_OK)
{
- log_error2("httpd_admin_init_args failed (%s)", herror_message(status));
+ log_error("httpd_admin_init_args failed (%s)", herror_message(status));
return status;
}
@@ -275,7 +276,7 @@ httpd_init(int argc, char **argv)
if ((status = hsocket_module_init(argc, argv)) != H_OK)
{
- log_error2("hsocket_modeule_init failed (%s)", herror_message(status));
+ log_error("hsocket_modeule_init failed (%s)", herror_message(status));
return status;
}
@@ -283,19 +284,19 @@ httpd_init(int argc, char **argv)
if ((status = _httpd_register_builtin_services(argc, argv)) != H_OK)
{
- log_error2("_httpd_register_builtin_services failed (%s)", herror_message(status));
+ log_error("_httpd_register_builtin_services failed (%s)", herror_message(status));
return status;
}
if ((status = hsocket_init(&_httpd_socket)) != H_OK)
{
- log_error2("hsocket_init failed (%s)", herror_message(status));
+ log_error("hsocket_init failed (%s)", herror_message(status));
return status;
}
if ((status = hsocket_bind(&_httpd_socket, _httpd_port)) != H_OK)
{
- log_error2("hsocket_bind failed (%s)", herror_message(status));
+ log_error("hsocket_bind failed (%s)", herror_message(status));
return status;
}
@@ -309,13 +310,13 @@ httpd_register_secure(const char *context, httpd_service func, httpd_auth auth)
if (!(service = (hservice_t *) malloc(sizeof(hservice_t))))
{
- log_error2("malloc failed (%s)", strerror(errno));
+ log_error("malloc failed (%s)", strerror(errno));
return herror_new("httpd_register_secure", 0, "malloc failed (%s)", strerror(errno));
}
if (!(service->statistics = (struct service_statistics *)malloc(sizeof(struct service_statistics))))
{
- log_error2("malloc failed (%s)", strerror(errno));
+ log_error("malloc failed (%s)", strerror(errno));
free(service);
return herror_new("httpd_register_secure", 0, "malloc failed (%s)", strerror(errno));
}
@@ -330,7 +331,7 @@ httpd_register_secure(const char *context, httpd_service func, httpd_auth auth)
service->status = NHTTPD_SERVICE_UP;
service->context = strdup(context);
- log_verbose3("register service (%p) for \"%s\"", service, context);
+ log_verbose("register service (%p) for \"%s\"", service, context);
if (_httpd_services_head == NULL)
{
_httpd_services_head = _httpd_services_tail = service;
@@ -588,22 +589,22 @@ _httpd_request_print(struct hrequest_t * req)
{
hpair_t *pair;
- log_verbose1("++++++ Request +++++++++");
- log_verbose2(" Method : '%s'",
+ log_verbose("++++++ Request +++++++++");
+ log_verbose(" Method : '%s'",
(req->method == HTTP_REQUEST_POST) ? "POST" : "GET");
- log_verbose2(" Path : '%s'", req->path);
- log_verbose2(" Spec : '%s'",
+ log_verbose(" Path : '%s'", req->path);
+ log_verbose(" Spec : '%s'",
(req->version == HTTP_1_0) ? "HTTP/1.0" : "HTTP/1.1");
- log_verbose1(" Parsed query string :");
+ log_verbose(" Parsed query string :");
for (pair = req->query; pair; pair = pair->next)
- log_verbose3(" %s = '%s'", pair->key, pair->value);
+ log_verbose(" %s = '%s'", pair->key, pair->value);
- log_verbose1(" Parsed header :");
+ log_verbose(" Parsed header :");
for (pair = req->header; pair; pair = pair->next)
- log_verbose3(" %s = '%s'", pair->key, pair->value);
+ log_verbose(" %s = '%s'", pair->key, pair->value);
- log_verbose1("++++++++++++++++++++++++");
+ log_verbose("++++++++++++++++++++++++");
return;
}
@@ -615,7 +616,7 @@ httpd_new(struct hsocket_t * sock)
if (!(conn = (httpd_conn_t *) malloc(sizeof(httpd_conn_t))))
{
- log_error2("malloc failed (%s)", strerror(errno));
+ log_error("malloc failed (%s)", strerror(errno));
return NULL;
}
conn->sock = sock;
@@ -652,17 +653,17 @@ _httpd_decode_authorization(const char *value, char **user, char **pass)
len = strlen(value) * 2;
if (!(tmp = (char *) calloc(1, len)))
{
- log_error2("calloc failed (%s)", strerror(errno));
+ log_error("calloc failed (%s)", strerror(errno));
return -1;
}
value = strstr(value, " ") + 1;
- log_verbose2("Authorization (base64) = \"%s\"", value);
+ log_verbose("Authorization (base64) = \"%s\"", value);
base64_decode_string(value, tmp);
- log_verbose2("Authorization (ascii) = \"%s\"", tmp);
+ log_verbose("Authorization (ascii) = \"%s\"", tmp);
if ((tmp2 = strstr(tmp, ":")))
{
@@ -692,20 +693,20 @@ _httpd_authenticate_request(struct hrequest_t * req, httpd_auth auth)
if (!(authorization = hpairnode_get_ignore_case(req->header, HEADER_AUTHORIZATION)))
{
- log_debug2("\"%s\" header not set", HEADER_AUTHORIZATION);
+ log_debug("\"%s\" header not set", HEADER_AUTHORIZATION);
return 0;
}
if (_httpd_decode_authorization(authorization, &user, &pass))
{
- log_error1("httpd_base64_decode_failed");
+ log_error("httpd_base64_decode_failed");
return 0;
}
if ((ret = auth(req, user, pass)))
- log_debug2("Access granted for user=\"%s\"", user);
+ log_debug("Access granted for user=\"%s\"", user);
else
- log_info2("Authentication failed for user=\"%s\"", user);
+ log_info("Authentication failed for user=\"%s\"", user);
free(user);
free(pass);
@@ -730,18 +731,18 @@ httpd_session_main(void *data)
int done;
if (gettimeofday(&start, NULL) == -1)
- log_error2("gettimeofday failed (%s)", strerror(errno));
+ log_error("gettimeofday failed (%s)", strerror(errno));
conn = (conndata_t *) data;
- log_verbose2("starting new httpd session on socket %d", conn->sock);
+ log_verbose("starting new httpd session on socket %d", conn->sock);
rconn = httpd_new(&(conn->sock));
done = 0;
while (!done)
{
- log_verbose3("starting HTTP request on socket %d (%p)", conn->sock, conn->sock.sock);
+ log_verbose("starting HTTP request on socket %d (%p)", conn->sock, conn->sock.sock);
if ((status = hrequest_new_from_socket(&(conn->sock), &req)) != H_OK)
{
@@ -749,9 +750,9 @@ httpd_session_main(void *data)
switch ((code = herror_code(status)))
{
- case HSOCKET_ERROR_SSLCLOSE:
+ case HSSL_ERROR_SSLCLOSE:
case HSOCKET_ERROR_RECEIVE:
- log_error2("hrequest_new_from_socket failed (%s)", herror_message(status));
+ log_error("hrequest_new_from_socket failed (%s)", herror_message(status));
break;
default:
httpd_send_bad_request(rconn, herror_message(status));
@@ -775,7 +776,7 @@ httpd_session_main(void *data)
if ((service = httpd_find_service(req->path)))
{
- log_verbose3("service '%s' for '%s' found", service->context, req->path);
+ log_verbose("service '%s' for '%s' found", service->context, req->path);
if (service->status == NHTTPD_SERVICE_UP)
{
@@ -790,7 +791,7 @@ httpd_session_main(void *data)
service->func(rconn, req);
if (gettimeofday(&end, NULL) == -1)
- log_error2("gettimeofday failed (%s)", strerror(errno));
+ log_error("gettimeofday failed (%s)", strerror(errno));
timersub(&end, &start, &duration);
pthread_rwlock_wrlock(&(service->statistics->lock));
@@ -801,7 +802,7 @@ httpd_session_main(void *data)
if (rconn->out && rconn->out->type == HTTP_TRANSFER_CONNECTION_CLOSE)
{
- log_verbose1("Connection close requested");
+ log_verbose("Connection close requested");
done = 1;
}
}
@@ -810,7 +811,7 @@ httpd_session_main(void *data)
char buffer[256];
snprintf(buffer, 256, "service '%s' is not registered properly (service function is NULL)", req->path);
- log_verbose1(buffer);
+ log_verbose("%s", buffer);
httpd_send_not_implemented(rconn, buffer);
}
}
@@ -825,7 +826,7 @@ httpd_session_main(void *data)
char buffer[256];
sprintf(buffer, "service for '%s' is disabled", req->path);
- log_verbose1(buffer);
+ log_verbose("%s", buffer);
httpd_send_internal_error(rconn, buffer);
}
}
@@ -833,7 +834,7 @@ httpd_session_main(void *data)
{
char buffer[256];
sprintf(buffer, "no service for '%s' found", req->path);
- log_verbose1(buffer);
+ log_verbose("%s", buffer);
httpd_send_not_implemented(rconn, buffer);
done = 1;
}
@@ -869,7 +870,7 @@ httpd_set_header(httpd_conn_t * conn, const char *key, const char *value)
if (conn == NULL)
{
- log_warn1("Connection object is NULL");
+ log_warn("Connection object is NULL");
return 0;
}
@@ -904,7 +905,7 @@ httpd_add_header(httpd_conn_t * conn, const char *key, const char *value)
{
if (!conn)
{
- log_warn1("Connection object is NULL");
+ log_warn("Connection object is NULL");
return 0;
}
@@ -918,7 +919,7 @@ httpd_add_headers(httpd_conn_t * conn, const hpair_t * values)
{
if (!conn)
{
- log_warn1("Connection object is NULL");
+ log_warn("Connection object is NULL");
return;
}
@@ -944,12 +945,12 @@ _httpd_register_signal_handler(void)
sigaddset(&thrsigset, SIGALRM);
#endif
- log_verbose2("registering termination signal handler (SIGNAL:%d)",
+ log_verbose("registering termination signal handler (SIGNAL:%d)",
_httpd_terminate_signal);
#ifdef WIN32
if (SetConsoleCtrlHandler((PHANDLER_ROUTINE) _httpd_term, TRUE) == FALSE)
{
- log_error1("Unable to install console event handler!");
+ log_error("Unable to install console event handler!");
}
#else
@@ -1021,7 +1022,7 @@ _httpd_start_thread(conndata_t * conn)
pthread_sigmask(SIG_BLOCK, &thrsigset, NULL);
if ((err =
pthread_create(&(conn->tid), &(conn->attr), httpd_session_main, conn)))
- log_error2("pthread_create failed (%s)", strerror(err));
+ log_error("pthread_create failed (%s)", strerror(err));
#endif
return;
@@ -1035,13 +1036,13 @@ httpd_run(void)
herror_t err;
fd_set fds;
- log_verbose1("starting run routine");
+ log_verbose("starting run routine");
_httpd_register_signal_handler();
if ((err = hsocket_listen(&_httpd_socket)) != H_OK)
{
- log_error2("hsocket_listen failed (%s)", herror_message(err));
+ log_error("hsocket_listen failed (%s)", herror_message(err));
return err;
}
@@ -1088,7 +1089,7 @@ httpd_run(void)
if ((err = hsocket_accept(&_httpd_socket, &(conn->sock))) != H_OK)
{
- log_error2("hsocket_accept failed (%s)", herror_message(err));
+ log_error("hsocket_accept failed (%s)", herror_message(err));
hsocket_close(&(conn->sock));
@@ -1139,7 +1140,7 @@ httpd_get_postdata(httpd_conn_t * conn, struct hrequest_t * req, long *received,
}
else
{
- log_warn1("Not a POST method");
+ log_warn("Not a POST method");
return NULL;
}
@@ -1152,7 +1153,7 @@ httpd_get_postdata(httpd_conn_t * conn, struct hrequest_t * req, long *received,
if (!(postdata = (char *) malloc(1)))
{
- log_error2("malloc failed (%s)", strerror(errno));
+ log_error("malloc failed (%s)", strerror(errno));
return NULL;
}
postdata[0] = '\0';
@@ -1160,7 +1161,7 @@ httpd_get_postdata(httpd_conn_t * conn, struct hrequest_t * req, long *received,
}
if (!(postdata = (unsigned char *) malloc(content_length + 1)))
{
- log_error2("malloc failed (%)", strerror(errno));
+ log_error("malloc failed (%)", strerror(errno));
return NULL;
}
if (http_input_stream_read(req->in, postdata, (int) content_length) > 0)
@@ -1182,7 +1183,7 @@ static void
_httpd_mime_get_boundary(httpd_conn_t * conn, char *dest)
{
sprintf(dest, "---=.Part_NH_%p", conn);
- log_verbose2("boundary= \"%s\"", dest);
+ log_verbose("boundary= \"%s\"", dest);
return;
}
diff --git a/nanohttp/nanohttp-server.h b/nanohttp/nanohttp-server.h
index f9fed91..8c5fc32 100644
--- a/nanohttp/nanohttp-server.h
+++ b/nanohttp/nanohttp-server.h
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: nanohttp-server.h,v 1.38 2007/01/25 10:24:10 m0gg Exp $
+ * $Id: nanohttp-server.h,v 1.39 2007/11/03 22:40:14 m0gg Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -31,11 +31,9 @@
#include <nanohttp/nanohttp-stream.h>
#include <nanohttp/nanohttp-request.h>
#include <nanohttp/nanohttp-response.h>
-#include <nanohttp/nanohttp-logging.h>
#endif
/**
- *
* @page nanohttp_page nanoHTTP
*
* @section nanohttp_sec nanoHTTP
@@ -61,7 +59,6 @@
* @author Heiko Ronsdorf
*
* @version 1.2
- *
*/
/** @page nanohttp_server_page Howto write an HTTP server
@@ -80,7 +77,7 @@
* int main(int argc, char **argv)
* {
* herror_t status;
- * hlog_set_level(HLOG_INFO);
+ * nanohttp_set_level(NANOHTTP_LOG_INFO);
*
* if (httpd_init(argc, argv))
* {
@@ -189,15 +186,32 @@
*
*/
-/**
- *
- * nanoHTTP command line flags
+/** @file nanohttp-server.h HTTP server interface
*
+ * @defgroup NANOHTTP nanoHTTP
*/
-#define NHTTPD_ARG_PORT "-NHTTPport"
-#define NHTTPD_ARG_TERMSIG "-NHTTPtsig"
-#define NHTTPD_ARG_MAXCONN "-NHTTPmaxconn"
-#define NHTTPD_ARG_TIMEOUT "-NHTTPtimeout"
+/**@{*/
+
+/** @defgroup NAONHTTP_CMDLINE_FLAGS Command line flags
+ */
+/**@{*/
+/** @defgroup NANOHTTP_SERVER_CMDLINE_FLAGS Server command line flags
+ */
+/**@{*/
+#define NHTTPD_ARG_PORT "-NHTTPport" /**< Port the server is
+ listening on */
+#define NHTTPD_ARG_TERMSIG "-NHTTPtsig" /**< Signal which may used
+ to terminate the server */
+#define NHTTPD_ARG_MAXCONN "-NHTTPmaxconn" /**< Maximum number of
+ simultanous connections */
+#define NHTTPD_ARG_TIMEOUT "-NHTTPtimeout" /**< Timeout on reads */
+/**@}*/
+/**@}*/
+
+/** @defgroup NANOHTTP_CLIENT Client */
+
+/** @defgroup NANOHTTP_SERVER Server */
+/**@{*/
typedef struct httpd_conn
{
@@ -208,26 +222,14 @@ typedef struct httpd_conn
}
httpd_conn_t;
-/**
- *
- * Service callback function for a nanoHTTP service.
- *
- */
+/** Service callback function for a nanoHTTP service. */
typedef void (*httpd_service) (httpd_conn_t *conn, struct hrequest_t *req);
-/**
- *
- * Authentication callback function for a nanoHTTP service.
- *
- */
+/** Authentication callback function for a nanoHTTP service. */
typedef int (*httpd_auth) (struct hrequest_t *req, const char *user, const char *pass);
#ifdef __NHTTP_INTERNAL
-/**
- *
- * Service statistics per nanoHTTP service.
- *
- */
+/** Service statistics per nanoHTTP service. */
struct service_statistics
{
unsigned long requests;
@@ -238,35 +240,33 @@ struct service_statistics
};
#endif
+/** @defgroup NANOHTTP_SERVICE_STATUS Service status
+ */
+/**@{*/
+
/**
- *
* @see hservice_t
* @see http://www.w3.org/TR/wslc/
- *
*/
#define NHTTPD_SERVICE_DOWN 0
/**
- *
* @see hservice_t
* @see http://www.w3.org/TR/wslc/
- *
*/
#define NHTTPD_SERVICE_UP 1
+/**@}*/
-/**
- *
- * Service representation object
- *
+/** Service representation object
*/
typedef struct tag_hservice
{
- char *context;
- int status;
- httpd_service func;
- httpd_auth auth;
- struct tag_hservice *next;
- struct service_statistics *statistics;
+ char *context; /**< Path where service is connected */
+ int status; /**< Current status of this service */
+ httpd_service func; /**< Service function */
+ httpd_auth auth; /**< Authentication function */
+ struct tag_hservice *next; /**< Next service in service list */
+ struct service_statistics *statistics; /**< Service statistics */
}
hservice_t;
@@ -275,34 +275,76 @@ extern "C"
{
#endif
-/**
- *
- * Initialize the nanoHTTP server.
+/** This function initializes the nanoHTTP server.
*
+ * @see httpd_destroy()
*/
extern herror_t httpd_init(int argc, char *argv[]);
-/**
- *
- * @see httpd_init
+/** This function destroys the nanoHTTP server.
*
+ * @see httpd_init()
*/
extern void httpd_destroy(void);
-
+/** This function executes the nanoHTTP server in an endless loop.
+ *
+ * @return H_OK on success.
+ */
extern herror_t httpd_run(void);
+/** This function registers a service routine.
+ *
+ * @return H_OK on success.
+ */
extern herror_t httpd_register(const char *context, httpd_service service);
+
+/** This function registers a service routing which is secured by
+ * a password (HTTP basic authentication).
+ *
+ * @return H_OK on success.
+ */
extern herror_t httpd_register_secure(const char *context, httpd_service service, httpd_auth auth);
+/** This function registers a service routing which is executed if
+ * no matching service is found.
+ *
+ * @return H_OK on success.
+ */
extern herror_t httpd_register_default(const char *context, httpd_service service);
+
+/** This function registers a serivce routing which is executed if
+ * no matching service is found, it is protected by a password.
+ *
+ * @return H_OK on success.
+ */
extern herror_t httpd_register_default_secure(const char *context, httpd_service service, httpd_auth auth);
+/** This function returns the port the service is listening on.
+ *
+ * @return The port the service is listening on.
+ */
extern short httpd_get_port(void);
+
+/** This function returns the timeout which is used for read's.
+ *
+ * @return The read timeout used.
+ */
extern int httpd_get_timeout(void);
+
+/** This function sets the timeout which is used for read.
+ */
extern void httpd_set_timeout(int secs);
+/** This function returns a string representation of the underlying
+ * protocol used.
+ *
+ * @return "http" or "https"
+ */
extern const char *httpd_get_protocol(void);
+
+/** This function returns the actual connection count.
+ */
extern int httpd_get_conncount(void);
extern hservice_t *httpd_get_services(void);
@@ -349,57 +391,54 @@ extern herror_t httpd_mime_next(httpd_conn_t * conn, const char *content_id, con
*/
extern herror_t httpd_mime_send_file(httpd_conn_t * conn, const char *content_id, const char *content_type, const char *transfer_encoding, const char *filename);
-/**
- *
- * Finish MIME request
- *
- * @return H_OK on success or error flag
+/** This function finishes a MIME request.
*
+ * @return H_OK on success.
*/
extern herror_t httpd_mime_end(httpd_conn_t * conn);
-/**
- *
- * Send a minimalistic HTML error document with HTTP status 400.
+/** This function sends a minimalistic HTML error document with HTTP
+ * status 400.
*
* @see HTTP_STATUS_400_REASON_PHRASE
*
+ * @return H_OK on success.
*/
extern herror_t httpd_send_bad_request(httpd_conn_t *conn, const char *msg);
-/**
- *
- * Send a minimalistc HTML error document with HTTP status 401.
+/** This function sends a minimalistc HTML error document with HTTP
+ * status 401.
*
* @see HTTP_STATUS_401_REASON_PHRASE
*
+ * @return H_OK on success.
*/
extern herror_t httpd_send_unauthorized(httpd_conn_t *conn, const char *realm);
-/**
- *
- * Send a minimalistic HTML error document with HTTP status 404.
+/** This function sends a minimalistic HTML error document with HTTP
+ * status 404.
*
* @see HTTP_STATUS_404_REASON_PHRASE
*
+ * @return H_OK on success.
*/
extern herror_t httpd_send_not_found(httpd_conn_t *conn, const char *msg);
-/**
- *
- * Send a minimalistic HTML error document with HTTP status 500.
+/** This function sends a minimalistic HTML error document with HTTP
+ * status 500.
*
* @see HTTP_STATUS_500_REASON_PHRASE
*
+ * @return H_OK on success.
*/
extern herror_t httpd_send_internal_error(httpd_conn_t * conn, const char *msg);
-/**
- *
- * Send a minimalistic HTML error document with HTTP status 501.
+/** This functions sends a minimalistic HTML error document with HTTP
+ * status 501.
*
* @see HTTP_STATUS_501_REASON_PHRASE
*
+ * @return H_OK on success.
*/
extern herror_t httpd_send_not_implemented(httpd_conn_t *conn, const char *msg);
@@ -407,4 +446,6 @@ extern herror_t httpd_send_not_implemented(httpd_conn_t *conn, const char *msg);
}
#endif
+/**@}*/
+
#endif
diff --git a/nanohttp/nanohttp-socket.c b/nanohttp/nanohttp-socket.c
index b5279aa..693b0cb 100644
--- a/nanohttp/nanohttp-socket.c
+++ b/nanohttp/nanohttp-socket.c
@@ -1,5 +1,6 @@
+/** @file nanohttp-socket.c Socket wrapper */
/******************************************************************
-* $Id: nanohttp-socket.c,v 1.70 2007/01/23 23:21:47 m0gg Exp $
+* $Id: nanohttp-socket.c,v 1.71 2007/11/03 22:40:14 m0gg Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -179,7 +180,7 @@ _hsocket_sys_accept(struct hsocket_t * sock, struct hsocket_t * dest)
if ((dest->sock = accept(sock->sock, (struct sockaddr *) &(dest->addr), &len)) == -1)
{
- log_warn2("accept failed (%s)", strerror(errno));
+ log_warn("accept failed (%s)", strerror(errno));
return herror_new("hsocket_accept", HSOCKET_ERROR_ACCEPT, "Cannot accept network connection (%s)", strerror(errno));
}
@@ -209,7 +210,7 @@ hsocket_module_init(int argc, char **argv)
#ifdef HAVE_SSL
if ((status = hssl_module_init(argc, argv)) != H_OK)
{
- log_error2("hssl_module_init failed (%s)", herror_message(status));
+ log_error("hssl_module_init failed (%s)", herror_message(status));
return status;
}
#endif
@@ -265,7 +266,7 @@ hsocket_open(struct hsocket_t * dsock, const char *hostname, int port, int ssl)
address.sin_family = host->h_addrtype;
address.sin_port = htons((unsigned short) port);
- log_verbose4("Opening %s://%s:%i", ssl ? "https" : "http", hostname, port);
+ log_verbose("Opening %s://%s:%i", ssl ? "https" : "http", hostname, port);
/* connect to the server */
if (connect(dsock->sock, (struct sockaddr *) &address, sizeof(address)) != 0)
@@ -278,7 +279,7 @@ hsocket_open(struct hsocket_t * dsock, const char *hostname, int port, int ssl)
if ((status = hssl_client_ssl(dsock)) != H_OK)
{
- log_error2("hssl_client_ssl failed (%s)", herror_message(status));
+ log_error("hssl_client_ssl failed (%s)", herror_message(status));
return status;
}
#else
@@ -298,7 +299,7 @@ hsocket_bind(struct hsocket_t *dsock, unsigned short port)
/* create socket */
if ((sock.sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
- log_error2("Cannot create socket (%s)", strerror(errno));
+ log_error("Cannot create socket (%s)", strerror(errno));
return herror_new("hsocket_bind", HSOCKET_ERROR_CREATE,
"Socket error (%s)", strerror(errno));
}
@@ -312,7 +313,7 @@ hsocket_bind(struct hsocket_t *dsock, unsigned short port)
if (bind(sock.sock, (struct sockaddr *) &addr, sizeof(struct sockaddr)) == -1)
{
- log_error2("Cannot bind socket (%s)", strerror(errno));
+ log_error("Cannot bind socket (%s)", strerror(errno));
return herror_new("hsocket_bind", HSOCKET_ERROR_BIND, "Socket error (%s)",
strerror(errno));
}
@@ -335,12 +336,12 @@ hsocket_accept(struct hsocket_t * sock, struct hsocket_t * dest)
#ifdef HAVE_SSL
if ((status = hssl_server_ssl(dest)) != H_OK)
{
- log_warn2("SSL startup failed (%s)", herror_message(status));
+ log_warn("SSL startup failed (%s)", herror_message(status));
return status;
}
#endif
- log_verbose3("accepting connection from '%s' socket=%d",
+ log_verbose("accepting connection from '%s' socket=%d",
SAVE_STR(((char *) inet_ntoa(dest->addr.sin_addr))),
dest->sock);
@@ -356,7 +357,7 @@ hsocket_listen(struct hsocket_t * sock)
if (listen(sock->sock, 15) == -1)
{
- log_error2("listen failed (%s)", strerror(errno));
+ log_error("listen failed (%s)", strerror(errno));
return herror_new("hsocket_listen", HSOCKET_ERROR_LISTEN,
"Cannot listen on this socket (%s)", strerror(errno));
}
@@ -367,7 +368,7 @@ hsocket_listen(struct hsocket_t * sock)
void
hsocket_close(struct hsocket_t * sock)
{
- log_verbose3("closing socket %p (%d)...", sock, sock->sock);
+ log_verbose("closing socket %p (%d)...", sock, sock->sock);
#ifdef HAVE_SSL
hssl_cleanup(sock);
@@ -378,7 +379,7 @@ hsocket_close(struct hsocket_t * sock)
sock->bytes_received = 0;
sock->bytes_transmitted = 0;
- log_verbose1("socket closed");
+ log_verbose("socket closed");
return;
}
@@ -396,14 +397,14 @@ hsocket_send(struct hsocket_t * sock, const unsigned char * bytes, int n)
return herror_new("hsocket_send", HSOCKET_ERROR_NOT_INITIALIZED,
"hsocket not initialized");
- /* log_verbose2( "SENDING %s", bytes ); */
+ /* log_verbose( "SENDING %s", bytes ); */
while (1)
{
#ifdef HAVE_SSL
if ((status = hssl_write(sock, bytes + total, n, &size)) != H_OK)
{
- log_warn2("hssl_write failed (%s)", herror_message(status));
+ log_warn("hssl_write failed (%s)", herror_message(status));
return status;
}
#else
@@ -442,7 +443,7 @@ hsocket_select_recv(int sock, char *buf, size_t len)
if (select(sock + 1, &fds, NULL, NULL, &timeout) == 0)
{
errno = ETIMEDOUT;
- log_verbose2("Socket %d timed out", sock);
+ log_verbose("Socket %d timed out", sock);
return -1;
}
@@ -456,7 +457,7 @@ hsocket_recv(struct hsocket_t * sock, unsigned char * buffer, int total, int for
size_t totalRead;
size_t count;
-/* log_verbose3("Entering hsocket_recv(total=%d,force=%d)", total, force); */
+/* log_verbose("Entering hsocket_recv(total=%d,force=%d)", total, force); */
totalRead = 0;
do
@@ -465,7 +466,7 @@ hsocket_recv(struct hsocket_t * sock, unsigned char * buffer, int total, int for
#ifdef HAVE_SSL
if ((status = hssl_read(sock, buffer + totalRead, (size_t) total - totalRead, &count)) != H_OK)
{
- log_warn2("hssl_read failed (%s)", herror_message(status));
+ log_warn("hssl_read failed (%s)", herror_message(status));
return status;
}
#else
@@ -476,7 +477,7 @@ hsocket_recv(struct hsocket_t * sock, unsigned char * buffer, int total, int for
if (!force)
{
- /* log_verbose3("Leaving !force (received=%d)(status=%d)", *received,
+ /* log_verbose("Leaving !force (received=%d)(status=%d)", *received,
status); */
*received = count;
return H_OK;
@@ -488,7 +489,7 @@ hsocket_recv(struct hsocket_t * sock, unsigned char * buffer, int total, int for
{
*received = totalRead;
/*
- log_verbose4("Leaving totalRead == total
+ log_verbose("Leaving totalRead == total
(received=%d)(status=%d)(totalRead=%d)", *received, status,
totalRead); */
return H_OK;
diff --git a/nanohttp/nanohttp-socket.h b/nanohttp/nanohttp-socket.h
index 115defe..c4f2188 100644
--- a/nanohttp/nanohttp-socket.h
+++ b/nanohttp/nanohttp-socket.h
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: nanohttp-socket.h,v 1.38 2006/12/11 08:13:19 m0gg Exp $
+ * $Id: nanohttp-socket.h,v 1.39 2007/11/03 22:40:15 m0gg Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -24,16 +24,19 @@
#ifndef __nanohttp_socket_h
#define __nanohttp_socket_h
-/** @defgroup socket_errors Socket errors
+/** @file nanohttp-socket.h Socket wrapper
+ *
+ * @defgroup NANOHTTP_SOCKET Socket wrapper
+ * @ingroup NANOHTTP
*
*/
-/*@{*/
+/**@{*/
-/**
- *
- * Generic socket error
+/** @defgroup NANOHTTP_SOCKET_ERRORS Generic socket errors
+ * @ingroup NANOHTTP_ERRORS
*
*/
+/**@{*/
#define HSOCKET_ERROR 1000
#define HSOCKET_ERROR_CREATE (HSOCKET_ERROR + 1)
#define HSOCKET_ERROR_GET_HOSTNAME (HSOCKET_ERROR + 2)
@@ -45,23 +48,9 @@
#define HSOCKET_ERROR_ACCEPT (HSOCKET_ERROR + 8)
#define HSOCKET_ERROR_NOT_INITIALIZED (HSOCKET_ERROR + 9)
#define HSOCKET_ERROR_IOCTL (HSOCKET_ERROR + 10)
-
/*@}*/
-/**
- *
- * @todo move the next two items to nanohttp-ssl.h
- *
- */
-#define HSOCKET_ERROR_SSLCLOSE (HSOCKET_ERROR + 11)
-#define HSOCKET_ERROR_SSLCTX (HSOCKET_ERROR + 11)
-
-/*}*/
-
-/**
- *
- * Socket definition
- *
+/** Socket definition
*/
struct hsocket_t
{
@@ -81,54 +70,42 @@ extern "C"
{
#endif
-/**
- *
- * Initializes the socket modul. This should be called only once for an
- * application.
+/** This function iitializes the socket modul. This should be called
+ * only once for an application.
*
* @return This function should always return H_OK.
*
+ * @see hssl_module_destroy()
*/
extern herror_t hsocket_module_init(int argc, char **argv);
-
-/**
- *
- * Destroys the socket modul. This should be called after finishing an
- * application.
- *
- * @see hssl_module_destroy
+/** This function destroys the socket modul. This should be called
+ * after finishing an application.
*
+ * @see hssl_module_init()
*/
extern void hsocket_module_destroy(void);
-/**
- *
- * Initializes a given socket object. This function (or hsokcet_init_ssl) should
- * be called for every socket before using it.
+/** This function initializes a given socket object. This function
+ * (or hsokcet_init_ssl) should be called for every socket before
+ * using it.
*
* @param sock the destination socket to initialize.
*
* @return This function should always return H_OK.
*
- * @see hssl_module_init
- *
+ * @see hssl_module_init()
*/
extern herror_t hsocket_init(struct hsocket_t * sock);
-/**
- *
- * Destroys and releases a given socket.
+/** This function destroys and releases a given socket.
*
* @param sock the socket to destroy
- *
*/
extern void hsocket_free(struct hsocket_t * sock);
-/**
- *
- * Connects to a given host. The hostname can be an IP number or a humen
- * readable hostname.
+/** This function connects to a given host. The hostname can be an IP
+ * number or a humen readable hostname.
*
* @param sock the destonation socket object to use
* @param host hostname
@@ -143,19 +120,14 @@ extern void hsocket_free(struct hsocket_t * sock);
*/
extern herror_t hsocket_open(struct hsocket_t *sock, const char *host, int port, int ssl);
-/**
- e
- * Close a socket connection.
+/** This function closes a socket connection.
*
* @param sock the socket to close
- *
*/
extern void hsocket_close(struct hsocket_t *sock);
-/**
- *
- * Binds a socket to a given port number. After bind you can call
- * hsocket_listen() to listen to the port.
+/** This function binds a socket to a given port number. After bind you
+ * can call hsocket_listen() to listen to the port.
*
* @param sock socket to use.
* @param port port number to bind to
@@ -164,29 +136,24 @@ extern void hsocket_close(struct hsocket_t *sock);
* - HSOCKET_ERROR_CREATE
* - HSOCKET_ERROR_BIND
*
- * @see hsocket_listen
- *
+ * @see hsocket_listen()
*/
extern herror_t hsocket_bind(struct hsocket_t *sock, unsigned short port);
-/**
- *
- * Set the socket to the listen mode. You must bind the socket to a port with
- * hsocket_bind() before you can listen to the port.
+/** This function sets the socket to the listen mode. You must bind the
+ * socket to a port with hsocket_bind() before you can listen to the
+ * port.
*
* @param sock the socket to use
*
* @return H_OK if success. One of the followings if fails:<
* - HSOCKET_ERROR_NOT_INITIALIZED
* - HSOCKET_ERROR_LISTEN
- *
*/
extern herror_t hsocket_listen(struct hsocket_t *sock);
-/**
- *
- * Accepts an incoming socket request. Note that this function
- * will not return until a socket connection is ready.
+/** This function accepts an incoming socket request. Note that this
+ * function will not return until a socket connection is ready.
*
* @param sock the socket which listents to a port
* @param dest the destination socket which will be created
@@ -197,9 +164,7 @@ extern herror_t hsocket_listen(struct hsocket_t *sock);
*/
extern herror_t hsocket_accept(struct hsocket_t *sock, struct hsocket_t *dest);
-/**
- *
- * Sends data throught the socket.
+/** This function sends data throught the socket.
*
* @param sock the socket to use to send the data
* @param bytes bytes to send
@@ -211,9 +176,7 @@ extern herror_t hsocket_accept(struct hsocket_t *sock, struct hsocket_t *dest);
*/
extern herror_t hsocket_send(struct hsocket_t *sock, const unsigned char *bytes, int size);
-/**
- *
- * Sends a string throught the socket
+/** This function sends a string throught the socket
*
* @param sock the socket to use to send the data
* @param str the null terminated string to sent
@@ -221,15 +184,12 @@ extern herror_t hsocket_send(struct hsocket_t *sock, const unsigned char *bytes,
* @return H_OK on success. One of the followings if fails:
* - HSOCKET_ERROR_NOT_INITIALIZED
* - HSOCKET_ERROR_SEND
- *
*/
extern herror_t hsocket_send_string(struct hsocket_t *sock, const char *str);
extern int hsocket_select_recv(int sock, char *buf, size_t len);
-/**
- *
- * Reads data from the socket.
+/** This function reads data from the socket.
*
* @param sock the socket to read data from
* @param buffer the buffer to use to save the readed bytes
@@ -240,29 +200,22 @@ extern int hsocket_select_recv(int sock, char *buf, size_t len);
*
* @return This function will return -1 if an read error was occured. Otherwise
* the return value is the size of bytes readed from the socket.
- *
*/
extern herror_t hsocket_recv(struct hsocket_t * sock, unsigned char *buffer, int size, int force, int *len);
-/**
- *
- * Get the socket read/write timeout.
+/** This function gets the socket read/write timeout.
*
* @return The socket timeout in seconds.
*
- * @see hsocket_set_timeout
- *
+ * @see hsocket_set_timeout()
*/
extern int hsocket_get_timeout(void);
-/**
- *
- * Set the socket read/write timeout.
+/** This function sets the socket read/write timeout.
*
* @param secs Timeout in seconds.
*
- * @see hsocket_get_timeout
- *
+ * @see hsocket_get_timeout()
*/
extern void hsocket_set_timeout(int secs);
@@ -270,4 +223,6 @@ extern void hsocket_set_timeout(int secs);
}
#endif
+/**@}*/
+
#endif
diff --git a/nanohttp/nanohttp-ssl.c b/nanohttp/nanohttp-ssl.c
index 4d3cb2c..8b0f9ff 100644
--- a/nanohttp/nanohttp-ssl.c
+++ b/nanohttp/nanohttp-ssl.c
@@ -1,5 +1,6 @@
+/** @file nanohttp-ssl.c SSL wrapper */
/******************************************************************
-* $Id: nanohttp-ssl.c,v 1.37 2006/12/11 08:13:19 m0gg Exp $
+* $Id: nanohttp-ssl.c,v 1.38 2007/11/03 22:40:15 m0gg Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2001-2005 Rochester Institute of Technology
@@ -100,7 +101,7 @@ _hssl_dummy_verify_cert(X509 * cert)
/* connect to anyone */
- log_verbose1("_Not_ validating certificate.");
+ log_verbose("_Not_ validating certificate.");
return 1;
}
@@ -112,18 +113,18 @@ _hssl_cert_verify_callback(int prev_ok, X509_STORE_CTX * ctx)
/*
if ((X509_STORE_CTX_get_error(ctx) = X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN))
{
- log_verbose1("Self signed cert in chain");
+ log_verbose("Self signed cert in chain");
return 1;
}
*/
- log_verbose2("Cert depth = %d", X509_STORE_CTX_get_error_depth(ctx));
+ log_verbose("Cert depth = %d", X509_STORE_CTX_get_error_depth(ctx));
if (X509_STORE_CTX_get_error_depth(ctx) == 0)
{
return _hssl_verify_cert(X509_STORE_CTX_get_current_cert(ctx));
}
else
{
- log_verbose1("Cert ok (prev)");
+ log_verbose("Cert ok (prev)");
return prev_ok;
}
}
@@ -300,7 +301,7 @@ _hssl_library_init(void)
if (!initialized)
{
- log_verbose1("Initializing library");
+ log_verbose("Initializing library");
SSL_library_init();
@@ -318,21 +319,21 @@ _hssl_library_init(void)
static herror_t
_hssl_server_context_init(void)
{
- log_verbose3("enabled=%i, certificate=%p", _hssl_enabled, _hssl_certificate);
+ log_verbose("enabled=%i, certificate=%p", _hssl_enabled, _hssl_certificate);
if (!_hssl_enabled || !_hssl_certificate)
return H_OK;
if (!(_hssl_context = SSL_CTX_new(SSLv23_method())))
{
- log_error1("Cannot create SSL context");
+ log_error("Cannot create SSL context");
return herror_new("_hssl_server_context_init", HSSL_ERROR_CONTEXT,
"Unable to create SSL context");
}
if (!(SSL_CTX_use_certificate_file(_hssl_context, _hssl_certificate, SSL_FILETYPE_PEM)))
{
- log_error2("Cannot read certificate file: \"%s\"", _hssl_certificate);
+ log_error("Cannot read certificate file: \"%s\"", _hssl_certificate);
SSL_CTX_free(_hssl_context);
return herror_new("_hssl_server_context_init", HSSL_ERROR_CERTIFICATE,
"Unable to use SSL certificate \"%s\"", _hssl_certificate);
@@ -342,7 +343,7 @@ _hssl_server_context_init(void)
if (!(SSL_CTX_use_PrivateKey_file(_hssl_context, _hssl_certificate, SSL_FILETYPE_PEM)))
{
- log_error2("Cannot read key file: \"%s\"", _hssl_certificate);
+ log_error("Cannot read key file: \"%s\"", _hssl_certificate);
SSL_CTX_free(_hssl_context);
return herror_new("_hssl_server_context_init", HSSL_ERROR_PEM,
"Unable to use private key");
@@ -353,18 +354,18 @@ _hssl_server_context_init(void)
if (!(SSL_CTX_load_verify_locations(_hssl_context, _hssl_ca_list, NULL)))
{
SSL_CTX_free(_hssl_context);
- log_error2("Cannot read CA list: \"%s\"", _hssl_ca_list);
+ log_error("Cannot read CA list: \"%s\"", _hssl_ca_list);
return herror_new("_hssl_server_context_init", HSSL_ERROR_CA_LIST,
"Unable to read certification authorities \"%s\"");
}
SSL_CTX_set_client_CA_list(_hssl_context, SSL_load_client_CA_file(_hssl_ca_list));
- log_verbose1("Certification authority contacted");
+ log_verbose("Certification authority contacted");
}
SSL_CTX_set_verify(_hssl_context, SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE,
_hssl_cert_verify_callback);
- log_verbose1("Certificate verification callback registered");
+ log_verbose("Certificate verification callback registered");
SSL_CTX_set_mode(_hssl_context, SSL_MODE_AUTO_RETRY);
@@ -394,11 +395,11 @@ hssl_module_init(int argc, char **argv)
if (_hssl_enabled)
{
_hssl_library_init();
- log_verbose1("SSL enabled");
+ log_verbose("SSL enabled");
}
else
{
- log_verbose1("SSL _not_ enabled");
+ log_verbose("SSL _not_ enabled");
}
return _hssl_server_context_init();
@@ -443,19 +444,19 @@ hssl_client_ssl(struct hsocket_t * sock)
SSL *ssl;
int ret;
- log_verbose1("Starting SSL client initialization");
+ log_verbose("Starting SSL client initialization");
_hssl_library_init();
if (!(ctx = SSL_CTX_new(SSLv23_method())))
{
- log_error2("SSL_CTX_new failed (ctx == %p)", ctx);
+ log_error("SSL_CTX_new failed (ctx == %p)", ctx);
return herror_new("hssl_client_ssl", HSSL_ERROR_CONTEXT, "Cannot create SSL client context");
}
if (!(ssl = SSL_new(ctx)))
{
- log_error1("Cannot create new SSL object");
+ log_error("Cannot create new SSL object");
return herror_new("hssl_client_ssl", HSSL_ERROR_CLIENT, "SSL_new failed");
}
@@ -465,7 +466,7 @@ hssl_client_ssl(struct hsocket_t * sock)
{
herror_t err;
- log_error2("SSL connect error (%s)", _hssl_get_error(ssl, -1));
+ log_error("SSL connect error (%s)", _hssl_get_error(ssl, -1));
err =
herror_new("hssl_client_ssl", HSSL_ERROR_CONNECT,
"SSL_connect failed (%s)", _hssl_get_error(ssl, ret));
@@ -474,15 +475,15 @@ hssl_client_ssl(struct hsocket_t * sock)
}
/* SSL_connect should take care of this for us. if
- (SSL_get_peer_certificate(ssl) == NULL) { log_error1("No certificate
+ (SSL_get_peer_certificate(ssl) == NULL) { log_error("No certificate
provided"); SSL_free(ssl); return herror_new("hssl_client_ssl",
HSSL_ERROR_CERTIFICATE, "No certificate provided"); }
- if (SSL_get_verify_result(ssl) != X509_V_OK) { log_error1("Certificate
+ if (SSL_get_verify_result(ssl) != X509_V_OK) { log_error("Certificate
did not verify"); SSL_free(ssl); return herror_new("hssl_client_ssl",
HSSL_ERROR_CERTIFICATE, "Verfiy certificate failed"); } */
- log_verbose1("SSL client initialization completed");
+ log_verbose("SSL client initialization completed");
sock->ssl = ssl;
@@ -505,11 +506,11 @@ hssl_server_ssl(struct hsocket_t *sock)
if (!_hssl_enabled)
return H_OK;
- log_verbose2("Starting SSL initialization for socket %d", sock->sock);
+ log_verbose("Starting SSL initialization for socket %d", sock->sock);
if (!(ssl = SSL_new(_hssl_context)))
{
- log_warn1("SSL_new failed");
+ log_warn("SSL_new failed");
return herror_new("hssl_server_ssl", HSSL_ERROR_SERVER,
"Cannot create SSL object");
}
@@ -519,7 +520,7 @@ hssl_server_ssl(struct hsocket_t *sock)
if (sbio == NULL)
{
- log_error1("BIO_new_socket failed");
+ log_error("BIO_new_socket failed");
return NULL;
}
/* BIO_set_callback(sbio, hssl_bio_cb); */
@@ -530,7 +531,7 @@ hssl_server_ssl(struct hsocket_t *sock)
{
herror_t err;
- log_error2("SSL_accept failed (%s)", _hssl_get_error(ssl, ret));
+ log_error("SSL_accept failed (%s)", _hssl_get_error(ssl, ret));
err = herror_new("hssl_server_ssl", HSSL_ERROR_SERVER, "SSL_accept failed (%s)", _hssl_get_error(ssl, ret));
SSL_free(ssl);
@@ -561,7 +562,7 @@ hssl_read(struct hsocket_t * sock, char *buf, size_t len, size_t * received)
{
int count;
-/* log_verbose4("sock->sock=%d sock->ssl=%p, len=%li", sock->sock, sock->ssl, len); */
+/* log_verbose("sock->sock=%d sock->ssl=%p, len=%li", sock->sock, sock->ssl, len); */
if (sock->ssl)
{
@@ -587,7 +588,7 @@ hssl_write(struct hsocket_t * sock, const char *buf, size_t len, size_t * sent)
{
int count;
-/* log_verbose4("sock->sock=%d, sock->ssl=%p, len=%li", sock->sock, sock->ssl, len); */
+/* log_verbose("sock->sock=%d, sock->ssl=%p, len=%li", sock->sock, sock->ssl, len); */
if (sock->ssl)
{
diff --git a/nanohttp/nanohttp-ssl.h b/nanohttp/nanohttp-ssl.h
index e4b7058..008c23a 100644
--- a/nanohttp/nanohttp-ssl.h
+++ b/nanohttp/nanohttp-ssl.h
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: nanohttp-ssl.h,v 1.30 2007/01/25 10:24:10 m0gg Exp $
+* $Id: nanohttp-ssl.h,v 1.31 2007/11/03 22:40:15 m0gg Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2001-2005 Rochester Institute of Technology
@@ -223,19 +223,25 @@
*
*/
-/**
+/** @file nanohttp-ssl.h SSL wrapper
*
- * Commandline argument to enabled SSL in the nanoHTTP server.
+ * @defgroup NANOHTTP_SSL SSL wrapper
+ * @ingroup NANOHTTP
*
*/
-#define NHTTPD_ARG_HTTPS "-NHTTPS"
+/**@{*/
/**
*
- * @defgroup ssl_errors_group SSL Errors
+ * Commandline argument to enabled SSL in the nanoHTTP server.
*
*/
-/*@{*/
+#define NHTTPD_ARG_HTTPS "-NHTTPS"
+
+/** @defgroup NANOHTTP_SSL_ERRORS SSL Errors
+ * @ingroup NANOHTTP_ERRORS
+ */
+/**@{*/
#define HSSL_ERROR 1700
#define HSSL_ERROR_CA_LIST (HSSL_ERROR + 10)
@@ -246,92 +252,75 @@
#define HSSL_ERROR_SERVER (HSSL_ERROR + 60)
#define HSSL_ERROR_CONNECT (HSSL_ERROR + 70)
-/*@}*/
+#define HSSL_ERROR_SSLCLOSE (HSSL_ERROR + 80)
+#define HSSL_ERROR_SSLCTX (HSSL_ERROR + 90)
+
+/**@}*/
#ifdef __cplusplus
extern "C" {
#endif
-/**
- *
- * Initialization of the SSL module
+/** This function initializes the SSL module.
*
* @return H_OK on success
*
+ * @see hss_module_destroy()
*/
extern herror_t hssl_module_init(int argc, char **argv);
-/**
- *
- * Shutdown of the SSL module.
+/** This functions destroys the SSL module.
*
+ * @see hssl_module_init()
*/
extern void hssl_module_destroy(void);
-/**
- *
- * Sets the SSL certificate to be used.
- *
+/** This function sets the SSL certificate to be used.
*/
extern void hssl_set_certificate(const char *filename);
-/**
- *
- * Sets the password for the SSL certificate.
- *
- * @see hssl_set_certificate
+/** This function sets the password for the SSL certificate.
*
+ * @see hssl_set_certificate()
*/
extern void hssl_set_certpass(const char *password);
-/**
- *
- * Sets the filename for a certification authority list.
- *
+/** This function sets the filename for a certification authority
+ * list.
*/
extern void hssl_set_ca_list(const char *filename);
-/**
- *
- * Enabled SSL in the nanoHTTP server. You have to call this function before
- * calling httpd_run.
- *
- * @see httpd_run
- *
+/** This function enables SSL in the nanoHTTP server. You have to
+ * call this function before calling httpd_run().
*/
extern void hssl_enable(void);
-/**
- *
- * Check if SSL is enabled in the nanoHTTP server.
- *
- * @return 1 if enabled, 0 if disabled.
+/** This function returns if SSL is enabled in the nanoHTTP server.
*
+ * @return 1 if enabled, 0 otherwise.
*/
extern int hssl_enabled(void);
-/**
- *
- * SSL client socket initialization.
+/** This function initializes an SSL client socket.
*
* @return H_OK on success.
*
+ * @see hsl_cleanup()
*/
extern herror_t hssl_client_ssl(struct hsocket_t * sock);
-/**
- *
- * SSL server socket initialization.
+/** This function initializes an SSL server socket.
*
* @return H_OK on success.
*
+ * @see hssl_cleanup()
*/
extern herror_t hssl_server_ssl(struct hsocket_t * sock);
-/**
- *
- * SSL socket cleanup.
+/** This function cleans up an SSL socket.
*
+ * @see hssl_client_ssl
+ * @see httl_server_ssl
*/
extern void hssl_cleanup(struct hsocket_t * sock);
@@ -350,21 +339,15 @@ extern int verify_sn(X509 * cert, int who, int nid, char *str);
*/
extern void hssl_set_user_verify(int func(X509 * cert));
-/**
- *
- * Read from a SSL socket.
- *
- * @see hsocket_read
+/** This function reads from an SSL socket.
*
+ * @see hsocket_read()
*/
extern herror_t hssl_read(struct hsocket_t * sock, char *buf, size_t len, size_t * received);
-/**
- *
- * Write to a SSL socket.
- *
- * @see hsocket_write
+/** This function writes to an SSL socket.
*
+ * @see hsocket_write()
*/
extern herror_t hssl_write(struct hsocket_t * sock, const char *buf, size_t len, size_t * sent);
@@ -372,4 +355,6 @@ extern herror_t hssl_write(struct hsocket_t * sock, const char *buf, size_t len,
}
#endif
+/**@}*/
+
#endif
diff --git a/nanohttp/nanohttp-stream.c b/nanohttp/nanohttp-stream.c
index 8899c7e..64c066c 100755
--- a/nanohttp/nanohttp-stream.c
+++ b/nanohttp/nanohttp-stream.c
@@ -1,5 +1,6 @@
+/** @file nanohttp-stream.c Stream handling */
/******************************************************************
-* $Id: nanohttp-stream.c,v 1.19 2006/12/01 10:56:00 m0gg Exp $
+* $Id: nanohttp-stream.c,v 1.20 2007/11/03 22:40:15 m0gg Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003-2004 Ferhat Ayaz
@@ -88,7 +89,7 @@ http_input_stream_new(struct hsocket_t *sock, hpair_t * header)
if (!(result = (struct http_input_stream_t *) malloc(sizeof(struct http_input_stream_t))))
{
- log_error2("malloc failed (%s)", strerror(errno));
+ log_error("malloc failed (%s)", strerror(errno));
return NULL;
}
@@ -100,7 +101,7 @@ http_input_stream_new(struct hsocket_t *sock, hpair_t * header)
/* Check if Content-type */
if (_http_stream_is_content_length(header))
{
- log_verbose1("Stream transfer with 'Content-length'");
+ log_verbose("Stream transfer with 'Content-length'");
content_length = hpairnode_get_ignore_case(header, HEADER_CONTENT_LENGTH);
result->content_length = atoi(content_length);
result->received = 0;
@@ -109,7 +110,7 @@ http_input_stream_new(struct hsocket_t *sock, hpair_t * header)
/* Check if Chunked */
else if (_http_stream_is_chunked(header))
{
- log_verbose1("Stream transfer with 'chunked'");
+ log_verbose("Stream transfer with 'chunked'");
result->type = HTTP_TRANSFER_CHUNKED;
result->chunk_size = -1;
result->received = -1;
@@ -117,7 +118,7 @@ http_input_stream_new(struct hsocket_t *sock, hpair_t * header)
/* Assume connection close */
else
{
- log_verbose1("Stream transfer with 'Connection: close'");
+ log_verbose("Stream transfer with 'Connection: close'");
result->type = HTTP_TRANSFER_CONNECTION_CLOSE;
result->connection_closed = 0;
result->received = 0;
@@ -138,14 +139,14 @@ http_input_stream_new_from_file(const char *filename)
if (!(fd = fopen(filename, "rb"))) {
- log_error2("fopen failed (%s)", strerror(errno));
+ log_error("fopen failed (%s)", strerror(errno));
return NULL;
}
/* Create object */
if (!(result = (struct http_input_stream_t *) malloc(sizeof(struct http_input_stream_t))))
{
- log_error2("malloc failed (%s)", strerror(errno));
+ log_error("malloc failed (%s)", strerror(errno));
fclose(fd);
return NULL;
}
@@ -165,7 +166,7 @@ http_input_stream_free(struct http_input_stream_t * stream)
{
fclose(stream->fd);
if (stream->deleteOnExit)
- log_info2("Removing '%s'", stream->filename);
+ log_info("Removing '%s'", stream->filename);
/* remove(stream->filename); */
}
@@ -238,7 +239,7 @@ _http_input_stream_chunked_read_chunk_size(struct http_input_stream_t * stream)
if (err != H_OK)
{
- log_error4("[%d] %s(): %s ", herror_code(err), herror_func(err),
+ log_error("[%d] %s(): %s ", herror_code(err), herror_func(err),
herror_message(err));
stream->err = err;
@@ -254,7 +255,7 @@ _http_input_stream_chunked_read_chunk_size(struct http_input_stream_t * stream)
chunk[i] = '\0'; /* double check */
chunk_size = strtol(chunk, (char **) NULL, 16); /* hex to dec */
/*
- log_verbose3("chunk_size: '%s' as dec: '%d'", chunk, chunk_size); */
+ log_verbose("chunk_size: '%s' as dec: '%d'", chunk, chunk_size); */
return chunk_size;
}
@@ -512,7 +513,7 @@ http_output_stream_new(struct hsocket_t *sock, hpair_t * header)
/* Create object */
if (!(result = (struct http_output_stream_t *) malloc(sizeof(struct http_output_stream_t))))
{
- log_error2("malloc failed (%s)", strerror(errno));
+ log_error("malloc failed (%s)", strerror(errno));
return NULL;
}
@@ -524,7 +525,7 @@ http_output_stream_new(struct hsocket_t *sock, hpair_t * header)
/* Check if Content-type */
if (_http_stream_is_content_length(header))
{
- log_verbose1("Stream transfer with 'Content-length'");
+ log_verbose("Stream transfer with 'Content-length'");
content_length = hpairnode_get_ignore_case(header, HEADER_CONTENT_LENGTH);
result->content_length = atoi(content_length);
result->type = HTTP_TRANSFER_CONTENT_LENGTH;
@@ -532,13 +533,13 @@ http_output_stream_new(struct hsocket_t *sock, hpair_t * header)
/* Check if Chunked */
else if (_http_stream_is_chunked(header))
{
- log_verbose1("Stream transfer with 'chunked'");
+ log_verbose("Stream transfer with 'chunked'");
result->type = HTTP_TRANSFER_CHUNKED;
}
/* Assume connection close */
else
{
- log_verbose1("Stream transfer with 'Connection: close'");
+ log_verbose("Stream transfer with 'Connection: close'");
result->type = HTTP_TRANSFER_CONNECTION_CLOSE;
}
diff --git a/nanohttp/nanohttp-stream.h b/nanohttp/nanohttp-stream.h
index 7846df5..40d415e 100755
--- a/nanohttp/nanohttp-stream.h
+++ b/nanohttp/nanohttp-stream.h
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: nanohttp-stream.h,v 1.15 2006/12/11 08:35:58 m0gg Exp $
+ * $Id: nanohttp-stream.h,v 1.16 2007/11/03 22:40:15 m0gg Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003-2004 Ferhat Ayaz
@@ -24,7 +24,7 @@
#ifndef __nanohttp_stream_h
#define __nanohttp_stream_h
-/** @file
+/** @file nanohttp-stream.h Stream handling
*
* @section HTTP Stream modul
*
@@ -46,55 +46,36 @@
*
* A stream will start sending/receiving data "after" sending/receiving header
* information. (After <CF><CF>)"
- *
*/
+/**{@*/
-/** @defgroup stream_errors_group Stream errors
- *
+/** @defgroup NANOHTTP_STREAM_ERRORS Stream errors
+ * @ingroup NANOHTTP_ERRORS
*/
/*@{*/
-
-/**
- *
- * Generic stream error.
- *
- */
#define STREAM_ERROR 1200
#define STREAM_ERROR_INVALID_TYPE (STREAM_ERROR + 1)
#define STREAM_ERROR_SOCKET_ERROR (STREAM_ERROR + 2)
#define STREAM_ERROR_NO_CHUNK_SIZE (STREAM_ERROR + 3)
#define STREAM_ERROR_WRONG_CHUNK_SIZE (STREAM_ERROR + 4)
-
/*@}*/
-/**
- *
- * Transfer types supported while
- * sending/receiving data.
- *
- */
+/** Transfer types supported while sending/receiving data. */
typedef enum http_transfer_type
{
- /** The stream cares about Content-length */
- HTTP_TRANSFER_CONTENT_LENGTH,
-
- /** The stream sends/receives chunked data */
- HTTP_TRANSFER_CHUNKED,
-
- /** The stream sends/receives data until connection is closed */
- HTTP_TRANSFER_CONNECTION_CLOSE,
-
- /** This transfer style will be used by MIME support and for debug purposes.*/
- HTTP_TRANSFER_FILE
+ HTTP_TRANSFER_CONTENT_LENGTH, /**< The stream cares about
+ Content-length */
+ HTTP_TRANSFER_CHUNKED, /**< The stream sends/receives
+ chunked data */
+ HTTP_TRANSFER_CONNECTION_CLOSE, /**< The stream sends/receives
+ data until connection is closed */
+ HTTP_TRANSFER_FILE /**< This transfer style will be used
+ by MIME support and for debug
+ purposes. */
} http_transfer_type_t;
-
-/**
- *
- * HTTP INPUT STREAM. Receives data from a socket/file
- * and cares about the transfer style.
- *
- */
+/** HTTP INPUT STREAM. Receives data from a socket/file and cares
+ * about the transfer style. */
struct http_input_stream_t
{
struct hsocket_t *sock;
@@ -111,12 +92,8 @@ struct http_input_stream_t
int deleteOnExit; /* default is 0 */
};
-/**
- *
- * HTTP OUTPUT STREAM. Sends data to a socket
- * and cares about the transfer style.
- *
- */
+/** HTTP OUTPUT STREAM. Sends data to a socket and cares about the
+ * transfer style. */
struct http_output_stream_t
{
struct hsocket_t *sock;
@@ -125,15 +102,12 @@ struct http_output_stream_t
int sent;
};
-
#ifdef __cplusplus
extern "C" {
#endif
-/**
- *
- * Creates a new input stream. The transfer style will be choosen from the given
- * header.
+/** This function creates a new input stream. The transfer style will
+ * be choosen from the given header.
*
* @param sock the socket to receive data from
* @param header the http header. This must be received before creating a
@@ -143,38 +117,31 @@ extern "C" {
* found in the header, HTTP_TRANSFER_CONNECTION_CLOSE will be used as
* default.
*
- * @see http_input_stream_free
- *
+ * @see http_input_stream_free()
*/
extern struct http_input_stream_t *http_input_stream_new(struct hsocket_t *sock, hpair_t *header);
-/**
- *
- * Creates a new input stream from file. This function was added for MIME
- * messages and for debugging. The transfer style is always HTTP_TRANSFER_FILE.
+/** This function creates a new input stream from file. It was added
+ * for MIME messages and for debugging purposes. The transfer style
+ * is always HTTP_TRANSFER_FILE.
*
* @param filename the name of the file to open and read.
*
- * @return The return value is a http_input_stream_t object if the file exists
- * and could be opened. NULL otherwise.
- *
- * @see http_input_stream_free
+ * @return The return value is a http_input_stream_t object if the file
+ * exists and could be opened. NULL otherwise.
*
+ * @see http_input_stream_free()
*/
extern struct http_input_stream_t *http_input_stream_new_from_file(const char *filename);
-/**
- *
- * Free input stream. Note that the socket will not be closed by this functions.
+/** Free input stream. Note that the socket will not be closed by this
+ * functions.
*
* @param stream the input stream to free.
- *
*/
extern void http_input_stream_free(struct http_input_stream_t * stream);
-/**
- *
- * Returns the actual status of the stream.
+/** This function returns the actual status of the stream.
*
* @param stream the stream to check its status
*
@@ -183,15 +150,13 @@ extern void http_input_stream_free(struct http_input_stream_t * stream);
*/
extern int http_input_stream_is_ready(struct http_input_stream_t * stream);
-/**
- *
- * Tries to read 'size' bytes from the stream. Check always with
- * http_input_stream_is_ready() if there are some data to read. If it returns 0,
- * no more data is available on stream.
+/** This function tries to read 'size' bytes from the stream. Check
+ * always with http_input_stream_is_ready() if there are some data to
+ * read. If it returns 0, no more data is available on stream.
*
- * On error this function will return -1. In this case the "err" field of stream
- * will be set to the actual error. This can be one of the followings:
- *
+ * On error this function will return -1. In this case the "err" field
+ * of stream will be set to the actual error. This can be one of the
+ * followings:
* - STREAM_ERROR_NO_CHUNK_SIZE
* - STREAM_ERROR_WRONG_CHUNK_SIZE
* - STREAM_ERROR_INVALID_TYPE
@@ -202,55 +167,44 @@ extern int http_input_stream_is_ready(struct http_input_stream_t * stream);
* @param size maximum size of 'dest' (size to read)
*
* @return the actual read bytes or -1 on error.
- *
*/
extern int http_input_stream_read(struct http_input_stream_t * stream, unsigned char *dest, int size);
-/**
- *
- * Creates a new output stream. Transfer style will be found from the given
- * header.
+/** Creates a new output stream. Transfer style will be found from the
+ * given header.
*
* @param sock the socket to to send data to
* @param header the header which must be sent before
*
- * @return a http_output_stream_t object. If no proper transfer style was found
- * in the header, HTTP_TRANSFER_CONNECTION_CLOSE will be used as default.
- *
- * @see http_output_stream_free
+ * @return A http_output_stream_t object. If no proper transfer style
+ * was found in the header, HTTP_TRANSFER_CONNECTION_CLOSE will
+ * be used as default.
*
+ * @see http_output_stream_free()
*/
extern struct http_output_stream_t *http_output_stream_new(struct hsocket_t *sock, hpair_t * header);
-/**
- *
- * Free output stream. Note that this functions will not close any socket
- * connections.
- *
- * @param stream the stream to free.
+/** This function frees the given output stream. Note that this
+ * function will not close any socket connections.
*
+ * @param stream The stream to free.
*/
-extern void http_output_stream_free(struct http_output_stream_t * stream);
+extern void http_output_stream_free(struct http_output_stream_t *stream);
-/**
- *
- * Writes 'size' bytes of 'bytes' into stream.
+/** This function writes 'size' bytes of 'bytes' into stream.
*
* @param stream the stream to use to send data
* @param bytes bytes to send
* @param size size of bytes to send
*
- * @return H_OK on success. One of the followings otherwise
+ * @return H_OK on success. One of the followings otherwise:
* - HSOCKET_ERROR_NOT_INITIALIZED
* - HSOCKET_ERROR_SEND
- *
*/
-extern herror_t http_output_stream_write(struct http_output_stream_t *stream, const unsigned char* bytes, int size);
+extern herror_t http_output_stream_write(struct http_output_stream_t *stream, const unsigned char *bytes, int size);
-/**
- *
- * Writes a null terminated string to the stream.
+/** This function writes a null terminated string to the stream.
*
* @param stream the stream to use to send data
* @param str a null terminated string to send
@@ -258,21 +212,17 @@ extern herror_t http_output_stream_write(struct http_output_stream_t *stream, co
* @return H_OK on success. One of the followings otherwise
* - HSOCKET_ERROR_NOT_INITIALIZED
* - HSOCKET_ERROR_SEND
- *
*/
extern herror_t http_output_stream_write_string(struct http_output_stream_t *stream, const char *str);
-/**
- *
- * Sends finish flags if nesseccary (like in chunked transport).
- * Call always this function before closing the connections.
+/** This function sends finish flags if nesseccary (like in chunked
+ * transport). Call always this function before closing the connections.
*
* @param stream the stream to send post data.
*
* @return H_OK on success. One of the followings otherwise
* - HSOCKET_ERROR_NOT_INITIALIZED
* - HSOCKET_ERROR_SEND
- *
*/
extern herror_t http_output_stream_flush(struct http_output_stream_t *stream);
@@ -280,4 +230,6 @@ extern herror_t http_output_stream_flush(struct http_output_stream_t *stream);
}
#endif
+/**@}*/
+
#endif
diff --git a/nanohttp/nanohttp-url.c b/nanohttp/nanohttp-url.c
index 316fd27..8ba1619 100644
--- a/nanohttp/nanohttp-url.c
+++ b/nanohttp/nanohttp-url.c
@@ -1,5 +1,6 @@
+/** @file nanohttp-url.c URL parsing functions */
/******************************************************************
-* $Id: nanohttp-url.c,v 1.3 2006/12/16 16:09:45 m0gg Exp $
+* $Id: nanohttp-url.c,v 1.4 2007/11/03 22:40:15 m0gg Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -61,14 +62,14 @@ _hurl_dump(const struct hurl_t *url)
{
if (!url)
{
- log_error1("parameter url is NULL");
+ log_error("parameter url is NULL");
return;
}
- log_verbose2("PROTOCOL: %d", url->protocol);
- log_verbose2(" HOST: \"%s\"", url->host);
- log_verbose2(" PORT: %d", url->port);
- log_verbose2(" CONTEXT: \"%s\"", url->context);
+ log_verbose("PROTOCOL: %d", url->protocol);
+ log_verbose(" HOST: \"%s\"", url->host);
+ log_verbose(" PORT: %d", url->port);
+ log_verbose(" CONTEXT: \"%s\"", url->context);
return;
}
@@ -96,18 +97,18 @@ hurl_parse(struct hurl_t *url, const char *urlstr)
if (iprotocol == 0)
{
- log_error1("no protocol");
+ log_error("no protocol");
return herror_new("hurl_parse", URL_ERROR_NO_PROTOCOL, "No protocol");
}
if (iprotocol + 3 >= len)
{
- log_error1("no host");
+ log_error("no host");
return herror_new("hurl_parse", URL_ERROR_NO_HOST, "No host");
}
if (urlstr[iprotocol] != ':'
&& urlstr[iprotocol + 1] != '/' && urlstr[iprotocol + 2] != '/')
{
- log_error1("no protocol");
+ log_error("no protocol");
return herror_new("hurl_parse", URL_ERROR_NO_PROTOCOL, "No protocol");
}
@@ -121,7 +122,7 @@ hurl_parse(struct hurl_t *url, const char *urlstr)
if (ihost == iprotocol + 1)
{
- log_error1("no host");
+ log_error("no host");
return herror_new("hurl_parse", URL_ERROR_NO_HOST, "No host");
}
@@ -151,7 +152,7 @@ hurl_parse(struct hurl_t *url, const char *urlstr)
/* find right port */
if (!(entry = getservbyname(protocol, "tcp")))
{
- log_warn2("getservbyname(\"%s\", \"tcp\") returned NULL, please edit services database", protocol);
+ log_warn("getservbyname(\"%s\", \"tcp\") returned NULL, please edit services database", protocol);
switch (url->protocol)
{
@@ -171,7 +172,7 @@ hurl_parse(struct hurl_t *url, const char *urlstr)
size = ihost - iprotocol - 3;
if (!(url->host = (char *)malloc(size + 1)))
{
- log_error2("malloc failed (%s)", strerror(errno));
+ log_error("malloc failed (%s)", strerror(errno));
return herror_new("hurl_parse", URL_ERROR, "malloc failed (%s)", strerror(errno));
}
strncpy(url->host, &urlstr[iprotocol + 3], size);
@@ -191,7 +192,7 @@ hurl_parse(struct hurl_t *url, const char *urlstr)
size = len - iport;
if (!(url->context = (char *)malloc(size + 1)))
{
- log_error2("malloc failed (%s)", strerror(errno));
+ log_error("malloc failed (%s)", strerror(errno));
return herror_new("hurl_parse", URL_ERROR, "malloc failed (%s)", strerror(errno));
}
strncpy(url->context, &urlstr[iport], size);
diff --git a/nanohttp/nanohttp-url.h b/nanohttp/nanohttp-url.h
index 6e72749..8b07fa7 100644
--- a/nanohttp/nanohttp-url.h
+++ b/nanohttp/nanohttp-url.h
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: nanohttp-url.h,v 1.3 2006/12/11 08:13:19 m0gg Exp $
+ * $Id: nanohttp-url.h,v 1.4 2007/11/03 22:40:15 m0gg Exp $
*
* CSOAP Project: A http client/server library in C
* Copyright (C) 2003-2004 Ferhat Ayaz
@@ -24,23 +24,27 @@
#ifndef __nanohttp_url_h
#define __nanohttp_url_h
-/**
+/** @file nanohttp-url.h URL handling
*
- * URL errors
+ * @defgroup NANOHTTP_URL URL handling
+ * @ingroup NANOHTTP
*
*/
+/*@{*/
+
+/** URL errors
+ */
+/**@{*/
#define URL_ERROR 1100
#define URL_ERROR_UNKNOWN_PROTOCOL (URL_ERROR + 1)
#define URL_ERROR_NO_PROTOCOL (URL_ERROR + 2)
#define URL_ERROR_NO_HOST (URL_ERROR + 3)
+/**@}*/
-/**
- *
- * The protocol types in enumeration format. Used in some other nanohttp objects
- * like hurl_t.
+/** The protocol types in enumeration format. Used in some other
+ * nanohttp objects like hurl_t.
*
* @see hurl_t
- *
*/
typedef enum _hprotocol
{
@@ -48,58 +52,39 @@ typedef enum _hprotocol
PROTOCOL_HTTPS
} hprotocol_t;
-/**
+/** The URL object. A representation of an URL like:
*
- * The URL object. A representation of an URL like:
- *
- * [protocol]://[user]@[host]:[port]/[context]['#' fragment]['?' query]
+ @verbatim
+ [protocol]://[user]@[host]:[port]/[context]['#' fragment]['?' query]
+ @endverbatim
*
* @see http://www.ietf.org/rfc/rfc2396.txt
- *
*/
struct hurl_t
{
- /**
- *
- * The transfer protocol. Note that only PROTOCOL_HTTP and PROTOCOL_HTTPS are
- * supported by nanohttp.
- *
- */
- hprotocol_t protocol;
-
- /**
- *
- * The port number. If no port number was given in the URL, one of the default
- * port numbers will be selected:
- * - HTTP_DEFAULT_PORT
- * - HTTPS_DEFAULT_PORT
- *
- */
- unsigned short port;
-
- /**
- *
- * The hostname
- *
- */
- char *host;
-
- /**
- *
- * The string after the hostname.
- *
- */
- char *context;
+ hprotocol_t protocol; /**< The transfer protocol. Note that only
+ - PROTOCOL_HTTP and
+ - PROTOCOL_HTTPS
+ are supported by nanohttp. */
+ unsigned short port; /**< The port number. If no port number was given
+ in the URL, one of the default port numbers
+ will be selected:
+ - HTTP_DEFAULT_PORT
+ - HTTPS_DEFAULT_PORT */
+ char *host; /**< The hostname */
+ char *context; /** The string after the hostname. */
};
#ifdef __cplusplus
extern "C" {
#endif
-/**
+/** This function parses the given 'urlstr' and fills the given hurl_t
+ * object. Parse an URI
*
- * Parses the given 'urlstr' and fills the given hurl_t object.
- * Parse an URI URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]
+ @verbatim
+ URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]
+ @endverbatim
*
* @param obj the destination URL object to fill
* @param url the URL in string format
@@ -108,16 +93,12 @@ extern "C" {
* - URL_ERROR_UNKNOWN_PROTOCOL
* - URL_ERROR_NO_PROTOCOL
* - URL_ERROR_NO_HOST
- *
*/
extern herror_t hurl_parse(struct hurl_t * obj, const char *url);
-/**
- *
- * Frees the resources within a url and the url itself.
+/** This function frees the resources within a url and the url itself.
*
* @param url pointer to an hurl_t
- *
*/
extern void hurl_free(struct hurl_t *url);
@@ -125,4 +106,6 @@ extern void hurl_free(struct hurl_t *url);
}
#endif
+/**@}*/
+
#endif
diff --git a/wsdl2c/Makefile.in b/wsdl2c/Makefile.in
index f578d17..1a15ccf 100644
--- a/wsdl2c/Makefile.in
+++ b/wsdl2c/Makefile.in
@@ -15,7 +15,7 @@
@SET_MAKE@
#
-# $Revision: 1.1 $
+# $Revision: 1.2 $
#
srcdir = @srcdir@