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 2018-08-29 18:20:52 +02:00
parent c90853df28
commit d4fa6bdabc
12 changed files with 112 additions and 72 deletions

View File

@ -52,13 +52,15 @@ static bool usp_bSESSION;
{ \
UString2Object(varname##_value.data(), usp_sz, varname); \
} \
U_INTERNAL_DUMP("%s(%u) = %.*S", #varname, usp_sz, usp_sz, varname##_value.data()) \
U_INTERNAL_DUMP("%s(%u) = %V", #varname, usp_sz, varname##_value.rep) \
}
#define USP_SESSION_VAR_PUT(index,varname) \
{ \
usp_sz = UObject2String(varname, usp_buffer, sizeof(usp_buffer)); \
UHTTP::putDataSession(index, usp_buffer, usp_sz); \
UString varname##_value((void*)usp_buffer, usp_sz); \
UHTTP::data_session->putValueVar(index, varname##_value); \
U_INTERNAL_DUMP("%s(%u) = %V", #varname, usp_sz, varname##_value.rep) \
}
static void usp_body_ir_web()
@ -66,6 +68,11 @@ static void usp_body_ir_web()
U_TRACE(5, "::usp_body_ir_web()")
usp_bSESSION = (UHTTP::getDataSession() ? true : (UHTTP::setSessionCookie(), false));
if (usp_bSESSION) {
UHTTP::putDataSESSION();
}
usp_bSESSION = true;
const char* ref = "?ext=help";
uint32_t num_args = UHTTP::processForm() / 2;
@ -219,7 +226,10 @@ extern U_EXPORT void runDynamicPage_ir_web();
U_TRACE_NO_PARAM(0, "::runDynamicPage_ir_web()")
usp_body_ir_web();
if (usp_bSESSION) UHTTP::putDataSession();
if (usp_bSESSION) {
UHTTP::putDataSESSION();
}
usp_bSESSION = true;
UHTTP::mime_index = U_html;
U_http_info.endHeader = 0;
} }

View File

@ -79,7 +79,7 @@
# include <ulib/magic/magic.h>
#endif
#ifdef USE_LIBXML2
#if defined(USE_LIBXML2) && !defined(U_USP_PROCESS)
# include "ulib/xml/libxml2/schema.h"
#endif

View File

@ -16,10 +16,6 @@
#include <ulib/base/base.h>
#ifdef USE_LIBXML2
# include <libxml/xpathInternals.h>
#endif
/**
* class UObjectDumpable
*
@ -104,7 +100,9 @@ public:
virtual const char* dump() const __pure { return ((Concrete*)ptr_object)->dump(true); }
};
#ifdef USE_LIBXML2
#if defined(USE_LIBXML2) && !defined(U_USP_PROCESS)
# include <libxml/xpathInternals.h>
template <> class U_NO_EXPORT UObjectDumpable_Adapter<_xmlNode> : public UObjectDumpable {
public:

View File

@ -139,5 +139,4 @@ template <class T> inline char* U_OBJECT_TO_TRACE(T& object)
return str;
}
#endif
#endif

View File

@ -14,7 +14,9 @@
#ifndef U_USP_MACRO_H
#define U_USP_MACRO_H 1
#define U_USP_PROCESS 1
#include <ulib/all.h>
#undef U_USP_PROCESS
#define USP_PUTS_BUFFER (void)UClientImage_Base::wbuffer->append(usp_buffer,usp_sz)
#define USP_PUTS_CHAR(c) (void)UClientImage_Base::wbuffer->push_back((c))

View File

@ -2698,6 +2698,37 @@ inline bool operator>=(const UString& lhs, const UString& rhs) { return lh
inline bool operator>=(const char* lhs, const UString& rhs) { return rhs.compare(lhs) <= 0; }
inline bool operator>=(const UString& lhs, const char* rhs) { return lhs.compare(rhs) >= 0; }
// template specialization for UString2Object() and UObject2String()
template <> inline void UString2Object<UString>(const char* t, uint32_t tlen, UString& object)
{
U_TRACE(0, "UString2Object<UString>(%.*S,%u,%V)", tlen, t, tlen, object.rep)
object.setConstant(t, tlen);
}
template <> inline char* UObject2String<UString>(UString& object)
{
U_TRACE(0, "UObject2String<UString>(%V)", object.rep)
U_INTERNAL_ASSERT(object.isNullTerminated())
return object.data();
}
template <> inline uint32_t UObject2String<UString>(UString& object, char* pbuffer, uint32_t buffer_size)
{
U_TRACE(0, "UObject2String<UString>(%V,%p,%u)", object.rep, pbuffer, buffer_size)
uint32_t sz = object.size();
U_INTERNAL_ASSERT_MINOR(sz, buffer_size)
U_MEMCPY(pbuffer, object.data(), sz);
return sz;
}
// by Victor Stewart
#if defined(U_STDCPP_ENABLE) && defined(HAVE_CXX11)

View File

@ -673,8 +673,8 @@ public:
static bool getDataStorage(uint32_t index, UString& value);
static bool getDataSession(uint32_t index, UString& value);
static void putDataStorage();
static void putDataSession();
static void putDataSTORAGE();
static void putDataSESSION();
static void putDataStorage(uint32_t index, const char* val, uint32_t sz);
static void putDataSession(uint32_t index, const char* val, uint32_t sz);

View File

@ -103,12 +103,19 @@ public:
U_INTERNAL_DUMP("token = %V", token.rep)
}
void manageDirectiveSessionOrStorage(const char* name)
void manageDirectiveSessionOrStorage(const char* name, uint32_t name_len)
{
U_TRACE(5, "Application::manageDirectiveSessionOrStorage(%S)", name)
U_TRACE(5, "Application::manageDirectiveSessionOrStorage(%.*S,%u)", name_len, name, name_len)
U_INTERNAL_ASSERT(token)
(void) output0.reserve(500U + token.size());
(void) output1.reserve(500U);
output0.snprintf_add(U_CONSTANT_TO_PARAM("\n\t%v\n\t\n\tif (usp_b%.*s) {\n"), token.rep, name_len, name);
output1.snprintf_add(U_CONSTANT_TO_PARAM( "\n\tif (usp_b%.*s) {\n"), name_len, name);
if (token.empty()) output0.snprintf_add(U_CONSTANT_TO_PARAM("\n\tUHTTP::putData%.*s();\n"), name_len, name);
else
{
UString id, tmp;
const char* ptr;
uint32_t pos, size;
@ -116,10 +123,6 @@ public:
bvar = true;
(void) output0.reserve(20U + token.size());
output0.snprintf_add(U_CONSTANT_TO_PARAM("\n\t%v\n\t\n"), token.rep);
for (uint32_t i = 0, n = vec.size(); i < n; ++i)
{
ptr = (tmp = UStringExt::trim(vec[i])).data();
@ -133,8 +136,8 @@ public:
(void) output0.reserve(50U + size);
(void) output1.reserve(50U + size);
output0.snprintf_add(U_CONSTANT_TO_PARAM("\n\tif (usp_b%s) USP_%s_VAR_GET(%u,%.*s);\n"), name, name, i, size, ptr);
output1.snprintf_add(U_CONSTANT_TO_PARAM("\n\tif (usp_b%s) USP_%s_VAR_PUT(%u,%.*s);\n"), name, name, i, size, ptr);
output0.snprintf_add(U_CONSTANT_TO_PARAM("\n\tUSP_%.*s_VAR_GET(%u,%.*s);\n"), name_len, name, i, size, ptr);
output1.snprintf_add(U_CONSTANT_TO_PARAM("\n\tUSP_%.*s_VAR_PUT(%u,%.*s);\n"), name_len, name, i, size, ptr);
# ifdef DEBUG
id.clear(); // NB: to avoid DEAD OF SOURCE STRING WITH CHILD ALIVE...
@ -142,6 +145,10 @@ public:
}
}
output0.snprintf_add(U_CONSTANT_TO_PARAM( "\n\t}\n\tusp_b%.*s = true;\n"), name_len, name);
output1.snprintf_add(U_CONSTANT_TO_PARAM("\n\tUHTTP::putData%.*s();\n\t}\n\tusp_b%.*s = true;\n"), name_len, name, name_len, name);
}
void manageDirectiveArgsOrCpath(const char* name, bool binc)
{
U_TRACE(5, "Application::manageDirectiveArgsOrCpath(%S,%b)", name, binc)
@ -152,7 +159,7 @@ public:
UString id, tmp;
UVector<UString> vec(token, "\t\n;");
(void) output0.reserve(200U + token.size());
(void) output0.reserve(500U + token.size());
for (uint32_t i = 0, n = vec.size(); i < n; ++i)
{
@ -307,13 +314,7 @@ public:
setDirectiveItem(directive, U_CONSTANT_SIZE("session"));
if (token) manageDirectiveSessionOrStorage("SESSION");
else
{
(void) output1.append(U_CONSTANT_TO_PARAM("\n\tif (usp_bSESSION) UHTTP::putDataSession();\n"));
}
(void) output0.append(U_CONSTANT_TO_PARAM("\n\tusp_bSESSION = true;\n"));
manageDirectiveSessionOrStorage(U_CONSTANT_TO_PARAM("SESSION"));
}
else if (strncmp(directive, U_CONSTANT_TO_PARAM("storage")) == 0)
{
@ -326,13 +327,7 @@ public:
setDirectiveItem(directive, U_CONSTANT_SIZE("storage"));
if (token) manageDirectiveSessionOrStorage("STORAGE");
else
{
(void) output1.append(U_CONSTANT_TO_PARAM("\n\ttif (usp_bSTORAGE) UHTTP::putDataStorage();\n"));
}
(void) output0.append(U_CONSTANT_TO_PARAM("\n\tusp_bSTORAGE = true;\n"));
manageDirectiveSessionOrStorage(U_CONSTANT_TO_PARAM("STORAGE"));
}
else if (strncmp(directive, U_CONSTANT_TO_PARAM("args")) == 0)
{
@ -896,13 +891,15 @@ loop: distance = t.getDistance();
" { \\\n"
" UString2Object(varname##_value.data(), usp_sz, varname); \\\n"
" } \\\n"
" U_INTERNAL_DUMP(\"%s(%u) = %.*S\", #varname, usp_sz, usp_sz, varname##_value.data()) \\\n"
" U_INTERNAL_DUMP(\"%s(%u) = %V\", #varname, usp_sz, varname##_value.rep) \\\n"
" }"
"\n\t\n"
"#define USP_SESSION_VAR_PUT(index,varname) \\\n"
" { \\\n"
" usp_sz = UObject2String(varname, usp_buffer, sizeof(usp_buffer)); \\\n"
" UHTTP::putDataSession(index, usp_buffer, usp_sz); \\\n"
" UString varname##_value((void*)usp_buffer, usp_sz); \\\n"
" UHTTP::data_session->putValueVar(index, varname##_value); \\\n"
" U_INTERNAL_DUMP(\"%s(%u) = %V\", #varname, usp_sz, varname##_value.rep) \\\n"
" }\n"));
}
@ -919,13 +916,15 @@ loop: distance = t.getDistance();
" { \\\n"
" UString2Object(varname##_value.data(), usp_sz, varname); \\\n"
" } \\\n"
" U_INTERNAL_DUMP(\"%s(%u) = %.*S\", #varname, usp_sz, usp_sz, varname##_value.data()) \\\n"
" U_INTERNAL_DUMP(\"%s(%u) = %V\", #varname, usp_sz, varname##_value.rep) \\\n"
" }"
"\n\t\n"
"#define USP_STORAGE_VAR_PUT(index,varname) \\\n"
" { \\\n"
" usp_sz = UObject2String(varname, usp_buffer, sizeof(usp_buffer)); \\\n"
" UHTTP::putDataStorage(index, usp_buffer, usp_sz); \\\n"
" UString varname##_value((void*)usp_buffer, usp_sz); \\\n"
" UHTTP::data_storage->putValueVar(index, varname##_value); \\\n"
" U_INTERNAL_DUMP(\"%s(%u) = %V\", #varname, usp_sz, varname##_value.rep) \\\n"
" }\n"));
}

View File

@ -133,7 +133,7 @@ const char* UDataSession::dump(bool reset) const
*UObjectIO::os << '\n'
<< "creation " << creation << '\n'
<< "last_access " << last_access << '\n'
<< "vec_var (UVector<UString*> " << (void*)&vec_var << ')';
<< "vec_var (UVector<UString> " << (void*)&vec_var << ')';
if (reset)
{

View File

@ -6039,9 +6039,9 @@ bool UHTTP::getDataSession(uint32_t index, UString& value)
U_RETURN(false);
}
void UHTTP::putDataSession()
void UHTTP::putDataSESSION()
{
U_TRACE_NO_PARAM(0, "UHTTP::putDataSession()")
U_TRACE_NO_PARAM(0, "UHTTP::putDataSESSION()")
U_INTERNAL_ASSERT_POINTER(db_session)
U_INTERNAL_ASSERT_POINTER(data_session)
@ -6060,17 +6060,17 @@ void UHTTP::putDataSession(uint32_t index, const char* value, uint32_t size)
if (size == 0) data_session->putValueVar(index, UString::getStringNull());
else
{
UString _value((void*)value, size);
UString x((void*)value, size);
data_session->putValueVar(index, _value);
data_session->putValueVar(index, x);
}
putDataSession();
putDataSESSION();
}
void UHTTP::putDataStorage()
void UHTTP::putDataSTORAGE()
{
U_TRACE_NO_PARAM(0, "UHTTP::putDataStorage()")
U_TRACE_NO_PARAM(0, "UHTTP::putDataSTORAGE()")
U_INTERNAL_ASSERT_POINTER(db_session)
U_INTERNAL_ASSERT_POINTER(data_storage)
@ -6095,7 +6095,7 @@ void UHTTP::putDataStorage(uint32_t index, const char* value, uint32_t size)
data_storage->putValueVar(index, _value);
}
putDataStorage();
putDataSTORAGE();
}
#ifdef DEBUG

View File

@ -1 +1 @@
0366
036D

View File

@ -19,7 +19,7 @@ rm -f tmp/usp_compile.sh.err /tmp/*.hpack.* \
$DOC_ROOT/trace.*userver_*.[0-9]* $DOC_ROOT/object.*userver_*.[0-9]* $DOC_ROOT/stack.*userver_*.[0-9]* $DOC_ROOT/mempool.*userver_*.[0-9]*
UTRACE="0 50M 0"
UTRACE_SIGNAL="0 50M -1"
#UTRACE_SIGNAL="0 50M -1"
UTRACE_FOLDER=/tmp
TMPDIR=/tmp
#UOBJDUMP="0 10M 100"
@ -73,7 +73,8 @@ userver {
#LOAD_BALANCE_CLUSTER 10.30.0.1,10.30.0.2
#LOAD_BALANCE_DEVICE_NETWORK enp0s20u1
#LOAD_BALANCE_LOADAVG_THRESHOLD 4.0
PREFORK_CHILD 2
PREFORK_CHILD 0
#PREFORK_CHILD 2
#CRASH_COUNT 1
#CRASH_EMAIL_NOTIFY mail.unirel.com:stefano.casazza@unirel.com
#DOS_SITE_COUNT 1