void CLogTrigger::BeginTrigger(const void *pBuffer, int nLen, SLogInfo &sLog) { SSapMsgHeader *pHead = (SSapMsgHeader *)pBuffer; int nServId = ntohl(pHead->dwServiceId); int nMsgId = ntohl(pHead->dwMsgId); sLog.pItem = CTriggerConfig::Instance()->GetInfo(TRIGGERTYPE,nServId, nMsgId); if (sLog.pItem == NULL || sLog.pItem->nReqSize == 0) { return; } void *pBody = (unsigned char *)pBuffer + pHead->byHeadLen; int nBodyLen = nLen - pHead->byHeadLen; if (nBodyLen == 0) { sLog.strReq[0] = GetDefaultValue(sLog.pItem->nReqSize); return; } if (m_pConfig == NULL || 0 != m_pConfig->GetServiceNameById(nServId, nMsgId, sLog.serviceName)) { SS_XLOG(XLOG_DEBUG,"CLogTrigger::%s service[%d],msg[%d] not found\n", __FUNCTION__,nServId, nMsgId); sLog.strReq[0] = GetDefaultValue(sLog.pItem->nReqSize); return; } CAvenueMsgHandler oHandler(sLog.serviceName,true,m_pConfig); oHandler.Decode(pBody, nBodyLen); sLog.strReq[0] = BuildLog(&oHandler, NULL, sLog.pItem->vecReq, sLog.mapKey); }
void CLogTrigger::EndTrigger(const void *pBuffer, int nLen, SLogInfo &sLog) { const STriggerItem *pItem = sLog.pItem; if (pItem->nResSize == 0 ) { BuildLogInfo(sLog, "NULL"); return; } string strRes; if (pBuffer == NULL) { strRes = GetDefaultValue(pItem->nResSize); } else { SSapMsgHeader *pHead = (SSapMsgHeader *)pBuffer; void *pBody = (unsigned char *)pBuffer + pHead->byHeadLen; int nBodyLen = nLen - pHead->byHeadLen; if (/* nBodyLen > 0 &&*/ m_pConfig != NULL) { CAvenueMsgHandler oHandler(sLog.serviceName, false, m_pConfig); oHandler.Decode(pBody, nBodyLen); strRes = BuildLog(&oHandler, NULL, pItem->vecRes, sLog.mapKey); } else { strRes = GetDefaultValue(pItem->nResSize); } } BuildLogInfo(sLog, strRes); }
BasePBResponse::TPointer operator()( InputStreamListPtr inputStreams, server::UserSession& session ) { //TODO: Would be good to sort out the reference/pointer situation // sometime AdminCommand oHandler( ( *inputStreams ), session.GetAuthToken(), ( *session.GetAdminCommandMan() ) ); return oHandler.GetResponse(); }