int handle_init(void * p_handler) { if (metric_init() != 0) { ERROR_LOG("ERROR: metric_init() in switch_proto"); return -1; } DEBUG_LOG("switch proto inited"); return 0; }
int stream_alloc(struct stream **sp, const struct config_avt *cfg, struct call *call, struct sdp_session *sdp_sess, const char *name, int label, const struct mnat *mnat, struct mnat_sess *mnat_sess, const struct menc *menc, struct menc_sess *menc_sess, const char *cname, stream_rtp_h *rtph, stream_rtcp_h *rtcph, void *arg) { struct stream *s; int err; if (!sp || !cfg || !call || !rtph) return EINVAL; s = mem_zalloc(sizeof(*s), stream_destructor); if (!s) return ENOMEM; s->cfg = *cfg; s->call = call; s->rtph = rtph; s->rtcph = rtcph; s->arg = arg; s->pseq = -1; s->rtcp = s->cfg.rtcp_enable; err = stream_sock_alloc(s, call_af(call)); if (err) { warning("stream: failed to create socket for media '%s'" " (%m)\n", name, err); goto out; } err = str_dup(&s->cname, cname); if (err) goto out; /* Jitter buffer */ if (cfg->jbuf_del.min && cfg->jbuf_del.max) { err = jbuf_alloc(&s->jbuf, cfg->jbuf_del.min, cfg->jbuf_del.max); if (err) goto out; } err = sdp_media_add(&s->sdp, sdp_sess, name, sa_port(rtp_local(s->rtp)), (menc && menc->sdp_proto) ? menc->sdp_proto : sdp_proto_rtpavp); if (err) goto out; if (label) { err |= sdp_media_set_lattr(s->sdp, true, "label", "%d", label); } /* RFC 5506 */ if (s->rtcp) err |= sdp_media_set_lattr(s->sdp, true, "rtcp-rsize", NULL); /* RFC 5576 */ if (s->rtcp) { err |= sdp_media_set_lattr(s->sdp, true, "ssrc", "%u cname:%s", rtp_sess_ssrc(s->rtp), cname); } /* RFC 5761 */ if (cfg->rtcp_mux) err |= sdp_media_set_lattr(s->sdp, true, "rtcp-mux", NULL); if (err) goto out; if (mnat) { err = mnat->mediah(&s->mns, mnat_sess, IPPROTO_UDP, rtp_sock(s->rtp), s->rtcp ? rtcp_sock(s->rtp) : NULL, s->sdp); if (err) goto out; } if (menc) { s->menc = menc; s->mencs = mem_ref(menc_sess); err = menc->mediah(&s->mes, menc_sess, s->rtp, IPPROTO_UDP, rtp_sock(s->rtp), s->rtcp ? rtcp_sock(s->rtp) : NULL, s->sdp); if (err) goto out; } if (err) goto out; s->pt_enc = -1; metric_init(&s->metric_tx); metric_init(&s->metric_rx); list_append(call_streaml(call), &s->le, s); out: if (err) mem_deref(s); else *sp = s; return err; }
int main (void) { g_val_t val; int check, i; /* Initialize libmetrics */ metric_init (); /* Loop through a few times to make sure everything works */ for (check = 0; check < NUM_TESTS; check++) { fprintf(stderr,"============= Running test #%d of %d =================\n", check+1, NUM_TESTS); /* Run through the metric list */ for (i = 0; metrics[i].func != NULL; i++) { fprintf (stderr, "%20s = ", metrics[i].name); val = metrics[i].func (); #if 0 if (!val) { fprintf (stderr, "NOT IMPLEMENTED ON THIS PLATFORM"); } else #endif { switch (metrics[i].type) { case g_string: fprintf (stderr, "%s (g_string)", val.str); break; case g_int8: fprintf (stderr, "%d (g_int8)", (int) val.int8); break; case g_uint8: fprintf (stderr, "%d (g_uint8)", (unsigned int) val.uint8); break; case g_int16: fprintf (stderr, "%d (g_int16)", (int) val.int16); break; case g_uint16: fprintf (stderr, "%d (g_uint16)", (unsigned int) val.uint16); break; case g_int32: fprintf (stderr, "%d (g_int32)", (int) val.int32); break; case g_uint32: fprintf (stderr, "%u (g_uint32)", val.uint32); break; case g_float: fprintf (stderr, "%f (g_float)", val.f); break; case g_double: fprintf (stderr, "%f (g_double)", val.d); break; case g_timestamp: fprintf (stderr, "%u (g_timestamp)", val.uint32); break; } } fprintf (stderr, "\n"); } if(check != (NUM_TESTS - 1)) sleep(SLEEP_TIME); } return 0; }