Exemple #1
0
static int parseIpPortStr(const char *localAddrStr, 
                          struct sockaddr_storage *pLocalAddr,
                          uint16_t localPorts[], size_t maxLocalPorts, int requirePort) {

  size_t numPortsAdded = 0; 
  int rc = 0;
  char host[512];
  char ports[128];
  char uri[512];

  host[0] = '\0';
  ports[0] = '\0';
  uri[0] = '\0';
  memset(localPorts, 0, sizeof(uint16_t) * maxLocalPorts);

  if((rc = strutil_parseAddress(localAddrStr, host, sizeof(host), ports, sizeof(ports), uri, sizeof(uri)) < 0)) {
    return rc;
  }

  if(net_getaddress(host, pLocalAddr) != 0 ||
     (pLocalAddr->ss_family != AF_INET6 && ((struct sockaddr_in *) pLocalAddr)->sin_addr.s_addr == INADDR_NONE)) {
    LOG(X_ERROR("Invalid address specified in '%s'"), localAddrStr);
    return -1;
  } else if(!requirePort && ports[0] == '\0') {
    LOG(X_ERROR("No port specified in '%s'"), localAddrStr);
    return -1;
  }

  if((numPortsAdded = capture_parsePortStr(ports, localPorts, maxLocalPorts, 1)) < 0) {
    LOG(X_ERROR("Invalid port specified in '%s'"), localAddrStr);
    return numPortsAdded;
  }

  return numPortsAdded;
}
Exemple #2
0
static int getHostAndPorts(const char *str, char host[], size_t szHost,
                           uint16_t ports[], size_t numPorts, int nodupPorts, 
                           char uri[], size_t szuri) {
  const char *p, *p2;
  size_t sz;

  if((p = strstr(str, ":"))) {
    sz = p - str;
    p++;
  } else {
    sz = strlen(str);
    p = NULL;
  }

  if(host && szHost > 0) {
    if(sz >= szHost) {
      sz = szHost -1;
    }
    memcpy(host, str, sz);
    host[sz] = '\0';
  }
  if(uri && szuri > 0) {
    p2 = p; 
    MOVE_UNTIL_CHAR(p2, '/');
    if((sz  = strlen(p2)) >= szuri) {
      sz = szuri - 1;
    }
    memcpy(uri, p2, sz);    
    uri[sz] = '\0';
  }

  if(p) {
    return capture_parsePortStr(p, ports, numPorts, nodupPorts);
  }

  if(sz == 0 || inet_addr(host) != INADDR_NONE ||
    !strncmp(host, "255.255.255.255", sz)) {
    LOG(X_ERROR("No port number specified"));
    return -1;
  }

  return 0;
}