From a0fd0ec618e98ac5371b7794debda448335d2774 Mon Sep 17 00:00:00 2001 From: stefanocasazza Date: Tue, 19 Dec 2017 15:08:55 +0100 Subject: [PATCH] sync --- .editorconfig | 6 ++ README.md | 4 +- include/ulib/net/server/client_image.h | 3 +- include/ulib/utility/uhttp.h | 6 +- src/ulib/log.cpp | 8 ++- src/ulib/net/client/http.cpp | 6 +- src/ulib/net/server/client_image.cpp | 2 +- src/ulib/net/server/plugin/mod_proxy.cpp | 9 +-- src/ulib/utility/uhttp.cpp | 2 +- tests/.function | 3 +- tests/examples/Makefile.am | 4 +- tests/examples/Makefile.in | 10 +-- tests/examples/ok/webserver_proxy.ok | 42 +++++++++++ tests/examples/web_server.sh | 14 ++-- tests/examples/web_server_echo.cfg | 10 +++ tests/examples/web_server_proxy.test | 89 ++++++++++++++++++++++++ 16 files changed, 185 insertions(+), 33 deletions(-) create mode 100644 .editorconfig create mode 100644 tests/examples/ok/webserver_proxy.ok create mode 100644 tests/examples/web_server_echo.cfg create mode 100755 tests/examples/web_server_proxy.test diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..7abb70a8 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,6 @@ +root=true + +[*] +insert_final_newline = true +indent_style = tab +tab_width = 3 diff --git a/README.md b/README.md index ecee8c1c..ca992d60 100644 --- a/README.md +++ b/README.md @@ -30,10 +30,10 @@ The current version offers the following features : * Support for URL traffic based throttling (experimental). * Support for overriden of error messages by local document (ex. ErrorDocument/400.html). * Support for RewriteRule (lighttpd-like) that check for file existence as they do on Apache, some CMS (SilverStripe) require it. - * Support for (apache-like) log [NCSA extended/combined format](http://httpd.apache.org/docs/2.0/mod/mod_log_config.html) + * Support for (apache-like) log [NCSA extended/combined format](http://httpd.apache.org/docs/2.0/mod/mod_log_config.html). * Support for [JSONRequest](http://json.org/JSONRequest.html). * Accept HTTP uploads up to 4 GB without increasing memory usage. - * General [CGI](http://it.wikipedia.org/wiki/Common_Gateway_Interface) support (run any CGI script) with automatic output compression (using gzip method). + * General [CGI](http://it.wikipedia.org/wiki/Common_Gateway_Interface) support (run any CGI script) with automatic output compression (using gzip,brotli method). * CGI support for shell script processes (with automatic management of form and cookie). * CGI support for the X-Sendfile feature and also supports X-Accel-Redirect headers transparently. * Support for minify HTML CGI output by wrapping [google page speed SDK](http://code.google.com/speed/page-speed/download.html#pagespeed-sdk). diff --git a/include/ulib/net/server/client_image.h b/include/ulib/net/server/client_image.h index 7bd7e648..aa9c508d 100644 --- a/include/ulib/net/server/client_image.h +++ b/include/ulib/net/server/client_image.h @@ -290,7 +290,8 @@ public: { U_TRACE_NO_PARAM(0, "UClientImage_Base::setRequestToCache()") - U_INTERNAL_DUMP("U_ClientImage_pipeline = %b size_request = %u U_http_uri_offset = %u", U_ClientImage_pipeline, size_request, U_http_uri_offset) + U_INTERNAL_DUMP("U_ClientImage_pipeline = %b size_request = %u U_http_uri_offset = %u U_http_info.startHeader = %u", + U_ClientImage_pipeline, size_request, U_http_uri_offset, U_http_info.startHeader) # if !defined(U_CACHE_REQUEST_DISABLE) || defined(U_SERVER_CHECK_TIME_BETWEEN_REQUEST) U_INTERNAL_ASSERT_MAJOR(size_request, 0) diff --git a/include/ulib/utility/uhttp.h b/include/ulib/utility/uhttp.h index 0702618d..d978f8dc 100644 --- a/include/ulib/utility/uhttp.h +++ b/include/ulib/utility/uhttp.h @@ -52,6 +52,8 @@ class UClientImage_Base; template class UClient; template class URDBObjectHandler; +extern "C" { extern void runDynamicPage_dirlist(int); }; + class U_EXPORT UHTTP { public: @@ -1371,7 +1373,7 @@ private: } #endif - static UString getHTMLDirectoryList() U_NO_EXPORT; + static UString getHTMLDirectoryList(); #if defined(U_ALIAS) && defined(USE_LIBPCRE) // REWRITE RULE static void processRewriteRule() U_NO_EXPORT; @@ -1483,6 +1485,8 @@ private: friend class UProxyPlugIn; friend class UClientImage_Base; + friend void runDynamicPage_dirlist(int); + #ifdef U_STDCPP_ENABLE friend istream& operator>>(istream&, UHTTP::UFileCacheData&); #endif diff --git a/src/ulib/log.cpp b/src/ulib/log.cpp index f3816828..17aff2c7 100644 --- a/src/ulib/log.cpp +++ b/src/ulib/log.cpp @@ -712,10 +712,12 @@ void ULog::logResponse(const UString& data, const char* format, uint32_t fmt_siz U_INTERNAL_ASSERT_MAJOR(u_printf_string_max_length, 0) } - U_INTERNAL_DUMP("u_printf_string_max_length = %d", u_printf_string_max_length) + U_INTERNAL_DUMP("u_printf_string_max_length = %d UServer_Base::mod_name = %S", u_printf_string_max_length, UServer_Base::mod_name) - len = (UServer_Base::mod_name[0][0] ? u__snprintf(buffer, sizeof(buffer), U_CONSTANT_TO_PARAM("%s"), UServer_Base::mod_name) : 0); - len += u__snprintf(buffer-len, sizeof(buffer)-len, U_CONSTANT_TO_PARAM("received response (%u bytes) %#.*S"), sz, sz, ptr); + len = u__snprintf(buffer, sizeof(buffer), U_CONSTANT_TO_PARAM("%sreceived response (%u bytes) %#.*S"), + UServer_Base::mod_name[0][0] ? (const char*)UServer_Base::mod_name : "", sz, sz, ptr); + + U_INTERNAL_DUMP("len = %u", len) if (fmt_size) { diff --git a/src/ulib/net/client/http.cpp b/src/ulib/net/client/http.cpp index f2ffbe31..a440be56 100644 --- a/src/ulib/net/client/http.cpp +++ b/src/ulib/net/client/http.cpp @@ -914,7 +914,7 @@ bool UHttpClient_Base::sendRequest() U_INTERNAL_ASSERT_RANGE(0,UClient_Base::iovcnt,6) - U_INTERNAL_DUMP("server_context_flag = %b U_ClientImage_close = %b", server_context_flag, U_ClientImage_close) + U_INTERNAL_DUMP("server_context_flag = %b U_ClientImage_close = %b U_http_info.startHeader = %u", server_context_flag, U_ClientImage_close, U_http_info.startHeader) bool ok; uint64_t flag_save = 0; @@ -953,7 +953,7 @@ bool UHttpClient_Base::sendRequest() U_http_info = http_info_save; } - U_INTERNAL_DUMP("server_context_flag = %b U_ClientImage_close = %b", server_context_flag, U_ClientImage_close) + U_INTERNAL_DUMP("server_context_flag = %b U_ClientImage_close = %b U_http_info.startHeader = %u", server_context_flag, U_ClientImage_close, U_http_info.startHeader) U_RETURN(ok); } @@ -980,6 +980,8 @@ bool UHttpClient_Base::sendRequest(const UString& req) (void) UClient_Base::uri.assign(U_HTTP_URI_QUERY_TO_PARAM); + U_http_info.startHeader += U_CONSTANT_SIZE(U_CRLF); + if (sendRequest()) result = true; } diff --git a/src/ulib/net/server/client_image.cpp b/src/ulib/net/server/client_image.cpp index 33fe1b2a..4b35661c 100644 --- a/src/ulib/net/server/client_image.cpp +++ b/src/ulib/net/server/client_image.cpp @@ -786,7 +786,7 @@ void UClientImage_Base::endRequest() # ifndef U_CACHE_REQUEST_DISABLE if (U_ClientImage_request_is_cached) { - U_INTERNAL_DUMP("U_http_uri_offset = %u", U_http_uri_offset) + U_INTERNAL_DUMP("U_http_uri_offset = %u U_http_info.startHeader = %u U_http_info.uri_len = %u", U_http_uri_offset, U_http_info.startHeader, U_http_info.uri_len) U_INTERNAL_ASSERT_RANGE(1,U_http_uri_offset,254) diff --git a/src/ulib/net/server/plugin/mod_proxy.cpp b/src/ulib/net/server/plugin/mod_proxy.cpp index a720b0f4..74e919cb 100644 --- a/src/ulib/net/server/plugin/mod_proxy.cpp +++ b/src/ulib/net/server/plugin/mod_proxy.cpp @@ -181,14 +181,7 @@ int UProxyPlugIn::handlerRequest() *UClientImage_Base::wbuffer = client_http->getResponse(); - if (result == false) - { - UClientImage_Base::setRequestProcessed(); - -# ifndef U_LOG_DISABLE - if (UServer_Base::isLog()) UServer_Base::log->logResponse(*UClientImage_Base::wbuffer, U_CONSTANT_TO_PARAM(""), 0); -# endif - } + if (result == false) UClientImage_Base::setRequestProcessed(); else { UClientImage_Base::setNoHeaderForResponse(); diff --git a/src/ulib/utility/uhttp.cpp b/src/ulib/utility/uhttp.cpp index 26c51b78..37a59b40 100644 --- a/src/ulib/utility/uhttp.cpp +++ b/src/ulib/utility/uhttp.cpp @@ -6113,7 +6113,7 @@ const char* UHTTP::getStatusDescription(uint32_t* plen) #undef U_HTTP_ENTRY -U_NO_EXPORT UString UHTTP::getHTMLDirectoryList() +UString UHTTP::getHTMLDirectoryList() { U_TRACE_NO_PARAM(0, "UHTTP::getHTMLDirectoryList()") diff --git a/tests/.function b/tests/.function index d8524237..1d546391 100644 --- a/tests/.function +++ b/tests/.function @@ -324,7 +324,8 @@ check_for_netcat() { [ "$NC_TEST" = "Ncat 7.00 " ] || \ [ "$NC_TEST" = "Ncat 7.10 " ] || \ [ "$NC_TEST" = "Ncat 7.12 " ] || \ - [ "$NC_TEST" = "Ncat 7.40 " ]; then + [ "$NC_TEST" = "Ncat 7.40 " ] || \ + [ "$NC_TEST" = "Ncat 7.60 " ]; then NCAT=ncat fi fi diff --git a/tests/examples/Makefile.am b/tests/examples/Makefile.am index d80f073e..dce5abb7 100644 --- a/tests/examples/Makefile.am +++ b/tests/examples/Makefile.am @@ -9,7 +9,7 @@ EXTRA_DIST = inp ok CA CSP LCSP TSA RSIGN XAdES nocat wi-auth WAGSM RA IR/WEB IR ## DEFS = -DU_TEST @DEFS@ -TESTS = client_server.test test_manager.test IR.test web_server.test web_server_multiclient.test web_socket.test ## workflow.test +TESTS = client_server.test test_manager.test IR.test web_server.test web_server_multiclient.test web_socket.test web_server_proxy.test ## workflow.test if DEBUG PRG = bench_http_parser test_http_parser @@ -77,7 +77,7 @@ LDADD = @ULIBS@ $(HTTP_LIB) $(top_builddir)/src/ulib/lib@ULIB@.la @ULIB_LIBS@ ## web_server_multiclient.test form_completion.test http_header.test lrp_pusher.test lrp_session.test workflow.test test: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) - ../make_test.sh client_server.test test_manager.test IR.test web_server.test web_socket.test tsa_http.test tsa_https.test rsign_rpc.test tsa_rpc.test uclient.test tsa_ssoap.test rsign.test web_server_ssl.test PEC_report_rejected.test PEC_report_messaggi.test PEC_report_virus.test PEC_report_anomalie.test PEC_check_namefile.test doc_parse.test xml2txt.test ../reset.color + ../make_test.sh client_server.test test_manager.test IR.test web_server.test web_server_proxy.test web_socket.test tsa_http.test tsa_https.test rsign_rpc.test tsa_rpc.test uclient.test tsa_ssoap.test rsign.test web_server_ssl.test PEC_report_rejected.test PEC_report_messaggi.test PEC_report_virus.test PEC_report_anomalie.test PEC_check_namefile.test doc_parse.test xml2txt.test ../reset.color clean-local: -rm -rf out err core .libs *.bb* *.da *.gc* IR/db* TSA/gSOAP/tsa_client \ diff --git a/tests/examples/Makefile.in b/tests/examples/Makefile.in index 11fe027d..2c8b1d36 100644 --- a/tests/examples/Makefile.in +++ b/tests/examples/Makefile.in @@ -628,10 +628,10 @@ EXTRA_DIST = inp ok CA CSP LCSP TSA RSIGN XAdES nocat wi-auth WAGSM RA IR/WEB IR *.properties *.test *.sh error_msg workflow doc_parse robots.txt alias.txt throttling.txt css js benchmark websocket docroot php.sh test_http_parser.h TESTS = client_server.test test_manager.test IR.test web_server.test \ - web_server_multiclient.test web_socket.test $(am__append_1) \ - $(am__append_2) $(am__append_3) $(am__append_4) \ - $(am__append_5) $(am__append_6) $(am__append_7) \ - $(am__append_8) ../reset.color + web_server_multiclient.test web_socket.test \ + web_server_proxy.test $(am__append_1) $(am__append_2) \ + $(am__append_3) $(am__append_4) $(am__append_5) \ + $(am__append_6) $(am__append_7) $(am__append_8) ../reset.color @DEBUG_TRUE@PRG = bench_http_parser test_http_parser @DEBUG_TRUE@bench_http_parser_SOURCES = bench_http_parser.cpp @DEBUG_TRUE@test_http_parser_SOURCES = test_http_parser.cpp ctest_http_parser.c @@ -1128,7 +1128,7 @@ uninstall-am: test: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) - ../make_test.sh client_server.test test_manager.test IR.test web_server.test web_socket.test tsa_http.test tsa_https.test rsign_rpc.test tsa_rpc.test uclient.test tsa_ssoap.test rsign.test web_server_ssl.test PEC_report_rejected.test PEC_report_messaggi.test PEC_report_virus.test PEC_report_anomalie.test PEC_check_namefile.test doc_parse.test xml2txt.test ../reset.color + ../make_test.sh client_server.test test_manager.test IR.test web_server.test web_server_proxy.test web_socket.test tsa_http.test tsa_https.test rsign_rpc.test tsa_rpc.test uclient.test tsa_ssoap.test rsign.test web_server_ssl.test PEC_report_rejected.test PEC_report_messaggi.test PEC_report_virus.test PEC_report_anomalie.test PEC_check_namefile.test doc_parse.test xml2txt.test ../reset.color clean-local: -rm -rf out err core .libs *.bb* *.da *.gc* IR/db* TSA/gSOAP/tsa_client \ diff --git a/tests/examples/ok/webserver_proxy.ok b/tests/examples/ok/webserver_proxy.ok new file mode 100644 index 00000000..8084ae0a --- /dev/null +++ b/tests/examples/ok/webserver_proxy.ok @@ -0,0 +1,42 @@ + + + Welcome to ULib Web Server! + + + + +
+

Welcome to ULib Web Server!

+
+ + +
+ + + + + + +
+ + +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX \ No newline at end of file diff --git a/tests/examples/web_server.sh b/tests/examples/web_server.sh index 54bcd449..cb8350ca 100755 --- a/tests/examples/web_server.sh +++ b/tests/examples/web_server.sh @@ -4,10 +4,11 @@ (cd benchmark; rm -f db; creat_link FrameworkBenchmarks/ULib/db db) - DOC_ROOT=docroot +#DOC_ROOT=docroot #DOC_ROOT=sse_example #DOC_ROOT=ruby/blog #DOC_ROOT=benchmark/docroot + DOC_ROOT=ShivShankarDayal/docroot rm -f tmp/usp_compile.sh.err /tmp/*.hpack.* \ $DOC_ROOT/web_server.log* \ @@ -82,15 +83,16 @@ userver { #PLUGIN_DIR ../../src/ulib/net/server/plugin/.libs #ORM_DRIVER_DIR ../../src/ulib/orm/driver/.libs #DOCUMENT_ROOT php - DOCUMENT_ROOT docroot +#DOCUMENT_ROOT docroot #DOCUMENT_ROOT sse_example - PLUGIN_DIR ../../../src/ulib/net/server/plugin/.libs - ORM_DRIVER_DIR ../../../src/ulib/orm/driver/.libs +#PLUGIN_DIR ../../../src/ulib/net/server/plugin/.libs +#ORM_DRIVER_DIR ../../../src/ulib/orm/driver/.libs #DOCUMENT_ROOT JONATHAN/docroot #DOCUMENT_ROOT benchmark/docroot #DOCUMENT_ROOT ruby/blog/public -#PLUGIN_DIR ../../../../src/ulib/net/server/plugin/.libs -#ORM_DRIVER_DIR ../../../../src/ulib/orm/driver/.libs + DOCUMENT_ROOT ShivShankarDayal/docroot + PLUGIN_DIR ../../../../src/ulib/net/server/plugin/.libs + ORM_DRIVER_DIR ../../../../src/ulib/orm/driver/.libs } http { #ALIAS "[ / /100.html ]" diff --git a/tests/examples/web_server_echo.cfg b/tests/examples/web_server_echo.cfg new file mode 100644 index 00000000..d4a917d7 --- /dev/null +++ b/tests/examples/web_server_echo.cfg @@ -0,0 +1,10 @@ +userver { + + PORT 8080 + LOG_FILE web_server_echo.log + + PLUGIN echo + PLUGIN_DIR ../../src/ulib/net/server/plugin/.libs + + PREFORK_CHILD 0 +} diff --git a/tests/examples/web_server_proxy.test b/tests/examples/web_server_proxy.test new file mode 100755 index 00000000..d3ad5aaa --- /dev/null +++ b/tests/examples/web_server_proxy.test @@ -0,0 +1,89 @@ +#!/bin/sh + +. ../.function + +DOC_ROOT1=benchmark/docroot +DOC_ROOT2=docroot + +rm -f tmp/usp_compile.sh.err /tmp/*.hpack.* \ + $DOC_ROOT1/webserver*.log* \ + $DOC_ROOT2/webserver*.log* \ + out/userver_*.out err/userver_*.err \ + out/webserver_*.out err/webserver_*.err \ + trace.*userver_*.[0-9]* object.*userver_*.[0-9]* stack.*userver_*.[0-9]* mempool.*userver_*.[0-9]* \ + $DOC_ROOT1/trace.*userver_*.[0-9]* $DOC_ROOT1/object.*userver_*.[0-9]* $DOC_ROOT1/stack.*userver_*.[0-9]* $DOC_ROOT1/mempool.*userver_*.[0-9]* \ + $DOC_ROOT2/trace.*userver_*.[0-9]* $DOC_ROOT2/object.*userver_*.[0-9]* $DOC_ROOT2/stack.*userver_*.[0-9]* $DOC_ROOT2/mempool.*userver_*.[0-9]* + +#UTRACE="0 10M 0" +#UOBJDUMP="0 10M 100" +#USIMERR="error.sim" +#UMEMUSAGE=yes +export UTRACE UOBJDUMP USIMERR UTRACE_SIGNAL UMEMUSAGE + +DIR_CMD="../../examples/userver" + +cat <inp/webserver.cfg +userver { + PORT 8080 + RUN_AS_USER nobody + LOG_FILE webserver.log + LOG_FILE_SZ 10M + LOG_MSG_SIZE -1 + PID_FILE /var/run/userver_tcp.pid + PREFORK_CHILD 0 + DOCUMENT_ROOT $DOC_ROOT1 + PLUGIN_DIR ../../../../src/ulib/net/server/plugin/.libs +} +http { + APACHE_LIKE_LOG /var/log/httpd/access_log + LOG_FILE_SZ 10M +} +EOF + +cat <inp/webserver_proxy.cfg +userver { + PORT 8787 + RUN_AS_USER nobody + LOG_FILE webserver_proxy.log + LOG_FILE_SZ 10M + LOG_MSG_SIZE -1 + PID_FILE /var/run/userver_tcp_proxy.pid + PREFORK_CHILD 0 + DOCUMENT_ROOT $DOC_ROOT2 + PLUGIN "proxy http" + PLUGIN_DIR ../../../src/ulib/net/server/plugin/.libs +} +http { + APACHE_LIKE_LOG /var/log/httpd/access_log + LOG_FILE_SZ 10M +} +proxy { + Service_PROXY { + URI /1000.html + HOST localhost:8787 + METHOD_NAME GET + PORT 8080 + SERVER 127.0.0.1 + } +} +EOF + +#STRACE=$TRUSS +start_prg_background userver_tcp -c inp/webserver.cfg +wait_server_ready localhost 8080 +start_prg_background userver_tcp -c inp/webserver_proxy.cfg +wait_server_ready localhost 8787 + +sync +#echo "PID1 = `cat /var/run/userver_tcp.pid`" +#echo "PID2 = `cat /var/run/userver_tcp_proxy.pid`" + +$CURL http://localhost:8787 >out/webserver_proxy.out 2>>err/userver_tcp.err +$CURL http://localhost:8787/1000.html >>out/webserver_proxy.out 2>>err/userver_tcp.err + +kill_server userver_tcp +$SLEEP +pkill userver_tcp 2>/dev/null + +cat err/userver_tcp.err >> err/webserver_proxy.err +rm err/userver_tcp.err