1
0
mirror of https://github.com/stefanocasazza/ULib.git synced 2025-10-05 19:18:01 +08:00
This commit is contained in:
stefanocasazza 2017-12-22 17:45:23 +01:00
parent 0778c04fab
commit f8242556bb
6 changed files with 60 additions and 70 deletions

View File

@ -61,21 +61,18 @@ extern U_EXPORT void runDynamicPage_ir_web(int param);
{
U_TRACE(0, "::runDynamicPage_ir_web(%d)", param)
if (param)
{
if (param == U_DPAGE_INIT) { usp_init_ir_web(); return; }
if (param == U_DPAGE_DESTROY) { usp_end_ir_web(); return; }
if (param >= U_DPAGE_FORK) return;
}
UHTTP::mime_index = U_html;
U_http_info.endHeader = 0;
if (UHTTP::getDataSession() == false) UHTTP::setSessionCookie();
const char* ref = "?ext=help";
uint32_t num_args = UHTTP::processForm() / 2;
bool form_with_help = false;
@ -142,26 +139,21 @@ extern U_EXPORT void runDynamicPage_ir_web(int param);
(void) UClientImage_Base::wbuffer->append(
U_CONSTANT_TO_PARAM("<html>\n<head>\n <title>ULib search engine: a full-text search system for communities</title>\n <link title=\"Services\" rel=\"stylesheet\" href=\"/css/pagination.min.css\" type=\"text/css\">\n</head>\n<body>\n <div id=\"estform\" class=\"estform\">\n <form action=\"ir_web\" method=\"post\" id=\"form_self\" name=\"form_self\">\n\n <div class=\"form_navi\">\n <a href=\"")
);
(void) UClientImage_Base::wbuffer->append((ref));
(void) UClientImage_Base::wbuffer->append(
U_CONSTANT_TO_PARAM("\" class=\"navilink\">help</a>\n </div>\n\n <div class=\"form_basic\">\n <input type=\"text\" name=\"phrase\" value=\"\" size=\"80\" id=\"phrase\" class=\"text\" tabindex=\"1\" accesskey=\"0\">\n <input type=\"submit\" value=\"Search\" id=\"search\" class=\"submit\" tabindex=\"2\" accesskey=\"1\">\n </div>\n\n <div class=\"form_extension\">\n <select name=\"perpage\" id=\"perpage\" tabindex=\"3\">\n <option value=\"10\" selected=\"selected\">10</option>\n <option value=\"20\">20</option> \n <option value=\"30\">30</option>\n <option value=\"50\">50</option>\n <option value=\"60\">60</option>\n <option value=\"70\">70</option>\n <option value=\"80\">80</option>\n <option value=\"90\">90</option>\n <option value=\"100\">100</option>\n </select> per page\n </div>\n </form>\n </div>\n\n")
);
if (form_with_help) {
(void) UClientImage_Base::wbuffer->append(
U_CONSTANT_TO_PARAM(" <div class=\"help\">\n <h1 class=\"title\">Help</h1>\n\n <h2>What is This?</h2>\n\n <p>This is a full-text search system. You can search for documents including some specified words.</p>\n\n <h2>How to Use</h2>\n\n <p>Input search phrase into the field at the top of the page. For example, if you search for documents including \"computer\", input the\n following.</p>\n <pre>computer</pre>\n\n <p>If you search for documents including both of \"network\" and \"socket\", input the following.</p>\n <pre>network socket</pre>\n\n <p>It is the same as the following.</p>\n <pre>network AND socket</pre>\n\n <p>If you search for documents including \"network\" followed by \"socket\", input the following.</p>\n <pre>\"network socket\"</pre>\n\n <p>If you search for documents including one or both of \"network\" and \"socket\", input the following.</p>\n <pre>network OR socket</pre>\n\n <p>If you search for documents including \"network\" but without \"socket\", input the following.</p>\n <pre>network AND NOT socket</pre>\n\n <p>For more complex query, you can use \"<code>(</code>\". Note that the priority of \"<code>(</code>\" is higher than that of \"<code>AND</code>\",\n \"<code>OR</code>\" and \"<code>NOT</code>\". So, the following is to search for documents including one of \"F1\", \"F-1\", \"Formula One\", and including\n one of \"champion\" and \"victory\".</p>\n <pre>(F1 OR F-1 OR \"Formula One\") AND (champion OR victory)</pre>\n\n <h2>You can use DOS wildcard characters</h2>\n\n <p>If you search for documents including some words beginning with \"inter\", input the following.</p>\n <pre>inter*</pre>\n\n <p>If you search for documents including some words ending with \"sphere\", input the following.</p>\n <pre>*sphere</pre>\n\n <p>If you search for documents matching some words matching \"?n*able\" (unable, unavoidable, inevitable, ...), input the following.</p>\n <pre>?n*able</pre>\n\n <h2>Other Faculties</h2>\n\n <p>\"<code>[...] per page</code>\" specifies the number of shown documents per page. If documents over one page correspond, you can move to another\n page via anchors of \"<code>PREV</code>\" and \"<code>NEXT</code>\" at the bottom of the page.</p>\n\n <h2>Information</h2>\n\n <p>See <a href=\"http://www.unirel.com/\">the project site</a> for more detail.</p>\n </div>\n\n")
);
} else {
if (num_args == 0) {
(void) UClientImage_Base::wbuffer->append(
U_CONSTANT_TO_PARAM(" <div class=\"logo\">\n <h1 class=\"title\">ULib search engine</h1>\n <div class=\"caption\">a full-text search system for communities</div>\n </div>\n\n")
);
} else {
UString link_paginazione = UHTTP::getLinkPagination();
@ -177,7 +169,6 @@ extern U_EXPORT void runDynamicPage_ir_web(int param);
(void) UClientImage_Base::wbuffer->append(
U_CONSTANT_TO_PARAM(" <p class=\"note\">Your search did not match any documents.</p>\n")
);
} else {
UString doc, snippet_doc(U_CAPACITY), basename, filename, pathname1(U_CAPACITY), pathname2(U_CAPACITY);
@ -210,13 +201,10 @@ extern U_EXPORT void runDynamicPage_ir_web(int param);
(void) UClientImage_Base::wbuffer->append(
U_CONSTANT_TO_PARAM(" <div id=\"estinfo\" class=\"estinfo\">\n Powered by <a href=\"http://www.unirel.com/\">ULib search engine</a> ")
);
(void) UClientImage_Base::wbuffer->append((*footer));
(void) UClientImage_Base::wbuffer->append(
U_CONSTANT_TO_PARAM(" </div>\n</body>\n</html>")
);
UHTTP::putDataSession();
} }

View File

@ -14,14 +14,12 @@ extern U_EXPORT void runDynamicPage_wi_auth(int param);
{
U_TRACE(0, "::runDynamicPage_wi_auth(%d)", param)
if (param)
{
if (param == U_DPAGE_INIT) { usp_init_wi_auth(); return; }
if (param == U_DPAGE_DESTROY) { usp_end_wi_auth(); return; }
if (param == U_DPAGE_SIGHUP) { usp_sighup_wi_auth(); return; }
if (param >= U_DPAGE_FORK) return;
}

View File

@ -40,6 +40,8 @@ template <class T> inline void UString2Object(const char* t, uint32_t tlen, T& o
{
U_INTERNAL_TRACE("UString2Object(%.*s,%u,%p)", tlen, t, tlen, &object)
U_INTERNAL_ASSERT_MAJOR(tlen, 0)
#ifdef U_STDCPP_ENABLE
UObjectIO::input(t, tlen);

View File

@ -45,8 +45,21 @@
#define USP_STORAGE_VAR_GET(index,varname) \
{ \
UString varname##_value; \
if (UHTTP::getDataStorage(index, varname##_value)) \
UString2Object(U_STRING_TO_PARAM(varname##_value), varname); \
if (UHTTP::getDataStorage(index, varname##_value) && \
(usp_sz = varname##_value.size())) \
{ \
UString2Object(varname##_value.data(), usp_sz, varname); \
} \
}
#define USP_SESSION_VAR_GET(index,varname) \
{ \
UString varname##_value; \
if (UHTTP::getDataSession(index, varname##_value) == false) UHTTP::setSessionCookie(); \
else if ((usp_sz = varname##_value.size())) \
{ \
UString2Object(varname##_value.data(), usp_sz, varname); \
} \
}
#define USP_STORAGE_VAR_PUT(index,varname) \
@ -55,18 +68,11 @@
UHTTP::putDataStorage(index, usp_buffer, usp_sz); \
}
#define USP_SESSION_VAR_GET(index,varname) \
{ \
UString varname##_value; \
if (UHTTP::getDataSession(index, varname##_value) == false) UHTTP::setSessionCookie(); \
else UString2Object(U_STRING_TO_PARAM(varname##_value), varname); \
}
#define USP_SESSION_VAR_PUT(index,varname) \
{ \
if (UHTTP::isDataSession()) \
if (UHTTP::isDataSession() && \
(usp_sz = UObject2String(varname, usp_buffer, sizeof(usp_buffer)))) \
{ \
usp_sz = UObject2String(varname, usp_buffer, sizeof(usp_buffer)); \
UHTTP::putDataSession(index, usp_buffer, usp_sz); \
} \
}

View File

@ -92,8 +92,8 @@ public:
(void) output0.reserve(50U + size);
(void) output1.reserve(50U + size);
output0.snprintf_add(U_CONSTANT_TO_PARAM("\n\tUSP_%s_VAR_GET(%u,%.*s);\n\t"), name, i, size, ptr);
output1.snprintf_add(U_CONSTANT_TO_PARAM("\n\tUSP_%s_VAR_PUT(%u,%.*s);\n\t"), name, i, size, ptr);
output0.snprintf_add(U_CONSTANT_TO_PARAM("\n\tUSP_%s_VAR_GET(%u,%.*s);\n"), name, i, size, ptr);
output1.snprintf_add(U_CONSTANT_TO_PARAM("\n\tUSP_%s_VAR_PUT(%u,%.*s);\n"), name, i, size, ptr);
# ifdef DEBUG
id.clear(); // NB: to avoid DEAD OF SOURCE STRING WITH CHILD ALIVE...
@ -119,11 +119,11 @@ public:
pos = tmp.find('(');
id = (pos == U_NOT_FOUND ? tmp : tmp.substr(0U, pos));
output0.snprintf_add(U_CONSTANT_TO_PARAM("\n\tUString %v = %s(%u);\n\t"), id.rep, name, i+binc);
output0.snprintf_add(U_CONSTANT_TO_PARAM("\n\tUString %v = %s(%u);\n"), id.rep, name, i+binc);
if (pos != U_NOT_FOUND)
{
output0.snprintf_add(U_CONSTANT_TO_PARAM("\n\tif (%v.empty()) %v = U_STRING_FROM_CONSTANT(%.*s);\n\t"), id.rep, id.rep, tmp.size()-pos-2, tmp.c_pointer(pos+1));
output0.snprintf_add(U_CONSTANT_TO_PARAM("\n\tif (%v.empty()) %v = U_STRING_FROM_CONSTANT(%.*s);\n"), id.rep, id.rep, tmp.size()-pos-2, tmp.c_pointer(pos+1));
}
# ifdef DEBUG
@ -263,8 +263,8 @@ public:
if (token) manageDirectiveSessionOrStorage("SESSION");
else
{
(void) output0.append(U_CONSTANT_TO_PARAM("\n\tif (UHTTP::getDataSession() == false) UHTTP::setSessionCookie();\n\t"));
(void) output1.append(U_CONSTANT_TO_PARAM("\n\tUHTTP::putDataSession();\n\t"));
(void) output0.append(U_CONSTANT_TO_PARAM("\n\tif (UHTTP::getDataSession() == false) UHTTP::setSessionCookie();\n"));
(void) output1.append(U_CONSTANT_TO_PARAM("\n\tUHTTP::putDataSession();\n"));
}
}
else if (strncmp(directive, U_CONSTANT_TO_PARAM("storage")) == 0)
@ -279,8 +279,8 @@ public:
if (token) manageDirectiveSessionOrStorage("STORAGE");
else
{
(void) output0.append(U_CONSTANT_TO_PARAM("\n\t(void) UHTTP::getDataStorage();\n\t"));
(void) output1.append(U_CONSTANT_TO_PARAM("\n\tUHTTP::putDataStorage();\n\t"));
(void) output0.append(U_CONSTANT_TO_PARAM("\n\t(void) UHTTP::getDataStorage();\n"));
(void) output1.append(U_CONSTANT_TO_PARAM("\n\tUHTTP::putDataStorage();\n"));
}
}
else if (strncmp(directive, U_CONSTANT_TO_PARAM("args")) == 0)
@ -290,7 +290,7 @@ public:
setDirectiveItem(directive, U_CONSTANT_SIZE("args"));
(void) output0.append(U_CONSTANT_TO_PARAM("\t\n\t\tif (UHTTP::isGETorPOST()) (void) UHTTP::processForm();\n"));
(void) output0.append(U_CONSTANT_TO_PARAM("\t\n\tif (UHTTP::isGETorPOST()) (void) UHTTP::processForm();\n"));
if (token) manageDirectiveArgsOrCpath("USP_FORM_VALUE", false);
}
@ -430,7 +430,7 @@ public:
char buffer[200];
(void) vars.append(buffer, u__snprintf(buffer, sizeof(buffer), U_CONSTANT_TO_PARAM("\n\tUTimeVal sse_time_to_sleep(%u, 0L);\n\t\n"), sse_time_to_sleep));
(void) vars.append(buffer, u__snprintf(buffer, sizeof(buffer), U_CONSTANT_TO_PARAM("\n\tUTimeVal sse_time_to_sleep(%u, 0L);\n"), sse_time_to_sleep));
sseloop = UStringExt::substitute(data, sz, '\n', U_CONSTANT_TO_PARAM("\n\t"));
@ -483,7 +483,7 @@ public:
(void) output0.reserve(100U + token.size());
output0.snprintf_add(U_CONSTANT_TO_PARAM("\n\tUStringExt::appendNumber32(*UClientImage_Base::wbuffer, (%v));\n\t"), token.rep);
output0.snprintf_add(U_CONSTANT_TO_PARAM("\n\tUStringExt::appendNumber32(*UClientImage_Base::wbuffer, (%v));\n"), token.rep);
}
else if (strncmp(directive, U_CONSTANT_TO_PARAM("puts")) == 0)
{
@ -495,7 +495,7 @@ public:
(void) output0.reserve(100U + token.size());
output0.snprintf_add(U_CONSTANT_TO_PARAM("\n\t(void) UClientImage_Base::wbuffer->append((%v));\n\t"), token.rep);
output0.snprintf_add(U_CONSTANT_TO_PARAM("\n\t(void) UClientImage_Base::wbuffer->append((%v));\n"), token.rep);
}
else if (strncmp(directive, U_CONSTANT_TO_PARAM("xmlputs")) == 0)
{
@ -507,7 +507,7 @@ public:
(void) output0.reserve(100U + token.size());
output0.snprintf_add(U_CONSTANT_TO_PARAM("\n\tUSP_XML_PUTS((%v));\n\t"), token.rep);
output0.snprintf_add(U_CONSTANT_TO_PARAM("\n\tUSP_XML_PUTS((%v));\n"), token.rep);
}
else if (strncmp(directive, U_CONSTANT_TO_PARAM("cout")) == 0)
{
@ -522,7 +522,7 @@ public:
(void) output0.reserve(200U + token.size());
output0.snprintf_add(U_CONSTANT_TO_PARAM("\n\tusp_sz = UObject2String((%v), usp_buffer, sizeof(usp_buffer));"
"\n\t(void) UClientImage_Base::wbuffer->append(usp_buffer, usp_sz);\n\t"), token.rep);
"\n\t(void) UClientImage_Base::wbuffer->append(usp_buffer, usp_sz);\n"), token.rep);
}
else if (strncmp(directive, U_CONSTANT_TO_PARAM("print")) == 0)
{
@ -545,7 +545,7 @@ public:
U_ASSERT_EQUALS(vec.size(), 5)
output0.snprintf_add(U_CONSTANT_TO_PARAM("\n\tfor (%v; %v; %v) { usp_sz = u__snprintf(usp_buffer, sizeof(usp_buffer), %v, %v);"
"(void) UClientImage_Base::wbuffer->append(usp_buffer, usp_sz); }\n\t"),
"(void) UClientImage_Base::wbuffer->append(usp_buffer, usp_sz); }\n"),
vec[0].rep, vec[1].rep, vec[2].rep, vec[3].rep, vec[4].rep);
}
else
@ -553,7 +553,7 @@ public:
U_ASSERT_EQUALS(vec.size(), 2)
output0.snprintf_add(U_CONSTANT_TO_PARAM("\n\tusp_sz = u__snprintf(usp_buffer, sizeof(usp_buffer), %v, %v);"
"(void) UClientImage_Base::wbuffer->append(usp_buffer, usp_sz);\n\t"), vec[0].rep, vec[1].rep);
"(void) UClientImage_Base::wbuffer->append(usp_buffer, usp_sz);\n"), vec[0].rep, vec[1].rep);
}
}
}
@ -611,7 +611,7 @@ loop: distance = t.getDistance();
(void) output0.reserve(100U + tmp.size());
output0.snprintf_add(U_CONSTANT_TO_PARAM("\n\t(void) UClientImage_Base::wbuffer->append(\n\t\tU_CONSTANT_TO_PARAM(%v)\n\t);\n\t"), tmp.rep);
output0.snprintf_add(U_CONSTANT_TO_PARAM("\n\t(void) UClientImage_Base::wbuffer->append(\n\t\tU_CONSTANT_TO_PARAM(%v)\n\t);\n"), tmp.rep);
}
}
@ -699,7 +699,7 @@ loop: distance = t.getDistance();
bsighup, // usp_sighup
bfork; // usp_fork
const char* ptr0 = (sseloop ? "\n\t\tif (UHTTP::bsse) goto sseloop;\n\t" : "");
const char* ptr0 = (sseloop ? "\n\t\tif (UHTTP::bsse) goto sseloop;\n" : "");
char ptr1[100] = { '\0' };
char ptr2[100] = { '\0' };
char ptr3[100] = { '\0' };
@ -729,8 +729,8 @@ loop: distance = t.getDistance();
bsighup = (U_STRING_FIND(declaration, 0, "static void usp_sighup_") != U_NOT_FOUND);
bfork = (U_STRING_FIND(declaration, 0, "static void usp_fork_") != U_NOT_FOUND);
if (bfork) (void) u__snprintf(ptr5, 100, U_CONSTANT_TO_PARAM("\n\t\tif (param == U_DPAGE_FORK) { usp_fork_%.*s(); return; }\n\t"), basename_sz, basename_ptr);
if (bsighup) (void) u__snprintf(ptr4, 100, U_CONSTANT_TO_PARAM("\n\t\tif (param == U_DPAGE_SIGHUP) { usp_sighup_%.*s(); return; }\n\t"), basename_sz, basename_ptr);
if (bfork) (void) u__snprintf(ptr5, 100, U_CONSTANT_TO_PARAM("\n\t\tif (param == U_DPAGE_FORK) { usp_fork_%.*s(); return; }\n"), basename_sz, basename_ptr);
if (bsighup) (void) u__snprintf(ptr4, 100, U_CONSTANT_TO_PARAM("\n\t\tif (param == U_DPAGE_SIGHUP) { usp_sighup_%.*s(); return; }\n"), basename_sz, basename_ptr);
if (bend)
{
@ -738,7 +738,7 @@ loop: distance = t.getDistance();
if (bpreprocessing_failed) bend = false;
else
# endif
(void) u__snprintf(ptr3, 100, U_CONSTANT_TO_PARAM("\n\t\tif (param == U_DPAGE_DESTROY) { usp_end_%.*s(); return; }\n\t"), basename_sz, basename_ptr);
(void) u__snprintf(ptr3, 100, U_CONSTANT_TO_PARAM("\n\t\tif (param == U_DPAGE_DESTROY) { usp_end_%.*s(); return; }\n"), basename_sz, basename_ptr);
}
}
else
@ -769,11 +769,11 @@ loop: distance = t.getDistance();
"}"),
basename_sz, basename_ptr,
basename_sz, basename_ptr,
(bsession ? "\n\tif (UHTTP::data_session == U_NULLPTR) U_NEW(UDataSession, UHTTP::data_session, UDataSession);\n\t" : ""),
(bstorage ? "\n\tif (UHTTP::data_storage == U_NULLPTR) { U_NEW(UDataSession, UHTTP::data_storage, UDataSession(*UString::str_storage_keyid)); }\n\t" : ""));
(bsession ? "\n\tif (UHTTP::data_session == U_NULLPTR) U_NEW(UDataSession, UHTTP::data_session, UDataSession);\n" : ""),
(bstorage ? "\n\tif (UHTTP::data_storage == U_NULLPTR) { U_NEW(UDataSession, UHTTP::data_storage, UDataSession(*UString::str_storage_keyid)); }\n" : ""));
}
if (binit) (void) u__snprintf(ptr1, 100, U_CONSTANT_TO_PARAM("\n\t\tif (param == U_DPAGE_INIT) { usp_init_%.*s(); return; }\n\t"), basename_sz, basename_ptr);
if (binit) (void) u__snprintf(ptr1, 100, U_CONSTANT_TO_PARAM("\n\t\tif (param == U_DPAGE_INIT) { usp_init_%.*s(); return; }\n"), basename_sz, basename_ptr);
if (binit == false ||
bend == false ||
@ -787,14 +787,14 @@ loop: distance = t.getDistance();
if (bvar)
{
(void) vars.append(U_CONSTANT_TO_PARAM("\n\tuint32_t usp_sz = 0;"
"\n\tchar usp_buffer[10 * 4096];\n\t"));
"\n\tchar usp_buffer[10 * 4096];\n"));
}
// NB: we check for HTML without HTTP headers...
if (http_header.empty())
{
if (is_html) (void) http_header.append(U_CONSTANT_TO_PARAM("\n\tUHTTP::mime_index = U_html;\n\t"));
if (is_html) (void) http_header.append(U_CONSTANT_TO_PARAM("\n\tUHTTP::mime_index = U_html;\n"));
(void) http_header.append(U_CONSTANT_TO_PARAM("\n\tU_http_info.endHeader = 0;\n"));
}
@ -815,6 +815,7 @@ loop: distance = t.getDistance();
"\tU_TRACE(0, \"::runDynamicPage_%.*s(%%d)\", param)\n"
"\t\n"
"%v"
"\t\n"
"\tif (param)\n"
"\t\t{\n"
"%s"

View File

@ -4,11 +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
#DOC_ROOT=ShivShankarDayal/docroot
rm -f tmp/usp_compile.sh.err /tmp/*.hpack.* \
$DOC_ROOT/web_server.log* \
@ -20,7 +20,7 @@ rm -f tmp/usp_compile.sh.err /tmp/*.hpack.* \
UTRACE_SIGNAL="0 50M 0"
#UOBJDUMP="0 10M 100"
#USIMERR="error.sim"
UMEMUSAGE=yes
#UMEMUSAGE=yes
export UTRACE UOBJDUMP USIMERR UTRACE_SIGNAL UMEMUSAGE
SOCK1=tmp/fcgi.socket
@ -73,26 +73,21 @@ userver {
#CRASH_COUNT 1
#CRASH_EMAIL_NOTIFY mail.unirel.com:stefano.casazza@unirel.com
#DOS_SITE_COUNT 1
#DOS_WHITE_LIST 127.0.0.1
DOS_WHITE_LIST 127.0.0.1
#DOS_LOGFILE /tmp/dos_blacklist.txt
#REQ_TIMEOUT 300
#PLUGIN "ssi http"
#ORM_DRIVER "sqlite mysql"
#ORM_DRIVER sqlite
#DOCUMENT_ROOT .
#PLUGIN_DIR ../../src/ulib/net/server/plugin/.libs
#ORM_DRIVER_DIR ../../src/ulib/orm/driver/.libs
#DOCUMENT_ROOT php
#DOCUMENT_ROOT docroot
#DOCUMENT_ROOT sse_example
#PLUGIN_DIR ../../../src/ulib/net/server/plugin/.libs
#ORM_DRIVER_DIR ../../../src/ulib/orm/driver/.libs
#DOCUMENT_ROOT JONATHAN/docroot
#PLUGIN_DIR ../../src/ulib/net/server/plugin/.libs
#ORM_DRIVER_DIR ../../src/ulib/orm/driver/.libs
DOCUMENT_ROOT $DOC_ROOT
PLUGIN_DIR ../../../src/ulib/net/server/plugin/.libs
ORM_DRIVER_DIR ../../../src/ulib/orm/driver/.libs
#DOCUMENT_ROOT benchmark/docroot
#DOCUMENT_ROOT ruby/blog/public
DOCUMENT_ROOT ShivShankarDayal/docroot
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
}
http {
#ALIAS "[ / /100.html ]"