Return TypeFunction nameArguments
hzEcodehzHttpEvent::SendPageE(const char*,const char*,unsigned int,bool,)

Declared in file: hzHttpServer.h
Defined in file : hzHttpServer.cpp

Function Logic:

0:START 1:!dir||!dir[0] 2:Return hzerr(E_ARGUMENT,No directory supplied) 3:!fname||!fname[0] 4:Return hzerr(E_ARGUMENT,No filename supplied) 5:fname[0]!=(char)47 6:Filename 7:fname[1]==0 8:Filename 9:Filename 10:Pagename Pagename Pagename hzMapS::Exists 11:s_PageStore.Exists(Pagename) 12:pChain 13:!pChain 14:Return E_CORRUPT 15:stat(*Pagename,&fs)==-1 16:hzHttpEvent::SendError 17:Return E_NOTFOUND 18:fs.st_size==0 19:hzHttpEvent::SendError 20:Return E_NODATA 21:pChain open ifstream::fail 22:is.fail() 23:Return hzerr(E_OPENFAIL,Could not open requested file (%s),*Pagename) 24:* close 25:pChain->Size()==0 26:Return hzerr(E_MEMORY,Could not load file (%s),*Pagename) 27:s_PageStore.Insert(Pagename,pChain)!=E_OK 28:Return hzerr(E_MEMORY,Could not store file (%s),*Pagename) 29:strrchr pEnd 30:!pEnd 31:type 32:Filename2Mimetype type 33:hzHttpEvent::SendRawChain rc 34:rc!=E_OK 35:Return hzerr(E_WRITEFAIL,Response data not sent to browser (size=%d, sock=%d),pChain->Size(),m_pCx->CliSocket()) 36:Return E_OK

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