39#define BASLIB_VER "5977"
40#define BASLIB_VER_NO 5977
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; }
616 int getVersion()
const {
return version; }
618 void setVersion(
int v);
640 BaBool deleteCookieFlag;
648BA_API
void HttpCookie_destructor(
HttpCookie* o);
649BA_API
const char* HttpCookie_getComment(
HttpCookie* o);
650BA_API
const char* HttpCookie_getDomain(
HttpCookie* o);
652BA_API
const char* HttpCookie_getName(
HttpCookie* o);
653BA_API
const char* HttpCookie_getPath(
HttpCookie* o);
654BA_API BaBool HttpCookie_getSecure(
HttpCookie* o);
655BA_API BaBool HttpCookie_getHttpOnly(
HttpCookie* o);
656BA_API
const char* HttpCookie_getValue(
HttpCookie* o);
657BA_API
int HttpCookie_setComment(
HttpCookie* o,
const char* purpose);
658BA_API
int HttpCookie_setDomain(
HttpCookie* o,
const char* pattern);
660#define HttpCookie_deleteCookie(o) (o)->deleteCookieFlag = TRUE;
661BA_API
int HttpCookie_setPath(
HttpCookie* o,
const char* uri);
662BA_API
void HttpCookie_setSecure(
HttpCookie* o, BaBool flag);
663BA_API
void HttpCookie_setHttpOnly(
HttpCookie* o, BaBool flag);
664BA_API
int HttpCookie_setValue(
HttpCookie* o,
const char* newValue);
668void HttpCookie_setVersion(
HttpCookie* o,
int v);
671BA_API
void HttpCookie_activate(
HttpCookie* o);
674inline HttpCookie::HttpCookie() { baAssert(0); }
675inline HttpCookie::~HttpCookie() { HttpCookie_destructor(
this); }
677 return HttpCookie_setComment(
this, purpose); }
679 return HttpCookie_setDomain(
this, pattern); }
681 HttpCookie_setMaxAge(
this, expiry); }
683 HttpCookie_deleteCookie(
this); }
685 return HttpCookie_setPath(
this, uri); }
687 HttpCookie_setSecure(
this, flag ? TRUE : FALSE); }
689 HttpCookie_setHttpOnly(
this, flag ? TRUE : FALSE); }
691 return HttpCookie_setValue(
this, newValue); }
693inline void HttpCookie::setVersion(
int v) {
694 HttpCookie_setVersion(
this, v); }
697 HttpCookie_activate(
this); }
739 BaFileSize contentLength;
742 U16 contentTypeHOffs;
748BA_API
const char* HttpStdHeaders_zzGetValFromOffs(
751#define HttpStdHeaders_getConnection(o) \
752 HttpStdHeaders_zzGetValFromOffs(o,(o)->connectionHOffs)
753#define HttpStdHeaders_getHost(o) \
754 HttpStdHeaders_zzGetValFromOffs(o,(o)->hostHOffs)
755#define HttpStdHeaders_getContentType(o) \
756 HttpStdHeaders_zzGetValFromOffs(o,(o)->contentTypeHOffs)
757#define HttpStdHeaders_getContentLength(o) (o)->contentLength
762 return HttpStdHeaders_getConnection(
this); }
764 return HttpStdHeaders_getHost(
this); }
766 return HttpStdHeaders_getDomain(
this); }
768 return HttpStdHeaders_getContentType(
this); }
770 return HttpStdHeaders_getContentLength(
this); }
789 HttpMethod_Connect =0x00001,
790 HttpMethod_Get =0x00002,
791 HttpMethod_Head =0x00004,
792 HttpMethod_Options =0x00008,
794 HttpMethod_Patch =0x00010,
795 HttpMethod_Post =0x00020,
796 HttpMethod_Put =0x00040,
797 HttpMethod_Trace =0x00080,
800 HttpMethod_Copy =0x00100,
801 HttpMethod_Delete =0x00200,
802 HttpMethod_Lock =0x00400,
803 HttpMethod_Move =0x00800,
805 HttpMethod_Mkcol =0x01000,
806 HttpMethod_Propfind =0x02000,
807 HttpMethod_Proppatch =0x04000,
808 HttpMethod_Unlock =0x08000,
810 HttpMethod_Unknown =0x10000
815BA_API
HttpMethod HttpMethod_a2m(
const char* str);
1027#ifndef NO_HTTP_SESSION
1050 int setUserObj(
void* userObj,
bool overwrite=
false);
1055 HttpAllocator headerAlloc;
1056 HttpAllocator formAlloc;
1068 BaBool postDataConsumed;
1075 U32 methods, BaBool addDefault);
1076BA_API
int HttpRequest_checkOptions(
1078#define HttpRequest_getAuthenticatedUser(o) \
1079 AuthenticatedUser_get2(HttpRequest_getSession(o,FALSE))
1080#define HttpRequest_getConnection(o) HttpRequest_getCommand(o)->con
1081#define HttpRequest_getMethodType(o) (o)->methodType
1082#define HttpRequest_getMethod(o) HttpRequest_getMethod2((o)->methodType)
1083BA_API
const char* HttpRequest_getMethod2(
HttpMethod method);
1084#define HttpRequest_getServer(o) (o)->server
1085#define HttpRequest_getResponse(o) (&HttpRequest_getCommand(o)->response)
1087BA_API BaBool HttpRequest_checkTime(
1089BA_API
const char* HttpRequest_getRequestURI(
HttpRequest* o);
1090BA_API
const char* HttpRequest_getRequestURL(
HttpRequest* o,BaBool forceHttps);
1091#define HttpRequest_getStdHeaders(o) (&(o)->stdH)
1092BA_API
const char* HttpRequest_getVersion(
HttpRequest* o);
1093BA_API
const char* HttpRequest_getHeaderValue(
HttpRequest* o,
const char* name);
1094#define HttpRequest_getNoOfParameters(o) (o)->formLen
1096#define HttpRequest_getUserObj(o) (o)->userObj
1097BA_API
int HttpRequest_setUserObj(
1099#define HttpRequest_getBuffer(o) (&(o)->inData)
1100BA_API
const char* HttpRequest_getParameter(
1102BA_API HttpHeader* HttpRequest_getHeaders(
HttpRequest* o,
int* len);
1104BA_API BaBool HttpRequest_enableKeepAlive(
HttpRequest* o);
1105BA_API
int HttpRequest_pushBackData(
HttpRequest* o);
1106#ifndef NO_HTTP_SESSION
1110 HttpRequest* o,
const char* val,
size_t len,
int set);
1116 U32 methods,
bool addDefault){
1117 return HttpRequest_checkMethods(
this,resp,
1118 methods, addDefault ? TRUE : FALSE);}
1121 return HttpRequest_checkTime(
this, resp, time); }
1123 return HttpRequest_getAuthenticatedUser(
this); }
1125 return HttpRequest_getMethodType(
this); }
1127 return HttpRequest_getMethod(
this); }
1129 return HttpRequest_getMethod2(method); }
1131 return HttpRequest_getServer(
this); }
1133 return HttpRequest_getRequestURI(
this); }
1135 return HttpRequest_getRequestURL(
this, forceHttps); }
1137 return HttpRequest_getStdHeaders(
this); }
1139 return HttpRequest_getVersion(
this); }
1141 return HttpRequest_getHeaderValue(
this, name); }
1143 return HttpRequest_getCookie(
this, name); }
1145 return HttpRequest_getParameter(
this, paramName); }
1147 return HttpRequest_wsUpgrade(
this);
1150 return HttpRequest_getHeaders(
this, len); }
1151inline int HttpRequest::setUserObj(
void* userObj,
bool overwrite) {
1152 return HttpRequest_setUserObj(
this, userObj, overwrite); }
1153inline void* HttpRequest::getUserObj() {
1154 return HttpRequest_getUserObj(
this); }
1155#ifndef NO_HTTP_SESSION
1157 return HttpRequest_getSession(
this, create); }
1160 return HttpParameterIterator_hasMoreElements(
this); }
1162 return HttpRequest_getBuffer(
this); }
1171 U16 maxResponseHeader;
1248 const char*
encodeUrl(
const char* path);
1280 int forward(
const char* path);
1328 int include(
const char* path);
1387 int sendError(
int eCode,
const char* msg);
1410 int fmtError(
int eCode,
const char* fmt, ...);
1498 int setHeader(
const char* name,
const char* value,
bool replace=
true);
1540 char*
fmtHeader(
const char* name,
int valueLen,
bool replace=
true);
1562 int printf(
const char* fmt, ...);
1580 int write(
const void* data,
int len,
int useBuffering=TRUE);
1589 int write(
const char* data,
int useBuffering=TRUE);
1595 int send(
const void* data,
int len);
1632 int setUserObj(
void* userObj,
bool overwrite=
false);
1634 NameValMM nameValMM;
1640 char* encodedRedirectURL;
1645 HttpProtocol protocol;
1649 char printAndWriteInitialized;
1650 char useChunkTransfer;
1658BA_API
const char* HttpResponse_containsHeader(
1660BA_API
int HttpResponse_dataAdded(
HttpResponse* o, U32 size);
1661#define HttpResponse_byteCount(o) ((o)->msgLen + (o)->bodyPrint->cursor)
1662BA_API
const char* HttpResponse_encodeRedirectURL(
1664BA_API
const char* HttpResponse_encodeRedirectURLWithParamOrSessionURL(
1666#define HttpResponse_encodeRedirectURLWithParam(o, path) \
1667 HttpResponse_encodeRedirectURLWithParamOrSessionURL(o, path, FALSE)
1668#define HttpResponse_encodeSessionURL(o, path) \
1669 HttpResponse_encodeRedirectURLWithParamOrSessionURL(o, path, TRUE)
1670BA_API
const char* HttpResponse_encodeUrl(
HttpResponse* o,
const char* path);
1672#define HttpResponse_forward(o,path) HttpResponse_incOrForward(o,path,FALSE)
1673#define HttpResponse_getConnection(o) HttpResponse_getCommand(o)->con
1674#define HttpResponse_getRequest(o) (&HttpResponse_getCommand(o)->request)
1676#define HttpResponse_getBuf(o) (o)->bodyPrint->buf
1677#define HttpResponse_getBufSize(o) (o)->bodyPrint->bufSize
1678#define HttpResponse_getBufOffs(o) \
1679 ((o)->bodyPrint->buf + (o)->bodyPrint->cursor)
1680#define HttpResponse_getRemBufSize(o) \
1681 ((o)->bodyPrint->bufSize - (o)->bodyPrint->cursor)
1682#define HttpResponse_getUserObj(o) (o)->userObj
1683BA_API
int HttpResponse_incOrForward(
1685BA_API
int HttpResponse_redirect(
HttpResponse* o,
const char* path);
1686#define HttpResponse_include(o,path) HttpResponse_incOrForward(o,path,TRUE)
1687#define HttpResponse_isChunkTransfer(o) (o)->useChunkTransfer
1688#define HttpResponse_committed(o) (o)->headerSent
1689#define HttpResponse_isForward(o) ((o)->forwardCounter != 0)
1690#define HttpResponse_isInclude(o) ((o)->includeCounter != 0)
1691#define HttpResponse_initial(o) (!HttpResponse_isForward(o) && \
1692 !HttpResponse_isInclude(o))
1693BA_API
int HttpResponse_setResponseBuf(
1695BA_API
int HttpResponse_removeResponseBuf(
HttpResponse* o);
1699BA_API
int HttpResponse_sendError1(
HttpResponse* o,
int eCode);
1700BA_API
int HttpResponse_sendError2(
HttpResponse* o,
int eCode,
const char* msg);
1701BA_API
int HttpResponse_sendBufAsError(
HttpResponse* o,
int eCode);
1702BA_API
int HttpResponse_sendBufAsTxtError(
HttpResponse* o,
int eCode);
1703BA_API
int HttpResponse_fmtVError(
1708BA_API
int HttpResponse_fmtError(
1711 const char* fmt, ...);
1712BA_API
int HttpResponse_sendRedirect(
HttpResponse* o,
const char* url);
1713BA_API
int HttpResponse_sendRedirectI(
1716#define HttpResponse_forceHttps HttpResponse_redirect2TLS
1718#define HttpResponse_setBufPos(o, pos) (o)->bodyPrint->cursor = pos
1719BA_API
int HttpResponse_setContentLength(
HttpResponse* o, BaFileSize len);
1720BA_API
int HttpResponse_setContentType(
HttpResponse* o,
const char* type);
1721BA_API
int HttpResponse_checkContentType(
HttpResponse* o,
const char* type);
1722BA_API
int HttpResponse_setDateHeader(
1724BA_API
int HttpResponse_setHeader(
1725 HttpResponse* o,
const char* name,
const char* value, BaBool replace);
1727BA_API
char* HttpResponse_fmtHeader(
1728 HttpResponse* o,
const char* name,
int valueLen, BaBool replace);
1729BA_API
int HttpResponse_setStatus(
HttpResponse* o,
int eCode);
1730BA_API
int HttpResponse_vprintf(
1732BA_API
int HttpResponse_printf(
HttpResponse* o,
const char* fmt, ...);
1733BA_API
int HttpResponse_write(
HttpResponse* o,
const void* data,
int len,
1736BA_API
int HttpResponse_send(
HttpResponse* o,
const void* data,
int len);
1737BA_API
int HttpResponse_setDefaultHeaders(
HttpResponse* o);
1739BA_API
int HttpResponse_setUserObj(
1741BA_API
int HttpResponse_printAndWriteInit(
HttpResponse* o);
1742BA_API
int HttpResponse_send100Continue(
HttpResponse* o);
1743BA_API
int HttpResponse_setChunkEncoding(
HttpResponse* o);
1744BA_API
const char* HttpResponse_getRespData(
HttpResponse* o,
int* len);
1745#define HttpResponse_getStatus(o) (o)->statusCode
1749 return HttpResponse_createCookie(
this, name); }
1751 return HttpResponse_containsHeader(
this, name); }
1753 return HttpResponse_byteCount(
this); }
1755 return HttpResponse_encodeRedirectURL(
this, pathName); }
1757 return HttpResponse_encodeRedirectURLWithParam(
this, p); }
1759 return HttpResponse_encodeUrl(
this, path); }
1761 return HttpResponse_flush(
this); }
1763 return HttpResponse_forward(
this, path); }
1765 return HttpResponse_redirect(
this, path); }
1767 return HttpResponse_include(
this, path); }
1769 return HttpResponse_committed(
this) ? true :
false; }
1771 return HttpResponse_isForward(
this) ? true :
false; }
1773 return HttpResponse_isInclude(
this) ? true :
false; }
1775 return HttpResponse_initial(
this) ? true :
false; }
1777 return HttpResponse_setResponseBuf(
this, buf, useDefBuffer?TRUE:FALSE); }
1779 return HttpResponse_removeResponseBuf(
this); }
1781 return HttpResponse_resetHeaders(
this); }
1783 return HttpResponse_resetBuffer(
this); }
1785 return HttpResponse_sendError1(
this, eCode); }
1787 return HttpResponse_sendError2(
this, eCode, msg); }
1789 return HttpResponse_sendBufAsError(
this, eCode); }
1791 return HttpResponse_sendBufAsTxtError(
this,eCode);}
1793 int retv; va_list varg;
1794 va_start(varg, fmt);
1795 retv = HttpResponse_fmtVError(
this, eCode, fmt, varg);
1799 return HttpResponse_sendRedirect(
this, url); }
1801 return HttpResponse_redirect2TLS(
this); }
1803 return HttpResponse_setContentLength(
this, len); }
1805 return HttpResponse_setContentType(
this, type); }
1807 return HttpResponse_setDateHeader(
this, name, t); }
1809 const char* name,
const char* value,
bool replace) {
1810 return HttpResponse_setHeader(
this,name, value, replace?TRUE:FALSE); }
1812 return HttpResponse_setMaxAge(
this, seconds); }
1814 const char* name,
int valueLen,
bool replace) {
1815 return HttpResponse_fmtHeader(
this, name, valueLen, replace?TRUE:FALSE); }
1817 HttpResponse_setStatus(
this, eCode);}
1820 int retv; va_list varg; va_start(varg, fmt);
1821 retv = HttpResponse_vprintf(
this, fmt, varg); va_end(varg);
return retv;}
1823 return HttpResponse_write(
this, data, iStrlen(data), useBuffering); }
1825 return HttpResponse_getWriter(
this); }
1827 return HttpResponse_write(
this, data, len, useBuffering); }
1829 return HttpResponse_send(
this, data, len); }
1831 return HttpResponse_setDefaultHeaders(
this); }
1832inline int HttpResponse::setUserObj(
void* userObj,
bool overwrite) {
1833 return HttpResponse_setUserObj(
this, userObj, overwrite); }
1871 struct LHttpCommand* lcmd;
1873 BaBool runningInThread;
1876#define HttpCommand_getRequest(o) (&(o)->request)
1877#define HttpCommand_getResponse(o) (&(o)->response)
1878#define HttpCommand_getConnection(o) (o)->con
1879#define HttpCommand_getServer(o) HttpConnection_getServer((o)->con)
1882 return HttpCommand_getRequest(
this); }
1884 return HttpCommand_getResponse(
this); }
1886 return HttpCommand_getConnection(
this); }
1888 return HttpCommand_getServer(
this);
1893#ifndef NO_HTTP_SESSION
1961BA_API
void HttpSessionAttribute_constructor(
1966#define HttpSessionAttribute_getSession(o) (o)->session
1972 HttpSessionAttribute_constructor(
this, name, d); }
1974 return HttpSessionAttribute_getSession(
this); }
1988 void operator delete(
void* d) {
if(d)
::baFree(d); }
1989 void *
operator new(size_t,
void *place) {
return place; }
1990 void operator delete(
void*,
void *) { }
2073 void incrementLock();
2074 void decrementLock();
2079 SplayTreeNode super;
2086 BaTime maxInactiveInterval;
2107BA_API
int HttpSession_removeAttribute(
HttpSession* o,
const char* name);
2108BA_API
int HttpSession_setAttribute(
HttpSession* o,
2111#define HttpSession_incrRefCntr(o) (o)->refCounter++
2112BA_API
void HttpSession_decrRefCntr(
HttpSession* o);
2113#define HttpSession_incrementLock(o) (o)->lockCounter++
2114#define HttpSession_decrementLock(o) do {\
2115 baAssert((o)->lockCounter > 0);\
2116 (o)->lockCounter--; } while(0)
2117BA_API
int HttpSession_fmtSessionId(
HttpSession* o, U8* buf,
size_t bufSize);
2118#define HttpSession_getId(o) \
2119 ((U32)((ptrdiff_t)SplayTreeNode_getKey((SplayTreeNode*)(o))))
2120#define HttpSession_getAuthenticatedUser(o) AuthenticatedUser_get2((o))
2121#define HttpSession_getUseCounter(o) (o)->useCounter
2122#define HttpSession_getPeerName(o) (&(o)->peer)
2126 return HttpSession_getAttribute(
this, name); }
2128 return HttpSession_getCreationTime(
this); }
2130 return HttpSession_getLastAccessedTime(
this); }
2132 return HttpSession_getMaxInactiveInterval(
this); }
2134 return HttpSession_getServer(
this); }
2136 HttpSession_terminate(
this); }
2138 return HttpSession_removeAttribute(
this, name); }
2140 return HttpSession_setAttribute(
this, value); }
2142 HttpSession_setMaxInactiveInterval(
this, interval); }
2144 HttpSession_incrRefCntr(
this); }
2146 HttpSession_decrRefCntr(
this); }
2149 return HttpSession_getUseCounter(
this); }
2151 return HttpSession_getAuthenticatedUser(
this); }
2152inline void HttpSession::incrementLock() {HttpSession_incrementLock(
this);}
2153inline void HttpSession::decrementLock() {HttpSession_decrementLock(
this);}
2158 HttpSessionContainer_OK = 0,
2159 HttpSessionContainer_NoMemory,
2160 HttpSessionContainer_TooManySessions,
2161 HttpSessionContainer_NoPeerAddress
2162} HttpSessionContainer_ECode;
2180 SplayTree sessionTree;
2181 DoubleList sessionList;
2182 DoubleList sessionTermList;
2183 DoubleLink* sessionLinkIter;
2187 HttpSessionContainer_ECode eCode;
2198#define HttpSessionContainer_setMaxSessions(o,max) (o)->maxSessions = max
2202 HttpSessionContainer_setMaxSessions(
this, max); }
2220#define HttpPageType_HttpPageSE 0x00020
2223typedef struct HttpPageNode
2225 struct HttpPageNode* next;
2284 void operator delete(
void* d) {
if(d)
::baFree(d); }
2285 void *
operator new(size_t,
void *place) {
return place; }
2286 void operator delete(
void*,
void *) { }
2330BA_API HttpPage_constructor(
2332BA_API
void HttpPage_destructor(
HttpPage* o);
2333#define HttpPage_getName(o) (o)->name
2334#define HttpPage_isLinked(o) ((HttpPageNode*)(o))->next
2335BA_API
int HttpPage_unlink(
HttpPage* o);
2336#define HttpPage_service(o, request, response) \
2337 (o)->serviceCB(o, request, response)
2341 HttpPage_constructor(
this,
service, name); }
2343 HttpPage_destructor(
this); }
2345 return HttpPage_isLinked(
this) ? true :
false;
2349 HttpPage_service(
this, request, response);
2360 const char* relPath,
2363#define HttpDirType_EhDir 0x00001
2364#define HttpDirType_HttpResRdr 0x00002
2365#define HttpDirType_AuthenticateDir 0x00008
2366#define HttpDirType_AuthenticateDirWrapper 0x00010
2392 void operator delete(
void* d) {
if(d)
::baFree(d); }
2393 void *
operator new(size_t,
void *place) {
return place; }
2394 void operator delete(
void*,
void *) { }
2414 HttpDir(
const char* name, S8 priority=0);
2470 unsigned int nameLen);
2510 char*
makeAbsPath(
const char* relPath,
int relPathLen);
2591 HttpPageNode pageList;
2599BA_API
void HttpDir_constructor(
HttpDir* o,
const char* name, S8 priority);
2600BA_API
void HttpDir_destructor(
HttpDir* o);
2601BA_API
char* HttpDir_makeAbsPath(
2602 HttpDir* o,
const char* relPath,
int relPathLen);
2603#define HttpDir_getRootPath(o) HttpDir_makeAbsPath(o,"",0)
2605#define HttpDir_getFirstPage(o) \
2606 (o)->pageList.next != &(o)->pageList ? ((HttpPage*)(o)->pageList.next) : 0
2607#define HttpDir_getFirstDir(o) (o)->dirList
2610#define HttpDir_getNext(o) (o)->next
2611#define HttpDir_getName(o) (o)->name
2612#define HttpDir_getParent(o) (o)->parent
2616BA_API
HttpDir* HttpDir_findDir(
2617 HttpDir* iter,
const char* name,
unsigned int nameLen);
2618BA_API
HttpDir* HttpDir_createOrGet(
HttpDir* o,
const char* name);
2619BA_API
void HttpDir_p403(
HttpDir* o,
const char* p403);
2620#define HttpDir_overloadService HttpDir_setService
2622#define HttpDir_isLinked(o) (o)->parent
2623BA_API
int HttpDir_unlink(
HttpDir* o);
2624#define HttpDir_setAuthenticator(o,authenticatorMA,authorizerMA) \
2625 (o)->authenticator = authenticatorMA,(o)->realm = authorizerMA
2626BA_API
int HttpDir_authenticateAndAuthorize(
2628#define HttpDir_isAuthorized(o,user,method,path) \
2630 (user ? AuthorizerIntf_authorize((o)->realm,user,method,path) : FALSE) : \
2635 HttpDir_constructor(
this, 0, 0); }
2637 HttpDir_constructor(
this, name, priority); }
2638inline HttpDir::~HttpDir() {
2639 HttpDir_destructor(
this); }
2641 return HttpDir_makeAbsPath(
this, relPath, relPathLen); }
2643 return HttpDir_getRootPath(
this); }
2645 return HttpDir_insertDir(
this, dir); }
2647 return HttpDir_insertPage(
this, page); }
2651 return HttpDir_getDir(
this,name); }
2653 return HttpDir_getPage(
this,name); }
2656 return HttpDir_findPage(
this, iter, name); }
2658 unsigned int nameLen) {
2659 return HttpDir_findDir(iter, name, nameLen); }
2661 return HttpDir_createOrGet(
this, name); }
2663 return HttpDir_setService(
this, s); }
2665 HttpDir_p403(
this,
p403); }
2668 return HttpDir_isLinked(
this) ? true :
false; }
2671 HttpDir_setAuthenticator(
this,authenticator,authorizer);
2675 return HttpDir_authenticateAndAuthorize(
this,cmd,path) ? true :
false; }
2680typedef struct HttpLinkCon
2692 BaBool page404InProgress;
2834 U16 minResponseHeader;
2835 U16 maxResponseHeader;
2838 U16 noOfHttpCommands;
2839 U16 noOfHttpConnections;
2847BA_API
int HttpServerConfig_setRequest(
HttpServerConfig* o, S16 min, S16 max);
2848BA_API
int HttpServerConfig_setResponseHeader(
2852BA_API
int HttpServerConfig_setNoOfHttpCommands(
HttpServerConfig* o, U16 size);
2853BA_API
int HttpServerConfig_setNoOfHttpConnections(
2859 HttpServerConfig_constructor(
this); }
2861 return HttpServerConfig_setRequest(
this, min, max); }
2863 return HttpServerConfig_setResponseHeader(
this, min, max); }
2865 return HttpServerConfig_setResponseData(
this, size); }
2867 return HttpServerConfig_setCommit(
this, size); }
2869 return HttpServerConfig_setNoOfHttpCommands(
this, size); }
2871 return HttpServerConfig_setNoOfHttpConnections(
this, size); }
2873 return HttpServerConfig_setMaxSessions(
this, size); }
2878typedef DoubleList HttpLinkConList;
2881typedef void (*LspOnTerminateRequest)(
struct LHttpCommand* lcmd);
2889 void operator delete(
void* d) {
if(d)
::baFree(d); }
2890 void *
operator new(size_t,
void *place) {
return place; }
2891 void operator delete(
void*,
void *) { }
2978 const char* virtualDirRootPath,
2981 struct AuthUserList* getAuthUserList(
const char* name);
2999#ifndef NO_HTTP_SESSION
3025 int setUserObj(
void* userObj,
bool overwrite=
false);
3044 static void setErrHnd(UserDefinedErrHandler e);
3047 static int setZlib(ZlibInflateInit2 init,
3048 ZlibInflate inflate,
3049 ZlibInflateEnd end){
3050 (void)init; (void)inflate; (void)end;
3058 DoubleList commandPool;
3059 DoubleList cmdReqList;
3061 HttpLinkConList freeList;
3062 HttpLinkConList readyList;
3063 HttpLinkConList connectedList;
3064 HttpRootDir rootDirContainer;
3065 SplayTree authUserTree;
3066 struct HttpCmdThreadPoolIntf* threadPoolIntf;
3067 HttpLinkCon* connections;
3070 void* waitForConClose;
3071 LspOnTerminateRequest lspOnTerminateRequest;
3072 int commandPoolSize;
3073 U16 noOfConnections;
3074 S16 maxHttpRequestLen;
3075#ifndef NO_HTTP_SESSION
3082void HttpServer_AsynchProcessDir(
HttpServer* o,
3086#define HttpServer_setThreadPoolIntf(o, intf) (o)->threadPoolIntf=intf
3087#define HttpServer_luaenv(o) (o)->luaenv
3093BA_API
void HttpServer_destructor(
HttpServer* o);
3095BA_API
int HttpServer_insertDir(
HttpServer* o,
3096 const char* virtualDirRootPath,
3098BA_API
int HttpServer_insertCSP(
HttpServer* o,
3100 const char* virtualDirRootPath,
3102#define HttpServer_getAuthUserList(o, name) \
3103 (AuthUserList*)SplayTree_find(&(o)->authUserTree, name)
3104#define HttpServer_getDispatcher(o) (o)->dispatcher
3105#define HttpServer_getFirstRootDir(o) \
3106 HttpDir_getFirstDir((HttpDir*)&(o)->rootDirContainer)
3107#define HttpServer_getUserObj(o) (o)->userObj
3108#define HttpServer_getSessionContainer(o) (&(o)->sessionContainer)
3109#define HttpServer_getMutex(o) SoDisp_getMutex((o)->dispatcher)
3110BA_API
const char* HttpServer_getStatusCode(
int code);
3112void HttpServer_doLingeringClose(
3115#ifndef NO_HTTP_SESSION
3121BA_API
void HttpServer_setErrHnd(UserDefinedErrHandler e);
3122void HttpServer_initStatic(
void);
3123int HttpServer_termOldestIdleCon(
HttpServer* o);
3124BA_API
void HttpServer_set404Page(
HttpServer*o,
const char* page404);
3125#define HttpServer_get404Page(o) (o)->rootDirContainer.page404
3126BA_API
int HttpServer_setUserObj(
3127 HttpServer* o,
void* userObj, BaBool overwrite);
3128#define HttpServer_termAllSessions(o) \
3129 HttpSessionContainer_destructor(&(o)->sessionContainer)
3131#define HttpServer_setZlib(init,inflate,end);
3135 HttpServer_constructor(
this, disp, cfg); }
3136inline HttpServer::~HttpServer() {
3137 HttpServer_destructor(
this); }
3139 return HttpServer_insertRootDir(
this, dir); }
3141 return HttpServer_getMutex(
this);
3144 return HttpServer_insertDir(
this, virtualDirRootPath, dir); }
3146 const char* virtualDirRootPath,
3148 return HttpServer_insertCSP(
this, cspInit, virtualDirRootPath, reader); }
3149inline struct AuthUserList* HttpServer::getAuthUserList(
const char* name) {
3150 return HttpServer_getAuthUserList(
this,name); }
3152 return HttpServer_getDispatcher(
this); }
3154 return HttpServer_getFirstRootDir(
this); }
3156 return HttpServer_getSessionContainer(
this); }
3157#ifndef NO_HTTP_SESSION
3159 return HttpServer_getSession(
this,
id); }
3161 HttpServer_initStatic(); }
3163 HttpServer_setErrHnd(e); }
3165 HttpServer_set404Page(
this, page404); }
3167 return HttpServer_get404Page(
this); }
3168inline int HttpServer::setUserObj(
void* userObj,
bool overwrite) {
3169 return HttpServer_setUserObj(
this, userObj, overwrite); }
3171 return HttpServer_getStatusCode(code);
3177 return HttpRequest_getResponse(
this); }
3179 return HttpRequest_getConnection(
this); }
3181 return HttpResponse_getRequest(
this); }
3183 return HttpResponse_getCommand(
this); }
3185 return HttpRequest_getCommand(
this); }
3187 return HttpConnection_getServer(
this); }
3196#define SHARKSSL_MD5_HASH_LEN 16
3197#define SHARKSSL_SHA1_HASH_LEN 20
3199typedef struct SharkSslMd5Ctx
3206SHARKSSL_API
void SharkSslMd5Ctx_constructor(SharkSslMd5Ctx* ctx);
3207SHARKSSL_API
void SharkSslMd5Ctx_append(SharkSslMd5Ctx* ctx,
const U8* data, U32 len);
3208SHARKSSL_API
void SharkSslMd5Ctx_finish(SharkSslMd5Ctx* ctx, U8 digest[]);
3209SHARKSSL_API
int sharkssl_md5(
const U8*, U16, U8*);
3211typedef struct SharkSslSha1Ctx
3218SHARKSSL_API
void SharkSslSha1Ctx_constructor(SharkSslSha1Ctx* ctx);
3219SHARKSSL_API
void SharkSslSha1Ctx_append(SharkSslSha1Ctx* ctx,
const U8* data, U32 len);
3220SHARKSSL_API
void SharkSslSha1Ctx_finish(SharkSslSha1Ctx*, U8 digest[]);
3222typedef 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:2129
void deleteCookie()
Specifies a path for the cookie to which the client should return the cookie.
Definition: HttpServer.h:682
HttpHeader * getHeaders(int *len)
Return an HTTP header iterator that can iterate and fetch all the HTTP headers.
Definition: HttpServer.h:1149
int include(const char *path)
Includes the content of a resource (servlet, CSP page, HTML file) in the response.
Definition: HttpServer.h:1766
BaTime getCreationTime()
Returns the time when this session was created, measured in seconds since midnight January 1,...
Definition: HttpServer.h:2127
int setMaxAge(BaTime seconds)
Sets header "Cache-Control: max-age=seconds".
Definition: HttpServer.h:1811
int setDateHeader(const char *name, BaTime time)
Sets a response header with the given name and date-value.
Definition: HttpServer.h:1806
HttpDir * getNext()
Returns the next dir in the parent list.
Definition: HttpServer.h:2654
const char * getRequestURI()
Returns the pathname.
Definition: HttpServer.h:1132
const char * containsHeader(const char *name)
Searches the internal response header database for a header with the specified name.
Definition: HttpServer.h:1750
const char * getContentType()
Returns the content type, for example: "application/x-www-form-urlencoded".
Definition: HttpServer.h:767
const char * getHost()
Returns the host header.
Definition: HttpServer.h:763
int flush()
Forces any content in the buffer to be written to the client.
Definition: HttpServer.h:1760
void(* HttpSessionAttribute_Destructor)(struct HttpSessionAttribute *o)
HttpSessionAttribute termination callback function.
Definition: HttpServer.h:1906
int sendError(int eCode)
Sends an error response as a simple HTML page to the client using the specified status code.
Definition: HttpServer.h:1784
int forward(const char *path)
Forwards a request from a servlet to another resource (servlet, CSP file, or HTML file).
Definition: HttpServer.h:1762
void setHttpOnly(bool flag)
Marks or unmarks this Cookie as HttpOnly.
Definition: HttpServer.h:688
int setContentLength(BaFileSize len)
Sets the "Content-Length" parameter value.
Definition: HttpServer.h:1802
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:686
HttpPage * findPage(HttpPage *iter, const char *name)
Searches for a page in this directory node.
Definition: HttpServer.h:2655
HttpServer * getServer()
Returns the web server object.
Definition: HttpServer.h:1130
int resetHeaders()
Removes all HTTP headers.
Definition: HttpServer.h:1780
struct HttpServer * getServer()
Get the web-server object.
Definition: HttpServer.h:1887
HttpRequest * getRequest()
Get the request object.
Definition: HttpServer.h:1881
int insertPage(HttpPage *page)
Insert a page in the directory.
Definition: HttpServer.h:2646
int setAttribute(HttpSessionAttribute *value)
Binds an object to this session, using the name specified.
Definition: HttpServer.h:2139
HttpMethod getMethodType()
Returns the method type.
Definition: HttpServer.h:1124
int send(const void *data, int len)
Used when sending raw data to the client.
Definition: HttpServer.h:1828
HttpResponse * getResponse()
Get the response object.
Definition: HttpServer.h:1883
int removeResponseBuf()
Remove buffer set by using setResponseBuf.
Definition: HttpServer.h:1778
HttpMethod
HTTP method types.
Definition: HttpServer.h:788
HttpConnection * getConnection()
Returns the connection object associated with this request.
Definition: HttpServer.h:3178
const char * getDomain()
Returns the host header without any port number.
Definition: HttpServer.h:765
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:2669
struct HttpConnection * getConnection()
Get the current connection object that the HttpCommand instance is bound with.
Definition: HttpServer.h:1885
int sendBufAsTxtError(int eCode)
Sends the data formatted into the HttpResponse buffer as an error message to the client.
Definition: HttpServer.h:1790
bool isForward() const
Returns true if this is a forward request from another servlet or CSP file.
Definition: HttpServer.h:1770
AuthenticatedUser * getAuthenticatedUser()
Returns the authenticated user or NULL if user is not authenticated.
Definition: HttpServer.h:1122
int unlink()
Unlinks/removes the page from the parent directory.
Definition: HttpServer.h:2347
HttpServer * getServer()
Get the server object.
Definition: HttpServer.h:2133
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:2860
bool hasMoreElements()
Returns true if more elements.
Definition: HttpServer.h:1159
HttpStdHeaders * getStdHeaders()
Returns an object containing standard HTTP headers.
Definition: HttpServer.h:1136
const char * getHeaderValue(const char *name)
Returns the value of the specified request header.
Definition: HttpServer.h:1140
int setDefaultHeaders()
Sets the most common header values in servlet and CSP files.
Definition: HttpServer.h:1830
int resetBuffer()
Clears the content of the underlying buffer in the response without clearing headers or status code.
Definition: HttpServer.h:1782
int insertCSP(CspInit cspInit, const char *virtualDirRootPath, struct CspReader *reader)
Insert and initialize a CSP Virtual Directory.
Definition: HttpServer.h:3145
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:1754
bool initial() const
Returns true if this is the initial page.
Definition: HttpServer.h:1774
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:3162
void terminate()
Unbinds any objects bound to this session object, runs the HttpSession destructor,...
Definition: HttpServer.h:2135
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:2342
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:769
U32 byteCount()
Returns number of bytes sent thus far.
Definition: HttpServer.h:1752
int setCommit(U16 size)
Set the size of the HTTP response commit buffer.
Definition: HttpServer.h:2866
HttpDir()
Constructor for creating a root dir, a root dir has no name.
Definition: HttpServer.h:2634
struct HttpServer HttpServer
The Web Server.
int setValue(const char *newValue)
Assigns a new value to a cookie after the cookie is created.
Definition: HttpServer.h:690
HttpCookie * getCookie(const char *name)
Returns the requested cookie or NULL if no cookie matches the name.
Definition: HttpServer.h:1142
ThreadMutex * getMutex()
Get the dispatcher mutex.
Definition: HttpServer.h:3140
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:2348
void setMaxAge(BaTime expiry)
Sets the maximum age of the cookie in seconds.
Definition: HttpServer.h:680
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:1776
HttpSessionContainer * getSessionContainer()
Get the HttpSessionContainer.
Definition: HttpServer.h:3155
HttpDir * getFirstRootDir()
Returns the first root directory.
Definition: HttpServer.h:3153
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:2125
AuthenticatedUser * getAuthenticatedUser()
Returns the AuthenticatedUser if user is authenticated.
Definition: HttpServer.h:2150
int setContentType(const char *type)
Sets the "Content-Type" parameter value.
Definition: HttpServer.h:1804
void(* HttpPage_Service)(struct HttpPage *page, HttpRequest *request, HttpResponse *response)
The HttpPage service function.
Definition: HttpServer.h:2215
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:2147
int setResponseHeader(U16 min, U16 max)
Set the size of the HTTP response header buffer.
Definition: HttpServer.h:2862
void set404Page(const char *page404)
Set a more user friendly 404 page.
Definition: HttpServer.h:3164
const char * encodeRedirectURLWithParam(const char *pathName)
This method is similar to HttpResponse::encodeRedirectURL, but this method also includes all URL-enco...
Definition: HttpServer.h:1756
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:3160
struct HttpServer * getServer()
Fetch the HttpServer object.
Definition: HttpServer.h:3186
BufPrint * getWriter()
Returns a BufPrint object that can send any type of data to the client.
Definition: HttpServer.h:1824
int write(const void *data, int len, int useBuffering=TRUE)
Used for sending pre-formatted data to the client.
Definition: HttpServer.h:1826
int setMaxSessions(U16 size)
Maximum allowed active HttpSession objects.
Definition: HttpServer.h:2872
HttpInData * getBuffer()
Get the internal rec buffer.
Definition: HttpServer.h:1161
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:1758
int setNoOfHttpCommands(U16 size)
The number of HttpCommand instances created by the web-server.
Definition: HttpServer.h:2868
HttpDir * createOrGet(const char *name)
Returns a sub-directory with the given name.
Definition: HttpServer.h:2660
bool authenticateAndAuthorize(HttpCommand *cmd, const char *path)
Authenticate and authorize the user.
Definition: HttpServer.h:2673
int(* HttpDir_Service)(struct HttpDir *o, const char *relPath, HttpCommand *cmd)
The HttpDir service callback function.
Definition: HttpServer.h:2359
HttpServer(SoDisp *dispatcher, HttpServerConfig *cfg=0)
Create a Web Server object.
Definition: HttpServer.h:3134
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:1813
bool isInclude() const
Returns true if this is an include from another servlet or CSP file.
Definition: HttpServer.h:1772
int unlink()
Unlinks/removes the directory from the parent directory.
Definition: HttpServer.h:2666
char * getRootPath()
Calculates the root of where the HttpDir instance is installed in the virtual file system.
Definition: HttpServer.h:2642
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:1115
const char * getVersion()
Returns the HTTP version as a string, normally "1.1".
Definition: HttpServer.h:1138
int printf(const char *fmt,...)
printf is used for sending formatted data to the client.
Definition: HttpServer.h:1819
int redirect2TLS()
Prepares an HTTPS redirect (301) for a non-secure connection.
Definition: HttpServer.h:1800
HttpPage * getFirstPage()
Returns the first page.
Definition: HttpServer.h:2648
SoDisp * getDispatcher()
Returns the dispatcher object.
Definition: HttpServer.h:3151
HttpDir * getDir(const char *name)
Returns the first directory with the name given or NULL if not found.
Definition: HttpServer.h:2650
int wsUpgrade()
Activate a WebSocket handshake.
Definition: HttpServer.h:1146
static const char * getStatusCode(int code)
Return a short description for common HTTP error codes.
Definition: HttpServer.h:3170
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:2640
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:3158
U32 getUseCounter()
Get the session usage counter.
Definition: HttpServer.h:2148
bool committed() const
Returns a boolean indicating if the response has been committed.
Definition: HttpServer.h:1768
int redirect(const char *path)
Internally redirects the request to another resource.
Definition: HttpServer.h:1764
void incrRefCntr()
Increments the session reference counter.
Definition: HttpServer.h:2143
const char * getConnection()
Returns the connection type for HTTP 1.1 connections, returns "Close" or "Keep-Alive.
Definition: HttpServer.h:761
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:1144
void decrRefCntr()
Decrements the session reference counter.
Definition: HttpServer.h:2145
const char * getRequestURL(bool forceHttps=false)
Reconstructs the URL the client used to make the request.
Definition: HttpServer.h:1134
HttpCommand * getCommand()
Get the HttpCommand object.
Definition: HttpServer.h:3184
int insertDir(HttpDir *dir)
Insert a sub-directory.
Definition: HttpServer.h:2644
void setMaxInactiveInterval(BaTime interval)
Specifies the time, in seconds, between client requests before the session container will invalidate ...
Definition: HttpServer.h:2141
void setMaxSessions(int max)
Set the maximum number of session objects.
Definition: HttpServer.h:2201
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:2344
const char * get404Page()
Returns a pointer to the current 404 page, if any.
Definition: HttpServer.h:3166
HttpCommand * getCommand()
Get the HttpCommand object.
Definition: HttpServer.h:3182
static HttpDir * findDir(HttpDir *iter, const char *name, unsigned int nameLen)
Searches for a sub-directory in this directory node.
Definition: HttpServer.h:2657
int setPath(const char *uri)
Set the cookie path.
Definition: HttpServer.h:684
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:1156
HttpServerConfig()
The constructor sets up the default parameters.
Definition: HttpServer.h:2858
const char * getMethod()
Returns a string representation of the value returned by HttpRequest::getMethodType.
Definition: HttpServer.h:1126
BaTime getMaxInactiveInterval()
Returns the maximum time interval, in seconds, that the session container will keep this session open...
Definition: HttpServer.h:2131
HttpCookie * createCookie(const char *name)
Create a cookie.
Definition: HttpServer.h:1748
HttpPage * getPage(const char *name)
Returns the page with the name given or NULL if not found.
Definition: HttpServer.h:2652
int setComment(const char *purpose)
Specifies a comment that describes a cookie's purpose.
Definition: HttpServer.h:676
int fmtError(int eCode, const char *fmt,...)
This method implements a printf like implementation for formatting and sending an error message.
Definition: HttpServer.h:1792
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:2662
HttpDir * getFirstDir()
Returns the first sub-directory.
Definition: HttpServer.h:2649
int setDomain(const char *pattern)
Specifies the domain within which this cookie should be presented.
Definition: HttpServer.h:678
bool isLinked()
Returns true if this directory node is installed into a parent directory.
Definition: HttpServer.h:2667
HttpResponse * getResponse()
Returns the HttpResponse object.
Definition: HttpServer.h:3176
int insertDir(const char *virtualDirRootPath, HttpDir *dir)
Insert a directory node into the virtual file system.
Definition: HttpServer.h:3143
void setStatus(int statusCode)
Sets the status code for this response.
Definition: HttpServer.h:1816
int insertRootDir(HttpDir *dir)
Insert a root directory node.
Definition: HttpServer.h:3138
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:1808
HttpRequest * getRequest()
Get the HttpRequest object.
Definition: HttpServer.h:3180
void p403(const char *p403)
Set a 403 denied request handler.
Definition: HttpServer.h:2664
HttpSession * getSession()
Get the session object.
Definition: HttpServer.h:1973
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:1120
void activate()
Activates the cookie.
Definition: HttpServer.h:696
int sendRedirect(const char *url)
Sends a temporary redirect (302) response to the client using the specified redirect location URL.
Definition: HttpServer.h:1798
int setResponseData(U16 size)
The HttpResponse object stores formatted data in the response data buffer.
Definition: HttpServer.h:2864
int removeAttribute(const char *name)
Removes the object bound with the specified name from this session.
Definition: HttpServer.h:2137
int setNoOfHttpConnections(U16 size)
Number of HttpConnection instances.
Definition: HttpServer.h:2870
int sendBufAsError(int eCode)
Sends the data formatted into the HttpResponse buffer as an error message to the client.
Definition: HttpServer.h:1788
HttpSessionAttribute(const char *name, HttpSessionAttribute_Destructor terminate)
Create a session attribute.
Definition: HttpServer.h:1969
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:1843
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:2389
HttpDir * getParent() const
Returns the parent directory or NULL if no parent.
Definition: HttpServer.h:2486
const char * getName() const
Returns the directory name.
Definition: HttpServer.h:2482
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:2281
const char * getName() const
Returns the page name.
Definition: HttpServer.h:2304
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:824
This object is used when sending response messages back to the client.
Definition: HttpServer.h:1194
Use an instance of this class if you want to override the default web-server parameters.
Definition: HttpServer.h:2706
The Web Server.
Definition: HttpServer.h:2886
The interface to an HttpSession attribute.
Definition: HttpServer.h:1937
The HttpSession container class.
Definition: HttpServer.h:2169
Provides a way to identify a user across more than one page request or visit to a web site,...
Definition: HttpServer.h:1984
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