예제 #1
0
int cbparse_authmod_descr(void *pArg, const char *p) {
  int rc = 0;
  const char *p2 = NULL;
  const char *p3 = NULL;
  RTMP_AUTH_PARSE_CTXT_T *parseCtxt = (RTMP_AUTH_PARSE_CTXT_T *) pArg;

  if(!p || !parseCtxt) {
    return -1;
  }

  parseCtxt->index++;

  MOVE_WHILE_SPACE(p);
  MOVE_WHILE_CHAR(p, '[');
  MOVE_WHILE_SPACE(p);

  //LOG(X_DEBUG("cbparse_authmod_descr2: '%s' %d"), p, parseCtxt->index);

  if(parseCtxt->index == 1) {

    p2 = p;
    MOVE_UNTIL_CHAR(p2, ']');
    if(strutil_safe_copyToBuf(parseCtxt->errorStr, sizeof(parseCtxt->errorStr), p, p2)) {
      avc_strip_nl(parseCtxt->errorStr, strlen(parseCtxt->errorStr), 1);
    }

  } else if(parseCtxt->index == 2) {
    if((p2 = strstr(p, "authmod="))) {
      p2+=8;
      p3 = p2;
      while(*p3 != '\0' && *p3 != ']' && *p3 != ' ' && *p3 != ';') {
        p3++;
      }
      strutil_safe_copyToBuf(parseCtxt->authmodStr, sizeof(parseCtxt->authmodStr), p2, p3);
    }
  } else if(parseCtxt->index == 3) {
    if(*p == '?') {
      p++;
    }
    rc = strutil_parse_delimeted_str(cbparse_authmod_descr_params, &parseCtxt->authList, p, '&');
  }

  return rc;
}
예제 #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;
}