Return Type | Function name | Arguments |
---|---|---|
hzEcode | hdsApp::PcEntConv | (hzAtom&,const hzString&,hzHttpEvent*,) |
Declared in file: hzDissemino.h
Defined in file : hdsSystem.cpp
Function Logic:
Function body:
hzEcode hdsApp::PcEntConv (hzAtom& atom, const hzString& v, hzHttpEvent* pE) { _hzfunc("hdsApp::PcEntConv") ; const hdbMember* pMbr ; hzChain W ; hdsInfo* pInfo ; hdsFormref* pFormref ; hdsFormdef* pFormdef ; hdsField* pFld ; const hdbEnum* pSlct ; hdbObjRepos* pRepos = 0; const char* i ; hzString w_val ; hzString extn ; hzString val ; uint32_t nTest ; char buf[12]; hzEcode rc = E_OK ; if (!pE) hzexit(E_ARGUMENT, "%s: No HTTP event supplied for input=%s", *m_Appname, *v) ; atom.Clear() ; if (!v) return E_OK ; m_pLog->Log("PcEntConv processing %s\n", *v) ; if (v[0]!= CHAR_PERCENT) { atom = v ; return E_OK ; } if (v[2]!= CHAR_COLON) return E_SYNTAX ; i = *v ; for (i += 3; *i && *i != CHAR_SCOLON && IsAlpha(*i) ; i++) W.AddByte(*i) ; w_val = W ; W.Clear() ; if (*i == CHAR_PERIOD) { for (i++ ; *i && *i != CHAR_SCOLON && IsAlpha(*i) ; i++) W.AddByte(*i) ; extn = W ; W.Clear() ; } if (*i == CHAR_SCOLON) i++ ; pInfo = (hdsInfo*) pE->Session() ; switch (v[1]) { case ''x'': if (w_val == "count") { pRepos = m_ADP.GetObjRepos(extn) ; if (!pRepos) { rc = E_NOTFOUND ; m_pLog->Log("Cannot Xlate. Repository not found: %s\n", *extn) ; } else atom = pRepos->Count() ; } else if (w_val == "objid") { pRepos = m_ADP.GetObjRepos(extn) ; if (!pRepos) { rc = E_NOTFOUND ; m_pLog->Log("Cannot Xlate. Repository not found: %s\n", *extn) ; } else { if (pE->m_ObjIds.Exists(extn)) atom = pE->m_ObjIds[extn] ; else { rc = E_NOTFOUND ; m_pLog->Log("Cannot Xlate. Event entry not found: %s\n", *extn) ; } } } else if (w_val == "date") atom = pE->m_Occur.Date() ; else if (w_val == "time") atom = pE->m_Occur.Time() ; else if (w_val == "datetime") atom = pE->m_Occur ; else if (w_val == "referer") atom.SetValue(BASETYPE_STRING, pE->Referer()) ; else if (w_val == "usecs") atom = pE->m_Occur.uSec() ; else if (w_val == "uid") atom = (uint32_t) (pInfo ? pInfo->m_UserId : 0); else if (w_val == "random") { sprintf(buf, "%06d", pE->m_Occur.uSec()) ; atom.SetValue(BASETYPE_STRING, buf) ; } else { rc = E_NOTFOUND ; m_pLog->Log("Cannot Xlate. Unknown parameter: %s\n", *w_val) ; } break ; case ''e'': pSlct = m_ADP.GetDataEnum(w_val) ; if (pSlct) { val = pE->m_mapStrings[w_val] ; if (IsPosint(nTest, *val)) { val = pSlct->GetStr(nTest) ; rc = atom.SetValue(BASETYPE_STRING, val) ; break ; } } if (pE->m_Uploads.Exists(w_val)) { hzHttpFile& hf = pE->m_Uploads[w_val] ; if (extn == "name") rc = atom.SetValue(BASETYPE_STRING, hf.m_filename) ; else if (extn == "data") { if (hf.m_file.Size()) { rc = E_OK ; atom = hf.m_file ; } else rc = E_NODATA ; m_pLog->Log("Have file %s of %d bytes\n", *hf.m_filename, hf.m_file.Size()) ; } else rc = E_BADVALUE ; break ; } if (w_val == g_Errmsg) { if (pE->m_appError) atom = pE->m_appError ; break ; } if (w_val == "resarg") { atom.SetValue(BASETYPE_STRING, pE->m_Resarg) ; break ; } if (pE->m_mapStrings.Exists(w_val)) { val = pE->m_mapStrings[w_val] ; if (pE->m_pContextForm) { pFormref = (hdsFormref*) pE->m_pContextForm ; pFormdef = m_FormDefs[pFormref->m_Formname] ; if (!pFormdef->m_mapFlds.Exists(w_val)) { m_pLog->Log("Case 1: Using string context value %s = %s\n", *w_val, *val) ; rc = atom.SetValue(BASETYPE_STRING, val) ; } else { pFld = pFormdef->m_mapFlds[w_val] ; if (pFld) { m_pLog->Log("Case 2: Using string context value %s = %s %s\n", *w_val, Basetype2Txt(pFld->m_Fldspec.m_pType->Basetype()), *val) ; rc = atom.SetValue(pFld->m_Fldspec.m_pType->Basetype(), val) ; } else { m_pLog->Log("Case 3: Using string context value %s = %s\n", *w_val, *val) ; rc = atom.SetValue(BASETYPE_STRING, val) ; } } } else { m_pLog->Log("Using context-less value %s\n", *val) ; rc = atom.SetValue(BASETYPE_STRING, val) ; } break ; } if (pE->m_mapChains.Exists(w_val)) { val = pE->m_mapChains[w_val] ; if (pE->m_pContextForm) { pFormref = (hdsFormref*) pE->m_pContextForm ; pFormdef = m_FormDefs[pFormref->m_Formname] ; if (!pFormdef->m_mapFlds.Exists(w_val)) { m_pLog->Log("Case 1: Using chain context value %s = %s\n", *w_val, *val) ; rc = atom.SetValue(BASETYPE_STRING, val) ; } else { m_pLog->Log("Case 2: Using chain context value %s = %s\n", *w_val, *val) ; pFld = pFormdef->m_mapFlds[w_val] ; rc = atom.SetValue(pFld->m_Fldspec.m_pType->Basetype(), val) ; } } else { m_pLog->Log("Using context-less value %s\n", *val) ; rc = atom.SetValue(BASETYPE_STRING, val) ; } break ; } rc = E_NOTFOUND ; break ; case ''s'': rc = E_NOTFOUND ; if (pInfo && pInfo->m_Sessvals.Count()) { if (pInfo->m_Sessvals.Exists(w_val)) { atom = pInfo->m_Sessvals[w_val] ; rc = E_OK ; } break ; } m_pLog->Log("Warning: No such session value [%s]\n", *w_val) ; break ; case ''i'': rc = E_NOTFOUND ; if (!pInfo) break ; if (!pInfo->m_CurrRepos) break ; if (!pInfo->m_CurrObj) break ; pRepos = m_ADP.GetObjRepos(pInfo->m_CurrRepos) ; if (pRepos) pMbr = pRepos->GetMember(w_val) ; if (pMbr) { hdbObject obj ; hzChain Z ; rc = pRepos->Fetch(obj, pInfo->m_CurrObj) ; if (rc != E_OK) break ; if (pMbr->Basetype() == BASETYPE_BINARY || pMbr->Basetype() == BASETYPE_TXTDOC) { if (extn == "addr") { m_pLog->Log("Fetching address %s\n", *w_val) ; obj.GetValue(atom, pMbr) ; } if (extn == "data") { m_pLog->Log("Fetching binary body %s\n", *w_val) ; rc = obj.GetBinary(Z, pMbr) ; atom = Z ; } } else { m_pLog->Log("Fetching ord %s\n", *w_val) ; rc = obj.GetValue(atom, pMbr) ; } } break ; case ''v'': break ; case ''u'': rc = E_NOTFOUND ; if (!pInfo) break ; m_pLog->Log("Fetching item %s for subscriber id %d\n", *w_val, pInfo->m_SubId) ; if (w_val == "username") { atom = pInfo->m_Username ; break ; } if (pInfo->m_CurrRepos && pInfo->m_UserId > 0) { pRepos = m_ADP.GetObjRepos(pInfo->m_CurrRepos) ; if (pRepos) pMbr = pRepos->GetMember(w_val) ; if (!pMbr) break ; hdbObject obj ; hzChain Z ; rc = pRepos->Fetch(obj, pInfo->m_CurrObj) ; if (rc != E_OK) break ; if (pMbr->Basetype() == BASETYPE_BINARY || pMbr->Basetype() == BASETYPE_TXTDOC) { if (extn == "addr") { m_pLog->Out("Fetching address %s\n", *w_val) ; rc = obj.GetValue(atom, pMbr) ; } if (extn == "data") { m_pLog->Out("Fetching binary body %s\n", *w_val) ; rc = obj.GetBinary(Z, pMbr) ; atom = Z ; } } else { m_pLog->Out("Fetching ord %s\n", *w_val) ; rc = obj.GetValue(atom, pMbr) ; } } break ; default: hzerr(E_SYNTAX, "Invalid Percent Entity Category (%c)", v[1]); rc = E_SYNTAX ; } return rc ; }