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