| Return Type | Function name | Arguments |
|---|---|---|
| hzEcode | hzHttpEvent::SendPageE | (const char*,const char*,unsigned int,bool,) |
Declared in file: hzHttpServer.h
Defined in file : hzHttpServer.cpp
Function Logic:
Function body:
hzEcode hzHttpEvent::SendPageE (const char* dir, const char* fname, unsigned int nExpires, bool bZip)
{
_hzfunc("hzHttpEvent::SendPageE") ;
hzChain* pChain ;
const char* pEnd ;
hzString Pagename ;
hzString Filename ;
hzString Content ;
hzMimetype type ;
hzEcode rc ;
if (!dir || !dir[0])
return hzerr(E_ARGUMENT, "No directory supplied") ;
if (!fname || !fname[0])
return hzerr(E_ARGUMENT, "No filename supplied") ;
if (fname[0]!= CHAR_FWSLASH)
Filename = fname ;
else
{
if (fname[1]== 0)
Filename = "index.html" ;
else
Filename = fname + 1;
}
Pagename = dir ;
Pagename += "/" ;
Pagename += Filename ;
if (s_PageStore.Exists(Pagename))
{
pChain = s_PageStore[Pagename] ;
if (!pChain)
{
hzerr(E_CORRUPT, "Null entry in stored page for %s\n", *Pagename) ;
return E_CORRUPT ;
}
}
else
{
ifstream is ;
FSTAT fs ;
if (stat(*Pagename, &fs) == -1)
{
SendError(HTTPMSG_NOTFOUND, "Could not locate %s\n", *Pagename) ;
return E_NOTFOUND ;
}
if (fs.st_size == 0)
{
SendError(HTTPMSG_NOTFOUND, "No content available for file %s\n", *Pagename) ;
return E_NODATA ;
}
pChain = new hzChain() ;
is.open(*Pagename) ;
if (is.fail())
return hzerr(E_OPENFAIL, "Could not open requested file (%s)", *Pagename) ;
*pChain += is ;
is.close() ;
if (pChain->Size() == 0)
return hzerr(E_MEMORY, "Could not load file (%s)", *Pagename) ;
if (s_PageStore.Insert(Pagename, pChain) != E_OK)
return hzerr(E_MEMORY, "Could not store file (%s)", *Pagename) ;
}
pEnd = strrchr(*Filename, CHAR_PERIOD) ;
if (!pEnd)
type = HMTYPE_TXT_PLAIN ;
else
type = Filename2Mimetype(pEnd) ;
rc = SendRawChain(HTTPMSG_OK, type, *pChain, nExpires, bZip) ;
if (rc != E_OK)
return hzerr(E_WRITEFAIL, "Response data not sent to browser (size=%d, sock=%d)", pChain->Size(), m_pCx->CliSocket()) ;
return E_OK ;
}