in eventmesh-sdks/eventmesh-sdk-c/src/rmb_pub.c [843:1045]
static int rmb_pub_send_gsl (StRmbPub * pStPub, StServiceStatus * pTmpService,
const char *cBizSeqNo,
const char *cConsumerSeqNo)
{
//get dcn
//char pkgBuf[MAX_GSL_REQ_BUF_SIZE];
char *p = pStPub->pkgBuf;
int iPkgLen = 0;
//*p = GSL_SUBCMD_QUERY_SERVICE;
*p = GSL_SUBCMD_NEW_QUERY_SERVICE;
p += 1;
iPkgLen += 1;
int tmp = strlen (pTmpService->strTargetOrgId);
*p = tmp;
p += 1;
iPkgLen += 1;
memcpy (p, pTmpService->strTargetOrgId, tmp);
p += tmp;
iPkgLen += tmp;
tmp = strlen (pRmbStConfig->cConsumerDcn);
*p = tmp;
p += 1;
iPkgLen += 1;
memcpy (p, pRmbStConfig->cConsumerDcn, tmp);
p += tmp;
iPkgLen += tmp;
tmp = strlen (pTmpService->strServiceId);
*p = tmp;
p += 1;
iPkgLen += 1;
memcpy (p, pTmpService->strServiceId, tmp);
p += tmp;
iPkgLen += tmp;
tmp = strlen (pTmpService->strScenarioId);
*p = tmp;
p += 1;
iPkgLen += 1;
memcpy (p, pTmpService->strScenarioId, tmp);
p += tmp;
iPkgLen += tmp;
*p = pTmpService->cFlagForOrgId;
iPkgLen += 1;
rmb_msg_set_bizSeqNo (pStPub->pSendMsg, cBizSeqNo);
rmb_msg_set_consumerSeqNo (pStPub->pSendMsg, cConsumerSeqNo);
rmb_msg_set_orgSysId (pStPub->pSendMsg, pRmbStConfig->cConsumerSysId);
rmb_msg_set_dest_v2_1 (pStPub->pSendMsg, GSL_DEFAULT_DCN,
GSL_DEFAULT_SERVICE_ID, GSL_DEFAULT_SCENE_ID,
GSL_DEFAULT_COMMON_ORGID);
rmb_msg_set_content (pStPub->pSendMsg, pStPub->pkgBuf, iPkgLen);
char appHeader[5] = "{}";
rmb_msg_set_app_header (pStPub->pSendMsg, appHeader, strlen (appHeader));
int iRet =
rmb_pub_send_and_receive (pStPub, pStPub->pSendMsg, pStPub->pRcvMsg,
pRmbStConfig->iQueryTimeout);
if (iRet == 0)
{
char receiveBuf[MAX_GSL_RSP_BUF_SIZE];
unsigned int receiveLen = sizeof (receiveBuf);
rmb_msg_get_content (pStPub->pRcvMsg, receiveBuf, &receiveLen);
if (receiveLen == 0)
{
LOGRMB (RMB_LOG_ERROR, "GSL reply len=0, req=%s\n",
rmb_msg_print (pStPub->pSendMsg));
rmb_errno = RMB_ERROR_GSL_SVR_ERROR;
return 3;
}
// result(char) + routeFlag(char) + targetDcn(cStr)
char result = *(receiveBuf + 1);
pTmpService->cResult = result;
if (result == 0)
{
pTmpService->cRouteFlag = *(receiveBuf + 2);
if (pTmpService->cRouteFlag == 0 || pTmpService->cRouteFlag == 1)
{
LOGRMB (RMB_LOG_INFO, "GSL:[%s-%s-%s-%d] routeFlag=%d\n",
pTmpService->strServiceId,
pTmpService->strScenarioId,
pTmpService->strTargetOrgId,
(int) pTmpService->cFlagForOrgId,
(int) pTmpService->cRouteFlag);
return 0;
}
unsigned int uiDcnLen = *(receiveBuf + 3);
memcpy (pTmpService->strTargetDcn, receiveBuf + 4, uiDcnLen);
pTmpService->strTargetDcn[uiDcnLen] = 0;
LOGRMB (RMB_LOG_INFO,
"GSL:[%s-%s-%s-%d],get succ!routeFlag=2,targetDcn=%s \n",
pTmpService->strServiceId, pTmpService->strScenarioId,
pTmpService->strTargetOrgId, (int) pTmpService->cFlagForOrgId,
pTmpService->strTargetDcn);
return 0;
}
//兼容老的gsl的错误返回码
else if (result == 1)
{
LOGRMB (RMB_LOG_INFO,
"GSL:[%s-%s-%s-%d] service=NULL,result=1, uniqueID=%s\n",
pTmpService->strServiceId, pTmpService->strScenarioId,
pTmpService->strTargetOrgId, (int) pTmpService->cFlagForOrgId,
pStPub->pRcvMsg->sysHeader.cUniqueId);
//pTmpService->ulGetTimes = pRmbStConfig->ulNowTtime;
rmb_errno = RMB_ERROR_GSL_SERVICE_ID_NULL;
return 1;
}
else if (result == 2)
{
LOGRMB (RMB_LOG_INFO,
"GSL:[%s-%s-%s-%d] service error,result=2, uniqueID=%s\n",
pTmpService->strServiceId, pTmpService->strScenarioId,
pTmpService->strTargetOrgId, (int) pTmpService->cFlagForOrgId,
pStPub->pRcvMsg->sysHeader.cUniqueId);
//pTmpService->ulGetTimes = pRmbStConfig->ulNowTtime;
rmb_errno = RMB_ERROR_GSL_SERVICE_ID_ERROR;
return 2;
}
else if (result == 3)
{
LOGRMB (RMB_LOG_INFO,
"GSL:[%s-%s-%s-%d] gsl svr error,result=3, uniqueID=%s\n",
pTmpService->strServiceId, pTmpService->strScenarioId,
pTmpService->strTargetOrgId, (int) pTmpService->cFlagForOrgId,
pStPub->pRcvMsg->sysHeader.cUniqueId);
//pTmpService->ulGetTimes = pRmbStConfig->ulNowTtime;
rmb_errno = RMB_ERROR_GSL_SVR_ERROR;
//return 3;
return 4;
}
//////////////////////////////
else if ((result & 0x0F) == 0x01)
{
int index = (result & 0xF0) >> 4;
LOGRMB (RMB_LOG_INFO, "GSL:[%s-%s-%s-%d] uId=%s, result=0x%02x, %s\n",
pTmpService->strServiceId,
pTmpService->strScenarioId,
pTmpService->strTargetOrgId,
(int) pTmpService->cFlagForOrgId,
pStPub->pRcvMsg->sysHeader.cUniqueId,
gsl_error[index].result, gsl_error[index].err_msg);
rmb_errno = RMB_ERROR_GSL_SERVICE_ID_NULL;
return 1;
}
else if ((result & 0x0F) == 0x02)
{
int index = ((result & 0xF0) >> 4) + 16;
LOGRMB (RMB_LOG_INFO, "GSL:[%s-%s-%s-%d] uId=%s, result=0x%02x, %s\n",
pTmpService->strServiceId,
pTmpService->strScenarioId,
pTmpService->strTargetOrgId,
(int) pTmpService->cFlagForOrgId,
pStPub->pRcvMsg->sysHeader.cUniqueId,
gsl_error[index].result, gsl_error[index].err_msg);
rmb_errno = RMB_ERROR_GSL_SERVICE_ID_ERROR;
return 2;
}
else if ((result & 0x0F) == 0x03)
{
int index = ((result & 0xF0) >> 4) + 32;
LOGRMB (RMB_LOG_INFO, "GSL:[%s-%s-%s-%d] uId=%s, result=0x%02x, %s\n",
pTmpService->strServiceId,
pTmpService->strScenarioId,
pTmpService->strTargetOrgId,
(int) pTmpService->cFlagForOrgId,
pStPub->pRcvMsg->sysHeader.cUniqueId,
gsl_error[index].result, gsl_error[index].err_msg);
rmb_errno = RMB_ERROR_GSL_SVR_ERROR;
return 4;
}
}
else
{
if (rmb_errno == RMB_ERROR_SEND_RR_MSG_TIMEOUT)
{
LOGRMB (RMB_LOG_ERROR,
"GSL:[%s-%s-%s-%d],send and receive from GSL timeout.\n",
pTmpService->strServiceId, pTmpService->strScenarioId,
pTmpService->strTargetOrgId, (int) pTmpService->cFlagForOrgId);
pTmpService->cResult = 3;
return 4;
}
LOGRMB (RMB_LOG_ERROR,
"GSL:[%s-%s-%s-%d],send and recevie from GSL error,iRet=%d!\n",
pTmpService->strServiceId, pTmpService->strScenarioId,
pTmpService->strTargetOrgId, (int) pTmpService->cFlagForOrgId,
iRet);
//pTmpService->ulGetTimes = pRmbStConfig->ulNowTtime;
pTmpService->cResult = 3;
rmb_errno = RMB_ERROR_REQ_GSL_ERROR;
return 3;
}
return 0;
}