int NlsClientImpl::vipServerListGetUrlImpl()

in nlsCppSdk/framework/common/nlsClientImpl.cpp [649:724]


int NlsClientImpl::vipServerListGetUrlImpl(
    const std::string &vipServerDomainList, const std::string &targetDomain,
    std::string &url) {
#ifdef ENABLE_VIPSERVER
  std::string domainPattern = ",";
  std::string portPattern = ":";
  std::string vipServerBuff, serverIp, serverPort;
  int port = VipServerPort;

  LOG_DEBUG("vipServerDomainList: %s.", vipServerDomainList.c_str());

  size_t domainStart = 0,
         domainSeek = vipServerDomainList.find_first_of(domainPattern, 0);
  size_t portSeek = 0;

  while (domainSeek != vipServerDomainList.npos) {
    if (domainStart != domainSeek) {
      vipServerBuff =
          vipServerDomainList.substr(domainStart, domainSeek - domainStart);

      LOG_DEBUG("vipServerBuff: %s", vipServerBuff.c_str());

      portSeek = vipServerBuff.find_first_of(portPattern, 0);
      if (portSeek != vipServerBuff.npos) {
        serverIp = vipServerBuff.substr(0, portSeek);
        serverPort = vipServerBuff.substr(portSeek + 1,
                                          vipServerBuff.length() - portSeek);
        if (!serverPort.empty()) {
          port = atoi(serverPort.c_str());
        }
      } else {
        serverIp = vipServerBuff;
      }

      // Get ip
      if (Success == vipServerGetIp(serverIp, port, targetDomain, url)) {
        LOG_DEBUG("vipServerGetIp successed:%s.", url.c_str());
        return Success;
      } else {
        MUTEX_LOCK(_mtx);
        _isInitalizeVsClient = false;
        VipClientApi::UnInit();
        MUTEX_UNLOCK(_mtx);
      }
    }

    domainStart = domainSeek + 1;
    domainSeek = vipServerDomainList.find_first_of(domainPattern, domainStart);
  }

  LOG_DEBUG("Last vipServerBuff: %s", vipServerBuff.c_str());

  port = VipServerPort;
  if (!vipServerDomainList.substr(domainStart).empty()) {
    vipServerBuff = vipServerDomainList.substr(domainStart);
    portSeek = vipServerBuff.find_first_of(portPattern, 0);
    if (portSeek != vipServerBuff.npos) {
      serverIp = vipServerBuff.substr(0, portSeek);
      serverPort =
          vipServerBuff.substr(portSeek + 1, vipServerBuff.size() - portSeek);
      if (!serverPort.empty()) {
        port = atoi(serverPort.c_str());
      }

    } else {
      serverIp = vipServerBuff;
    }

    // Get ip
    return vipServerGetIp(serverIp, port, targetDomain, url);
  }
#else
  LOG_WARN("Donnot enable VipServer.");
#endif  // ENABLE_VIPSERVER
  return Success;
}