static int rmb_pub_send_gsl()

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