Return TypeFunction nameArguments
hzEcodehdsApp::PcEntConv(hzAtom&,const hzString&,hzHttpEvent*,)

Declared in file: hzDissemino.h
Defined in file : hdsSystem.cpp

Function Logic:

0:START 1:!pE 2:hzexit 3:hzAtom::Clear 4:!v 5:Return E_OK 6:hzLogger::Log 7:v[0]!=(char)37 8:atom 9:Return E_OK 10:v[2]!=(char)58 11:Return E_SYNTAX 12:i IsAlpha 13:*i&&*i!=(char)59&&IsAlpha(*i); 14:hzChain::AddByte 15:w_val hzChain::Clear 16:*i==(char)46 17:*i&&*i!=(char)59&&IsAlpha(*i); 18:hzChain::AddByte 19:extn hzChain::Clear 20:*i==(char)59 21:items 22:hzHttpEvent::Session pInfo 23:v[1] 24:'x' 25:w_val==count 26:hdbADP::GetObjRepos pRepos 27:!pRepos 28:rc hzLogger::Log 29:hdbObjRepos::Count atom 30:w_val==objid 31:hdbADP::GetObjRepos pRepos 32:!pRepos 33:rc hzLogger::Log 34:pE->m_ObjIds.Exists(extn) 35:atom 36:rc hzLogger::Log 37:w_val==date 38:hzXDate::Date atom 39:w_val==time 40:hzXDate::Time atom 41:w_val==datetime 42:atom 43:w_val==referer 44:hzHttpEvent::Referer hzAtom::SetValue 45:w_val==usecs 46:hzXDate::uSec atom 47:w_val==uid 48:atom 49:w_val==random 50:hzXDate::uSec sprintf hzAtom::SetValue 51:rc hzLogger::Log

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