1
0
mirror of https://github.com/stefanocasazza/ULib.git synced 2025-09-28 19:05:55 +08:00
This commit is contained in:
stefanocasazza 2017-12-19 15:08:55 +01:00
parent 120253d566
commit a0fd0ec618
16 changed files with 185 additions and 33 deletions

6
.editorconfig Normal file
View File

@ -0,0 +1,6 @@
root=true
[*]
insert_final_newline = true
indent_style = tab
tab_width = 3

View File

@ -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).

View File

@ -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)

View File

@ -52,6 +52,8 @@ class UClientImage_Base;
template <class T> class UClient;
template <class T> 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

View File

@ -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)
{

View File

@ -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;
}

View File

@ -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)

View File

@ -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();

View File

@ -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()")

View File

@ -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

View File

@ -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 \

View File

@ -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 \

View File

@ -0,0 +1,42 @@
<html>
<head>
<title>Welcome to ULib Web Server!</title>
<!--
<script language="javascript" src="js/jquery.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript">
$(document).ready( function() {
// get verification code with Ajax
$.get('get_checkingcode_php', { data:'getting code' }, function(checkingcode) { $('#codebox').html(checkingcode); }); } );
</script>
-->
</head>
<body bgcolor="white" text="black">
<center>
<h1>Welcome to ULib Web Server!</h1>
</center>
<!--
<form action="cgi-bin/check_form.php" method="post">
<p>First Name <input name="1" type="text" class="inputbox" title="Enter your first name"></p>
<p>Last Name <input name="2" type="text" class="inputbox" title="Enter your last name"></p>
<p>Email <input name="3" type="text" class="inputbox" title="Enter your email address"></p>
<p>Enter your comments below:</p>
<p><textarea name="4" title="Enter your comments" rows="10" cols="10"></textarea></p>
<div id="codebox"></div>
<p>Verification Code: <input name="5" type="text" name="code" class="checkingcode" title="Enter the above four-digit verification code"></p>
<p><input type="submit" value="Send Data"></p>
</form>
-->
<div class="Video">
<object width="400" height="225">
<param name="movie" value="http://10.30.1.131/test.flv">
<param name="allowFullScreen" value="true">
<param name="allowscriptaccess" value="always">
<embed src="http://10.30.1.131/test.flv" type="video/x-flv" allowscriptaccess="always"
allowfullscreen="true" width="400" height="225">
</object>
</div>
</body>
</html>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

View File

@ -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 ]"

View File

@ -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
}

View File

@ -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 <<EOF >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 <<EOF >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