diff --git a/examples/WiAuth/count_traffic.cpp b/examples/WiAuth/count_traffic.cpp index 9aef95bb..609300e9 100644 --- a/examples/WiAuth/count_traffic.cpp +++ b/examples/WiAuth/count_traffic.cpp @@ -80,12 +80,14 @@ public: n = request.size(); start = U_CONSTANT_SIZE("GET /info?"); +# ifdef DEBUG u_printf_string_max_length_save = u_printf_string_max_length; u_printf_string_max_length = n; U_INTERNAL_DUMP("request = %.*S", n, s) u_printf_string_max_length = u_printf_string_max_length_save; +# endif while ((p = u_find(s + start, n - start, U_CONSTANT_TO_PARAM("traffic=")))) { diff --git a/examples/uclient/uclient.cpp b/examples/uclient/uclient.cpp index 7ec71803..c6e95ac9 100644 --- a/examples/uclient/uclient.cpp +++ b/examples/uclient/uclient.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include @@ -18,6 +19,7 @@ "option u upload 1 'path of file to upload to url' ''\n" \ "option o output 1 'path of file to write output' ''\n" \ "option q queue 1 'time polling of queue mode' ''\n" \ +"option s stdin 0 'read the request to send from standard input' ''\n" \ "option i include 0 'include the HTTP-header in the output. The HTTP-header includes things like server-name, date of the document, HTTP-version' ''\n" #include @@ -48,14 +50,15 @@ public: // manage options - bool include = false; time_t queue_time = 0; UString outpath, result; + bool include = false, bstdin = false; if (UApplication::isOptions()) { cfg_str = opt['c']; upload = opt['u']; + bstdin = (opt['s'] == U_STRING_FROM_CONSTANT("1")); include = (opt['i'] == U_STRING_FROM_CONSTANT("1")); outpath = opt['o']; queue_time = opt['q'].strtol(); @@ -114,10 +117,23 @@ loop: if (upload) if (client->upload(url, file)) UApplication::exit_value = 0; } - else if (client->connectServer(url) && - client->sendRequest()) + else if (client->connectServer(url)) { - UApplication::exit_value = 0; + bool ok; + + if (bstdin == false) ok = client->sendRequest(); + else + { + UString req(U_CAPACITY); + + UServices::readEOF(STDIN_FILENO, req); + + if (req.empty()) U_ERROR("cannot read data from "); + + ok = client->sendRequest(req); + } + + if (ok) UApplication::exit_value = 0; } result = (include ? client->getResponse() diff --git a/include/ulib/net/socket.h b/include/ulib/net/socket.h index 4fb494cc..d60db271 100644 --- a/include/ulib/net/socket.h +++ b/include/ulib/net/socket.h @@ -405,9 +405,7 @@ public: U_TRACE(0, "USocket::setTcpDeferAccept()") # if defined(TCP_DEFER_ACCEPT) && !defined(_MSWINDOWS_) - uint32_t val = 1; - - (void) setSockOpt(SOL_TCP, TCP_DEFER_ACCEPT, (const void*)&val, sizeof(uint32_t)); + (void) setSockOpt(SOL_TCP, TCP_DEFER_ACCEPT, (const int[]){ 1 }, sizeof(int)); # endif } @@ -416,9 +414,8 @@ public: U_TRACE(0, "USocket::setTcpQuickAck()") # if defined(TCP_QUICKACK) && !defined(_MSWINDOWS_) - uint32_t val = 0; - - (void) setSockOpt(SOL_TCP, TCP_QUICKACK, (const void*)&val, sizeof(uint32_t)); + (void) setSockOpt(SOL_TCP, TCP_QUICKACK, (const int[]){ 0 }, sizeof(int)); + (void) setSockOpt(SOL_TCP, TCP_DEFER_ACCEPT, (const int[]){ 0 }, sizeof(int)); # endif } @@ -427,9 +424,7 @@ public: U_TRACE(0, "USocket::setTcpNoDelay()") # ifdef TCP_NODELAY - uint32_t val = 1; - - (void) setSockOpt(SOL_TCP, TCP_NODELAY, (const void*)&val, sizeof(uint32_t)); + (void) setSockOpt(SOL_TCP, TCP_NODELAY, (const int[]){ 1 }, sizeof(int)); # endif } @@ -452,9 +447,9 @@ public: { U_TRACE(0, "USocket::setTcpLingerOff()") - struct linger ling = { 0, 0 }; + const struct linger l = { 1, 1 }; - (void) setSockOpt(SOL_SOCKET, SO_LINGER, &ling, sizeof(ling)); + (void) setSockOpt(SOL_SOCKET, SO_LINGER, &l, sizeof(struct linger)); } /** @@ -469,9 +464,9 @@ public: { U_TRACE(0, "USocket::setTcpKeepAlive()") - const int value = 1; - - (void) setSockOpt(SOL_SOCKET, SO_KEEPALIVE, &value, sizeof(value)); +# ifdef SO_KEEPALIVE + (void) setSockOpt(SOL_SOCKET, SO_KEEPALIVE, (const int[]){ 1 }, sizeof(int)); +# endif } void setTcpFastOpen(); diff --git a/src/ulib/debug/error.cpp b/src/ulib/debug/error.cpp index a4b3c154..90d87d71 100644 --- a/src/ulib/debug/error.cpp +++ b/src/ulib/debug/error.cpp @@ -123,11 +123,15 @@ void UError::stackDump() if (pid == 0) { char buf[32]; + int fd_err = open("/tmp/gbd.err", O_CREAT | O_WRONLY, 0666); (void) u__snprintf(buf, sizeof(buf), "--pid=%P", 0); - (void) dup2(fd, STDOUT_FILENO); - (void) dup2(open("/tmp/gbd.err", O_CREAT | O_WRONLY, 0666), STDERR_FILENO); + (void) dup2(fd, STDOUT_FILENO); +# ifdef U_COVERITY_FALSE_POSITIVE + if (fd > 0) +# endif + (void) dup2(fd_err, STDERR_FILENO); (void) execlp("gdb", "gdb", "--nx", "--batch", "-ex", "thread apply all bt full", buf, name_buf, (char*)0); // thread apply all bt full 20 diff --git a/src/ulib/lemon/expression.cpp b/src/ulib/lemon/expression.cpp index ca84f03f..f74bf7c9 100644 --- a/src/ulib/lemon/expression.cpp +++ b/src/ulib/lemon/expression.cpp @@ -456,8 +456,8 @@ static int yy_pop_parser_stack(yyParser *pParser){ YYCODETYPE yymajor; yyStackEntry *yytos = &pParser->yystack[pParser->yyidx]; - if( pParser->yyidx<0 ) return 0; #ifndef U_COVERITY_FALSE_POSITIVE + if( pParser->yyidx<0 ) return 0; #ifndef NDEBUG if( yyTraceFILE && pParser->yyidx>=0 ){ fprintf(yyTraceFILE,"%sPopping %s\n", diff --git a/src/ulib/net/server/plugin/usp/Makefile.am b/src/ulib/net/server/plugin/usp/Makefile.am index 511f953d..65f905e4 100644 --- a/src/ulib/net/server/plugin/usp/Makefile.am +++ b/src/ulib/net/server/plugin/usp/Makefile.am @@ -25,19 +25,19 @@ MODULE_LIBTOOL_OPTIONS = -export-dynamic -avoid-version if !CROSS_COMPILING AM_CPPFLAGS = @USP_FLAGS@ -SUFFIXES = .cpp .usp .lo .la +#SUFFIXES = .cpp .usp .lo .la -db.cpp: ./usp_translator$(EXEEXT) +#db.cpp: ./usp_translator$(EXEEXT) -json.cpp: ./usp_translator$(EXEEXT) +#json.cpp: ./usp_translator$(EXEEXT) -query.cpp: ./usp_translator$(EXEEXT) +#query.cpp: ./usp_translator$(EXEEXT) -update.cpp: ./usp_translator$(EXEEXT) +#update.cpp: ./usp_translator$(EXEEXT) -fortune.cpp: ./usp_translator$(EXEEXT) +#fortune.cpp: ./usp_translator$(EXEEXT) -plaintext.cpp: ./usp_translator$(EXEEXT) +#plaintext.cpp: ./usp_translator$(EXEEXT) .usp.cpp: ./usp_translator$(EXEEXT) @$(WINELOADER) ./usp_translator$(EXEEXT) $< @@ -45,6 +45,8 @@ plaintext.cpp: ./usp_translator$(EXEEXT) .lo.la: $(CXXLINK) @USP_LDFLAGS@ -rpath $(moduledir) -module $(MODULE_LIBTOOL_OPTIONS) $< $(ulib_la) @USP_LIBS@ @ULIB_LIBS@ -all: usp_translator db.la fortune.la json.la plaintext.la query.la update.la +#all: usp_translator db.la fortune.la json.la plaintext.la query.la update.la + +all: usp_translator endif ## ---------------------------------------------------------------------------------------------------- diff --git a/src/ulib/net/server/plugin/usp/Makefile.in b/src/ulib/net/server/plugin/usp/Makefile.in index 205e3231..9a3df538 100644 --- a/src/ulib/net/server/plugin/usp/Makefile.in +++ b/src/ulib/net/server/plugin/usp/Makefile.in @@ -311,11 +311,10 @@ usp_translator_SOURCES = usp_translator.cpp usp_translator_LDFLAGS = $(PRG_LDFLAGS) moduledir = $(libexecdir)/ulib/usp @CROSS_COMPILING_FALSE@AM_CPPFLAGS = @USP_FLAGS@ -@CROSS_COMPILING_FALSE@SUFFIXES = .cpp .usp .lo .la all: all-am .SUFFIXES: -.SUFFIXES: .cpp .usp .lo .la .o .obj +.SUFFIXES: .cpp .la .lo .o .obj .usp $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ @@ -658,17 +657,19 @@ uninstall-am: uninstall-binPROGRAMS clean-local: -rm -rf core .libs *.bb* *.da *.gcov *.la *.exe trace.usp_translator* gmon.out usp_compile.sh -@CROSS_COMPILING_FALSE@db.cpp: ./usp_translator$(EXEEXT) +#SUFFIXES = .cpp .usp .lo .la -@CROSS_COMPILING_FALSE@json.cpp: ./usp_translator$(EXEEXT) +#db.cpp: ./usp_translator$(EXEEXT) -@CROSS_COMPILING_FALSE@query.cpp: ./usp_translator$(EXEEXT) +#json.cpp: ./usp_translator$(EXEEXT) -@CROSS_COMPILING_FALSE@update.cpp: ./usp_translator$(EXEEXT) +#query.cpp: ./usp_translator$(EXEEXT) -@CROSS_COMPILING_FALSE@fortune.cpp: ./usp_translator$(EXEEXT) +#update.cpp: ./usp_translator$(EXEEXT) -@CROSS_COMPILING_FALSE@plaintext.cpp: ./usp_translator$(EXEEXT) +#fortune.cpp: ./usp_translator$(EXEEXT) + +#plaintext.cpp: ./usp_translator$(EXEEXT) @CROSS_COMPILING_FALSE@.usp.cpp: ./usp_translator$(EXEEXT) @CROSS_COMPILING_FALSE@ @$(WINELOADER) ./usp_translator$(EXEEXT) $< @@ -676,7 +677,9 @@ clean-local: @CROSS_COMPILING_FALSE@.lo.la: @CROSS_COMPILING_FALSE@ $(CXXLINK) @USP_LDFLAGS@ -rpath $(moduledir) -module $(MODULE_LIBTOOL_OPTIONS) $< $(ulib_la) @USP_LIBS@ @ULIB_LIBS@ -@CROSS_COMPILING_FALSE@all: usp_translator db.la fortune.la json.la plaintext.la query.la update.la +#all: usp_translator db.la fortune.la json.la plaintext.la query.la update.la + +@CROSS_COMPILING_FALSE@all: usp_translator # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/src/ulib/net/server/plugin/usp/db.cpp b/src/ulib/net/server/plugin/usp/db.cpp deleted file mode 100644 index e0c05263..00000000 --- a/src/ulib/net/server/plugin/usp/db.cpp +++ /dev/null @@ -1,99 +0,0 @@ -// db.cpp - dynamic page translation (db.usp => db.cpp) - -#include - -#include "world.h" - - #ifndef AS_cpoll_cppsp_DO - static UValue* pvalue; - #endif - static World* pworld_db; - static UOrmSession* psql_db; - static UOrmStatement* pstmt_db; - - static void usp_init_db() - { - U_TRACE(5, "::usp_init_db()") - - pworld_db = U_NEW(World); - - #ifndef AS_cpoll_cppsp_DO - pvalue = U_NEW(UValue(OBJECT_VALUE)); - #endif - } - - static void usp_fork_db() - { - U_TRACE(5, "::usp_fork_db()") - - psql_db = U_NEW(UOrmSession(U_CONSTANT_TO_PARAM("hello_world"))); - pstmt_db = U_NEW(UOrmStatement(*psql_db, U_CONSTANT_TO_PARAM("SELECT randomNumber FROM World WHERE id = ?"))); - - if (pstmt_db == 0) U_ERROR("usp_fork_db(): we cound't connect to db"); - - pstmt_db->use( pworld_db->id); - pstmt_db->into(pworld_db->randomNumber); - } - - static void usp_end_db() - { - U_TRACE(5, "::usp_end_db()") - - delete pstmt_db; - delete psql_db; - delete pworld_db; - #ifndef AS_cpoll_cppsp_DO - delete pvalue; - #endif - } - -extern "C" { -extern U_EXPORT int runDynamicPage_db(UClientImage_Base* client_image); - U_EXPORT int runDynamicPage_db(UClientImage_Base* client_image) -{ - U_TRACE(0, "::runDynamicPage_db(%p)", client_image) - - - // ------------------------------ - // special argument value: - // ------------------------------ - // 0 -> call it as service - // -1 -> init - // -2 -> reset - // -3 -> destroy - // -4 -> call it for sigHUP - // -5 -> call it after fork - // ------------------------------ - - if (client_image) - { - if (client_image == (void*)-1) { usp_init_db(); U_RETURN(0); } - - if (client_image == (void*)-3) { usp_end_db(); U_RETURN(0); } - - if (client_image == (void*)-5) { usp_fork_db(); U_RETURN(0); } - - if (client_image >= (void*)-5) U_RETURN(0); - - (void) UClientImage_Base::wbuffer->append( - U_CONSTANT_TO_PARAM("Content-Type: application/json; charset=UTF-8\r\n\r\n")); - - u_http_info.endHeader = UClientImage_Base::wbuffer->size(); - } - - pworld_db->id = u_get_num_random(10000); - - pstmt_db->execute(); - - #ifdef AS_cpoll_cppsp_DO - USP_PRINTF_ADD("{\"id\":%u,\"randomNumber\":%u}", pworld_db->id, pworld_db->randomNumber); - #else - USP_JSON_stringify(*pvalue, World, *pworld_db); - #endif - - U_http_content_type_len = 1; - - UClientImage_Base::setRequestNoCache(); - - U_RETURN(200); -} } \ No newline at end of file diff --git a/src/ulib/net/server/plugin/usp/db.usp b/src/ulib/net/server/plugin/usp/db.usp index 56d2c937..1c0b5012 100644 --- a/src/ulib/net/server/plugin/usp/db.usp +++ b/src/ulib/net/server/plugin/usp/db.usp @@ -36,6 +36,7 @@ static void usp_fork_db() pstmt_db->into(pworld_db->randomNumber); } +#ifdef DEBUG static void usp_end_db() { U_TRACE(5, "::usp_end_db()") @@ -47,6 +48,7 @@ static void usp_end_db() delete pvalue; #endif } +#endif --> Fortunes diff --git a/src/ulib/net/server/plugin/usp/plaintext.cpp b/src/ulib/net/server/plugin/usp/plaintext.cpp deleted file mode 100644 index dcc292fb..00000000 --- a/src/ulib/net/server/plugin/usp/plaintext.cpp +++ /dev/null @@ -1,37 +0,0 @@ -// plaintext.cpp - dynamic page translation (plaintext.usp => plaintext.cpp) - -#include - - - -extern "C" { -extern U_EXPORT int runDynamicPage_plaintext(UClientImage_Base* client_image); - U_EXPORT int runDynamicPage_plaintext(UClientImage_Base* client_image) -{ - U_TRACE(0, "::runDynamicPage_plaintext(%p)", client_image) - - - // ------------------------------ - // special argument value: - // ------------------------------ - // 0 -> call it as service - // -1 -> init - // -2 -> reset - // -3 -> destroy - // -4 -> call it for sigHUP - // -5 -> call it after fork - // ------------------------------ - - if (client_image) - { - if (client_image >= (void*)-5) U_RETURN(0); - - u_http_info.endHeader = 0; - } - - (void) UClientImage_Base::wbuffer->append( - U_CONSTANT_TO_PARAM("Hello, World!") - ); - - U_RETURN(200); -} } \ No newline at end of file diff --git a/src/ulib/net/server/plugin/usp/query.cpp b/src/ulib/net/server/plugin/usp/query.cpp deleted file mode 100644 index 680c8a33..00000000 --- a/src/ulib/net/server/plugin/usp/query.cpp +++ /dev/null @@ -1,131 +0,0 @@ -// query.cpp - dynamic page translation (query.usp => query.cpp) - -#include - -#include "world.h" - - #ifndef AS_cpoll_cppsp_DO - static UValue* pvalue; - #endif - static UOrmSession* psql_query; - static UOrmStatement* pstmt_query; - static World* pworld_query; - static UVector* pvworld_query; - - static void usp_init_query() - { - U_TRACE(5, "::usp_init_query()") - - pworld_query = U_NEW(World); - pvworld_query = U_NEW(UVector(500)); - - #ifndef AS_cpoll_cppsp_DO - pvalue = U_NEW(UValue(ARRAY_VALUE)); - #endif - } - - static void usp_fork_query() - { - U_TRACE(5, "::usp_fork_query()") - - psql_query = U_NEW(UOrmSession(U_CONSTANT_TO_PARAM("hello_world"))); - pstmt_query = U_NEW(UOrmStatement(*psql_query, U_CONSTANT_TO_PARAM("SELECT randomNumber FROM World WHERE id = ?"))); - - if (pstmt_query == 0) U_ERROR("usp_fork_query(): we cound't connect to db"); - - pstmt_query->use( pworld_query->id); - pstmt_query->into(pworld_query->randomNumber); - } - - static void usp_end_query() - { - U_TRACE(5, "::usp_end_query()") - - delete pstmt_query; - delete psql_query; - delete pvworld_query; - delete pworld_query; - #ifndef AS_cpoll_cppsp_DO - delete pvalue; - #endif - } - -extern "C" { -extern U_EXPORT int runDynamicPage_query(UClientImage_Base* client_image); - U_EXPORT int runDynamicPage_query(UClientImage_Base* client_image) -{ - U_TRACE(0, "::runDynamicPage_query(%p)", client_image) - - - // ------------------------------ - // special argument value: - // ------------------------------ - // 0 -> call it as service - // -1 -> init - // -2 -> reset - // -3 -> destroy - // -4 -> call it for sigHUP - // -5 -> call it after fork - // ------------------------------ - - if (client_image) - { - if (client_image == (void*)-1) { usp_init_query(); U_RETURN(0); } - - if (client_image == (void*)-3) { usp_end_query(); U_RETURN(0); } - - if (client_image == (void*)-5) { usp_fork_query(); U_RETURN(0); } - - if (client_image >= (void*)-5) U_RETURN(0); - - (void) UClientImage_Base::wbuffer->append( - U_CONSTANT_TO_PARAM("Content-Type: application/json; charset=UTF-8\r\n\r\n")); - - u_http_info.endHeader = UClientImage_Base::wbuffer->size(); - - (void) UHTTP::processForm(); - } - - UString queries = USP_FORM_VALUE(0); - - int i = 0, num_queries = queries.strtol(); - - if (num_queries < 1) num_queries = 1; - else if (num_queries > 500) num_queries = 500; - - #ifdef AS_cpoll_cppsp_DO - USP_PUTS_CHAR('['); - #endif - - while (true) - { - pworld_query->id = u_get_num_random(10000); - - pstmt_query->execute(); - - #ifdef AS_cpoll_cppsp_DO - USP_PRINTF("{\"id\":%u,\"randomNumber\":%u}", pworld_query->id, pworld_query->randomNumber); - #endif - - pvworld_query->push_back(U_NEW(World(*pworld_query))); - - if (++i == num_queries) break; - - #ifdef AS_cpoll_cppsp_DO - USP_PUTS_CHAR(','); - #endif - } - - #ifdef AS_cpoll_cppsp_DO - USP_PUTS_CHAR(']'); - #else - USP_JSON_stringify(*pvalue, UVector, *pvworld_query); - #endif - pvworld_query->clear(); - - U_http_content_type_len = 1; - - UClientImage_Base::setRequestNoCache(); - - U_RETURN(200); -} } \ No newline at end of file diff --git a/src/ulib/net/server/plugin/usp/query.usp b/src/ulib/net/server/plugin/usp/query.usp index 6d3875f1..f802334b 100644 --- a/src/ulib/net/server/plugin/usp/query.usp +++ b/src/ulib/net/server/plugin/usp/query.usp @@ -38,6 +38,7 @@ static void usp_fork_query() pstmt_query->into(pworld_query->randomNumber); } +#ifdef DEBUG static void usp_end_query() { U_TRACE(5, "::usp_end_query()") @@ -50,6 +51,7 @@ static void usp_end_query() delete pvalue; #endif } +#endif -->
idmessage