39#define BASLIB_VER "5821"
40#define BASLIB_VER_NO 5821
76#include "TargConfig.h"
77#include "HttpConnection.h"
78#include "DoubleList.h"
81#include "BaErrorCodes.h"
90#define BA_STACKSZ 24000
95#define BA_COOKIE_ID "z9ZAqJtI"
108struct HttpCmdThreadPoolIntf;
136BA_API
void httpFmtDate(
char* buf, U16 bufLen,
BaTime t);
139#define httpUnescape(s) httpUnescapeInternal(s,FALSE)
142#define httpFormUnescape(s) httpUnescapeInternal(s,TRUE)
148BA_API
char* httpUnescapeInternal(
char* from, BaBool isForm);
153BA_API
char* httpEscape(
char* out,
const char* in);
159typedef void (*UserDefinedErrHandler)(BaFatalErrorCodes ecode1,
198typedef int (*ZlibInflateInit2)(
struct z_stream_s* s,
int windowBits,
199 const char *version,
int stream_size);
201typedef int (*ZlibInflate)(
struct z_stream_s* s,
int flush);
202typedef int (*ZlibInflateEnd)(
struct z_stream_s* s);
217typedef struct HttpHeader
230BA_API
const char* HttpHeader_name(HttpHeader* o,
struct HttpRequest* req);
231BA_API
const char* HttpHeader_value(HttpHeader* o,
struct HttpRequest* req);
234inline const char* HttpHeader::name(
HttpRequest* req) {
235 return HttpHeader_name(
this, req); }
236inline const char* HttpHeader::value(
HttpRequest* req) {
237 return HttpHeader_value(
this, req); }
256 HttpInData_ParseHeader,
258 HttpInData_ReadBodyAndParseUrlEncData
259} HttpInData_ParseState;
280 HttpAllocator allocator;
289#define HttpAllocator_2Ptr(o, index) ((&(o)->buf[index]))
290#define HttpInData_lineStartPtr(o) \
291 HttpAllocator_2Ptr(&(o)->allocator,(o)->lineStartI)
293#define HttpInData_getBufSize(o) \
294 ((o)->lineStartI < (o)->allocator.index ? \
295 (o)->allocator.index-(o)->lineStartI : 0)
297#define HttpInData_getBuf(o) HttpInData_lineStartPtr(o)
302 return HttpInData_getBuf(
this); }
304 return HttpInData_getBufSize(
this); }
396BA_API U32 HttpParameter_calculateSize(
struct HttpRequest* req);
398BA_API
const char* HttpParameter_getParameter(
404 return HttpParameter_calculateSize(req); }
406 return HttpParameter_clone(buf, req); }
408 return HttpParameter_getParameter(
this, paramName); }
477BA_API
int HttpParameterIterator_constructor(
482#define HttpParameterIterator_hasMoreElements(o) ((o)->name != 0)
483#define HttpParameterIterator_getName(o) (o)->name
484#define HttpParameterIterator_getValue(o) (o)->value
489inline HttpParameterIterator::HttpParameterIterator(
HttpRequest* req) {
490 HttpParameterIterator_constructor(
this, req); }
492 HttpParameterIterator_constructor2(
this, param); }
494 HttpParameterIterator_nextElement(
this); }
550 bool getSecure()
const {
return secure ? true :
false; }
604 void setValue(
const char* newValue);
608 int getVersion()
const {
return version; }
610 void setVersion(
int v);
632 BaBool deleteCookieFlag;
640BA_API
void HttpCookie_destructor(
HttpCookie* o);
641BA_API
const char* HttpCookie_getComment(
HttpCookie* o);
642BA_API
const char* HttpCookie_getDomain(
HttpCookie* o);
644BA_API
const char* HttpCookie_getName(
HttpCookie* o);
645BA_API
const char* HttpCookie_getPath(
HttpCookie* o);
646BA_API BaBool HttpCookie_getSecure(
HttpCookie* o);
647BA_API BaBool HttpCookie_getHttpOnly(
HttpCookie* o);
648BA_API
const char* HttpCookie_getValue(
HttpCookie* o);
649BA_API
void HttpCookie_setComment(
HttpCookie* o,
const char* purpose);
650BA_API
void HttpCookie_setDomain(
HttpCookie* o,
const char* pattern);
652#define HttpCookie_deleteCookie(o) (o)->deleteCookieFlag = TRUE;
653BA_API
void HttpCookie_setPath(
HttpCookie* o,
const char* uri);
654BA_API
void HttpCookie_setSecure(
HttpCookie* o, BaBool flag);
655BA_API
void HttpCookie_setHttpOnly(
HttpCookie* o, BaBool flag);
656BA_API
void HttpCookie_setValue(
HttpCookie* o,
const char* newValue);
660void HttpCookie_setVersion(
HttpCookie* o,
int v);
663BA_API
void HttpCookie_activate(
HttpCookie* o);
666inline HttpCookie::HttpCookie() { baAssert(0); }
667inline HttpCookie::~HttpCookie() { HttpCookie_destructor(
this); }
669 HttpCookie_setComment(
this, purpose); }
671 HttpCookie_setDomain(
this, pattern); }
673 HttpCookie_setMaxAge(
this, expiry); }
675 HttpCookie_deleteCookie(
this); }
677 HttpCookie_setPath(
this, uri); }
679 HttpCookie_setSecure(
this, flag ? TRUE : FALSE); }
681 HttpCookie_setHttpOnly(
this, flag ? TRUE : FALSE); }
683 HttpCookie_setValue(
this, newValue); }
685inline void HttpCookie::setVersion(
int v) {
686 HttpCookie_setVersion(
this, v); }
689 HttpCookie_activate(
this); }
731 BaFileSize contentLength;
734 U16 contentTypeHOffs;
740BA_API
const char* HttpStdHeaders_zzGetValFromOffs(
743#define HttpStdHeaders_getConnection(o) \
744 HttpStdHeaders_zzGetValFromOffs(o,(o)->connectionHOffs)
745#define HttpStdHeaders_getHost(o) \
746 HttpStdHeaders_zzGetValFromOffs(o,(o)->hostHOffs)
747#define HttpStdHeaders_getContentType(o) \
748 HttpStdHeaders_zzGetValFromOffs(o,(o)->contentTypeHOffs)
749#define HttpStdHeaders_getContentLength(o) (o)->contentLength
754 return HttpStdHeaders_getConnection(
this); }
756 return HttpStdHeaders_getHost(
this); }
758 return HttpStdHeaders_getDomain(
this); }
760 return HttpStdHeaders_getContentType(
this); }
762 return HttpStdHeaders_getContentLength(
this); }
781 HttpMethod_Connect =0x00001,
782 HttpMethod_Get =0x00002,
783 HttpMethod_Head =0x00004,
784 HttpMethod_Options =0x00008,
786 HttpMethod_Patch =0x00010,
787 HttpMethod_Post =0x00020,
788 HttpMethod_Put =0x00040,
789 HttpMethod_Trace =0x00080,
792 HttpMethod_Copy =0x00100,
793 HttpMethod_Delete =0x00200,
794 HttpMethod_Lock =0x00400,
795 HttpMethod_Move =0x00800,
797 HttpMethod_Mkcol =0x01000,
798 HttpMethod_Propfind =0x02000,
799 HttpMethod_Proppatch =0x04000,
800 HttpMethod_Unlock =0x08000,
802 HttpMethod_Unknown =0x10000
807BA_API
HttpMethod HttpMethod_a2m(
const char* str);
1019#ifndef NO_HTTP_SESSION
1042 int setUserObj(
void* userObj,
bool overwrite=
false);
1047 HttpAllocator headerAlloc;
1048 HttpAllocator formAlloc;
1060 BaBool postDataConsumed;
1067 U32 methods, BaBool addDefault);
1068BA_API
int HttpRequest_checkOptions(
1070#define HttpRequest_getAuthenticatedUser(o) \
1071 AuthenticatedUser_get2(HttpRequest_getSession(o,FALSE))
1072#define HttpRequest_getConnection(o) HttpRequest_getCommand(o)->con
1073#define HttpRequest_getMethodType(o) (o)->methodType
1074#define HttpRequest_getMethod(o) HttpRequest_getMethod2((o)->methodType)
1075BA_API
const char* HttpRequest_getMethod2(
HttpMethod method);
1076#define HttpRequest_getServer(o) (o)->server
1077#define HttpRequest_getResponse(o) (&HttpRequest_getCommand(o)->response)
1079BA_API BaBool HttpRequest_checkTime(
1081BA_API
const char* HttpRequest_getRequestURI(
HttpRequest* o);
1082BA_API
const char* HttpRequest_getRequestURL(
HttpRequest* o,BaBool forceHttps);
1083#define HttpRequest_getStdHeaders(o) (&(o)->stdH)
1084BA_API
const char* HttpRequest_getVersion(
HttpRequest* o);
1085BA_API
const char* HttpRequest_getHeaderValue(
HttpRequest* o,
const char* name);
1086#define HttpRequest_getNoOfParameters(o) (o)->formLen
1088#define HttpRequest_getUserObj(o) (o)->userObj
1089BA_API
int HttpRequest_setUserObj(
1091#define HttpRequest_getBuffer(o) (&(o)->inData)
1092BA_API
const char* HttpRequest_getParameter(
1094BA_API HttpHeader* HttpRequest_getHeaders(
HttpRequest* o,
int* len);
1096BA_API BaBool HttpRequest_enableKeepAlive(
HttpRequest* o);
1097BA_API
int HttpRequest_pushBackData(
HttpRequest* o);
1098#ifndef NO_HTTP_SESSION
1102 HttpRequest* o,
const char* val,
size_t len,
int set);
1108 U32 methods,
bool addDefault){
1109 return HttpRequest_checkMethods(
this,resp,
1110 methods, addDefault ? TRUE : FALSE);}
1113 return HttpRequest_checkTime(
this, resp, time); }
1115 return HttpRequest_getAuthenticatedUser(
this); }
1117 return HttpRequest_getMethodType(
this); }
1119 return HttpRequest_getMethod(
this); }
1121 return HttpRequest_getMethod2(method); }
1123 return HttpRequest_getServer(
this); }
1125 return HttpRequest_getRequestURI(
this); }
1127 return HttpRequest_getRequestURL(
this, forceHttps); }
1129 return HttpRequest_getStdHeaders(
this); }
1131 return HttpRequest_getVersion(
this); }
1133 return HttpRequest_getHeaderValue(
this, name); }
1135 return HttpRequest_getCookie(
this, name); }
1137 return HttpRequest_getParameter(
this, paramName); }
1139 return HttpRequest_wsUpgrade(
this);
1142 return HttpRequest_getHeaders(
this, len); }
1143inline int HttpRequest::setUserObj(
void* userObj,
bool overwrite) {
1144 return HttpRequest_setUserObj(
this, userObj, overwrite); }
1145inline void* HttpRequest::getUserObj() {
1146 return HttpRequest_getUserObj(
this); }
1147#ifndef NO_HTTP_SESSION
1149 return HttpRequest_getSession(
this, create); }
1152 return HttpParameterIterator_hasMoreElements(
this); }
1154 return HttpRequest_getBuffer(
this); }
1163 U16 maxResponseHeader;
1238 const char*
encodeUrl(
const char* path);
1270 int forward(
const char* path);
1318 int include(
const char* path);
1377 int sendError(
int eCode,
const char* msg);
1400 int fmtError(
int eCode,
const char* fmt, ...);
1479 int setHeader(
const char* name,
const char* value,
bool replace=
true);
1521 char*
fmtHeader(
const char* name,
int valueLen,
bool replace=
true);
1543 int printf(
const char* fmt, ...);
1561 int write(
const void* data,
int len,
int useBuffering=TRUE);
1570 int write(
const char* data,
int useBuffering=TRUE);
1576 int send(
const void* data,
int len);
1613 int setUserObj(
void* userObj,
bool overwrite=
false);
1615 NameValMM nameValMM;
1621 char* encodedRedirectURL;
1626 HttpProtocol protocol;
1630 char printAndWriteInitialized;
1631 char useChunkTransfer;
1639BA_API
const char* HttpResponse_containsHeader(
1641BA_API
int HttpResponse_dataAdded(
HttpResponse* o, U32 size);
1642#define HttpResponse_byteCount(o) ((o)->msgLen + (o)->bodyPrint->cursor)
1643BA_API
const char* HttpResponse_encodeRedirectURL(
1645BA_API
const char* HttpResponse_encodeRedirectURLWithParamOrSessionURL(
1647#define HttpResponse_encodeRedirectURLWithParam(o, path) \
1648 HttpResponse_encodeRedirectURLWithParamOrSessionURL(o, path, FALSE)
1649#define HttpResponse_encodeSessionURL(o, path) \
1650 HttpResponse_encodeRedirectURLWithParamOrSessionURL(o, path, TRUE)
1651BA_API
const char* HttpResponse_encodeUrl(
HttpResponse* o,
const char* path);
1653#define HttpResponse_forward(o,path) HttpResponse_incOrForward(o,path,FALSE)
1654#define HttpResponse_getConnection(o) HttpResponse_getCommand(o)->con
1655#define HttpResponse_getRequest(o) (&HttpResponse_getCommand(o)->request)
1657#define HttpResponse_getBuf(o) (o)->bodyPrint->buf
1658#define HttpResponse_getBufSize(o) (o)->bodyPrint->bufSize
1659#define HttpResponse_getBufOffs(o) \
1660 ((o)->bodyPrint->buf + (o)->bodyPrint->cursor)
1661#define HttpResponse_getRemBufSize(o) \
1662 ((o)->bodyPrint->bufSize - (o)->bodyPrint->cursor)
1663#define HttpResponse_getUserObj(o) (o)->userObj
1664BA_API
int HttpResponse_incOrForward(
1666BA_API
int HttpResponse_redirect(
HttpResponse* o,
const char* path);
1667#define HttpResponse_include(o,path) HttpResponse_incOrForward(o,path,TRUE)
1668#define HttpResponse_isChunkTransfer(o) (o)->useChunkTransfer
1669#define HttpResponse_committed(o) (o)->headerSent
1670#define HttpResponse_isForward(o) ((o)->forwardCounter != 0)
1671#define HttpResponse_isInclude(o) ((o)->includeCounter != 0)
1672#define HttpResponse_initial(o) (!HttpResponse_isForward(o) && \
1673 !HttpResponse_isInclude(o))
1674BA_API
int HttpResponse_setResponseBuf(
1676BA_API
int HttpResponse_removeResponseBuf(
HttpResponse* o);
1680BA_API
int HttpResponse_sendError1(
HttpResponse* o,
int eCode);
1681BA_API
int HttpResponse_sendError2(
HttpResponse* o,
int eCode,
const char* msg);
1682BA_API
int HttpResponse_sendBufAsError(
HttpResponse* o,
int eCode);
1683BA_API
int HttpResponse_sendBufAsTxtError(
HttpResponse* o,
int eCode);
1684BA_API
int HttpResponse_fmtVError(
1689BA_API
int HttpResponse_fmtError(
1692 const char* fmt, ...);
1693BA_API
int HttpResponse_sendRedirect(
HttpResponse* o,
const char* url);
1694BA_API
int HttpResponse_sendRedirectI(
1697#define HttpResponse_forceHttps HttpResponse_redirect2TLS
1699#define HttpResponse_setBufPos(o, pos) (o)->bodyPrint->cursor = pos
1700BA_API
int HttpResponse_setContentLength(
HttpResponse* o, BaFileSize len);
1701BA_API
int HttpResponse_setContentType(
HttpResponse* o,
const char* type);
1702BA_API
int HttpResponse_checkContentType(
HttpResponse* o,
const char* type);
1703BA_API
int HttpResponse_setDateHeader(
1705BA_API
int HttpResponse_setHeader(
1706 HttpResponse* o,
const char* name,
const char* value, BaBool replace);
1708BA_API
char* HttpResponse_fmtHeader(
1709 HttpResponse* o,
const char* name,
int valueLen, BaBool replace);
1710BA_API
int HttpResponse_setStatus(
HttpResponse* o,
int eCode);
1711BA_API
int HttpResponse_vprintf(
1713BA_API
int HttpResponse_printf(
HttpResponse* o,
const char* fmt, ...);
1714BA_API
int HttpResponse_write(
HttpResponse* o,
const void* data,
int len,
1717BA_API
int HttpResponse_send(
HttpResponse* o,
const void* data,
int len);
1718BA_API
int HttpResponse_setDefaultHeaders(
HttpResponse* o);
1720BA_API
int HttpResponse_setUserObj(
1722BA_API
int HttpResponse_printAndWriteInit(
HttpResponse* o);
1723BA_API
int HttpResponse_send100Continue(
HttpResponse* o);
1724BA_API
int HttpResponse_setChunkEncoding(
HttpResponse* o);
1725BA_API
const char* HttpResponse_getRespData(
HttpResponse* o,
int* len);
1726#define HttpResponse_getStatus(o) (o)->statusCode
1730 return HttpResponse_createCookie(
this, name); }
1732 return HttpResponse_containsHeader(
this, name); }
1734 return HttpResponse_byteCount(
this); }
1736 return HttpResponse_encodeRedirectURL(
this, pathName); }
1738 return HttpResponse_encodeRedirectURLWithParam(
this, p); }
1740 return HttpResponse_encodeUrl(
this, path); }
1742 return HttpResponse_flush(
this); }
1744 return HttpResponse_forward(
this, path); }
1746 return HttpResponse_redirect(
this, path); }
1748 return HttpResponse_include(
this, path); }
1750 return HttpResponse_committed(
this) ? true :
false; }
1752 return HttpResponse_isForward(
this) ? true :
false; }
1754 return HttpResponse_isInclude(
this) ? true :
false; }
1756 return HttpResponse_initial(
this) ? true :
false; }
1758 return HttpResponse_setResponseBuf(
this, buf, useDefBuffer?TRUE:FALSE); }
1760 return HttpResponse_removeResponseBuf(
this); }
1762 return HttpResponse_resetHeaders(
this); }
1764 return HttpResponse_resetBuffer(
this); }
1766 return HttpResponse_sendError1(
this, eCode); }
1768 return HttpResponse_sendError2(
this, eCode, msg); }
1770 return HttpResponse_sendBufAsError(
this, eCode); }
1772 return HttpResponse_sendBufAsTxtError(
this,eCode);}
1774 int retv; va_list varg;
1775 va_start(varg, fmt);
1776 retv = HttpResponse_fmtVError(
this, eCode, fmt, varg);
1780 return HttpResponse_sendRedirect(
this, url); }
1782 return HttpResponse_redirect2TLS(
this); }
1784 return HttpResponse_setContentLength(
this, len); }
1786 return HttpResponse_setContentType(
this, type); }
1788 return HttpResponse_setDateHeader(
this, name, t); }
1790 const char* name,
const char* value,
bool replace) {
1791 return HttpResponse_setHeader(
this,name, value, replace?TRUE:FALSE); }
1793 return HttpResponse_setMaxAge(
this, seconds); }
1795 const char* name,
int valueLen,
bool replace) {
1796 return HttpResponse_fmtHeader(
this, name, valueLen, replace?TRUE:FALSE); }
1798 HttpResponse_setStatus(
this, eCode);}
1801 int retv; va_list varg; va_start(varg, fmt);
1802 retv = HttpResponse_vprintf(
this, fmt, varg); va_end(varg);
return retv;}
1804 return HttpResponse_write(
this, data, iStrlen(data), useBuffering); }
1806 return HttpResponse_getWriter(
this); }
1808 return HttpResponse_write(
this, data, len, useBuffering); }
1810 return HttpResponse_send(
this, data, len); }
1812 return HttpResponse_setDefaultHeaders(
this); }
1813inline int HttpResponse::setUserObj(
void* userObj,
bool overwrite) {
1814 return HttpResponse_setUserObj(
this, userObj, overwrite); }
1852 struct LHttpCommand* lcmd;
1854 BaBool runningInThread;
1857#define HttpCommand_getRequest(o) (&(o)->request)
1858#define HttpCommand_getResponse(o) (&(o)->response)
1859#define HttpCommand_getConnection(o) (o)->con
1860#define HttpCommand_getServer(o) HttpConnection_getServer((o)->con)
1863 return HttpCommand_getRequest(
this); }
1865 return HttpCommand_getResponse(
this); }
1867 return HttpCommand_getConnection(
this); }
1869 return HttpCommand_getServer(
this);
1874#ifndef NO_HTTP_SESSION
1942BA_API
void HttpSessionAttribute_constructor(
1947#define HttpSessionAttribute_getSession(o) (o)->session
1953 HttpSessionAttribute_constructor(
this, name, d); }
1955 return HttpSessionAttribute_getSession(
this); }
1969 void operator delete(
void* d) {
if(d)
::baFree(d); }
1970 void *
operator new(size_t,
void *place) {
return place; }
1971 void operator delete(
void*,
void *) { }
2054 void incrementLock();
2055 void decrementLock();
2060 SplayTreeNode super;
2067 BaTime maxInactiveInterval;
2088BA_API
int HttpSession_removeAttribute(
HttpSession* o,
const char* name);
2089BA_API
int HttpSession_setAttribute(
HttpSession* o,
2092#define HttpSession_incrRefCntr(o) (o)->refCounter++
2093BA_API
void HttpSession_decrRefCntr(
HttpSession* o);
2094#define HttpSession_incrementLock(o) (o)->lockCounter++
2095#define HttpSession_decrementLock(o) do {\
2096 baAssert((o)->lockCounter > 0);\
2097 (o)->lockCounter--; } while(0)
2098BA_API
int HttpSession_fmtSessionId(
HttpSession* o, U8* buf,
size_t bufSize);
2099#define HttpSession_getId(o) \
2100 ((U32)((ptrdiff_t)SplayTreeNode_getKey((SplayTreeNode*)(o))))
2101#define HttpSession_getAuthenticatedUser(o) AuthenticatedUser_get2((o))
2102#define HttpSession_getUseCounter(o) (o)->useCounter
2103#define HttpSession_getPeerName(o) (&(o)->peer)
2107 return HttpSession_getAttribute(
this, name); }
2109 return HttpSession_getCreationTime(
this); }
2111 return HttpSession_getLastAccessedTime(
this); }
2113 return HttpSession_getMaxInactiveInterval(
this); }
2115 return HttpSession_getServer(
this); }
2117 HttpSession_terminate(
this); }
2119 return HttpSession_removeAttribute(
this, name); }
2121 return HttpSession_setAttribute(
this, value); }
2123 HttpSession_setMaxInactiveInterval(
this, interval); }
2125 HttpSession_incrRefCntr(
this); }
2127 HttpSession_decrRefCntr(
this); }
2130 return HttpSession_getUseCounter(
this); }
2132 return HttpSession_getAuthenticatedUser(
this); }
2133inline void HttpSession::incrementLock() {HttpSession_incrementLock(
this);}
2134inline void HttpSession::decrementLock() {HttpSession_decrementLock(
this);}
2139 HttpSessionContainer_OK = 0,
2140 HttpSessionContainer_NoMemory,
2141 HttpSessionContainer_TooManySessions,
2142 HttpSessionContainer_NoPeerAddress
2143} HttpSessionContainer_ECode;
2161 SplayTree sessionTree;
2162 DoubleList sessionList;
2163 DoubleList sessionTermList;
2164 DoubleLink* sessionLinkIter;
2168 HttpSessionContainer_ECode eCode;
2179#define HttpSessionContainer_setMaxSessions(o,max) (o)->maxSessions = max
2183 HttpSessionContainer_setMaxSessions(
this, max); }
2201#define HttpPageType_HttpPageSE 0x00020
2204typedef struct HttpPageNode
2206 struct HttpPageNode* next;
2265 void operator delete(
void* d) {
if(d)
::baFree(d); }
2266 void *
operator new(size_t,
void *place) {
return place; }
2267 void operator delete(
void*,
void *) { }
2311BA_API HttpPage_constructor(
2313BA_API
void HttpPage_destructor(
HttpPage* o);
2314#define HttpPage_getName(o) (o)->name
2315#define HttpPage_isLinked(o) ((HttpPageNode*)(o))->next
2316BA_API
int HttpPage_unlink(
HttpPage* o);
2317#define HttpPage_service(o, request, response) \
2318 (o)->serviceCB(o, request, response)
2322 HttpPage_constructor(
this,
service, name); }
2324 HttpPage_destructor(
this); }
2326 return HttpPage_isLinked(
this) ? true :
false;
2330 HttpPage_service(
this, request, response);
2341 const char* relPath,
2344#define HttpDirType_EhDir 0x00001
2345#define HttpDirType_HttpResRdr 0x00002
2346#define HttpDirType_AuthenticateDir 0x00008
2347#define HttpDirType_AuthenticateDirWrapper 0x00010
2373 void operator delete(
void* d) {
if(d)
::baFree(d); }
2374 void *
operator new(size_t,
void *place) {
return place; }
2375 void operator delete(
void*,
void *) { }
2395 HttpDir(
const char* name, S8 priority=0);
2451 unsigned int nameLen);
2491 char*
makeAbsPath(
const char* relPath,
int relPathLen);
2572 HttpPageNode pageList;
2580BA_API
void HttpDir_constructor(
HttpDir* o,
const char* name, S8 priority);
2581BA_API
void HttpDir_destructor(
HttpDir* o);
2582BA_API
char* HttpDir_makeAbsPath(
2583 HttpDir* o,
const char* relPath,
int relPathLen);
2584#define HttpDir_getRootPath(o) HttpDir_makeAbsPath(o,"",0)
2586#define HttpDir_getFirstPage(o) \
2587 (o)->pageList.next != &(o)->pageList ? ((HttpPage*)(o)->pageList.next) : 0
2588#define HttpDir_getFirstDir(o) (o)->dirList
2591#define HttpDir_getNext(o) (o)->next
2592#define HttpDir_getName(o) (o)->name
2593#define HttpDir_getParent(o) (o)->parent
2597BA_API
HttpDir* HttpDir_findDir(
2598 HttpDir* iter,
const char* name,
unsigned int nameLen);
2599BA_API
HttpDir* HttpDir_createOrGet(
HttpDir* o,
const char* name);
2600BA_API
void HttpDir_p403(
HttpDir* o,
const char* p403);
2601#define HttpDir_overloadService HttpDir_setService
2603#define HttpDir_isLinked(o) (o)->parent
2604BA_API
int HttpDir_unlink(
HttpDir* o);
2605#define HttpDir_setAuthenticator(o,authenticatorMA,authorizerMA) \
2606 (o)->authenticator = authenticatorMA,(o)->realm = authorizerMA
2607BA_API
int HttpDir_authenticateAndAuthorize(
2609#define HttpDir_isAuthorized(o,user,method,path) \
2611 (user ? AuthorizerIntf_authorize((o)->realm,user,method,path) : FALSE) : \
2616 HttpDir_constructor(
this, 0, 0); }
2618 HttpDir_constructor(
this, name, priority); }
2619inline HttpDir::~HttpDir() {
2620 HttpDir_destructor(
this); }
2622 return HttpDir_makeAbsPath(
this, relPath, relPathLen); }
2624 return HttpDir_getRootPath(
this); }
2626 return HttpDir_insertDir(
this, dir); }
2628 return HttpDir_insertPage(
this, page); }
2632 return HttpDir_getDir(
this,name); }
2634 return HttpDir_getPage(
this,name); }
2637 return HttpDir_findPage(
this, iter, name); }
2639 unsigned int nameLen) {
2640 return HttpDir_findDir(iter, name, nameLen); }
2642 return HttpDir_createOrGet(
this, name); }
2644 return HttpDir_setService(
this, s); }
2646 HttpDir_p403(
this,
p403); }
2649 return HttpDir_isLinked(
this) ? true :
false; }
2652 HttpDir_setAuthenticator(
this,authenticator,authorizer);
2656 return HttpDir_authenticateAndAuthorize(
this,cmd,path) ? true :
false; }
2661typedef struct HttpLinkCon
2673 BaBool page404InProgress;
2815 U16 minResponseHeader;
2816 U16 maxResponseHeader;
2819 U16 noOfHttpCommands;
2820 U16 noOfHttpConnections;
2828BA_API
int HttpServerConfig_setRequest(
HttpServerConfig* o, S16 min, S16 max);
2829BA_API
int HttpServerConfig_setResponseHeader(
2833BA_API
int HttpServerConfig_setNoOfHttpCommands(
HttpServerConfig* o, U16 size);
2834BA_API
int HttpServerConfig_setNoOfHttpConnections(
2840 HttpServerConfig_constructor(
this); }
2842 return HttpServerConfig_setRequest(
this, min, max); }
2844 return HttpServerConfig_setResponseHeader(
this, min, max); }
2846 return HttpServerConfig_setResponseData(
this, size); }
2848 return HttpServerConfig_setCommit(
this, size); }
2850 return HttpServerConfig_setNoOfHttpCommands(
this, size); }
2852 return HttpServerConfig_setNoOfHttpConnections(
this, size); }
2854 return HttpServerConfig_setMaxSessions(
this, size); }
2859typedef DoubleList HttpLinkConList;
2862typedef void (*LspOnTerminateRequest)(
struct LHttpCommand* lcmd);
2870 void operator delete(
void* d) {
if(d)
::baFree(d); }
2871 void *
operator new(size_t,
void *place) {
return place; }
2872 void operator delete(
void*,
void *) { }
2959 const char* virtualDirRootPath,
2962 struct AuthUserList* getAuthUserList(
const char* name);
2980#ifndef NO_HTTP_SESSION
3006 int setUserObj(
void* userObj,
bool overwrite=
false);
3025 static void setErrHnd(UserDefinedErrHandler e);
3028 static int setZlib(ZlibInflateInit2 init,
3029 ZlibInflate inflate,
3030 ZlibInflateEnd end){
3031 (void)init; (void)inflate; (void)end;
3039 DoubleList commandPool;
3040 DoubleList cmdReqList;
3042 HttpLinkConList freeList;
3043 HttpLinkConList readyList;
3044 HttpLinkConList connectedList;
3045 HttpRootDir rootDirContainer;
3046 SplayTree authUserTree;
3047 struct HttpCmdThreadPoolIntf* threadPoolIntf;
3048 HttpLinkCon* connections;
3051 void* waitForConClose;
3052 LspOnTerminateRequest lspOnTerminateRequest;
3053 int commandPoolSize;
3054 U16 noOfConnections;
3055 S16 maxHttpRequestLen;
3056#ifndef NO_HTTP_SESSION
3063void HttpServer_AsynchProcessDir(
HttpServer* o,
3067#define HttpServer_setThreadPoolIntf(o, intf) (o)->threadPoolIntf=intf
3068#define HttpServer_luaenv(o) (o)->luaenv
3074BA_API
void HttpServer_destructor(
HttpServer* o);
3076BA_API
int HttpServer_insertDir(
HttpServer* o,
3077 const char* virtualDirRootPath,
3079BA_API
int HttpServer_insertCSP(
HttpServer* o,
3081 const char* virtualDirRootPath,
3083#define HttpServer_getAuthUserList(o, name) \
3084 (AuthUserList*)SplayTree_find(&(o)->authUserTree, name)
3085#define HttpServer_getDispatcher(o) (o)->dispatcher
3086#define HttpServer_getFirstRootDir(o) \
3087 HttpDir_getFirstDir((HttpDir*)&(o)->rootDirContainer)
3088#define HttpServer_getUserObj(o) (o)->userObj
3089#define HttpServer_getSessionContainer(o) (&(o)->sessionContainer)
3090#define HttpServer_getMutex(o) SoDisp_getMutex((o)->dispatcher)
3091BA_API
const char* HttpServer_getStatusCode(
int code);
3093void HttpServer_doLingeringClose(
3096#ifndef NO_HTTP_SESSION
3102BA_API
void HttpServer_setErrHnd(UserDefinedErrHandler e);
3103void HttpServer_initStatic(
void);
3104int HttpServer_termOldestIdleCon(
HttpServer* o);
3105BA_API
void HttpServer_set404Page(
HttpServer*o,
const char* page404);
3106#define HttpServer_get404Page(o) (o)->rootDirContainer.page404
3107BA_API
int HttpServer_setUserObj(
3108 HttpServer* o,
void* userObj, BaBool overwrite);
3109#define HttpServer_termAllSessions(o) \
3110 HttpSessionContainer_destructor(&(o)->sessionContainer)
3112#define HttpServer_setZlib(init,inflate,end);
3116 HttpServer_constructor(
this, disp, cfg); }
3117inline HttpServer::~HttpServer() {
3118 HttpServer_destructor(
this); }
3120 return HttpServer_insertRootDir(
this, dir); }
3122 return HttpServer_getMutex(
this);
3125 return HttpServer_insertDir(
this, virtualDirRootPath, dir); }
3127 const char* virtualDirRootPath,
3129 return HttpServer_insertCSP(
this, cspInit, virtualDirRootPath, reader); }
3130inline struct AuthUserList* HttpServer::getAuthUserList(
const char* name) {
3131 return HttpServer_getAuthUserList(
this,name); }
3133 return HttpServer_getDispatcher(
this); }
3135 return HttpServer_getFirstRootDir(
this); }
3137 return HttpServer_getSessionContainer(
this); }
3138#ifndef NO_HTTP_SESSION
3140 return HttpServer_getSession(
this,
id); }
3142 HttpServer_initStatic(); }
3144 HttpServer_setErrHnd(e); }
3146 HttpServer_set404Page(
this, page404); }
3148 return HttpServer_get404Page(
this); }
3149inline int HttpServer::setUserObj(
void* userObj,
bool overwrite) {
3150 return HttpServer_setUserObj(
this, userObj, overwrite); }
3152 return HttpServer_getStatusCode(code);
3158 return HttpRequest_getResponse(
this); }
3160 return HttpRequest_getConnection(
this); }
3162 return HttpResponse_getRequest(
this); }
3164 return HttpResponse_getCommand(
this); }
3166 return HttpRequest_getCommand(
this); }
3168 return HttpConnection_getServer(
this); }
3177#define SHARKSSL_MD5_HASH_LEN 16
3178#define SHARKSSL_SHA1_HASH_LEN 20
3180typedef struct SharkSslMd5Ctx
3187SHARKSSL_API
void SharkSslMd5Ctx_constructor(SharkSslMd5Ctx* ctx);
3188SHARKSSL_API
void SharkSslMd5Ctx_append(SharkSslMd5Ctx* ctx,
const U8* data, U32 len);
3189SHARKSSL_API
void SharkSslMd5Ctx_finish(SharkSslMd5Ctx* ctx, U8 digest[]);
3190SHARKSSL_API
int sharkssl_md5(
const U8*, U16, U8*);
3192typedef struct SharkSslSha1Ctx
3199SHARKSSL_API
void SharkSslSha1Ctx_constructor(SharkSslSha1Ctx* ctx);
3200SHARKSSL_API
void SharkSslSha1Ctx_append(SharkSslSha1Ctx* ctx,
const U8* data, U32 len);
3201SHARKSSL_API
void SharkSslSha1Ctx_finish(SharkSslSha1Ctx*, U8 digest[]);
3203typedef void SharkSsl;
void(* CspInit)(struct HttpDir *cspRoot, struct CspReader *reader)
Function prototype for the "initialize function" generated by CspLink.
Definition: HttpServer.h:190
void * baMalloc(size_t size)
Returns pointer to uninitialized newly-allocated space for an object of size "size",...
void baFree(void *p)
Deallocates space to which it points.
BaTime getLastAccessedTime()
Returns the last time the client sent a request associated with this session, as the number of second...
Definition: HttpServer.h:2110
void deleteCookie()
Specifies a path for the cookie to which the client should return the cookie.
Definition: HttpServer.h:674
HttpHeader * getHeaders(int *len)
Return an HTTP header iterator that can iterate and fetch all the HTTP headers.
Definition: HttpServer.h:1141
int include(const char *path)
Includes the content of a resource (servlet, CSP page, HTML file) in the response.
Definition: HttpServer.h:1747
BaTime getCreationTime()
Returns the time when this session was created, measured in seconds since midnight January 1,...
Definition: HttpServer.h:2108
int setMaxAge(BaTime seconds)
Sets header "Cache-Control: max-age=seconds".
Definition: HttpServer.h:1792
int setDateHeader(const char *name, BaTime time)
Sets a response header with the given name and date-value.
Definition: HttpServer.h:1787
HttpDir * getNext()
Returns the next dir in the parent list.
Definition: HttpServer.h:2635
const char * getRequestURI()
Returns the pathname.
Definition: HttpServer.h:1124
const char * containsHeader(const char *name)
Searches the internal response header database for a header with the specified name.
Definition: HttpServer.h:1731
const char * getContentType()
Returns the content type, for example: "application/x-www-form-urlencoded".
Definition: HttpServer.h:759
const char * getHost()
Returns the host header.
Definition: HttpServer.h:755
int flush()
Forces any content in the buffer to be written to the client.
Definition: HttpServer.h:1741
void(* HttpSessionAttribute_Destructor)(struct HttpSessionAttribute *o)
HttpSessionAttribute termination callback function.
Definition: HttpServer.h:1887
int sendError(int eCode)
Sends an error response as a simple HTML page to the client using the specified status code.
Definition: HttpServer.h:1765
int forward(const char *path)
Forwards a request from a servlet to another resource (servlet, CSP file, or HTML file).
Definition: HttpServer.h:1743
void setHttpOnly(bool flag)
Marks or unmarks this Cookie as HttpOnly.
Definition: HttpServer.h:680
int setContentLength(BaFileSize len)
Sets the "Content-Length" parameter value.
Definition: HttpServer.h:1783
void setSecure(bool flag)
Inform the browser whether the cookie should be sent only using a secure protocol such as HTTPS – i....
Definition: HttpServer.h:678
HttpPage * findPage(HttpPage *iter, const char *name)
Searches for a page in this directory node.
Definition: HttpServer.h:2636
HttpServer * getServer()
Returns the web server object.
Definition: HttpServer.h:1122
int resetHeaders()
Removes all HTTP headers.
Definition: HttpServer.h:1761
struct HttpServer * getServer()
Get the web-server object.
Definition: HttpServer.h:1868
HttpRequest * getRequest()
Get the request object.
Definition: HttpServer.h:1862
int insertPage(HttpPage *page)
Insert a page in the directory.
Definition: HttpServer.h:2627
int setAttribute(HttpSessionAttribute *value)
Binds an object to this session, using the name specified.
Definition: HttpServer.h:2120
HttpMethod getMethodType()
Returns the method type.
Definition: HttpServer.h:1116
int send(const void *data, int len)
Used when sending raw data to the client.
Definition: HttpServer.h:1809
HttpResponse * getResponse()
Get the response object.
Definition: HttpServer.h:1864
int removeResponseBuf()
Remove buffer set by using setResponseBuf.
Definition: HttpServer.h:1759
HttpMethod
HTTP method types.
Definition: HttpServer.h:780
HttpConnection * getConnection()
Returns the connection object associated with this request.
Definition: HttpServer.h:3159
const char * getDomain()
Returns the host header without any port number.
Definition: HttpServer.h:757
struct HttpRequest HttpRequest
The HttpServer creates an HttpRequest object when the HttpServer parses a client request.
void setAuthenticator(struct AuthenticatorIntf *authenticator, struct AuthorizerIntf *authorizer=0)
Set the optional authenticator and optional AuthorizerIntf.
Definition: HttpServer.h:2650
struct HttpConnection * getConnection()
Get the current connection object that the HttpCommand instance is bound with.
Definition: HttpServer.h:1866
int sendBufAsTxtError(int eCode)
Sends the data formatted into the HttpResponse buffer as an error message to the client.
Definition: HttpServer.h:1771
bool isForward() const
Returns true if this is a forward request from another servlet or CSP file.
Definition: HttpServer.h:1751
AuthenticatedUser * getAuthenticatedUser()
Returns the authenticated user or NULL if user is not authenticated.
Definition: HttpServer.h:1114
int unlink()
Unlinks/removes the page from the parent directory.
Definition: HttpServer.h:2328
HttpServer * getServer()
Get the server object.
Definition: HttpServer.h:2114
struct HttpSessionAttribute HttpSessionAttribute
The interface to an HttpSession attribute.
int setRequest(S16 min, S16 max)
Set the size of the HTTP request buffer.
Definition: HttpServer.h:2841
bool hasMoreElements()
Returns true if more elements.
Definition: HttpServer.h:1151
HttpStdHeaders * getStdHeaders()
Returns an object containing standard HTTP headers.
Definition: HttpServer.h:1128
const char * getHeaderValue(const char *name)
Returns the value of the specified request header.
Definition: HttpServer.h:1132
int setDefaultHeaders()
Sets the most common header values in servlet and CSP files.
Definition: HttpServer.h:1811
int resetBuffer()
Clears the content of the underlying buffer in the response without clearing headers or status code.
Definition: HttpServer.h:1763
int insertCSP(CspInit cspInit, const char *virtualDirRootPath, struct CspReader *reader)
Insert and initialize a CSP Virtual Directory.
Definition: HttpServer.h:3126
struct HttpServerConfig HttpServerConfig
Use an instance of this class if you want to override the default web-server parameters.
const char * encodeRedirectURL(const char *pathName)
Encodes the specified URL into an absolute URL, or if encoding is not needed, returns the URL unchang...
Definition: HttpServer.h:1735
bool initial() const
Returns true if this is the initial page.
Definition: HttpServer.h:1755
struct HttpStdHeaders HttpStdHeaders
Standard HTTP header values.
static void setErrHnd(UserDefinedErrHandler e)
You can set your own user defined error handler for the web-server.
Definition: HttpServer.h:3143
void terminate()
Unbinds any objects bound to this session object, runs the HttpSession destructor,...
Definition: HttpServer.h:2116
struct HttpResponse HttpResponse
This object is used when sending response messages back to the client.
~HttpPage()
The HttpPage destructor unlinks the page from the parent directory.
Definition: HttpServer.h:2323
void nextElement()
Advance to the next element.
Definition: HttpServer.h:493
SBaFileSize getContentLength()
Returns the content length if request contains a body.
Definition: HttpServer.h:761
U32 byteCount()
Returns number of bytes sent thus far.
Definition: HttpServer.h:1733
int setCommit(U16 size)
Set the size of the HTTP response commit buffer.
Definition: HttpServer.h:2847
HttpDir()
Constructor for creating a root dir, a root dir has no name.
Definition: HttpServer.h:2615
struct HttpServer HttpServer
The Web Server.
HttpCookie * getCookie(const char *name)
Returns the requested cookie or NULL if no cookie matches the name.
Definition: HttpServer.h:1134
ThreadMutex * getMutex()
Get the dispatcher mutex.
Definition: HttpServer.h:3121
void service(HttpRequest *request, HttpResponse *response)
The virtual service function (C callback function) is normally run by the parent directory when deleg...
Definition: HttpServer.h:2329
void setMaxAge(BaTime expiry)
Sets the maximum age of the cookie in seconds.
Definition: HttpServer.h:672
int setResponseBuf(BufPrint *buf, bool useDefBuffer=true)
This is an advanced function that makes it possible to redirect the output, which is normally sent to...
Definition: HttpServer.h:1757
HttpSessionContainer * getSessionContainer()
Get the HttpSessionContainer.
Definition: HttpServer.h:3136
HttpDir * getFirstRootDir()
Returns the first root directory.
Definition: HttpServer.h:3134
HttpSessionAttribute * getAttribute(const char *name)
Returns the object bound with the specified name in this session, or null if no object is bound under...
Definition: HttpServer.h:2106
AuthenticatedUser * getAuthenticatedUser()
Returns the AuthenticatedUser if user is authenticated.
Definition: HttpServer.h:2131
int setContentType(const char *type)
Sets the "Content-Type" parameter value.
Definition: HttpServer.h:1785
void(* HttpPage_Service)(struct HttpPage *page, HttpRequest *request, HttpResponse *response)
The HttpPage service function.
Definition: HttpServer.h:2196
struct HttpCookie HttpCookie
A cookie is used for exchanging a small amount of information between a HttpPage and a web browser.
U32 getId()
Returns a unique identifier assigned to this session.
Definition: HttpServer.h:2128
int setResponseHeader(U16 min, U16 max)
Set the size of the HTTP response header buffer.
Definition: HttpServer.h:2843
void set404Page(const char *page404)
Set a more user friendly 404 page.
Definition: HttpServer.h:3145
const char * encodeRedirectURLWithParam(const char *pathName)
This method is similar to HttpResponse::encodeRedirectURL, but this method also includes all URL-enco...
Definition: HttpServer.h:1737
static void initStatic(void)
The only purpose with this function is to clean all static variables that are in the BSS section; i....
Definition: HttpServer.h:3141
struct HttpServer * getServer()
Fetch the HttpServer object.
Definition: HttpServer.h:3167
BufPrint * getWriter()
Returns a BufPrint object that can send any type of data to the client.
Definition: HttpServer.h:1805
int write(const void *data, int len, int useBuffering=TRUE)
Used for sending pre-formatted data to the client.
Definition: HttpServer.h:1807
int setMaxSessions(U16 size)
Maximum allowed active HttpSession objects.
Definition: HttpServer.h:2853
HttpInData * getBuffer()
Get the internal rec buffer.
Definition: HttpServer.h:1153
const char * encodeUrl(const char *path)
Encodes an absolute or relative URL, or if encoding is not needed, returns the URL unchanged.
Definition: HttpServer.h:1739
int setNoOfHttpCommands(U16 size)
The number of HttpCommand instances created by the web-server.
Definition: HttpServer.h:2849
HttpDir * createOrGet(const char *name)
Returns a sub-directory with the given name.
Definition: HttpServer.h:2641
bool authenticateAndAuthorize(HttpCommand *cmd, const char *path)
Authenticate and authorize the user.
Definition: HttpServer.h:2654
int(* HttpDir_Service)(struct HttpDir *o, const char *relPath, HttpCommand *cmd)
The HttpDir service callback function.
Definition: HttpServer.h:2340
HttpServer(SoDisp *dispatcher, HttpServerConfig *cfg=0)
Create a Web Server object.
Definition: HttpServer.h:3115
struct HttpCommand HttpCommand
The HttpCommand class is a container class for the HttpRequest and HttpResponse command pair.
char * fmtHeader(const char *name, int valueLen, bool replace=true)
Pre-allocate memory for a {name, value} pair in the response header database.
Definition: HttpServer.h:1794
bool isInclude() const
Returns true if this is an include from another servlet or CSP file.
Definition: HttpServer.h:1753
int unlink()
Unlinks/removes the directory from the parent directory.
Definition: HttpServer.h:2647
char * getRootPath()
Calculates the root of where the HttpDir instance is installed in the virtual file system.
Definition: HttpServer.h:2623
int checkMethods(HttpResponse *resp, U32 methods, bool addDefault=TRUE)
Checks the HTTP method type and sends a response message if condition met.
Definition: HttpServer.h:1107
const char * getVersion()
Returns the HTTP version as a string, normally "1.1".
Definition: HttpServer.h:1130
int printf(const char *fmt,...)
printf is used for sending formatted data to the client.
Definition: HttpServer.h:1800
int redirect2TLS()
Converts the URL to HTTPS and sends a redirect (301) response to the client if this is a non-secure c...
Definition: HttpServer.h:1781
HttpPage * getFirstPage()
Returns the first page.
Definition: HttpServer.h:2629
SoDisp * getDispatcher()
Returns the dispatcher object.
Definition: HttpServer.h:3132
HttpDir * getDir(const char *name)
Returns the first directory with the name given or NULL if not found.
Definition: HttpServer.h:2631
int wsUpgrade()
Activate a WebSocket handshake.
Definition: HttpServer.h:1138
void setPath(const char *uri)
Set the cookie path.
Definition: HttpServer.h:676
static const char * getStatusCode(int code)
Return a short description for common HTTP error codes.
Definition: HttpServer.h:3151
char * makeAbsPath(const char *relPath, int relPathLen)
Makes an absolute path based on where the HttpDir instance is installed in the virtual file system an...
Definition: HttpServer.h:2621
struct HttpSessionContainer HttpSessionContainer
The HttpSession container class.
HttpSession * getSession(U32 id)
Returns the HttpSession associated with id or NULL if not found.
Definition: HttpServer.h:3139
U32 getUseCounter()
Get the session usage counter.
Definition: HttpServer.h:2129
bool committed() const
Returns a boolean indicating if the response has been committed.
Definition: HttpServer.h:1749
int redirect(const char *path)
Internally redirects the request to another resource.
Definition: HttpServer.h:1745
void incrRefCntr()
Increments the session reference counter.
Definition: HttpServer.h:2124
const char * getConnection()
Returns the connection type for HTTP 1.1 connections, returns "Close" or "Keep-Alive.
Definition: HttpServer.h:753
const char * getParameter(const char *paramName)
Returns the value of a request parameter as a const char* or null if the parameter does not exist.
Definition: HttpServer.h:1136
void decrRefCntr()
Decrements the session reference counter.
Definition: HttpServer.h:2126
const char * getRequestURL(bool forceHttps=false)
Reconstructs the URL the client used to make the request.
Definition: HttpServer.h:1126
HttpCommand * getCommand()
Get the HttpCommand object.
Definition: HttpServer.h:3165
int insertDir(HttpDir *dir)
Insert a sub-directory.
Definition: HttpServer.h:2625
void setMaxInactiveInterval(BaTime interval)
Specifies the time, in seconds, between client requests before the session container will invalidate ...
Definition: HttpServer.h:2122
void setMaxSessions(int max)
Set the maximum number of session objects.
Definition: HttpServer.h:2182
struct HttpSession HttpSession
Provides a way to identify a user across more than one page request or visit to a web site,...
bool isLinked()
Returns true if this page node is installed into a parent directory.
Definition: HttpServer.h:2325
const char * get404Page()
Returns a pointer to the current 404 page, if any.
Definition: HttpServer.h:3147
HttpCommand * getCommand()
Get the HttpCommand object.
Definition: HttpServer.h:3163
static HttpDir * findDir(HttpDir *iter, const char *name, unsigned int nameLen)
Searches for a sub-directory in this directory node.
Definition: HttpServer.h:2638
HttpSession * getSession(BaBool create=true)
Returns the current HttpSession associated with this request, or if there is no current session and c...
Definition: HttpServer.h:1148
HttpServerConfig()
The constructor sets up the default parameters.
Definition: HttpServer.h:2839
const char * getMethod()
Returns a string representation of the value returned by HttpRequest::getMethodType.
Definition: HttpServer.h:1118
void setValue(const char *newValue)
Assigns a new value to a cookie after the cookie is created.
Definition: HttpServer.h:682
BaTime getMaxInactiveInterval()
Returns the maximum time interval, in seconds, that the session container will keep this session open...
Definition: HttpServer.h:2112
HttpCookie * createCookie(const char *name)
Create a cookie.
Definition: HttpServer.h:1729
HttpPage * getPage(const char *name)
Returns the page with the name given or NULL if not found.
Definition: HttpServer.h:2633
int fmtError(int eCode, const char *fmt,...)
This method implements a printf like implementation for formatting and sending an error message.
Definition: HttpServer.h:1773
struct HttpPage HttpPage
An HttpPage, which is typically created by the CSP compiler, is similar to a Java servlet.
HttpDir_Service setService(HttpDir_Service s)
Replace the original service function in HttpDir with your own.
Definition: HttpServer.h:2643
HttpDir * getFirstDir()
Returns the first sub-directory.
Definition: HttpServer.h:2630
bool isLinked()
Returns true if this directory node is installed into a parent directory.
Definition: HttpServer.h:2648
HttpResponse * getResponse()
Returns the HttpResponse object.
Definition: HttpServer.h:3157
int insertDir(const char *virtualDirRootPath, HttpDir *dir)
Insert a directory node into the virtual file system.
Definition: HttpServer.h:3124
void setStatus(int statusCode)
Sets the status code for this response.
Definition: HttpServer.h:1797
int insertRootDir(HttpDir *dir)
Insert a root directory node.
Definition: HttpServer.h:3119
int setHeader(const char *name, const char *value, bool replace=true)
Sets a HTTP response header with the given name and value.
Definition: HttpServer.h:1789
HttpRequest * getRequest()
Get the HttpRequest object.
Definition: HttpServer.h:3161
void p403(const char *p403)
Set a 403 denied request handler.
Definition: HttpServer.h:2645
HttpSession * getSession()
Get the session object.
Definition: HttpServer.h:1954
BaBool checkTime(struct HttpResponse *resp, BaTime time)
Parses and checks if the "If-Modified-Since" time is equal or greater than "time".
Definition: HttpServer.h:1112
void activate()
Activates the cookie.
Definition: HttpServer.h:688
int sendRedirect(const char *url)
Sends a temporary redirect (302) response to the client using the specified redirect location URL.
Definition: HttpServer.h:1779
int setResponseData(U16 size)
The HttpResponse object stores formatted data in the response data buffer.
Definition: HttpServer.h:2845
int removeAttribute(const char *name)
Removes the object bound with the specified name from this session.
Definition: HttpServer.h:2118
void setDomain(const char *pattern)
Specifies the domain within which this cookie should be presented.
Definition: HttpServer.h:670
int setNoOfHttpConnections(U16 size)
Number of HttpConnection instances.
Definition: HttpServer.h:2851
void setComment(const char *purpose)
Specifies a comment that describes a cookie's purpose.
Definition: HttpServer.h:668
int sendBufAsError(int eCode)
Sends the data formatted into the HttpResponse buffer as an error message to the client.
Definition: HttpServer.h:1769
HttpSessionAttribute(const char *name, HttpSessionAttribute_Destructor terminate)
Create a session attribute.
Definition: HttpServer.h:1950
struct HttpDir HttpDir
An instance of the HttpDir class, which is a collection of zero or more resources,...
struct HttpParameterIterator HttpParameterIterator
The HttpParameterIterator is used for iterating through the form elements parsed by the HttpServer ob...
S64 BaTime
An arithmetic type representing calendar time with epoch of 1970-01-01 00:00:10 GMT – i....
Definition: GenPrimT.h:93
Abstract base class implemented by BasicAuthUser, FormAuthUser and DigestAuthUser.
Definition: AuthenticatedUser.h:246
Abstract interface class implemented by DigestAuthenticator, FormAuthenticator and DigestAuthenticato...
Definition: AuthenticatedUser.h:398
An abstract class, which you must implement, provides a method of authorizing an authenticated user.
Definition: AuthenticatedUser.h:112
The BufPrint class, which implements an ANSI compatible printf method, is a base class used by severa...
Definition: BufPrint.h:122
Abstract interface class for reading the "dat" file generated by HttpLink.
Definition: CspRunTm.h:118
The HttpCommand class is a container class for the HttpRequest and HttpResponse command pair.
Definition: HttpServer.h:1824
Contains information about the physical socket connection.
Definition: HttpConnection.h:76
A cookie is used for exchanging a small amount of information between a HttpPage and a web browser.
Definition: HttpServer.h:524
const char * getComment() const
Returns the comment set for this cookie or null if the cookie comment is not set.
Definition: HttpServer.h:530
const char * getPath() const
Returns the path on the server to which the browser returns this cookie.
Definition: HttpServer.h:545
BaTime getMaxAge() const
Returns the maximum age of the cookie, specified in seconds; by default, 0 indicating the cookie will...
Definition: HttpServer.h:538
bool getSecure() const
Returns true if the browser is sending cookies only over a secure protocol, or false if the browser c...
Definition: HttpServer.h:550
const char * getDomain() const
Returns the domain name set for this cookie.
Definition: HttpServer.h:533
const char * getValue() const
Returns the value of the cookie.
Definition: HttpServer.h:558
bool getHttpOnly() const
Return the HttpOnly attribute.
Definition: HttpServer.h:555
const char * getName() const
Returns the name of the cookie.
Definition: HttpServer.h:541
An instance of the HttpDir class, which is a collection of zero or more resources,...
Definition: HttpServer.h:2370
HttpDir * getParent() const
Returns the parent directory or NULL if no parent.
Definition: HttpServer.h:2467
const char * getName() const
Returns the directory name.
Definition: HttpServer.h:2463
The web-server "Request Data" container.
Definition: HttpServer.h:266
const char * getBuf()
Get pointer to start of PUT/POST data.
Definition: HttpServer.h:301
S32 getBufSize()
Get size of internal buffer.
Definition: HttpServer.h:303
An HttpPage, which is typically created by the CSP compiler, is similar to a Java servlet.
Definition: HttpServer.h:2262
const char * getName() const
Returns the page name.
Definition: HttpServer.h:2285
The HttpParameterIterator is used for iterating through the form elements parsed by the HttpServer ob...
Definition: HttpServer.h:440
const char * getValue() const
Returns the form value.
Definition: HttpServer.h:461
const char * getName() const
Return the form name.
Definition: HttpServer.h:459
A persistent container object for HTTP parameters.
Definition: HttpServer.h:365
static U32 calculateSize(struct HttpRequest *req)
Calculate the HttpParameter size.
Definition: HttpServer.h:403
const char * getParameter(const char *paramName)
Returns the value of a request parameter as a const char*, or null if the parameter does not exist.
Definition: HttpServer.h:407
static HttpParameter * clone(void *buf, struct HttpRequest *req)
Copy HTTP parameters to buf and return as a HttpParameter object.
Definition: HttpServer.h:405
The HttpServer creates an HttpRequest object when the HttpServer parses a client request.
Definition: HttpServer.h:816
This object is used when sending response messages back to the client.
Definition: HttpServer.h:1186
Use an instance of this class if you want to override the default web-server parameters.
Definition: HttpServer.h:2687
The Web Server.
Definition: HttpServer.h:2867
The interface to an HttpSession attribute.
Definition: HttpServer.h:1918
The HttpSession container class.
Definition: HttpServer.h:2150
Provides a way to identify a user across more than one page request or visit to a web site,...
Definition: HttpServer.h:1965
The SoDisp dispatches any socket connection that contains data by calling the SoDispCon::execute memb...
Definition: SoDisp.h:86
A mutual exclusion class.
Definition: ThreadLib.h:186
User database interface used by the authentication classes.
Definition: AuthenticatedUser.h:177