removed many debugging messages from httpd

This commit is contained in:
hyung-hwan 2013-02-22 05:01:33 +00:00
parent 394cb34c04
commit 624a917b45
15 changed files with 249 additions and 118 deletions

View File

@ -35,6 +35,7 @@
#include <stdarg.h> #include <stdarg.h>
#include <stdlib.h> #include <stdlib.h>
#include <locale.h> #include <locale.h>
#include <stdio.h>
#define ENABLE_CALLBACK #define ENABLE_CALLBACK
#define ABORT(label) goto label #define ABORT(label) goto label

View File

@ -5,6 +5,10 @@ AM_CPPFLAGS = \
-I$(top_srcdir)/include \ -I$(top_srcdir)/include \
-I$(includedir) -I$(includedir)
qsecfgdir = $(sysconfdir)/qse
qsecfg_DATA = httpd.conf httpd-mime.conf
bin_PROGRAMS = qsehttpd bin_PROGRAMS = qsehttpd
qsehttpd_SOURCES = httpd.c qsehttpd_SOURCES = httpd.c

View File

@ -15,6 +15,7 @@
@SET_MAKE@ @SET_MAKE@
VPATH = @srcdir@ VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@ pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@
@ -51,7 +52,7 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/include/qse/config.h CONFIG_HEADER = $(top_builddir)/include/qse/config.h
CONFIG_CLEAN_FILES = CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES = CONFIG_CLEAN_VPATH_FILES =
am__installdirs = "$(DESTDIR)$(bindir)" am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(qsecfgdir)"
PROGRAMS = $(bin_PROGRAMS) PROGRAMS = $(bin_PROGRAMS)
am_qsehttpd_OBJECTS = httpd.$(OBJEXT) am_qsehttpd_OBJECTS = httpd.$(OBJEXT)
qsehttpd_OBJECTS = $(am_qsehttpd_OBJECTS) qsehttpd_OBJECTS = $(am_qsehttpd_OBJECTS)
@ -92,6 +93,34 @@ am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(qsehttpd_SOURCES) SOURCES = $(qsehttpd_SOURCES)
DIST_SOURCES = $(qsehttpd_SOURCES) DIST_SOURCES = $(qsehttpd_SOURCES)
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
am__install_max = 40
am__nobase_strip_setup = \
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
for p in $$list; do echo "$$p $$p"; done | \
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
if (++n[$$2] == $(am__install_max)) \
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
END { for (dir in files) print dir, files[dir] }'
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__uninstall_files_from_dir = { \
test -z "$$files" \
|| { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
$(am__cd) "$$dir" && rm -f $$files; }; \
}
DATA = $(qsecfg_DATA)
ETAGS = etags ETAGS = etags
CTAGS = ctags CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@ -275,6 +304,8 @@ AM_CPPFLAGS = \
-I$(top_srcdir)/include \ -I$(top_srcdir)/include \
-I$(includedir) -I$(includedir)
qsecfgdir = $(sysconfdir)/qse
qsecfg_DATA = httpd.conf httpd-mime.conf
qsehttpd_SOURCES = httpd.c qsehttpd_SOURCES = httpd.c
qsehttpd_LDFLAGS = -L../../lib/xli -L../../lib/http -L../../lib/cmn -L$(libdir) qsehttpd_LDFLAGS = -L../../lib/xli -L../../lib/http -L../../lib/cmn -L$(libdir)
qsehttpd_LDADD = -lqsexli -lqsehttp -lqsecmn $(am__append_1) qsehttpd_LDADD = -lqsexli -lqsehttp -lqsecmn $(am__append_1)
@ -393,6 +424,24 @@ mostlyclean-libtool:
clean-libtool: clean-libtool:
-rm -rf .libs _libs -rm -rf .libs _libs
install-qsecfgDATA: $(qsecfg_DATA)
@$(NORMAL_INSTALL)
test -z "$(qsecfgdir)" || $(MKDIR_P) "$(DESTDIR)$(qsecfgdir)"
@list='$(qsecfg_DATA)'; test -n "$(qsecfgdir)" || list=; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
while read files; do \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(qsecfgdir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(qsecfgdir)" || exit $$?; \
done
uninstall-qsecfgDATA:
@$(NORMAL_UNINSTALL)
@list='$(qsecfg_DATA)'; test -n "$(qsecfgdir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
dir='$(DESTDIR)$(qsecfgdir)'; $(am__uninstall_files_from_dir)
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
@ -478,9 +527,9 @@ distdir: $(DISTFILES)
done done
check-am: all-am check-am: all-am
check: check-am check: check-am
all-am: Makefile $(PROGRAMS) all-am: Makefile $(PROGRAMS) $(DATA)
installdirs: installdirs:
for dir in "$(DESTDIR)$(bindir)"; do \ for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(qsecfgdir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done done
install: install-am install: install-am
@ -535,7 +584,7 @@ info: info-am
info-am: info-am:
install-data-am: install-data-am: install-qsecfgDATA
install-dvi: install-dvi-am install-dvi: install-dvi-am
@ -581,7 +630,7 @@ ps: ps-am
ps-am: ps-am:
uninstall-am: uninstall-binPROGRAMS uninstall-am: uninstall-binPROGRAMS uninstall-qsecfgDATA
.MAKE: install-am install-strip .MAKE: install-am install-strip
@ -593,11 +642,11 @@ uninstall-am: uninstall-binPROGRAMS
install-dvi-am install-exec install-exec-am install-html \ install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \ install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-ps install-ps-am \ install-pdf install-pdf-am install-ps install-ps-am \
install-strip installcheck installcheck-am installdirs \ install-qsecfgDATA install-strip installcheck installcheck-am \
maintainer-clean maintainer-clean-generic mostlyclean \ installdirs maintainer-clean maintainer-clean-generic \
mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ mostlyclean mostlyclean-compile mostlyclean-generic \
pdf pdf-am ps ps-am tags uninstall uninstall-am \ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
uninstall-binPROGRAMS uninstall-am uninstall-binPROGRAMS uninstall-qsecfgDATA
# Tell versions [3.59,3.63) of GNU make to not export all variables. # Tell versions [3.59,3.63) of GNU make to not export all variables.

View File

@ -12,6 +12,7 @@
#include <signal.h> #include <signal.h>
#include <locale.h> #include <locale.h>
#include <stdio.h>
#if defined(_WIN32) #if defined(_WIN32)
# include <winsock2.h> # include <winsock2.h>
@ -72,69 +73,57 @@ static void sig_reconf (int sig)
} }
} }
static void setup_signal_handler (int signum, void(*handler)(int))
{
#if defined(HAVE_SIGACTION)
struct sigaction act;
qse_memset (&act, 0, QSE_SIZEOF(act));
act.sa_handler = handler;
sigaction (signum, &act, QSE_NULL);
#else
signal (signum, handler);
#endif
}
static void setup_signal_handlers () static void setup_signal_handlers ()
{ {
struct sigaction act;
#if defined(SIGINT) #if defined(SIGINT)
qse_memset (&act, 0, QSE_SIZEOF(act)); setup_signal_handler (SIGINT, sig_stop);
act.sa_handler = sig_stop;
sigaction (SIGINT, &act, QSE_NULL);
#endif #endif
#if defined(SIGTERM) #if defined(SIGTERM)
qse_memset (&act, 0, QSE_SIZEOF(act)); setup_signal_handler (SIGTERM, sig_stop);
act.sa_handler = sig_stop;
sigaction (SIGTERM, &act, QSE_NULL);
#endif #endif
#if defined(SIGHUP) #if defined(SIGHUP)
qse_memset (&act, 0, QSE_SIZEOF(act)); setup_signal_handler (SIGHUP, sig_reconf);
act.sa_handler = sig_reconf;
sigaction (SIGHUP, &act, QSE_NULL);
#endif #endif
#if defined(SIGUSR1) #if defined(SIGUSR1)
qse_memset (&act, 0, QSE_SIZEOF(act)); setup_signal_handler (SIGUSR1, sig_reconf);
act.sa_handler = sig_reconf;
sigaction (SIGUSR1, &act, QSE_NULL);
#endif #endif
#if defined(SIGPIPE) #if defined(SIGPIPE)
qse_memset (&act, 0, QSE_SIZEOF(act)); setup_signal_handler (SIGPIPE, SIG_IGN);
act.sa_handler = SIG_IGN;
sigaction (SIGPIPE, &act, QSE_NULL);
#endif #endif
} }
static void restore_signal_handlers () static void restore_signal_handlers ()
{ {
struct sigaction act;
#if defined(SIGINT) #if defined(SIGINT)
qse_memset (&act, 0, QSE_SIZEOF(act)); setup_signal_handler (SIGINT, SIG_DFL);
act.sa_handler = SIG_DFL;
sigaction (SIGINT, &act, QSE_NULL);
#endif #endif
#if defined(SIGTERM) #if defined(SIGTERM)
qse_memset (&act, 0, QSE_SIZEOF(act)); setup_signal_handler (SIGTERM, SIG_DFL);
act.sa_handler = SIG_DFL;
sigaction (SIGTERM, &act, QSE_NULL);
#endif #endif
#if defined(SIGHUP) #if defined(SIGHUP)
qse_memset (&act, 0, QSE_SIZEOF(act)); setup_signal_handler (SIGHUP, SIG_DFL);
act.sa_handler = SIG_DFL;
sigaction (SIGHUP, &act, QSE_NULL);
#endif #endif
#if defined(SIGUSR1) #if defined(SIGUSR1)
qse_memset (&act, 0, QSE_SIZEOF(act)); setup_signal_handler (SIGUSR1, SIG_DFL);
act.sa_handler = SIG_DFL;
sigaction (SIGUSR1, &act, QSE_NULL);
#endif #endif
#if defined(SIGPIPE) #if defined(SIGPIPE)
qse_memset (&act, 0, QSE_SIZEOF(act)); setup_signal_handler (SIGPIPE, SIG_DFL);
act.sa_handler = SIG_DFL;
sigaction (SIGPIPE, &act, QSE_NULL);
#endif #endif
} }
@ -192,6 +181,7 @@ enum
struct cgi_t struct cgi_t
{ {
enum { enum {
CGI_PREFIX,
CGI_SUFFIX, CGI_SUFFIX,
CGI_NAME, CGI_NAME,
CGI_MAX CGI_MAX
@ -207,6 +197,7 @@ struct cgi_t
struct mime_t struct mime_t
{ {
enum { enum {
MIME_PREFIX,
MIME_SUFFIX, MIME_SUFFIX,
MIME_NAME, MIME_NAME,
MIME_OTHER, MIME_OTHER,
@ -224,6 +215,7 @@ struct access_t
/* TODO: support more types like ACCESS_GLOB /* TODO: support more types like ACCESS_GLOB
not-only the base name, find a way to use query path or xpath */ not-only the base name, find a way to use query path or xpath */
enum { enum {
ACCESS_PREFIX,
ACCESS_SUFFIX, ACCESS_SUFFIX,
ACCESS_NAME, ACCESS_NAME,
ACCESS_OTHER, ACCESS_OTHER,
@ -490,7 +482,8 @@ static int query_server (
struct cgi_t* cgi; struct cgi_t* cgi;
for (cgi = server_xtn->cgi[i].head; cgi; cgi = cgi->next) for (cgi = server_xtn->cgi[i].head; cgi; cgi = cgi->next)
{ {
if ((cgi->type == CGI_SUFFIX && qse_mbsend (xpath_base, cgi->spec)) || if ((cgi->type == CGI_PREFIX && qse_mbsbeg (xpath_base, cgi->spec)) ||
(cgi->type == CGI_SUFFIX && qse_mbsend (xpath_base, cgi->spec)) ||
(cgi->type == CGI_NAME && qse_mbscmp (xpath_base, cgi->spec) == 0)) (cgi->type == CGI_NAME && qse_mbscmp (xpath_base, cgi->spec) == 0))
{ {
scgi->cgi = 1; scgi->cgi = 1;
@ -517,7 +510,8 @@ static int query_server (
struct mime_t* mime; struct mime_t* mime;
for (mime = server_xtn->mime[i].head; mime; mime = mime->next) for (mime = server_xtn->mime[i].head; mime; mime = mime->next)
{ {
if ((mime->type == MIME_SUFFIX && qse_mbsend (xpath_base, mime->spec)) || if ((mime->type == MIME_PREFIX && qse_mbsbeg (xpath_base, mime->spec)) ||
(mime->type == MIME_SUFFIX && qse_mbsend (xpath_base, mime->spec)) ||
(mime->type == MIME_NAME && qse_mbscmp (xpath_base, mime->spec) == 0) || (mime->type == MIME_NAME && qse_mbscmp (xpath_base, mime->spec) == 0) ||
mime->type == MIME_OTHER) mime->type == MIME_OTHER)
{ {
@ -546,7 +540,8 @@ static int query_server (
struct access_t* access; struct access_t* access;
for (access = server_xtn->access[id][i].head; access; access = access->next) for (access = server_xtn->access[id][i].head; access; access = access->next)
{ {
if ((access->type == ACCESS_SUFFIX && qse_mbsend (xpath_base, access->spec)) || if ((access->type == ACCESS_PREFIX && qse_mbsbeg (xpath_base, access->spec)) ||
(access->type == ACCESS_SUFFIX && qse_mbsend (xpath_base, access->spec)) ||
(access->type == ACCESS_NAME && qse_mbscmp (xpath_base, access->spec) == 0) || (access->type == ACCESS_NAME && qse_mbscmp (xpath_base, access->spec) == 0) ||
access->type == ACCESS_OTHER) access->type == ACCESS_OTHER)
{ {
@ -645,14 +640,9 @@ static int load_server_config (
struct cgi_t* cgi; struct cgi_t* cgi;
int type; int type;
if (qse_strcmp (pair->key, QSE_T("suffix")) == 0) if (qse_strcmp (pair->key, QSE_T("prefix")) == 0) type = CGI_PREFIX;
{ else if (qse_strcmp (pair->key, QSE_T("suffix")) == 0) type = CGI_SUFFIX;
type = CGI_SUFFIX; else if (qse_strcmp (pair->key, QSE_T("name")) == 0) type = CGI_NAME;
}
else if (qse_strcmp (pair->key, QSE_T("name")) == 0)
{
type = CGI_NAME;
}
else continue; else continue;
cgi = qse_httpd_callocmem (httpd, QSE_SIZEOF(*cgi)); cgi = qse_httpd_callocmem (httpd, QSE_SIZEOF(*cgi));
@ -726,7 +716,8 @@ static int load_server_config (
struct mime_t* mime; struct mime_t* mime;
int type; int type;
if (qse_strcmp (pair->key, QSE_T("suffix")) == 0 && pair->name) type = MIME_SUFFIX; if (qse_strcmp (pair->key, QSE_T("prefix")) == 0 && pair->name) type = MIME_PREFIX;
else if (qse_strcmp (pair->key, QSE_T("suffix")) == 0 && pair->name) type = MIME_SUFFIX;
else if (qse_strcmp (pair->key, QSE_T("name")) == 0 && pair->name) type = MIME_NAME; else if (qse_strcmp (pair->key, QSE_T("name")) == 0 && pair->name) type = MIME_NAME;
else if (qse_strcmp (pair->key, QSE_T("other")) == 0 && !pair->name) type = MIME_OTHER; else if (qse_strcmp (pair->key, QSE_T("other")) == 0 && !pair->name) type = MIME_OTHER;
else continue; else continue;
@ -793,7 +784,8 @@ static int load_server_config (
const qse_char_t* tmp; const qse_char_t* tmp;
int type, value; int type, value;
if (qse_strcmp (pair->key, QSE_T("suffix")) == 0 && pair->name) type = ACCESS_SUFFIX; if (qse_strcmp (pair->key, QSE_T("prefix")) == 0 && pair->name) type = ACCESS_PREFIX;
else if (qse_strcmp (pair->key, QSE_T("suffix")) == 0 && pair->name) type = ACCESS_SUFFIX;
else if (qse_strcmp (pair->key, QSE_T("name")) == 0 && pair->name) type = ACCESS_NAME; else if (qse_strcmp (pair->key, QSE_T("name")) == 0 && pair->name) type = ACCESS_NAME;
else if (qse_strcmp (pair->key, QSE_T("other")) == 0 && !pair->name) type = ACCESS_OTHER; else if (qse_strcmp (pair->key, QSE_T("other")) == 0 && !pair->name) type = ACCESS_OTHER;
else continue; else continue;

View File

@ -17,9 +17,9 @@ default {
"index.cgi"; "index.cgi";
cgi { cgi {
name "t3.nph" = "nph"; #name "t3.nph" = "nph";
suffix ".cgi"; suffix ".cgi";
suffix ".ant" = "nph", ""; suffix ".nph" = "nph";
suffix ".awk" = "cgi", "/usr/bin/qseawk -f"; suffix ".awk" = "cgi", "/usr/bin/qseawk -f";
# glob is not supported yet # glob is not supported yet
@ -32,20 +32,22 @@ default {
# control access to directories # control access to directories
dir-access { dir-access {
#prefix ".xxxx" = ok;
#suffix ".xxxx" = ok; #suffix ".xxxx" = ok;
#name "xxxxx" = ok; #name "xxxxx" = ok;
other = noent; #other = noent;
} }
# control access to normal files. # control access to normal files.
# cgi scripts are not control by these. # cgi scripts are not control by these.
file-access { file-access {
#prefix "index.html." = ok;
suffix ".html" = ok; suffix ".html" = ok;
suffix ".css" = ok; suffix ".css" = ok;
suffix ".js" = ok; suffix ".js" = ok;
suffix ".png" = ok; suffix ".png" = ok;
suffix ".jpg" = ok; suffix ".jpg" = ok;
other = noent; #other = noent;
} }
dir-css = "<style type='text/css'>body { background-color:#d0e4fe; font-size: 0.9em; } div.header { font-weight: bold; margin-bottom: 5px; } div.footer { border-top: 1px solid #99AABB; text-align: right; } table { font-size: 0.9em; } td { white-space: nowrap; } td.size { text-align: right; }</style>"; dir-css = "<style type='text/css'>body { background-color:#d0e4fe; font-size: 0.9em; } div.header { font-weight: bold; margin-bottom: 5px; } div.footer { border-top: 1px solid #99AABB; text-align: right; } table { font-size: 0.9em; } td { white-space: nowrap; } td.size { text-align: right; }</style>";

View File

@ -33,6 +33,7 @@
#include <qse/cmn/glob.h> #include <qse/cmn/glob.h>
#include <locale.h> #include <locale.h>
#include <stdio.h>
#if defined(_WIN32) #if defined(_WIN32)
# include <windows.h> # include <windows.h>

12
qse/configure vendored
View File

@ -17618,6 +17618,18 @@ _ACEOF
fi fi
done done
for ac_func in _vsnprintf _vsnwprintf
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
cat >>confdefs.h <<_ACEOF
#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
fi
done
OLDLIBS="$LIBS" OLDLIBS="$LIBS"
LIBS="$LIBM $LIBS" LIBS="$LIBM $LIBS"

View File

@ -136,6 +136,7 @@ AC_CHECK_FUNCS([backtrace backtrace_symbols])
AC_CHECK_FUNCS([fdopendir]) AC_CHECK_FUNCS([fdopendir])
AC_CHECK_FUNCS([fork vfork posix_spawn gettid nanosleep select]) AC_CHECK_FUNCS([fork vfork posix_spawn gettid nanosleep select])
AC_CHECK_FUNCS([makecontext swapcontext getcontext setcontext]) AC_CHECK_FUNCS([makecontext swapcontext getcontext setcontext])
AC_CHECK_FUNCS([_vsnprintf _vsnwprintf])
OLDLIBS="$LIBS" OLDLIBS="$LIBS"
LIBS="$LIBM $LIBS" LIBS="$LIBM $LIBS"

View File

@ -568,6 +568,12 @@
/* This value is set to 1 to indicate that the system argz facility works */ /* This value is set to 1 to indicate that the system argz facility works */
#undef HAVE_WORKING_ARGZ #undef HAVE_WORKING_ARGZ
/* Define to 1 if you have the `_vsnprintf' function. */
#undef HAVE__VSNPRINTF
/* Define to 1 if you have the `_vsnwprintf' function. */
#undef HAVE__VSNWPRINTF
/* Define if the OS needs help to load dependent libraries for dlopen(). */ /* Define if the OS needs help to load dependent libraries for dlopen(). */
#undef LTDL_DLOPEN_DEPLIBS #undef LTDL_DLOPEN_DEPLIBS

View File

@ -106,7 +106,7 @@ enum qse_xli_atom_type_t
typedef enum qse_xli_atom_type_t qse_xli_atom_type_t; typedef enum qse_xli_atom_type_t qse_xli_atom_type_t;
#define QSE_XLI_VAL_HDR \ #define QSE_XLI_VAL_HDR \
qse_xli_val_type_t type; qse_xli_val_type_t type
struct qse_xli_val_t struct qse_xli_val_t
{ {
@ -500,7 +500,7 @@ QSE_EXPORT qse_xli_pair_t* qse_xli_insertpairwithstr (
); );
qse_xli_pair_t* qse_xli_findpairbyname ( QSE_EXPORT qse_xli_pair_t* qse_xli_findpairbyname (
qse_xli_t* xli, qse_xli_t* xli,
const qse_xli_list_t* list, const qse_xli_list_t* list,
const qse_char_t* name const qse_char_t* name

View File

@ -161,13 +161,13 @@ int qse_vsprintf (qse_char_t* buf, qse_size_t size, const qse_char_t* fmt, va_li
if (nf == NULL) return -1; if (nf == NULL) return -1;
#if defined(QSE_CHAR_IS_MCHAR) #if defined(QSE_CHAR_IS_MCHAR)
#if defined(_MSC_VER) || defined(__BORLANDC__) || (defined(__WATCOMC__) && (__WATCOMC__ < 1200)) #if defined(_MSC_VER) || defined(__BORLANDC__) || (defined(__WATCOMC__) && (__WATCOMC__ < 1200)) || defined(HAVE__VSNPRINTF)
n = _vsnprintf (buf, size, nf, ap); n = _vsnprintf (buf, size, nf, ap);
#else #else
n = vsnprintf (buf, size, nf, ap); n = vsnprintf (buf, size, nf, ap);
#endif #endif
#else #else
#if defined(_MSC_VER) || defined(__BORLANDC__) || (defined(__WATCOMC__) && (__WATCOMC__ < 1200)) #if defined(_MSC_VER) || defined(__BORLANDC__) || (defined(__WATCOMC__) && (__WATCOMC__ < 1200)) || defined(HAVE__VSNWPRINTF)
n = _vsnwprintf (buf, size, nf, ap); n = _vsnwprintf (buf, size, nf, ap);
#else #else
n = vswprintf (buf, size, nf, ap); n = vswprintf (buf, size, nf, ap);

View File

@ -24,8 +24,6 @@
#include <qse/cmn/str.h> #include <qse/cmn/str.h>
#include <qse/cmn/fmt.h> #include <qse/cmn/fmt.h>
#include <stdio.h> /* TODO: remove this.*/
typedef struct task_proxy_arg_t task_proxy_arg_t; typedef struct task_proxy_arg_t task_proxy_arg_t;
struct task_proxy_arg_t struct task_proxy_arg_t
{ {
@ -96,6 +94,17 @@ struct proxy_peer_htrd_xtn_t
qse_httpd_task_t* task; qse_httpd_task_t* task;
}; };
static void log_proxy_error (task_proxy_t* proxy, const qse_mchar_t* shortmsg)
{
qse_httpd_act_t msg;
qse_size_t pos = 0;
msg.code = QSE_HTTPD_CATCH_MERRMSG;
pos += qse_mbsxcpy (&msg.u.merrmsg[pos], QSE_COUNTOF(msg.u.merrmsg) - pos, shortmsg);
pos += qse_nwadtombs (&proxy->peer.nwad, &msg.u.merrmsg[pos], QSE_COUNTOF(msg.u.merrmsg) - pos, QSE_NWADTOMBS_ALL);
proxy->httpd->opt.rcb.logact (proxy->httpd, &msg);
}
static int proxy_add_header_to_buffer ( static int proxy_add_header_to_buffer (
task_proxy_t* proxy, qse_mbs_t* buf, const qse_mchar_t* key, const qse_htre_hdrval_t* val) task_proxy_t* proxy, qse_mbs_t* buf, const qse_mchar_t* key, const qse_htre_hdrval_t* val)
{ {
@ -182,8 +191,10 @@ static int proxy_snatch_client_input (
task = (qse_httpd_task_t*)ctx; task = (qse_httpd_task_t*)ctx;
proxy = (task_proxy_t*)task->ctx; proxy = (task_proxy_t*)task->ctx;
#if 0
if (ptr) qse_printf (QSE_T("!!!PROXY SNATCHING [%.*hs]\n"), len, ptr); if (ptr) qse_printf (QSE_T("!!!PROXY SNATCHING [%.*hs]\n"), len, ptr);
else qse_printf (QSE_T("!!!PROXY SNATCHING DONE\n")); else qse_printf (QSE_T("!!!PROXY SNATCHING DONE\n"));
#endif
if (ptr == QSE_NULL) if (ptr == QSE_NULL)
{ {
@ -260,7 +271,9 @@ else qse_printf (QSE_T("!!!PROXY SNATCHING DONE\n"));
} }
task->trigger[0].mask |= QSE_HTTPD_TASK_TRIGGER_WRITE; task->trigger[0].mask |= QSE_HTTPD_TASK_TRIGGER_WRITE;
#if 0
qse_printf (QSE_T("!!!PROXY SNATCHED [%.*hs]\n"), len, ptr); qse_printf (QSE_T("!!!PROXY SNATCHED [%.*hs]\n"), len, ptr);
#endif
} }
return 0; return 0;
@ -295,7 +308,9 @@ static int proxy_snatch_peer_output (
QSE_ASSERT (len == 0); QSE_ASSERT (len == 0);
#if 0
qse_printf (QSE_T("PROXY GOT ALL RESPONSE>>>>>>>\n")); qse_printf (QSE_T("PROXY GOT ALL RESPONSE>>>>>>>\n"));
#endif
if (qse_mbs_cat (proxy->res, QSE_MT("0\r\n")) == (qse_size_t)-1 || if (qse_mbs_cat (proxy->res, QSE_MT("0\r\n")) == (qse_size_t)-1 ||
qse_htre_walktrailers (req, proxy_capture_peer_trailer, proxy) <= -1 || qse_htre_walktrailers (req, proxy_capture_peer_trailer, proxy) <= -1 ||
@ -353,7 +368,8 @@ static int proxy_htrd_peek_peer_output (qse_htrd_t* htrd, qse_htre_t* res)
if ((proxy->resflags & PROXY_RES_AWAIT_100) && qse_htre_getscodeval(res) == 100) if ((proxy->resflags & PROXY_RES_AWAIT_100) && qse_htre_getscodeval(res) == 100)
{ {
/* TODO: check if the request contained Expect... */ /* TODO: check if the request contained Expect... */
qse_printf (QSE_T("10000000000000000000000000000 CONTINUE 10000000000000000000000000000000\n"));
/* 100 continue */
proxy->resflags &= ~PROXY_RES_AWAIT_100; proxy->resflags &= ~PROXY_RES_AWAIT_100;
proxy->resflags |= PROXY_RES_RECEIVED_100; proxy->resflags |= PROXY_RES_RECEIVED_100;
@ -381,7 +397,9 @@ qse_printf (QSE_T("10000000000000000000000000000 CONTINUE 1000000000000000000000
proxy->resflags &= ~PROXY_RES_AWAIT_RESHDR; proxy->resflags &= ~PROXY_RES_AWAIT_RESHDR;
proxy->resflags |= PROXY_RES_RECEIVED_RESHDR; proxy->resflags |= PROXY_RES_RECEIVED_RESHDR;
#if 0
qse_printf (QSE_T("NORMAL REPLY 222222222222222222222 NORMAL REPLY\n")); qse_printf (QSE_T("NORMAL REPLY 222222222222222222222 NORMAL REPLY\n"));
#endif
keepalive = proxy->keepalive; keepalive = proxy->keepalive;
if (res->attr.flags & QSE_HTRE_ATTR_LENGTH) if (res->attr.flags & QSE_HTRE_ATTR_LENGTH)
@ -521,8 +539,9 @@ qse_printf (QSE_T("NORMAL REPLY 222222222222222222222 NORMAL REPLY\n"));
if ((proxy->resflags & PROXY_RES_PEER_LENGTH) && if ((proxy->resflags & PROXY_RES_PEER_LENGTH) &&
proxy->peer_output_received > proxy->peer_output_length) proxy->peer_output_received > proxy->peer_output_length)
{ {
/* TODO: logging?? */ if (proxy->httpd->opt.trait & QSE_HTTPD_LOGACT)
qse_printf (QSE_T("PROXY PEER FUCKED - RETURNING TOO MUCH...\n")); log_proxy_error (proxy, "proxy redundant output - ");
proxy->httpd->errnum = QSE_HTTPD_EINVAL; /* TODO: change it to a better error code */ proxy->httpd->errnum = QSE_HTTPD_EINVAL; /* TODO: change it to a better error code */
return -1; return -1;
} }
@ -565,7 +584,9 @@ qse_printf (QSE_T("PROXY PEER FUCKED - RETURNING TOO MUCH...\n"));
/* arrange to store further contents received to proxy->res */ /* arrange to store further contents received to proxy->res */
qse_htre_setconcb (res, proxy_snatch_peer_output, xtn->task); qse_htre_setconcb (res, proxy_snatch_peer_output, xtn->task);
} }
#if 0
qse_printf (QSE_T("NORMAL REPLY 222222222222222222222 NORMAL REPLY OK\n")); qse_printf (QSE_T("NORMAL REPLY 222222222222222222222 NORMAL REPLY OK\n"));
#endif
} }
proxy->res_pending = QSE_MBS_LEN(proxy->res) - proxy->res_consumed; proxy->res_pending = QSE_MBS_LEN(proxy->res) - proxy->res_consumed;
@ -574,7 +595,7 @@ qse_printf (QSE_T("NORMAL REPLY 222222222222222222222 NORMAL REPLY OK\n"));
static int proxy_htrd_handle_peer_output (qse_htrd_t* htrd, qse_htre_t* req) static int proxy_htrd_handle_peer_output (qse_htrd_t* htrd, qse_htre_t* req)
{ {
qse_printf (QSE_T("FINISHED READING RESPONSE...\n")); /* finished reading response from the peer */
return 0; return 0;
} }
@ -599,7 +620,6 @@ static void proxy_forward_client_input_to_peer (
{ {
/* a forwarding error has occurred previously. /* a forwarding error has occurred previously.
* clear the forwarding buffer */ * clear the forwarding buffer */
qse_printf (QSE_T("FORWARD: CLEARING REQCON FOR ERROR\n"));
qse_mbs_clear (proxy->reqfwdbuf); qse_mbs_clear (proxy->reqfwdbuf);
} }
else else
@ -610,14 +630,18 @@ qse_printf (QSE_T("FORWARD: CLEARING REQCON FOR ERROR\n"));
if (writable) goto forward; if (writable) goto forward;
n = httpd->opt.scb.mux.writable (httpd, proxy->peer.handle, 0); n = httpd->opt.scb.mux.writable (httpd, proxy->peer.handle, 0);
#if 0
if (n == 0) qse_printf (QSE_T("PROXY FORWARD: @@@@@@@@@NOT WRITABLE\n")); if (n == 0) qse_printf (QSE_T("PROXY FORWARD: @@@@@@@@@NOT WRITABLE\n"));
#endif
if (n >= 1) if (n >= 1)
{ {
forward: forward:
/* writable */ /* writable */
#if 0
qse_printf (QSE_T("PROXY FORWARD: @@@@@@@@@@WRITING[%.*hs]\n"), qse_printf (QSE_T("PROXY FORWARD: @@@@@@@@@@WRITING[%.*hs]\n"),
(int)QSE_MBS_LEN(proxy->reqfwdbuf), (int)QSE_MBS_LEN(proxy->reqfwdbuf),
QSE_MBS_PTR(proxy->reqfwdbuf)); QSE_MBS_PTR(proxy->reqfwdbuf));
#endif
n = httpd->opt.scb.peer.send ( n = httpd->opt.scb.peer.send (
httpd, &proxy->peer, httpd, &proxy->peer,
QSE_MBS_PTR(proxy->reqfwdbuf), QSE_MBS_PTR(proxy->reqfwdbuf),
@ -639,8 +663,9 @@ to the head all the time.. grow the buffer to a certain limit. */
if (n <= -1) if (n <= -1)
{ {
qse_printf (QSE_T("PROXY FORWARD: @@@@@@@@WRITE TO PROXY FAILED\n")); if (httpd->opt.trait & QSE_HTTPD_LOGACT)
/* TODO: logging ... */ log_proxy_error (proxy, "proxy send-to-peer error - ");
proxy->reqflags |= PROXY_REQ_FWDERR; proxy->reqflags |= PROXY_REQ_FWDERR;
qse_mbs_clear (proxy->reqfwdbuf); qse_mbs_clear (proxy->reqfwdbuf);
if (proxy->req) if (proxy->req)
@ -662,7 +687,6 @@ qse_printf (QSE_T("PROXY FORWARD: @@@@@@@@WRITE TO PROXY FAILED\n"));
* there is nothing more to forward in the forwarding buffer. * there is nothing more to forward in the forwarding buffer.
* clear the read and write triggers. * clear the read and write triggers.
*/ */
qse_printf (QSE_T("FORWARD: @@@@@@@@NOTHING MORE TO WRITE TO PROXY\n"));
task->trigger[0].mask &= ~QSE_HTTPD_TASK_TRIGGER_WRITE; /* peer */ task->trigger[0].mask &= ~QSE_HTTPD_TASK_TRIGGER_WRITE; /* peer */
task->trigger[2].mask = 0; /* client-side */ task->trigger[2].mask = 0; /* client-side */
} }
@ -697,7 +721,7 @@ static int task_init_proxy (
* -------------------------------------------------------------------- */ * -------------------------------------------------------------------- */
/* TODO: DETERMINE THIS SIZE */ /* TODO: DETERMINE THIS SIZE */
len = 1024; len = 2048;
proxy->reqfwdbuf = qse_mbs_open (httpd->mmgr, 0, (len < 512? 512: len)); proxy->reqfwdbuf = qse_mbs_open (httpd->mmgr, 0, (len < 512? 512: len));
if (proxy->reqfwdbuf == QSE_NULL) goto oops; if (proxy->reqfwdbuf == QSE_NULL) goto oops;
@ -845,7 +869,9 @@ len = 1024;
* triggers in the task initializer. however the main task handler * triggers in the task initializer. however the main task handler
* will be invoked so long as the client handle is writable by * will be invoked so long as the client handle is writable by
* the main loop. */ * the main loop. */
#if 0
qse_printf (QSE_T("GOING TO PROXY [%hs]\n"), QSE_MBS_PTR(proxy->reqfwdbuf)); qse_printf (QSE_T("GOING TO PROXY [%hs]\n"), QSE_MBS_PTR(proxy->reqfwdbuf));
#endif
task->ctx = proxy; task->ctx = proxy;
return 0; return 0;
@ -885,8 +911,10 @@ static int task_main_proxy_5 (
task_proxy_t* proxy = (task_proxy_t*)task->ctx; task_proxy_t* proxy = (task_proxy_t*)task->ctx;
qse_ssize_t n; qse_ssize_t n;
#if 0
qse_printf (QSE_T("task_main_proxy_5 trigger[0].mask=%d trigger[1].mask=%d trigger[2].mask=%d\n"), qse_printf (QSE_T("task_main_proxy_5 trigger[0].mask=%d trigger[1].mask=%d trigger[2].mask=%d\n"),
task->trigger[0].mask, task->trigger[1].mask, task->trigger[2].mask); task->trigger[0].mask, task->trigger[1].mask, task->trigger[2].mask);
#endif
if (task->trigger[2].mask & QSE_HTTPD_TASK_TRIGGER_READABLE) if (task->trigger[2].mask & QSE_HTTPD_TASK_TRIGGER_READABLE)
{ {
@ -905,12 +933,13 @@ qse_printf (QSE_T("task_main_proxy_5 trigger[0].mask=%d trigger[1].mask=%d trigg
if (proxy->buflen > 0) if (proxy->buflen > 0)
{ {
/* TODO: check if proxy outputs more than content-length if it is set... */ /* TODO: check if proxy outputs more than content-length if it is set... */
httpd->errnum = QSE_HTTPD_ENOERR;
n = httpd->opt.scb.client.send (httpd, client, proxy->buf, proxy->buflen); n = httpd->opt.scb.client.send (httpd, client, proxy->buf, proxy->buflen);
if (n <= -1) if (n <= -1)
{ {
/* can't return internal server error any more... */ /* can't return internal server error any more... */
/* TODO: logging ... */ if (proxy->httpd->opt.trait & QSE_HTTPD_LOGACT)
log_proxy_error (proxy, "proxy send-to-client error - ");
return -1; return -1;
} }
@ -931,8 +960,10 @@ static int task_main_proxy_4 (
{ {
task_proxy_t* proxy = (task_proxy_t*)task->ctx; task_proxy_t* proxy = (task_proxy_t*)task->ctx;
#if 0
qse_printf (QSE_T("task_main_proxy_4 trigger[0].mask=%d trigger[1].mask=%d trigger[2].mask=%d\n"), qse_printf (QSE_T("task_main_proxy_4 trigger[0].mask=%d trigger[1].mask=%d trigger[2].mask=%d\n"),
task->trigger[0].mask, task->trigger[1].mask, task->trigger[2].mask); task->trigger[0].mask, task->trigger[1].mask, task->trigger[2].mask);
#endif
if (task->trigger[2].mask & QSE_HTTPD_TASK_TRIGGER_READABLE) if (task->trigger[2].mask & QSE_HTTPD_TASK_TRIGGER_READABLE)
{ {
@ -943,25 +974,25 @@ qse_printf (QSE_T("task_main_proxy_4 trigger[0].mask=%d trigger[1].mask=%d trigg
proxy_forward_client_input_to_peer (httpd, task, 1); proxy_forward_client_input_to_peer (httpd, task, 1);
} }
qse_printf (QSE_T("task_main_proxy_4 about to read from PEER...\n"));
if (task->trigger[0].mask & QSE_HTTPD_TASK_TRIGGER_READABLE) if (task->trigger[0].mask & QSE_HTTPD_TASK_TRIGGER_READABLE)
{ {
qse_ssize_t n; qse_ssize_t n;
if (proxy->buflen < QSE_SIZEOF(proxy->buf)) if (proxy->buflen < QSE_SIZEOF(proxy->buf))
{ {
qse_printf (QSE_T("task_main_proxy_4 reading from PEER... %d %d\n"), (int)proxy->peer_output_length, (int)proxy->peer_output_received); /* reading from the peer */
httpd->errnum = QSE_HTTPD_ENOERR; httpd->errnum = QSE_HTTPD_ENOERR;
n = httpd->opt.scb.peer.recv ( n = httpd->opt.scb.peer.recv (
httpd, &proxy->peer, httpd, &proxy->peer,
&proxy->buf[proxy->buflen], &proxy->buf[proxy->buflen],
QSE_SIZEOF(proxy->buf) - proxy->buflen QSE_SIZEOF(proxy->buf) - proxy->buflen
); );
qse_printf (QSE_T("task_main_proxy_4 read from PEER...%d\n"), (int)n);
if (n <= -1) if (n <= -1)
{ {
/* can't return internal server error any more... */ /* can't return internal server error any more... */
/* TODO: loggig ... */ if (httpd->opt.trait & QSE_HTTPD_LOGACT)
log_proxy_error (proxy, "proxy recv-from-peer error - ");
return -1; return -1;
} }
if (n == 0) if (n == 0)
@ -970,7 +1001,8 @@ qse_printf (QSE_T("task_main_proxy_4 read from PEER...%d\n"), (int)n);
{ {
if (proxy->peer_output_received < proxy->peer_output_length) if (proxy->peer_output_received < proxy->peer_output_length)
{ {
qse_printf (QSE_T("PROXY FUCKED UP...PEER CLOSING PREMATURELY\n")); if (httpd->opt.trait & QSE_HTTPD_LOGACT)
log_proxy_error (proxy, "proxy premature eof - ");
return -1; return -1;
} }
} }
@ -988,13 +1020,14 @@ qse_printf (QSE_T("task_main_proxy_4 read from PEER...%d\n"), (int)n);
{ {
if (proxy->peer_output_received > proxy->peer_output_length) if (proxy->peer_output_received > proxy->peer_output_length)
{ {
/* TODO: proxy returning too much data... something is wrong in PROXY */ /* proxy returning too much data... something is wrong in PROXY */
qse_printf (QSE_T("PROXY FUCKED UP...RETURNING TOO MUCH DATA\n")); if (proxy->httpd->opt.trait & QSE_HTTPD_LOGACT)
log_proxy_error (proxy, "proxy redundant output - ");
return -1; return -1;
} }
else if (proxy->peer_output_received == proxy->peer_output_length) else if (proxy->peer_output_received == proxy->peer_output_length)
{ {
qse_printf (QSE_T("PROXY DONE READING\n")); /* proxy has finished reading all */
task->main = task_main_proxy_5; task->main = task_main_proxy_5;
task->trigger[0].mask = 0; task->trigger[0].mask = 0;
task->trigger[2].mask |= QSE_HTTPD_TASK_TRIGGER_WRITE; task->trigger[2].mask |= QSE_HTTPD_TASK_TRIGGER_WRITE;
@ -1006,13 +1039,12 @@ qse_printf (QSE_T("task_main_proxy_4 read from PEER...%d\n"), (int)n);
/* the main loop invokes the task function only if the client /* the main loop invokes the task function only if the client
* side is writable. it should be safe to write whenever * side is writable. it should be safe to write whenever
* this task function is called. */ * this task function is called. */
httpd->errnum = QSE_HTTPD_ENOERR;
n = httpd->opt.scb.client.send (httpd, client, proxy->buf, proxy->buflen); n = httpd->opt.scb.client.send (httpd, client, proxy->buf, proxy->buflen);
if (n <= -1) if (n <= -1)
{ {
/* can't return internal server error any more... */ /* can't return internal server error any more... */
/* TODO: logging ... */ if (proxy->httpd->opt.trait & QSE_HTTPD_LOGACT)
qse_printf (QSE_T("CGI SEND FAILURE\n")); log_proxy_error (proxy, "proxy send-to-client error - ");
return -1; return -1;
} }
@ -1033,8 +1065,10 @@ static int task_main_proxy_3 (
task_proxy_t* proxy = (task_proxy_t*)task->ctx; task_proxy_t* proxy = (task_proxy_t*)task->ctx;
#if 0
qse_printf (QSE_T("task_main_proxy_3 trigger[0].mask=%d trigger[1].mask=%d trigger[2].mask=%d\n"), qse_printf (QSE_T("task_main_proxy_3 trigger[0].mask=%d trigger[1].mask=%d trigger[2].mask=%d\n"),
task->trigger[0].mask, task->trigger[1].mask, task->trigger[2].mask); task->trigger[0].mask, task->trigger[1].mask, task->trigger[2].mask);
#endif
if (task->trigger[2].mask & QSE_HTTPD_TASK_TRIGGER_READABLE) if (task->trigger[2].mask & QSE_HTTPD_TASK_TRIGGER_READABLE)
{ {
@ -1051,23 +1085,20 @@ qse_printf (QSE_T("task_main_proxy_3 trigger[0].mask=%d trigger[1].mask=%d trigg
qse_ssize_t n; qse_ssize_t n;
qse_size_t count; qse_size_t count;
qse_printf (QSE_T("[PROXY-----3 SENDING XXXXX]\n"));
count = proxy->res_pending; count = proxy->res_pending;
if (count > MAX_SEND_SIZE) count = MAX_SEND_SIZE; if (count > MAX_SEND_SIZE) count = MAX_SEND_SIZE;
if (count > 0) if (count > 0)
{ {
qse_printf (QSE_T("[proxy_3 sending %d bytes]\n"), (int)count);
httpd->errnum = QSE_HTTPD_ENOERR;
n = httpd->opt.scb.client.send ( n = httpd->opt.scb.client.send (
httpd, client, httpd, client,
&QSE_MBS_CHAR(proxy->res,proxy->res_consumed), &QSE_MBS_CHAR(proxy->res,proxy->res_consumed),
count count
); );
if (n <= -1) if (n <= -1)
{ {
qse_printf (QSE_T("[proxy-3 send failure....\n")); if (httpd->opt.trait & QSE_HTTPD_LOGACT)
log_proxy_error (proxy, "proxy send-to-client error - ");
return -1; return -1;
} }
@ -1084,15 +1115,19 @@ qse_printf (QSE_T("[proxy-3 send failure....\n"));
if ((proxy->resflags & PROXY_RES_CLIENT_CHUNK) || if ((proxy->resflags & PROXY_RES_CLIENT_CHUNK) ||
((proxy->resflags & PROXY_RES_PEER_LENGTH) && proxy->peer_output_received >= proxy->peer_output_length)) ((proxy->resflags & PROXY_RES_PEER_LENGTH) && proxy->peer_output_received >= proxy->peer_output_length))
{ {
#if 0
qse_printf (QSE_T("SWITINCG TO 55555555555555555555555555 %d %d %d %d\n"), qse_printf (QSE_T("SWITINCG TO 55555555555555555555555555 %d %d %d %d\n"),
(proxy->resflags & PROXY_RES_CLIENT_CHUNK), (proxy->resflags & PROXY_RES_PEER_LENGTH), (proxy->resflags & PROXY_RES_CLIENT_CHUNK), (proxy->resflags & PROXY_RES_PEER_LENGTH),
(int)proxy->peer_output_received, (int)proxy->peer_output_length); (int)proxy->peer_output_received, (int)proxy->peer_output_length);
#endif
task->main = task_main_proxy_5; task->main = task_main_proxy_5;
task->trigger[2].mask |= QSE_HTTPD_TASK_TRIGGER_WRITE; task->trigger[2].mask |= QSE_HTTPD_TASK_TRIGGER_WRITE;
} }
else else
{ {
#if 0
qse_printf (QSE_T("SWITICHING TO 4444444444444444444444444444\n")); qse_printf (QSE_T("SWITICHING TO 4444444444444444444444444444\n"));
#endif
task->main = task_main_proxy_4; task->main = task_main_proxy_4;
task->trigger[2].mask &= ~QSE_HTTPD_TASK_TRIGGER_WRITE; task->trigger[2].mask &= ~QSE_HTTPD_TASK_TRIGGER_WRITE;
} }
@ -1109,8 +1144,10 @@ static int task_main_proxy_2 (
task_proxy_t* proxy = (task_proxy_t*)task->ctx; task_proxy_t* proxy = (task_proxy_t*)task->ctx;
int http_errnum = 500; int http_errnum = 500;
#if 0
qse_printf (QSE_T("task_main_proxy_2 trigger[0].mask=%d trigger[1].mask=%d trigger[2].mask=%d\n"), qse_printf (QSE_T("task_main_proxy_2 trigger[0].mask=%d trigger[1].mask=%d trigger[2].mask=%d\n"),
task->trigger[0].mask, task->trigger[1].mask, task->trigger[2].mask); task->trigger[0].mask, task->trigger[1].mask, task->trigger[2].mask);
#endif
if (task->trigger[2].mask & QSE_HTTPD_TASK_TRIGGER_READABLE) if (task->trigger[2].mask & QSE_HTTPD_TASK_TRIGGER_READABLE)
{ {
@ -1143,6 +1180,7 @@ qse_printf (QSE_T("task_main_proxy_2 trigger[0].mask=%d trigger[1].mask=%d trigg
count = proxy->res_pending; count = proxy->res_pending;
if (count > MAX_SEND_SIZE) count = MAX_SEND_SIZE; if (count > MAX_SEND_SIZE) count = MAX_SEND_SIZE;
#if 0
qse_printf (QSE_T("[proxy_2 sending %d bytes (index %d)] ["), qse_printf (QSE_T("[proxy_2 sending %d bytes (index %d)] ["),
(int)count, (int)proxy->res_consumed); (int)count, (int)proxy->res_consumed);
{ {
@ -1150,8 +1188,8 @@ int i;
for (i = 0; i < count; i++) qse_printf (QSE_T("%hc"), QSE_MBS_CHAR(proxy->res,proxy->res_consumed+i)); for (i = 0; i < count; i++) qse_printf (QSE_T("%hc"), QSE_MBS_CHAR(proxy->res,proxy->res_consumed+i));
} }
qse_printf (QSE_T("]\n")); qse_printf (QSE_T("]\n"));
#endif
httpd->errnum = QSE_HTTPD_ENOERR;
n = httpd->opt.scb.client.send ( n = httpd->opt.scb.client.send (
httpd, client, httpd, client,
QSE_MBS_CPTR(proxy->res,proxy->res_consumed), QSE_MBS_CPTR(proxy->res,proxy->res_consumed),
@ -1159,7 +1197,8 @@ qse_printf (QSE_T("]\n"));
); );
if (n <= -1) if (n <= -1)
{ {
qse_printf (QSE_T("[proxy-2 send failure....\n")); if (httpd->opt.trait & QSE_HTTPD_LOGACT)
log_proxy_error (proxy, "proxy send-to-client error - ");
goto oops; goto oops;
} }
@ -1190,7 +1229,8 @@ qse_printf (QSE_T("[proxy-2 send failure....\n"));
); );
if (n <= -1) if (n <= -1)
{ {
/* TODO: logging ... */ if (httpd->opt.trait & QSE_HTTPD_LOGACT)
log_proxy_error (proxy, "proxy recv-from-peer error - ");
goto oops; goto oops;
} }
if (n == 0) if (n == 0)
@ -1198,9 +1238,11 @@ qse_printf (QSE_T("[proxy-2 send failure....\n"));
if (!(proxy->resflags & PROXY_RES_RECEIVED_RESHDR)) if (!(proxy->resflags & PROXY_RES_RECEIVED_RESHDR))
{ {
/* end of output from peer before it has seen a header. /* end of output from peer before it has seen a header.
* the proxy script must be crooked. */ * the proxy peer must be crooked. */
/* TODO: logging */
qse_printf (QSE_T("#####PREMATURE EOF FROM PEER\n")); if (httpd->opt.trait & QSE_HTTPD_LOGACT)
log_proxy_error (proxy, "proxy premature eof - ");
if (!(proxy->resflags & PROXY_RES_RECEIVED_100)) http_errnum = 502; if (!(proxy->resflags & PROXY_RES_RECEIVED_100)) http_errnum = 502;
goto oops; goto oops;
} }
@ -1219,24 +1261,28 @@ qse_printf (QSE_T("#####PREMATURE EOF FROM PEER\n"));
return 1; return 1;
} }
qse_printf (QSE_T("#####PREMATURE EOF FROM PEER CLIENT CHUNK\n")); /* premature eof from the peer */
if (httpd->opt.trait & QSE_HTTPD_LOGACT)
log_proxy_error (proxy, "proxy premature eof - ");
goto oops; goto oops;
} }
} }
proxy->buflen += n; proxy->buflen += n;
#if 0
qse_printf (QSE_T("#####PROXY FEEDING %d [\n"), (int)proxy->buflen); qse_printf (QSE_T("#####PROXY FEEDING %d [\n"), (int)proxy->buflen);
{ {
int i; int i;
for (i = 0; i < proxy->buflen; i++) qse_printf (QSE_T("%hc"), proxy->buf[i]); for (i = 0; i < proxy->buflen; i++) qse_printf (QSE_T("%hc"), proxy->buf[i]);
} }
qse_printf (QSE_T("]\n")); qse_printf (QSE_T("]\n"));
#endif
if (qse_htrd_feed (proxy->peer_htrd, proxy->buf, proxy->buflen) <= -1) if (qse_htrd_feed (proxy->peer_htrd, proxy->buf, proxy->buflen) <= -1)
{ {
/* TODO: logging */ if (httpd->opt.trait & QSE_HTTPD_LOGACT)
qse_printf (QSE_T("#####INVALID HEADER FROM PEER [%.*hs]\n"), (int)proxy->buflen, proxy->buf); log_proxy_error (proxy, "proxy feed error - ");
goto oops; goto oops;
} }
@ -1267,7 +1313,9 @@ qse_printf (QSE_T("#####INVALID HEADER FROM PEER [%.*hs]\n"), (int)proxy->buflen
} }
else else
{ {
#if 0
qse_printf (QSE_T("TRAILING DATA=%d, [%hs]\n"), (int)QSE_MBS_LEN(proxy->res), QSE_MBS_CPTR(proxy->res,proxy->res_consumed)); qse_printf (QSE_T("TRAILING DATA=%d, [%hs]\n"), (int)QSE_MBS_LEN(proxy->res), QSE_MBS_CPTR(proxy->res,proxy->res_consumed));
#endif
/* switch to the next phase */ /* switch to the next phase */
task->main = task_main_proxy_3; task->main = task_main_proxy_3;
task->trigger[2].mask |= QSE_HTTPD_TASK_TRIGGER_WRITE; task->trigger[2].mask |= QSE_HTTPD_TASK_TRIGGER_WRITE;
@ -1301,7 +1349,6 @@ static int task_main_proxy_1 (
int http_errnum = 500; int http_errnum = 500;
/* wait for peer to get connected */ /* wait for peer to get connected */
qse_printf (QSE_T("task_main_proxy_1....\n"));
if (task->trigger[0].mask & QSE_HTTPD_TASK_TRIGGER_READABLE || if (task->trigger[0].mask & QSE_HTTPD_TASK_TRIGGER_READABLE ||
task->trigger[0].mask & QSE_HTTPD_TASK_TRIGGER_WRITABLE) task->trigger[0].mask & QSE_HTTPD_TASK_TRIGGER_WRITABLE)
@ -1312,18 +1359,23 @@ qse_printf (QSE_T("task_main_proxy_1....\n"));
n = httpd->opt.scb.peer.connected (httpd, &proxy->peer); n = httpd->opt.scb.peer.connected (httpd, &proxy->peer);
if (n <= -1) if (n <= -1)
{ {
/* improve error conversion */ /* TODO: translate more error codes to http error codes... */
if (httpd->errnum == QSE_HTTPD_ENOENT) http_errnum = 404; if (httpd->errnum == QSE_HTTPD_ENOENT) http_errnum = 404;
else if (httpd->errnum == QSE_HTTPD_EACCES || else if (httpd->errnum == QSE_HTTPD_EACCES ||
httpd->errnum == QSE_HTTPD_ECONN) http_errnum = 403; httpd->errnum == QSE_HTTPD_ECONN) http_errnum = 403;
qse_printf (QSE_T("task_main_proxy_1.... ERROR \n"));
if (httpd->opt.trait & QSE_HTTPD_LOGACT)
log_proxy_error (proxy, "proxy connect error - ");
goto oops; goto oops;
} }
if (n >= 1) if (n >= 1)
{ {
/* connected to the peer now */
proxy->peer_status |= PROXY_PEER_CONNECTED; proxy->peer_status |= PROXY_PEER_CONNECTED;
qse_printf (QSE_T("FINALLY connected to peer ...............................\n"));
if (proxy->req) if (proxy->req)
{ {
@ -1360,7 +1412,6 @@ static int task_main_proxy (
proxy_peer_htrd_xtn_t* xtn; proxy_peer_htrd_xtn_t* xtn;
int http_errnum = 500; int http_errnum = 500;
int n; int n;
qse_printf (QSE_T("task_main_proxy....\n"));
if (proxy->init_failed) goto oops; if (proxy->init_failed) goto oops;
@ -1384,11 +1435,13 @@ qse_printf (QSE_T("task_main_proxy....\n"));
n = httpd->opt.scb.peer.open (httpd, &proxy->peer); n = httpd->opt.scb.peer.open (httpd, &proxy->peer);
if (n <= -1) if (n <= -1)
{ {
/* TODO: translate error code to http error... */ /* TODO: translate more error codes to http error codes... */
if (httpd->errnum == QSE_HTTPD_ENOENT) http_errnum = 404; if (httpd->errnum == QSE_HTTPD_ENOENT) http_errnum = 404;
else if (httpd->errnum == QSE_HTTPD_EACCES || else if (httpd->errnum == QSE_HTTPD_EACCES ||
httpd->errnum == QSE_HTTPD_ECONN) http_errnum = 403; httpd->errnum == QSE_HTTPD_ECONN) http_errnum = 403;
qse_printf (QSE_T("caanot open peer....\n"));
if (httpd->opt.trait & QSE_HTTPD_LOGACT)
log_proxy_error (proxy, "proxy connect error - ");
goto oops; goto oops;
} }

View File

@ -63,7 +63,6 @@ static void task_fini_resol (
qse_httpd_t* httpd, qse_httpd_client_t* client, qse_httpd_task_t* task) qse_httpd_t* httpd, qse_httpd_client_t* client, qse_httpd_task_t* task)
{ {
task_resol_t* resol = (task_resol_t*)task->ctx; task_resol_t* resol = (task_resol_t*)task->ctx;
qse_printf (QSE_T("task_fini_resol\n"));
} }
static int task_main_resol ( static int task_main_resol (

View File

@ -183,7 +183,6 @@ qse_httpd_task_t* qse_httpd_entaskformat (
task.main = task_main_format; task.main = task_main_format;
task.ctx = &data; task.ctx = &data;
qse_printf (QSE_T("SEND: [%.*hs]\n"), (int)l, buf);
return qse_httpd_entask ( return qse_httpd_entask (
httpd, client, pred, &task, QSE_SIZEOF(data)); httpd, client, pred, &task, QSE_SIZEOF(data));
} }

View File

@ -431,7 +431,9 @@ static void free_client (
qse_htrd_close (client->htrd); qse_htrd_close (client->htrd);
#if 0
qse_printf (QSE_T("Debug: CLOSING SOCKET %d\n"), client->handle.i); qse_printf (QSE_T("Debug: CLOSING SOCKET %d\n"), client->handle.i);
#endif
if (client->status & CLIENT_HANDLE_IN_MUX) if (client->status & CLIENT_HANDLE_IN_MUX)
{ {
@ -518,10 +520,12 @@ static int accept_client (
if (httpd->opt.scb.server.accept (httpd, server, &clibuf) <= -1) if (httpd->opt.scb.server.accept (httpd, server, &clibuf) <= -1)
{ {
#if 0
/* TODO: proper logging */ /* TODO: proper logging */
qse_char_t tmp[128]; qse_char_t tmp[128];
qse_nwadtostr (&server->dope.nwad, tmp, QSE_COUNTOF(tmp), QSE_NWADTOSTR_ALL); qse_nwadtostr (&server->dope.nwad, tmp, QSE_COUNTOF(tmp), QSE_NWADTOSTR_ALL);
qse_printf (QSE_T("failed to accept from server [%s] [%d]\n"), tmp, server->handle.i); qse_printf (QSE_T("failed to accept from server [%s] [%d]\n"), tmp, server->handle.i);
#endif
return -1; return -1;
} }
@ -538,7 +542,9 @@ qse_printf (QSE_T("failed to accept from server [%s] [%d]\n"), tmp, server->hand
return -1; return -1;
} }
#if 0
qse_printf (QSE_T("MUX ADDHND CLIENT READ %d\n"), client->handle.i); qse_printf (QSE_T("MUX ADDHND CLIENT READ %d\n"), client->handle.i);
#endif
if (httpd->opt.scb.mux.addhnd ( if (httpd->opt.scb.mux.addhnd (
httpd, mux, client->handle, QSE_HTTPD_MUX_READ, client) <= -1) httpd, mux, client->handle, QSE_HTTPD_MUX_READ, client) <= -1)
{ {
@ -605,7 +611,9 @@ static int activate_servers (qse_httpd_t* httpd)
/* /*
httpd->opt.rcb.log (httpd, 0, QSE_T("cannot activate %s"), buf); httpd->opt.rcb.log (httpd, 0, QSE_T("cannot activate %s"), buf);
*/ */
#if 0
qse_printf(QSE_T("cannot activate [%s]\n"), buf); qse_printf(QSE_T("cannot activate [%s]\n"), buf);
#endif
continue; continue;
} }
@ -617,7 +625,9 @@ qse_printf(QSE_T("cannot activate [%s]\n"), buf);
/* /*
httpd->opt.rcb.log (httpd, 0, QSE_T("cannot activate %s - "), buf); httpd->opt.rcb.log (httpd, 0, QSE_T("cannot activate %s - "), buf);
*/ */
#if 0
qse_printf(QSE_T("cannot add handle [%s]\n"), buf); qse_printf(QSE_T("cannot add handle [%s]\n"), buf);
#endif
httpd->opt.scb.server.close (httpd, server); httpd->opt.scb.server.close (httpd, server);
continue; continue;
@ -1202,7 +1212,9 @@ qse_httpd_task_t* qse_httpd_entask (
httpd->opt.scb.mux.delhnd (httpd, httpd->mux, client->handle); httpd->opt.scb.mux.delhnd (httpd, httpd->mux, client->handle);
client->status &= ~CLIENT_HANDLE_IN_MUX; client->status &= ~CLIENT_HANDLE_IN_MUX;
#if 0
qse_printf (QSE_T("MUX ADDHND CLIENT RW(ENTASK) %d\n"), client->handle.i); qse_printf (QSE_T("MUX ADDHND CLIENT RW(ENTASK) %d\n"), client->handle.i);
#endif
if (httpd->opt.scb.mux.addhnd ( if (httpd->opt.scb.mux.addhnd (
httpd, httpd->mux, client->handle, httpd, httpd->mux, client->handle,
QSE_HTTPD_MUX_READ | QSE_HTTPD_MUX_WRITE, QSE_HTTPD_MUX_READ | QSE_HTTPD_MUX_WRITE,