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 ; }