예제 #1
0
파일: procdb.c 프로젝트: flybird119/openvcx
int cbparse_procstatus_resp(void *pArg, const char *p) {
  int rc = 0;
  PROC_STATUS_RESP_DATA_T *pResp = (PROC_STATUS_RESP_DATA_T *) pArg;
  KEYVAL_PAIR_T kv;

  memset(&kv, 0, sizeof(kv));
  if((rc = conf_parse_keyval(&kv, p, 0, '=', 0)) == 2) {
    if(!strncasecmp(kv.key, "rtmpt", 5)) {
      pResp->numActiveRtmpTunneled = atoi(kv.val);
    } else if(!strncasecmp(kv.key, "rtmp", 4)) {
      pResp->numActiveRtmp = atoi(kv.val);
    } else if(!strncasecmp(kv.key, "rtspi", 5)) {
      pResp->numActiveRtspInterleaved = atoi(kv.val);
    } else if(!strncasecmp(kv.key, "rtsp", 4)) {
      pResp->numActiveRtsp = atoi(kv.val);
    } else if(!strncasecmp(kv.key, "tslive", 6)) {
      pResp->numActiveTsLive = atoi(kv.val);
    } else if(!strncasecmp(kv.key, "flvlive", 7)) {
      pResp->numActiveFlvLive = atoi(kv.val);
    } else if(!strncasecmp(kv.key, "mkvlive", 7)) {
      pResp->numActiveMkvLive = atoi(kv.val);
    } else if(!strncasecmp(kv.key, "outputRate", 10)) {
      pResp->bps = (float) strutil_read_numeric(kv.val, 0, 0, 0);
    }
  }

  return rc;
}
예제 #2
0
파일: conf.c 프로젝트: flybird119/openvcx
SRV_CONF_T *conf_parse(const char *path) {
  FILE_HANDLE fp;
  SRV_CONF_T *pConf = NULL;
  KEYVAL_PAIR_T kv;
  KEYVAL_PAIR_T *pKv = NULL;
  KEYVAL_PAIR_T *pKvPrev = NULL;
  char buf[1024];
  unsigned int numEntries = 0;

  if(!path) {
    return NULL;
  }

  if((fp = fileops_Open(path, O_RDONLY)) == FILEOPS_INVALID_FP) {
    LOG(X_CRITICAL("Unable to open file for reading: %s"), path);
    return NULL;
  }

  pConf = (SRV_CONF_T *) avc_calloc(1, sizeof(SRV_CONF_T));

  while(fileops_fgets(buf, sizeof(buf) - 1, fp)) {

    if(conf_parse_keyval(&kv, buf, strlen(buf), '=', 0) > 0) {

      if((pKv = (KEYVAL_PAIR_T *) avc_calloc(1, sizeof(KEYVAL_PAIR_T))) == NULL) {
        LOG(X_CRITICAL("Failed to allocate %d"), sizeof(KEYVAL_PAIR_T));
        break;
      }

      memcpy(pKv->key, kv.key, sizeof(pKv->key));
      memcpy(pKv->val, kv.val, sizeof(pKv->val));

      if(pKvPrev == NULL) {
        pConf->pKeyvals = pKv;
      } else {
        pKvPrev->pnext = pKv;
      }

      pKvPrev = pKv;
      numEntries++;

    }

  }

  fileops_Close(fp);

  return pConf;
}
예제 #3
0
int cbparse_authmod_descr_params(void *pArg, const char *p) {
  int rc = 0;
  AUTH_LIST_T *pAuthList = (AUTH_LIST_T *) pArg;

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

  //LOG(X_DEBUG("cbparse_authmod_descr_params: '%s'"), p);

  if(pAuthList->count >= sizeof(pAuthList->list) / sizeof(pAuthList->list[0])) {
    return -1;
  }

  if((rc = conf_parse_keyval(&pAuthList->list[pAuthList->count], p, 0, '=', 0)) > 0) {
    if(pAuthList->count > 0) {
      pAuthList->list[pAuthList->count- 1].pnext = &pAuthList->list[pAuthList->count];
    }
    pAuthList->count++;
  }

  return rc;
}
예제 #4
0
파일: procdb.c 프로젝트: mmashimaro/openvcx
static int check_status(SYS_PROC_T *pProc) {
  int rc;
  char *p, *p2;
  KEYVAL_PAIR_T kv;
  char buf[1024];
  int numActiveRtmp = -1;
  int numActiveRtsp = -1;
  int numActiveRtspInterleaved = -1;
  int numActiveTsLive = -1;
  int numActiveFlvLive = -1;
  const char *host = "127.0.0.1";

  pProc->numActive = 0;

  if((rc = http_getpage(host, MGR_GET_PORT_STATUS(pProc->startPort), VSX_STATUS_URL, buf, sizeof(buf), 2000)) < 0) {
    LOG(X_ERROR("Failed to load "VSX_STATUS_URL" for %s:%d"), host, MGR_GET_PORT_STATUS(pProc->startPort));
    return rc;
  }

  p = buf;
  while(p - buf < rc) {
    p2 = p;
    while(p2 - buf < rc && *p2 != '&') {
      p2++;
    }
    //fprintf(stderr, "--%c%c%c len:%d, rc:%d\n", p[0], p[1], p[2], p2 - p, rc);
    if(conf_parse_keyval(&kv, p, p2 - p, '=', 0) == 2) {
      if(!strncasecmp(kv.key, "rtmp", 4)) {
        numActiveRtmp = atoi(kv.val);
      } else if(!strncasecmp(kv.key, "rtspi", 5)) {
        numActiveRtspInterleaved = atoi(kv.val);
      } else if(!strncasecmp(kv.key, "rtsp", 4)) {
        numActiveRtsp = atoi(kv.val);
      } else if(!strncasecmp(kv.key, "tslive", 6)) {
        numActiveTsLive = atoi(kv.val);
      } else if(!strncasecmp(kv.key, "flvlive", 7)) {
        numActiveFlvLive = atoi(kv.val);
      }

      //fprintf(stderr, "key:'%s' val:'%s'\n", kv.key , kv.val);
    }
    p = p2;
    while(p - buf < rc && *p == '&') {
      p++;
    }
  }


  if(numActiveRtmp >= 0) {
    pProc->numActive += numActiveRtmp;
  }
  if(numActiveRtsp >= 0) {
    pProc->numActive += numActiveRtsp;
  }
  if(numActiveTsLive >= 0) {
    pProc->numActive += numActiveTsLive;
  }
  if(numActiveTsLive >= 0) {
    pProc->numActive += numActiveFlvLive;
  }
 
  VSX_DEBUGLOG("Status for %s (%s, profile:%s) %s:%d rtmp:%d rtsp:%d (interleaved:%d) ts:%d flv: %d"
                " (rc:%d '%s')\n", 
     pProc->name, pProc->instanceId, pProc->id, host, MGR_GET_PORT_STATUS(pProc->startPort), 
     numActiveRtmp, numActiveRtsp, numActiveRtspInterleaved, numActiveTsLive, numActiveFlvLive, rc, buf);

  return rc;
}