| Return Type | Function name | Arguments |
|---|---|---|
| void | hdsApp::ProcForm | (hzHttpEvent*,hdsFormref*,hdsFormhdl*,) |
Declared in file: hzDissemino.h
Defined in file : hdsSystem.cpp
Function Logic:
Function body:
void hdsApp::ProcForm (hzHttpEvent* pE, hdsFormref* pFormref, hdsFormhdl* pFhdl)
{
_hzfunc("hdsApp::ProcForm") ;
hzList<hdsExec*>::Iter ei ;
hzChain Z ;
hzChain errorReport ;
hzPair P ;
hdsInfo* pInfo ;
hdsFormdef* pFormdef ;
hdsField* pFld ;
hdsExec* pExec ;
hdsResource* pResponse ;
hdsPage* pPage = 0;
hdsCIFunc* pFunc = 0;
hzAtom atom ;
hzSysID newCookie ;
hzXDate now ;
hzString S ;
hzString unam ;
hzString pass ;
hzIpaddr ipa ;
hzSDate expires ;
uint32_t nIndex ;
hzEcode rc = E_OK ;
pInfo = (hdsInfo*) pE->Session() ;
ipa = pE->ClientIP() ;
now.SysDateTime() ;
if (!pFormref) Fatal("No form reference supplied") ;
if (!pFhdl) Fatal("No form handler supplied") ;
m_pLog->Log("Processing form reference %p flags %x handler %p and info %p\n", pFormref, pFormref->m_flagVE, pFhdl, pInfo) ;
pFormdef = pFhdl->m_pFormdef ;
if (!pFormdef)
Fatal("Form handler (%s) has no form", *pFhdl->m_Refname) ;
m_pLog->Log("Processing form reference %p and info %p\n", pFormref, pInfo) ;
m_pLog->Log("Processing form %p %s with %d fields and info %p\n", pFormdef, *pFormdef->m_Formname, pFormdef->m_vecFlds.Count(), pInfo) ;
pE->m_pContextForm = pFormref ;
if (!pE->Inputs())
{
rc = E_NODATA ;
m_pLog->Log("Form has no data\n") ;
goto respond ;
}
for (nIndex = 0; nIndex < pE->m_Inputs.Count() ; nIndex++)
{
P = pE->m_Inputs[nIndex] ;
m_pLog->Log("Doing field %s %s\n", *P.name, *P.value) ;
pFld = pFormdef->m_mapFlds[P.name] ;
if (!pFld)
{
m_pLog->Log("No such field as %s\n", *P.name) ;
rc = E_NOTFOUND ;
}
}
if (rc != E_OK)
goto respond ;
if (pFhdl->m_flgFH & VE_COOKIES)
{
if (!pInfo)
{
newCookie = MakeCookie(ipa, pE->EventNo()) ;
expires.SysDate() ;
expires += 365;
pE->SetSessCookie(newCookie) ;
pInfo = new hdsInfo() ;
pE->SetSession(pInfo) ;
m_SessCookie.Insert(newCookie, pInfo) ;
m_pLog->Log("New cookie %016x and session %p\n", *now, newCookie, pInfo) ;
}
}
for (ei = pFhdl->m_Exec ; ei.Valid() ; ei++)
{
m_pLog->Log("CASE 5\n") ;
pExec = ei.Element() ;
if (!pExec)
{
m_pLog->Log("ERROR. Null exec at posn %d\n", nIndex) ;
continue ;
}
m_pLog->Log("HAVE EXEC %s\n", Exec2Txt(pExec->m_Command)) ;
rc = pExec->Exec(errorReport, pE) ;
m_pLog->Out(errorReport) ;
errorReport.Clear() ;
if (rc == E_OK)
{
m_pLog->Log("Sucess exec %s at posn %d (err=%s)\n", Exec2Txt(pExec->Whatami()), nIndex, Err2Txt(rc)) ;
continue ;
}
m_pLog->Log("Failed exec %s at posn %d (err=%s)\n", Exec2Txt(pExec->Whatami()), nIndex, Err2Txt(rc)) ;
if (pExec->m_FailGoto || pExec->m_pFailResponse)
{
if (errorReport.Size())
pE->m_appError = errorReport ;
if (pExec->m_pFailResponse)
pResponse = pExec->m_pFailResponse ;
else
{
if (pExec->m_FailGoto[0]== CHAR_PERCENT)
{
S = ConvertText(pExec->m_FailGoto, pE) ;
m_pLog->Log("Converted error page directive %s to %s\n", *pExec->m_FailGoto, *S) ;
pResponse = m_ResourcesName[S] ;
if (!pResponse)
pResponse = m_ResourcesPath[S] ;
}
else
{
m_pLog->Log("Using named error page %s\n", *pExec->m_FailGoto) ;
pResponse = m_ResourcesName[pExec->m_FailGoto] ;
if (!pResponse)
pResponse = m_ResourcesPath[pExec->m_FailGoto] ;
}
}
if (!pResponse)
SendErrorPage(pE, HTTPMSG_OK, *_fn, "Could not find an error page for exec %s in form %s", Exec2Txt(pExec->Whatami()), *pFhdl->m_Refname) ;
else
{
pPage = dynamic_cast<hdsPage*>(pExec->m_pFailResponse) ;
if (pPage)
{
m_pLog->Log("Using error page %s\n", *pPage->m_Title) ;
pPage->Display(pE) ;
}
else
{
pFunc = dynamic_cast<hdsCIFunc*>(pResponse) ;
pFunc->m_pFunc(pE) ;
}
}
return ;
}
}
respond:
if (rc == E_OK)
{
if (pFhdl->m_pCompletePage)
pResponse = pFhdl->m_pCompletePage ;
else
{
if (pFhdl->m_CompleteGoto[0]== CHAR_PERCENT)
{
S = ConvertText(pFhdl->m_CompleteGoto, pE) ;
m_pLog->Log("Converted response page directive %s to %s\n", *pFhdl->m_CompleteGoto, *S) ;
pResponse = m_ResourcesName[S] ;
if (!pResponse)
pResponse = m_ResourcesPath[S] ;
}
else
{
m_pLog->Log("Using named response page %s\n", *pFhdl->m_CompleteGoto) ;
pResponse = m_ResourcesName[pFhdl->m_CompleteGoto] ;
if (!pResponse)
pResponse = m_ResourcesPath[pFhdl->m_CompleteGoto] ;
}
}
if (!pResponse)
SendErrorPage(pE, HTTPMSG_NOTFOUND, *_fn, "Could not find a response page for form %s", *pFhdl->m_Refname) ;
else
{
pPage = dynamic_cast<hdsPage*>(pResponse) ;
if (pPage)
{
m_pLog->Log("Using response page %s\n", *pPage->m_Title) ;
pPage->Display(pE) ;
}
else
{
pFunc = dynamic_cast<hdsCIFunc*>(pResponse) ;
pFunc->m_pFunc(pE) ;
}
}
}
else
{
if (errorReport.Size())
pE->m_appError = errorReport ;
if (pFhdl->m_pFailDfltPage)
pResponse = pFhdl->m_pFailDfltPage ;
else
{
if (pFhdl->m_FailDfltGoto[0]== CHAR_PERCENT)
{
S = ConvertText(pFhdl->m_FailDfltGoto, pE) ;
m_pLog->Log("Converted error page directive %s to %s\n", *pFhdl->m_FailDfltGoto, *S) ;
pResponse = m_ResourcesName[S] ;
if (!pResponse)
pResponse = m_ResourcesPath[S] ;
}
else
{
m_pLog->Log("Using named error page %s\n", *pFhdl->m_FailDfltGoto) ;
pResponse = m_ResourcesName[pFhdl->m_FailDfltGoto] ;
if (!pResponse)
pResponse = m_ResourcesPath[pFhdl->m_FailDfltGoto] ;
}
}
if (!pResponse)
SendErrorPage(pE, HTTPMSG_OK, *_fn, "Could not find an error page for form %s", *pFhdl->m_Refname) ;
else
{
pPage = dynamic_cast<hdsPage*>(pFhdl->m_pFailDfltPage) ;
if (pPage)
{
m_pLog->Log("Using error page %s\n", *pPage->m_Title) ;
pPage->Display(pE) ;
}
else
{
pFunc = dynamic_cast<hdsCIFunc*>(pResponse) ;
pFunc->m_pFunc(pE) ;
}
}
}
m_pLog->Log("Processed form %p %s with %d fields and info %p\n", pFormdef, *pFormdef->m_Formname, pFormdef->m_vecFlds.Count(), pInfo) ;
}