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