MT#55283 add "create" method

Change-Id: I626996028a6c5a9ee296efdeba8f301411b74ec7
pull/2090/head
Richard Fuchs 4 weeks ago
parent b121f38d97
commit 320b293dd5

@ -1618,7 +1618,8 @@ static void __generate_crypto(const sdp_ng_flags *flags, struct call_media *this
/* preferred crypto suites for the offerer - generated answer */
const str_q *offered_order = &flags->sdes_offerer_pref;
bool is_offer = (flags->opmode == OP_OFFER || flags->opmode == OP_SUBSCRIBE_REQ);
bool is_offer = (flags->opmode == OP_OFFER || flags->opmode == OP_SUBSCRIBE_REQ
|| flags->opmode == OP_CREATE);
if (!this->protocol || !this->protocol->srtp || MEDIA_ISSET(this, PASSTHRU)) {
crypto_params_sdes_queue_clear(cpq);
@ -6435,3 +6436,126 @@ bool monologue_transform(struct call_monologue *ml, sdp_ng_flags *flags, medias_
return true;
}
__attribute__((nonnull(1, 2, 3)))
static bool monologue_call_create_media(struct call_monologue *ml, sdp_ng_flags *flags,
const str *type, unsigned int idx, const str_q *codecs)
{
__auto_type m = call_get_media(ml, type, codec_get_type(type), NULL, false, idx, str_ht_null());
if (!m)
return false;
m->protocol = flags->transport_protocol ?: &transport_protocols[PROTO_RTP_AVP];
bf_set(&m->media_flags, MEDIA_FLAG_SEND | MEDIA_FLAG_RECV
| MEDIA_FLAG_SETUP_ACTIVE | MEDIA_FLAG_SETUP_PASSIVE
| MEDIA_FLAG_DTLS | MEDIA_FLAG_SDES);
__rtcp_mux_set(flags, m);
media_init_from_flags(m, flags);
media_set_audio_player(m, flags);
media_gen_media_id(m, flags);
if (flags->ice_option == ICE_FORCE)
MEDIA_SET(m, ICE);
if (flags->trickle_ice)
MEDIA_SET(m, TRICKLE_ICE);
if (flags->ice_lite_option == ICE_LITE_FWD)
MEDIA_SET(m, ICE_LITE_SELF);
m->desired_family = flags->address_family;
if (!codecs || !codecs->length)
codecs = &flags->codec_offer;
codec_store_create(&m->codecs, codecs);
codec_store_strip(&m->codecs, &flags->codec_strip, flags->codec_except);
if (m->type_id == MT_AUDIO)
codec_store_synthesise_basic(&m->codecs, "create media");
__generate_crypto(flags, m, NULL);
int num_ports = (flags->rtcp_mux_require || !m->protocol->rtp) ? 1 : 2;
__init_interface(m, &flags->interface, num_ports);
MEDIA_SET(m, INITIALIZED);
if (!__get_endpoint_map(m, num_ports, NULL, NULL, true))
return false;
__num_media_streams(m, num_ports);
if (!__init_streams(m, NULL, flags))
return false;
__ice_init(m);
monologue_open_ports(ml);
monologue_media_start(ml);
return true;
}
bool monologue_call_create(struct call_monologue *ml, sdp_ng_flags *flags) {
if (!flags->medias.length) // default: one audio media
return monologue_call_create_media(ml, flags, STR_PTR("audio"), 1, NULL);
unsigned int idx = 1;
for (auto_iter(l, flags->medias.head); l; l = l->next) {
__auto_type m = l->data;
bool ok = monologue_call_create_media(ml, flags, &m->type, idx++, &m->codec_list);
if (!ok)
return false;
}
return true;
}
bool monologue_call_create_answer(struct call_monologue *ml, sdp_ng_flags *flags, sdp_streams_q *streams) {
g_auto(str_ht) mid_tracker = str_ht_new();
for (__auto_type l = streams->head; l; l = l->next)
{
struct stream_params *sp = l->data;
struct call_media *media = __get_media(ml, sp, flags, 0, mid_tracker);
if (!media)
continue;
media_init_from_flags(media, flags);
media_set_audio_player(media, flags);
media_update_protocol(media, sp);
media_answer_media_id(media, sp);
media_loop_protect(sp, media);
media_update_flags(media, sp);
media_update_crypto(media, sp, flags);
media_update_format(media, sp);
media_set_ptime(media, sp, flags->ptime, 0);
media_update_extmap(media, sp, NULL, flags);
codec_store_populate(&media->codecs, &sp->codecs,
.codec_set = flags->codec_set,
.allow_asymmetric = !!flags->allow_asymmetric_codecs);
codec_store_strip(&media->codecs, &flags->codec_strip, flags->codec_except);
codec_store_offer(&media->codecs, &flags->codec_offer, &sp->codecs);
__dtls_logic(flags, media, sp);
if (!__init_streams(media, sp, flags))
return -1;
bf_copy(&media->media_flags, MEDIA_FLAG_RECV, &sp->sp_flags, SP_FLAG_SEND);
bf_copy(&media->media_flags, MEDIA_FLAG_SEND, &sp->sp_flags, SP_FLAG_RECV);
MEDIA_SET(media, INITIALIZED);
codec_update_media_source_handlers(media, .flags = flags);
codec_update_media_handlers(media);
update_init_subscribers(media, sp, flags, flags->opmode);
__media_unconfirm(media, "create answer event");
sdp_sp_move(&media->sp, sp);
}
return true;
}

@ -1695,6 +1695,16 @@ static void call_ng_codec(const ng_parser_t *parser, str *key, parser_arg value,
}
static void call_ng_codec_iter(const ng_parser_t *parser, parser_arg item, struct ng_media *media) {
// we support two types here:
// the "transform" method supplies an extended list of codecs, as a list of dicts
// the "create" method uses a list of strings, similar to codec->offer
if (!parser->is_dict(item)) {
str s;
parser->get_str(item, &s);
call_ng_flags_esc_str_list(&s, 0, &media->codec_list);
return;
}
__auto_type codec = g_new0(struct ng_codec, 1);
t_queue_push_tail(&media->codecs, codec);
@ -2494,6 +2504,7 @@ static void ng_codecs_free(struct ng_codec *c) {
static void ng_media_free(struct ng_media *m) {
t_queue_clear_full(&m->codecs, ng_codecs_free);
t_queue_clear_full(&m->codec_list, str_free);
g_free(m);
}
@ -4587,6 +4598,77 @@ const char *call_transform_ng(ng_command_ctx_t *ctx) {
return NULL;
}
const char *call_create_ng(ng_command_ctx_t *ctx) {
g_auto(sdp_ng_flags) flags;
g_autoptr(call_t) call = NULL;
char rand_call_id[65];
char rand_from_tag[65];
g_auto(str) sdp = STR_NULL;
call_ng_process_flags(&flags, ctx);
if (!flags.call_id.len)
flags.call_id = STR_LEN(rand_hex_str(rand_call_id, 32), 64);
if (!flags.from_tag.len)
flags.from_tag = STR_LEN(rand_hex_str(rand_from_tag, 32), 64);
call = call_get_or_create(&flags.call_id, false);
struct call_monologue *ml = call_get_or_create_monologue(call, &flags.from_tag);
if (!monologue_call_create(ml, &flags))
return "failed to set up call/monologue";
if (!sdp_create(&sdp, ml, &flags))
return "failed to create SDP";
const ng_parser_t *parser = ctx->parser_ctx.parser;
parser->dict_add_str_dup(ctx->resp, "call-id", &call->callid);
parser->dict_add_str_dup(ctx->resp, "from-tag", &ml->tag);
ctx->ngbuf->sdp_out = sdp.s;
parser->dict_add_str_dup(ctx->resp, "sdp", &sdp);
sdp = STR_NULL; // ownership passed to output
call_unlock_release_update(&call);
return NULL;
}
const char *call_create_answer_ng(ng_command_ctx_t *ctx) {
g_auto(sdp_ng_flags) flags;
g_autoptr(call_t) call = NULL;
g_auto(sdp_sessions_q) parsed = TYPED_GQUEUE_INIT;
g_auto(sdp_streams_q) streams = TYPED_GQUEUE_INIT;
call_ng_process_flags(&flags, ctx);
enum basic_errors ret;
if ((ret = call_ng_basic_checks(&flags)) > 0)
return _ng_basic_errors[ret];
call = call_get(&flags.call_id);
if (!call)
return "unknown call-ID";
if (!sdp_parse(&flags.sdp, &parsed, &flags))
return "Failed to parse SDP";
if (!sdp_streams(&parsed, &streams, &flags))
return "Incomplete SDP specification";
if (trickle_ice_update(ctx->ngbuf, call, &flags, &streams))
return NULL;
struct call_monologue *ml = call_get_monologue(call, &flags.from_tag);
if (!ml)
return "from-tag not found";
if (!monologue_call_create_answer(ml, &flags, &streams))
return "failed to perform answer";
call_unlock_release_update(&call);
return NULL;
}
void call_interfaces_free(void) {
if (info_re) {

@ -6186,6 +6186,14 @@ void codec_store_transcode(struct codec_store *cs, const str_q *offer, struct co
#endif
}
static rtp_payload_type *codec_make_payload_type_any(const str *codec_str, struct call_media *media) {
return codec_make_payload_type(codec_str, media->type_id);
}
void codec_store_create(struct codec_store *cs, const str_q *offer) {
codec_store_add_q(cs, offer, NULL, codec_make_payload_type_any);
}
void __codec_store_answer(struct codec_store *dst, struct codec_store *src, sdp_ng_flags *flags,
struct codec_store_args a)
{

@ -48,7 +48,8 @@ const char *ng_command_strings[OP_COUNT] = {
"publish", "subscribe request",
"subscribe answer", "unsubscribe",
"inject start", "inject stop",
"connect", "cli", "transform"
"connect", "cli", "transform",
"create", "create answer",
};
const char *ng_command_strings_esc[OP_COUNT] = {
"ping", "offer", "answer", "delete", "query", "list",
@ -60,7 +61,8 @@ const char *ng_command_strings_esc[OP_COUNT] = {
"publish", "subscribe_request",
"subscribe_answer", "unsubscribe",
"inject_start", "inject_stop",
"connect", "cli", "transform"
"connect", "cli", "transform",
"create", "create_answer",
};
const char *ng_command_strings_short[OP_COUNT] = {
"Ping", "Offer", "Answer", "Delete", "Query", "List",
@ -71,7 +73,8 @@ const char *ng_command_strings_short[OP_COUNT] = {
"BlkSlnMedia", "UnblkSlnMedia",
"Pub", "SubReq", "SubAns", "Unsub",
"InjStart", "InjStop",
"Conn", "CLI", "Trnsfm"
"Conn", "CLI", "Trnsfm",
"Create", "CrtAnsw",
};
typedef struct ng_ctx {
@ -868,6 +871,14 @@ static void control_ng_process_payload(ng_ctx *hctx, str *reply, str *data, cons
command_ctx.opmode = OP_TRANSFORM;
errstr = call_transform_ng(&command_ctx);
break;
case CSH_LOOKUP("create"):
command_ctx.opmode = OP_CREATE;
errstr = call_create_ng(&command_ctx);
break;
case CSH_LOOKUP("create answer"):
command_ctx.opmode = OP_CREATE_ANSWER;
errstr = call_create_answer_ng(&command_ctx);
break;
default:
errstr = "Unrecognized command";
}

@ -2837,6 +2837,7 @@ static struct packet_stream *print_rtcp(GString *s, struct call_media *media, pa
if (MEDIA_ISSET(media, RTCP_MUX) &&
(flags->opmode == OP_ANSWER ||
flags->opmode == OP_PUBLISH ||
flags->opmode == OP_CREATE ||
((flags->opmode == OP_OFFER || flags->opmode == OP_SUBSCRIBE_REQ) && flags->rtcp_mux_require) ||
IS_OP_OTHER(flags->opmode)))
{

@ -907,6 +907,10 @@ int monologue_inject_stop(struct call_monologue *src, struct call_monologue *dst
void dialogue_connect(struct call_monologue *, struct call_monologue *, sdp_ng_flags *);
__attribute__((nonnull(1, 2, 3)))
bool monologue_transform(struct call_monologue *, sdp_ng_flags *, medias_q *);
__attribute__((nonnull(1, 2)))
bool monologue_call_create(struct call_monologue *, sdp_ng_flags *);
__attribute__((nonnull(1, 2)))
bool monologue_call_create_answer(struct call_monologue *, sdp_ng_flags *, sdp_streams_q *streams);
void monologue_destroy(struct call_monologue *ml);
int call_delete_branch_by_id(const str *callid, const str *branch,
const str *fromtag, const str *totag, ng_command_ctx_t *, int64_t delete_delay);

@ -22,6 +22,7 @@ struct ng_media {
str id;
str type;
ng_codecs_q codecs;
str_q codec_list;
str destination_address;
endpoint_t destination;
@ -357,6 +358,8 @@ const char *call_inject_start_ng(ng_command_ctx_t *);
const char *call_inject_stop_ng(ng_command_ctx_t *);
const char *call_connect_ng(ng_command_ctx_t *);
const char *call_transform_ng(ng_command_ctx_t *);
const char *call_create_ng(ng_command_ctx_t *);
const char *call_create_answer_ng(ng_command_ctx_t *);
void add_media_to_sub_list(subscription_q *q, struct call_media *media, struct call_monologue *ml);

@ -196,6 +196,8 @@ __attribute__((nonnull(1, 2)))
void codec_store_track(struct codec_store *, const str_q *);
__attribute__((nonnull(1, 2, 3)))
void codec_store_transcode(struct codec_store *, const str_q *, struct codec_store *);
__attribute__((nonnull(1, 2)))
void codec_store_create(struct codec_store *, const str_q *);
__attribute__((nonnull(1, 2, 3)))
void __codec_store_answer(struct codec_store *dst, struct codec_store *src, sdp_ng_flags *flags,
struct codec_store_args);

@ -34,6 +34,8 @@ enum ng_opmode {
OP_CONNECT,
OP_CLI,
OP_TRANSFORM,
OP_CREATE,
OP_CREATE_ANSWER,
OP_COUNT, // last, number of elements
OP_OTHER = OP_COUNT // alias to above

@ -315,6 +315,20 @@ int main(void) {
"transforms_ps_max 0 150\n"
"transforms_ps_avg 0 150\n"
"transform_count 0 150\n"
"create_time_min 0.000000 150\n"
"create_time_max 0.000000 150\n"
"create_time_avg 0.000000 150\n"
"creates_ps_min 0 150\n"
"creates_ps_max 0 150\n"
"creates_ps_avg 0 150\n"
"create_count 0 150\n"
"create_answer_time_min 0.000000 150\n"
"create_answer_time_max 0.000000 150\n"
"create_answer_time_avg 0.000000 150\n"
"create_answers_ps_min 0 150\n"
"create_answers_ps_max 0 150\n"
"create_answers_ps_avg 0 150\n"
"create_answer_count 0 150\n"
"call_dur 0.000000 150\n"
"average_call_dur 0.000000 150\n"
"forced_term_sess 0 150\n"
@ -821,6 +835,22 @@ int main(void) {
"0.000000\n"
"avgtransformdelay\n"
"0.000000\n"
"Min/Max/Avg create processing delay\n"
"0.000000/0.000000/0.000000 sec\n"
"mincreatedelay\n"
"0.000000\n"
"maxcreatedelay\n"
"0.000000\n"
"avgcreatedelay\n"
"0.000000\n"
"Min/Max/Avg create answer processing delay\n"
"0.000000/0.000000/0.000000 sec\n"
"mincreate answerdelay\n"
"0.000000\n"
"maxcreate answerdelay\n"
"0.000000\n"
"avgcreate answerdelay\n"
"0.000000\n"
"Min/Max/Avg ping requests per second\n"
"0/0/0 per sec\n"
"minpingrequestrate\n"
@ -1077,6 +1107,22 @@ int main(void) {
"0\n"
"avgtransformrequestrate\n"
"0\n"
"Min/Max/Avg create requests per second\n"
"0/0/0 per sec\n"
"mincreaterequestrate\n"
"0\n"
"maxcreaterequestrate\n"
"0\n"
"avgcreaterequestrate\n"
"0\n"
"Min/Max/Avg create answer requests per second\n"
"0/0/0 per sec\n"
"mincreate answerrequestrate\n"
"0\n"
"maxcreate answerrequestrate\n"
"0\n"
"avgcreate answerrequestrate\n"
"0\n"
"\n"
"\n"
"}\n"
@ -1240,7 +1286,7 @@ int main(void) {
"{\n"
"proxies\n"
"[\n"
" Proxy | Ping | Offer | Answer | Delete | Query | List | StartRec | StopRec | PauseRec | StartFwd | StopFwd | BlkDTMF | UnblkDTMF | BlkMedia | UnblkMedia | PlayMedia | StopMedia | PlayDTMF | Stats | SlnMedia | UnslnMedia | BlkSlnMedia | UnblkSlnMedia | Pub | SubReq | SubAns | Unsub | InjStart | InjStop | Conn | CLI | Trnsfm \n"
" Proxy | Ping | Offer | Answer | Delete | Query | List | StartRec | StopRec | PauseRec | StartFwd | StopFwd | BlkDTMF | UnblkDTMF | BlkMedia | UnblkMedia | PlayMedia | StopMedia | PlayDTMF | Stats | SlnMedia | UnslnMedia | BlkSlnMedia | UnblkSlnMedia | Pub | SubReq | SubAns | Unsub | InjStart | InjStop | Conn | CLI | Trnsfm | Create | CrtAnsw \n"
"\n"
"]\n"
"totalpingcount\n"
@ -1307,6 +1353,10 @@ int main(void) {
"0\n"
"totaltrnsfmcount\n"
"0\n"
"totalcreatecount\n"
"0\n"
"totalcrtanswcount\n"
"0\n"
"\n"
"}\n"
"interfaces\n"
@ -1552,6 +1602,20 @@ int main(void) {
"transforms_ps_max 0 150\n"
"transforms_ps_avg 0 150\n"
"transform_count 0 150\n"
"create_time_min 0.000000 150\n"
"create_time_max 0.000000 150\n"
"create_time_avg 0.000000 150\n"
"creates_ps_min 0 150\n"
"creates_ps_max 0 150\n"
"creates_ps_avg 0 150\n"
"create_count 0 150\n"
"create_answer_time_min 0.000000 150\n"
"create_answer_time_max 0.000000 150\n"
"create_answer_time_avg 0.000000 150\n"
"create_answers_ps_min 0 150\n"
"create_answers_ps_max 0 150\n"
"create_answers_ps_avg 0 150\n"
"create_answer_count 0 150\n"
"call_dur 0.000000 150\n"
"average_call_dur 0.000000 150\n"
"forced_term_sess 0 150\n"
@ -2058,6 +2122,22 @@ int main(void) {
"0.000000\n"
"avgtransformdelay\n"
"0.000000\n"
"Min/Max/Avg create processing delay\n"
"0.000000/0.000000/0.000000 sec\n"
"mincreatedelay\n"
"0.000000\n"
"maxcreatedelay\n"
"0.000000\n"
"avgcreatedelay\n"
"0.000000\n"
"Min/Max/Avg create answer processing delay\n"
"0.000000/0.000000/0.000000 sec\n"
"mincreate answerdelay\n"
"0.000000\n"
"maxcreate answerdelay\n"
"0.000000\n"
"avgcreate answerdelay\n"
"0.000000\n"
"Min/Max/Avg ping requests per second\n"
"0/0/0 per sec\n"
"minpingrequestrate\n"
@ -2314,6 +2394,22 @@ int main(void) {
"0\n"
"avgtransformrequestrate\n"
"0\n"
"Min/Max/Avg create requests per second\n"
"0/0/0 per sec\n"
"mincreaterequestrate\n"
"0\n"
"maxcreaterequestrate\n"
"0\n"
"avgcreaterequestrate\n"
"0\n"
"Min/Max/Avg create answer requests per second\n"
"0/0/0 per sec\n"
"mincreate answerrequestrate\n"
"0\n"
"maxcreate answerrequestrate\n"
"0\n"
"avgcreate answerrequestrate\n"
"0\n"
"\n"
"\n"
"}\n"
@ -2477,7 +2573,7 @@ int main(void) {
"{\n"
"proxies\n"
"[\n"
" Proxy | Ping | Offer | Answer | Delete | Query | List | StartRec | StopRec | PauseRec | StartFwd | StopFwd | BlkDTMF | UnblkDTMF | BlkMedia | UnblkMedia | PlayMedia | StopMedia | PlayDTMF | Stats | SlnMedia | UnslnMedia | BlkSlnMedia | UnblkSlnMedia | Pub | SubReq | SubAns | Unsub | InjStart | InjStop | Conn | CLI | Trnsfm \n"
" Proxy | Ping | Offer | Answer | Delete | Query | List | StartRec | StopRec | PauseRec | StartFwd | StopFwd | BlkDTMF | UnblkDTMF | BlkMedia | UnblkMedia | PlayMedia | StopMedia | PlayDTMF | Stats | SlnMedia | UnslnMedia | BlkSlnMedia | UnblkSlnMedia | Pub | SubReq | SubAns | Unsub | InjStart | InjStop | Conn | CLI | Trnsfm | Create | CrtAnsw \n"
"\n"
"]\n"
"totalpingcount\n"
@ -2544,6 +2640,10 @@ int main(void) {
"0\n"
"totaltrnsfmcount\n"
"0\n"
"totalcreatecount\n"
"0\n"
"totalcrtanswcount\n"
"0\n"
"\n"
"}\n"
"interfaces\n"
@ -2786,6 +2886,20 @@ int main(void) {
"transforms_ps_max 0 150\n"
"transforms_ps_avg 0 150\n"
"transform_count 0 150\n"
"create_time_min 0.000000 150\n"
"create_time_max 0.000000 150\n"
"create_time_avg 0.000000 150\n"
"creates_ps_min 0 150\n"
"creates_ps_max 0 150\n"
"creates_ps_avg 0 150\n"
"create_count 0 150\n"
"create_answer_time_min 0.000000 150\n"
"create_answer_time_max 0.000000 150\n"
"create_answer_time_avg 0.000000 150\n"
"create_answers_ps_min 0 150\n"
"create_answers_ps_max 0 150\n"
"create_answers_ps_avg 0 150\n"
"create_answer_count 0 150\n"
"call_dur 0.000000 150\n"
"average_call_dur 0.000000 150\n"
"forced_term_sess 0 150\n"
@ -3292,6 +3406,22 @@ int main(void) {
"0.000000\n"
"avgtransformdelay\n"
"0.000000\n"
"Min/Max/Avg create processing delay\n"
"0.000000/0.000000/0.000000 sec\n"
"mincreatedelay\n"
"0.000000\n"
"maxcreatedelay\n"
"0.000000\n"
"avgcreatedelay\n"
"0.000000\n"
"Min/Max/Avg create answer processing delay\n"
"0.000000/0.000000/0.000000 sec\n"
"mincreate answerdelay\n"
"0.000000\n"
"maxcreate answerdelay\n"
"0.000000\n"
"avgcreate answerdelay\n"
"0.000000\n"
"Min/Max/Avg ping requests per second\n"
"0/0/0 per sec\n"
"minpingrequestrate\n"
@ -3548,6 +3678,22 @@ int main(void) {
"0\n"
"avgtransformrequestrate\n"
"0\n"
"Min/Max/Avg create requests per second\n"
"0/0/0 per sec\n"
"mincreaterequestrate\n"
"0\n"
"maxcreaterequestrate\n"
"0\n"
"avgcreaterequestrate\n"
"0\n"
"Min/Max/Avg create answer requests per second\n"
"0/0/0 per sec\n"
"mincreate answerrequestrate\n"
"0\n"
"maxcreate answerrequestrate\n"
"0\n"
"avgcreate answerrequestrate\n"
"0\n"
"\n"
"\n"
"}\n"
@ -3711,7 +3857,7 @@ int main(void) {
"{\n"
"proxies\n"
"[\n"
" Proxy | Ping | Offer | Answer | Delete | Query | List | StartRec | StopRec | PauseRec | StartFwd | StopFwd | BlkDTMF | UnblkDTMF | BlkMedia | UnblkMedia | PlayMedia | StopMedia | PlayDTMF | Stats | SlnMedia | UnslnMedia | BlkSlnMedia | UnblkSlnMedia | Pub | SubReq | SubAns | Unsub | InjStart | InjStop | Conn | CLI | Trnsfm \n"
" Proxy | Ping | Offer | Answer | Delete | Query | List | StartRec | StopRec | PauseRec | StartFwd | StopFwd | BlkDTMF | UnblkDTMF | BlkMedia | UnblkMedia | PlayMedia | StopMedia | PlayDTMF | Stats | SlnMedia | UnslnMedia | BlkSlnMedia | UnblkSlnMedia | Pub | SubReq | SubAns | Unsub | InjStart | InjStop | Conn | CLI | Trnsfm | Create | CrtAnsw \n"
"\n"
"]\n"
"totalpingcount\n"
@ -3778,6 +3924,10 @@ int main(void) {
"0\n"
"totaltrnsfmcount\n"
"0\n"
"totalcreatecount\n"
"0\n"
"totalcrtanswcount\n"
"0\n"
"\n"
"}\n"
"interfaces\n"
@ -4039,6 +4189,20 @@ int main(void) {
"transforms_ps_max 0 157\n"
"transforms_ps_avg 0 157\n"
"transform_count 0 157\n"
"create_time_min 0.000000 157\n"
"create_time_max 0.000000 157\n"
"create_time_avg 0.000000 157\n"
"creates_ps_min 0 157\n"
"creates_ps_max 0 157\n"
"creates_ps_avg 0 157\n"
"create_count 0 157\n"
"create_answer_time_min 0.000000 157\n"
"create_answer_time_max 0.000000 157\n"
"create_answer_time_avg 0.000000 157\n"
"create_answers_ps_min 0 157\n"
"create_answers_ps_max 0 157\n"
"create_answers_ps_avg 0 157\n"
"create_answer_count 0 157\n"
"call_dur 0.000000 157\n"
"average_call_dur 0.000000 157\n"
"forced_term_sess 0 157\n"
@ -4545,6 +4709,22 @@ int main(void) {
"0.000000\n"
"avgtransformdelay\n"
"0.000000\n"
"Min/Max/Avg create processing delay\n"
"0.000000/0.000000/0.000000 sec\n"
"mincreatedelay\n"
"0.000000\n"
"maxcreatedelay\n"
"0.000000\n"
"avgcreatedelay\n"
"0.000000\n"
"Min/Max/Avg create answer processing delay\n"
"0.000000/0.000000/0.000000 sec\n"
"mincreate answerdelay\n"
"0.000000\n"
"maxcreate answerdelay\n"
"0.000000\n"
"avgcreate answerdelay\n"
"0.000000\n"
"Min/Max/Avg ping requests per second\n"
"0/0/0 per sec\n"
"minpingrequestrate\n"
@ -4801,6 +4981,22 @@ int main(void) {
"0\n"
"avgtransformrequestrate\n"
"0\n"
"Min/Max/Avg create requests per second\n"
"0/0/0 per sec\n"
"mincreaterequestrate\n"
"0\n"
"maxcreaterequestrate\n"
"0\n"
"avgcreaterequestrate\n"
"0\n"
"Min/Max/Avg create answer requests per second\n"
"0/0/0 per sec\n"
"mincreate answerrequestrate\n"
"0\n"
"maxcreate answerrequestrate\n"
"0\n"
"avgcreate answerrequestrate\n"
"0\n"
"\n"
"\n"
"}\n"
@ -4964,7 +5160,7 @@ int main(void) {
"{\n"
"proxies\n"
"[\n"
" Proxy | Ping | Offer | Answer | Delete | Query | List | StartRec | StopRec | PauseRec | StartFwd | StopFwd | BlkDTMF | UnblkDTMF | BlkMedia | UnblkMedia | PlayMedia | StopMedia | PlayDTMF | Stats | SlnMedia | UnslnMedia | BlkSlnMedia | UnblkSlnMedia | Pub | SubReq | SubAns | Unsub | InjStart | InjStop | Conn | CLI | Trnsfm \n"
" Proxy | Ping | Offer | Answer | Delete | Query | List | StartRec | StopRec | PauseRec | StartFwd | StopFwd | BlkDTMF | UnblkDTMF | BlkMedia | UnblkMedia | PlayMedia | StopMedia | PlayDTMF | Stats | SlnMedia | UnslnMedia | BlkSlnMedia | UnblkSlnMedia | Pub | SubReq | SubAns | Unsub | InjStart | InjStop | Conn | CLI | Trnsfm | Create | CrtAnsw \n"
"\n"
"]\n"
"totalpingcount\n"
@ -5031,6 +5227,10 @@ int main(void) {
"0\n"
"totaltrnsfmcount\n"
"0\n"
"totalcreatecount\n"
"0\n"
"totalcrtanswcount\n"
"0\n"
"\n"
"}\n"
"interfaces\n"
@ -5281,6 +5481,20 @@ int main(void) {
"transforms_ps_max 0 157\n"
"transforms_ps_avg 0 157\n"
"transform_count 0 157\n"
"create_time_min 0.000000 157\n"
"create_time_max 0.000000 157\n"
"create_time_avg 0.000000 157\n"
"creates_ps_min 0 157\n"
"creates_ps_max 0 157\n"
"creates_ps_avg 0 157\n"
"create_count 0 157\n"
"create_answer_time_min 0.000000 157\n"
"create_answer_time_max 0.000000 157\n"
"create_answer_time_avg 0.000000 157\n"
"create_answers_ps_min 0 157\n"
"create_answers_ps_max 0 157\n"
"create_answers_ps_avg 0 157\n"
"create_answer_count 0 157\n"
"call_dur 0.000000 157\n"
"average_call_dur 0.000000 157\n"
"forced_term_sess 0 157\n"
@ -5787,6 +6001,22 @@ int main(void) {
"0.000000\n"
"avgtransformdelay\n"
"0.000000\n"
"Min/Max/Avg create processing delay\n"
"0.000000/0.000000/0.000000 sec\n"
"mincreatedelay\n"
"0.000000\n"
"maxcreatedelay\n"
"0.000000\n"
"avgcreatedelay\n"
"0.000000\n"
"Min/Max/Avg create answer processing delay\n"
"0.000000/0.000000/0.000000 sec\n"
"mincreate answerdelay\n"
"0.000000\n"
"maxcreate answerdelay\n"
"0.000000\n"
"avgcreate answerdelay\n"
"0.000000\n"
"Min/Max/Avg ping requests per second\n"
"0/0/0 per sec\n"
"minpingrequestrate\n"
@ -6043,6 +6273,22 @@ int main(void) {
"0\n"
"avgtransformrequestrate\n"
"0\n"
"Min/Max/Avg create requests per second\n"
"0/0/0 per sec\n"
"mincreaterequestrate\n"
"0\n"
"maxcreaterequestrate\n"
"0\n"
"avgcreaterequestrate\n"
"0\n"
"Min/Max/Avg create answer requests per second\n"
"0/0/0 per sec\n"
"mincreate answerrequestrate\n"
"0\n"
"maxcreate answerrequestrate\n"
"0\n"
"avgcreate answerrequestrate\n"
"0\n"
"\n"
"\n"
"}\n"
@ -6206,7 +6452,7 @@ int main(void) {
"{\n"
"proxies\n"
"[\n"
" Proxy | Ping | Offer | Answer | Delete | Query | List | StartRec | StopRec | PauseRec | StartFwd | StopFwd | BlkDTMF | UnblkDTMF | BlkMedia | UnblkMedia | PlayMedia | StopMedia | PlayDTMF | Stats | SlnMedia | UnslnMedia | BlkSlnMedia | UnblkSlnMedia | Pub | SubReq | SubAns | Unsub | InjStart | InjStop | Conn | CLI | Trnsfm \n"
" Proxy | Ping | Offer | Answer | Delete | Query | List | StartRec | StopRec | PauseRec | StartFwd | StopFwd | BlkDTMF | UnblkDTMF | BlkMedia | UnblkMedia | PlayMedia | StopMedia | PlayDTMF | Stats | SlnMedia | UnslnMedia | BlkSlnMedia | UnblkSlnMedia | Pub | SubReq | SubAns | Unsub | InjStart | InjStop | Conn | CLI | Trnsfm | Create | CrtAnsw \n"
"\n"
"]\n"
"totalpingcount\n"
@ -6273,6 +6519,10 @@ int main(void) {
"0\n"
"totaltrnsfmcount\n"
"0\n"
"totalcreatecount\n"
"0\n"
"totalcrtanswcount\n"
"0\n"
"\n"
"}\n"
"interfaces\n"
@ -6517,6 +6767,20 @@ int main(void) {
"transforms_ps_max 0 200\n"
"transforms_ps_avg 0 200\n"
"transform_count 0 200\n"
"create_time_min 0.000000 200\n"
"create_time_max 0.000000 200\n"
"create_time_avg 0.000000 200\n"
"creates_ps_min 0 200\n"
"creates_ps_max 0 200\n"
"creates_ps_avg 0 200\n"
"create_count 0 200\n"
"create_answer_time_min 0.000000 200\n"
"create_answer_time_max 0.000000 200\n"
"create_answer_time_avg 0.000000 200\n"
"create_answers_ps_min 0 200\n"
"create_answers_ps_max 0 200\n"
"create_answers_ps_avg 0 200\n"
"create_answer_count 0 200\n"
"call_dur 143.000000 200\n"
"average_call_dur 0.000000 200\n"
"forced_term_sess 0 200\n"
@ -7023,6 +7287,22 @@ int main(void) {
"0.000000\n"
"avgtransformdelay\n"
"0.000000\n"
"Min/Max/Avg create processing delay\n"
"0.000000/0.000000/0.000000 sec\n"
"mincreatedelay\n"
"0.000000\n"
"maxcreatedelay\n"
"0.000000\n"
"avgcreatedelay\n"
"0.000000\n"
"Min/Max/Avg create answer processing delay\n"
"0.000000/0.000000/0.000000 sec\n"
"mincreate answerdelay\n"
"0.000000\n"
"maxcreate answerdelay\n"
"0.000000\n"
"avgcreate answerdelay\n"
"0.000000\n"
"Min/Max/Avg ping requests per second\n"
"0/0/0 per sec\n"
"minpingrequestrate\n"
@ -7279,6 +7559,22 @@ int main(void) {
"0\n"
"avgtransformrequestrate\n"
"0\n"
"Min/Max/Avg create requests per second\n"
"0/0/0 per sec\n"
"mincreaterequestrate\n"
"0\n"
"maxcreaterequestrate\n"
"0\n"
"avgcreaterequestrate\n"
"0\n"
"Min/Max/Avg create answer requests per second\n"
"0/0/0 per sec\n"
"mincreate answerrequestrate\n"
"0\n"
"maxcreate answerrequestrate\n"
"0\n"
"avgcreate answerrequestrate\n"
"0\n"
"\n"
"\n"
"}\n"
@ -7442,7 +7738,7 @@ int main(void) {
"{\n"
"proxies\n"
"[\n"
" Proxy | Ping | Offer | Answer | Delete | Query | List | StartRec | StopRec | PauseRec | StartFwd | StopFwd | BlkDTMF | UnblkDTMF | BlkMedia | UnblkMedia | PlayMedia | StopMedia | PlayDTMF | Stats | SlnMedia | UnslnMedia | BlkSlnMedia | UnblkSlnMedia | Pub | SubReq | SubAns | Unsub | InjStart | InjStop | Conn | CLI | Trnsfm \n"
" Proxy | Ping | Offer | Answer | Delete | Query | List | StartRec | StopRec | PauseRec | StartFwd | StopFwd | BlkDTMF | UnblkDTMF | BlkMedia | UnblkMedia | PlayMedia | StopMedia | PlayDTMF | Stats | SlnMedia | UnslnMedia | BlkSlnMedia | UnblkSlnMedia | Pub | SubReq | SubAns | Unsub | InjStart | InjStop | Conn | CLI | Trnsfm | Create | CrtAnsw \n"
"\n"
"]\n"
"totalpingcount\n"
@ -7509,6 +7805,10 @@ int main(void) {
"0\n"
"totaltrnsfmcount\n"
"0\n"
"totalcreatecount\n"
"0\n"
"totalcrtanswcount\n"
"0\n"
"\n"
"}\n"
"interfaces\n"
@ -7756,6 +8056,20 @@ int main(void) {
"transforms_ps_max 0 200\n"
"transforms_ps_avg 0 200\n"
"transform_count 0 200\n"
"create_time_min 0.000000 200\n"
"create_time_max 0.000000 200\n"
"create_time_avg 0.000000 200\n"
"creates_ps_min 0 200\n"
"creates_ps_max 0 200\n"
"creates_ps_avg 0 200\n"
"create_count 0 200\n"
"create_answer_time_min 0.000000 200\n"
"create_answer_time_max 0.000000 200\n"
"create_answer_time_avg 0.000000 200\n"
"create_answers_ps_min 0 200\n"
"create_answers_ps_max 0 200\n"
"create_answers_ps_avg 0 200\n"
"create_answer_count 0 200\n"
"call_dur 0.000000 200\n"
"average_call_dur 93.000000 200\n"
"forced_term_sess 0 200\n"
@ -8262,6 +8576,22 @@ int main(void) {
"0.000000\n"
"avgtransformdelay\n"
"0.000000\n"
"Min/Max/Avg create processing delay\n"
"0.000000/0.000000/0.000000 sec\n"
"mincreatedelay\n"
"0.000000\n"
"maxcreatedelay\n"
"0.000000\n"
"avgcreatedelay\n"
"0.000000\n"
"Min/Max/Avg create answer processing delay\n"
"0.000000/0.000000/0.000000 sec\n"
"mincreate answerdelay\n"
"0.000000\n"
"maxcreate answerdelay\n"
"0.000000\n"
"avgcreate answerdelay\n"
"0.000000\n"
"Min/Max/Avg ping requests per second\n"
"0/0/0 per sec\n"
"minpingrequestrate\n"
@ -8518,6 +8848,22 @@ int main(void) {
"0\n"
"avgtransformrequestrate\n"
"0\n"
"Min/Max/Avg create requests per second\n"
"0/0/0 per sec\n"
"mincreaterequestrate\n"
"0\n"
"maxcreaterequestrate\n"
"0\n"
"avgcreaterequestrate\n"
"0\n"
"Min/Max/Avg create answer requests per second\n"
"0/0/0 per sec\n"
"mincreate answerrequestrate\n"
"0\n"
"maxcreate answerrequestrate\n"
"0\n"
"avgcreate answerrequestrate\n"
"0\n"
"\n"
"\n"
"}\n"
@ -8681,7 +9027,7 @@ int main(void) {
"{\n"
"proxies\n"
"[\n"
" Proxy | Ping | Offer | Answer | Delete | Query | List | StartRec | StopRec | PauseRec | StartFwd | StopFwd | BlkDTMF | UnblkDTMF | BlkMedia | UnblkMedia | PlayMedia | StopMedia | PlayDTMF | Stats | SlnMedia | UnslnMedia | BlkSlnMedia | UnblkSlnMedia | Pub | SubReq | SubAns | Unsub | InjStart | InjStop | Conn | CLI | Trnsfm \n"
" Proxy | Ping | Offer | Answer | Delete | Query | List | StartRec | StopRec | PauseRec | StartFwd | StopFwd | BlkDTMF | UnblkDTMF | BlkMedia | UnblkMedia | PlayMedia | StopMedia | PlayDTMF | Stats | SlnMedia | UnslnMedia | BlkSlnMedia | UnblkSlnMedia | Pub | SubReq | SubAns | Unsub | InjStart | InjStop | Conn | CLI | Trnsfm | Create | CrtAnsw \n"
"\n"
"]\n"
"totalpingcount\n"
@ -8748,6 +9094,10 @@ int main(void) {
"0\n"
"totaltrnsfmcount\n"
"0\n"
"totalcreatecount\n"
"0\n"
"totalcrtanswcount\n"
"0\n"
"\n"
"}\n"
"interfaces\n"

Loading…
Cancel
Save