11#if __DCL_HAVE_ALLOC_DEBUG
12#undef __DCL_ALLOC_LEVEL
13#define __DCL_ALLOC_LEVEL __DCL_ALLOC_INTERNAL
46 virtual Writer& write(
const wchar_t* _buf,
size_t _n)
57ReportErrorWriter::ReportErrorWriter(
65 m_pfnReportError = pfnErrorReport;
66 m_hErrorWriter = hErrorReport;
67 m_pAltOutput = pAltOutput;
70Writer& ReportErrorWriter::write(
const wchar_t* _buf,
size_t _n)
78 m_pAltOutput->write(_buf, _n);
85 m_pfnReportError(m_hErrorWriter, (
const char*)_buf, _n);
91HttpServletContext::HttpServletContext(
107HttpServletContext::~HttpServletContext()
111ByteString HttpServletContext::getHttpHeader(
120 ByteBuffer*
buf = ByteBuffer::create(
len);
121 if (!
__SAPI->pfnGetRequestHeader(
128 ByteBuffer::extend(
buf,
len);
138 *(
buf->data() +
len) =
'\0';
146ByteString HttpServletContext::getCgiVariable(
155 ByteBuffer*
buf = ByteBuffer::create(
len);
156 if (!
__SAPI->pfnGetCgiVariable(
164 ByteBuffer::extend(
buf,
len);
174 *(
buf->data() +
len) =
'\0';
182String HttpServletContext::getHttpHeader(
188 HttpServletContext::getHttpHeader(
189 AsciiEncoder::encode(_name, (
size_t)-1)
195 HttpServletContext::getHttpHeader((
const char*)
NULL)
200String HttpServletContext::getCgiVariable(
205 return UTF8Decoder::decode(
206 HttpServletContext::getCgiVariable(
207 UTF8Encoder::encode(_name, (
size_t)-1)
212 return UTF8Decoder::decode(
213 HttpServletContext::getCgiVariable((
const char*)
NULL)
218size_t HttpServletContext::read(
225 if (!__SAPI->pfnReadClient(
232 L
"HTTP Connection error"
239void HttpServletContext::setStatusCode(
unsigned int uHttpStatusCode)
244 setContentType(L
"text/html");
248void HttpServletContext::setContentType(
const wchar_t* _contentType,
const wchar_t* pszCharset )
263void HttpServletContext::addHeader(
const HttpHeader& httpHeader)
267 if (!httpHeader.
name().compareNoCase(L
"Content-Type"))
273void HttpServletContext::flushHeader()
289 __SAPI->pfnSendResponseHeader(
299void HttpServletContext::write(
307 if (!__headerFlushed)
311 if (!__SAPI->pfnWriteClient(
318 L
"http connection error"
327HttpServlet::HttpServlet()
334String HttpServlet::getIniFileName(
335 const wchar_t* _basename
342 basename = _basename;
346 size_t index = basename.lastIndexOf(
'.');
347 if (index != (
size_t) -1) {
349 basename = basename.left(index);
351 basename = basename + L
".ini";
356 if (!path.endsWith(L
"/")) {
359 path = path + basename;
367 if (!dir.endsWith(L
"/")) {
370 return dir + basename;
408 filename = filename.left(filename.lastIndexOf(L
'.')) + L
".dump.txt";
416 L
"Warning! dump file create fail. [%ls]: [%ls]\n",
432 DCLDebugSetThreadReport(
458 DCLDebugSetThreadReport(
463 if (!
result && __pDebugFileOut) {
464 delete __pDebugFileOut;
465 __pDebugFileOut =
NULL;
484 Writer* pOldOutput = pOldOutput =
485 DCLDebugSetThreadReport(
511 pOldOutput = DCLDebugSetThreadReport(
516 if (pOldOutput != &output) {
517 __DCL_TRACE0(L
"Assertion Fail! 'pOldOutput == &writer'\n");
520 if (__pDebugFileOut) {
521 delete __pDebugFileOut;
522 __pDebugFileOut =
NULL;
543 DCLDebugSetThreadReport(
548 const void* pLastAllocPosition =
549 DCLDebugGetLastAllocPosition(
576 DCLDebugDumpThreadMemoryLeak(
583 DCLDebugSetThreadReport(
592#define __WSTR(s) s ? UTF8Decoder::decode(s, ByteString::length(s)) : String()
594String HttpServletContext::remoteAddr()
const
600unsigned int HttpServletContext::remotePort()
const
606String HttpServletContext::method()
const
612unsigned int HttpServletContext::methodNo()
const
618String HttpServletContext::path()
const
624String HttpServletContext::queryString()
const
630String HttpServletContext::contentType()
const
636size_t HttpServletContext::contentLength()
const
642String HttpServletContext::scriptFilename()
const
648String HttpServletContext::scriptData()
const
655const String& HttpServletContext::resContentType()
const
struct _DCL_HTTP_SERVLET_CONTEXT DCL_HTTP_SERVLET_CONTEXT
void(* DCLHttpWriteStream)(void *hWriter, const void *pvData, size_t uLength)
struct _DCL_HTTP_SERVER_API DCL_HTTP_SERVER_API
struct _DCL_HTTP_SERVLET_CONFIG DCL_HTTP_SERVLET_CONFIG
#define __DCL_TRACE0(psz)
#define __DCL_TRACE1(fmt, arg1)
#define __DCL_VERIFY(expr)
#define DECLARE_CLASSINFO(class_name)
#define __DCL_ASSERT(expr)
#define IMPLEMENT_CLASSINFO(class_name, base_class_name)
#define __DCL_TRACE2(fmt, arg1, arg2)
void CharsetConvertException *size_t n
static String decode(const char *_mbs, size_t _mbslen=(size_t) -1)
String toStringAll() const
static String dirname(const String &_path)
static bool exists(const String &_path)
static String basename(const String &_path)
const DCL_HTTP_SERVLET_CONTEXT * __context
unsigned int __statusCode
const DCL_HTTP_SERVER_API * __SAPI
StringBuilder __responseHeaders
static bool __cleanup(HttpServlet *_servlet, void *hErrorReport)
virtual void onInitialize() __DCL_THROWS1(Exception *)
static bool __httpService(HttpServlet *_servlet, const DCL_HTTP_SERVLET_CONTEXT *_context, void *hErrorReport)
virtual void onHttpService(const DCL_HTTP_SERVLET_CONTEXT *pContext)=0__DCL_THROWS1(Exception *)
const DCL_HTTP_SERVER_API * __SAPI
const wchar_t * __moduleName
const wchar_t * __configPath
virtual void onCleanup() __DCL_THROWS1(Exception *)
const wchar_t * __tempPath
static bool __initialize(HttpServlet *_servlet, const DCL_HTTP_SERVLET_CONFIG *_config, void *hErrorReport)
virtual String toString() const
static unsigned long getCurrentThreadId()
DCLHttpWriteStream pfnReportError
const wchar_t * pszConfigPath
const DCL_HTTP_SERVER_API * pSAPI
const wchar_t * pszModuleName
const wchar_t * pszTempPath
const char * pszRemoteAddr