Browse Source

MT#61368 add OP_CONNECT

Change-Id: Ie07cb5bd139f5e039c5736009ae18733850b0c55
pull/1897/head
Richard Fuchs 12 months ago
parent
commit
3af3e799a8
7 changed files with 265 additions and 7 deletions
  1. +54
    -0
      daemon/call_interfaces.c
  2. +7
    -0
      daemon/control_ng.c
  3. +18
    -0
      docs/ng_control_protocol.md
  4. +2
    -0
      include/call_interfaces.h
  5. +1
    -0
      include/control_ng.h
  6. +182
    -7
      t/test-stats.c
  7. +1
    -0
      utils/rtpengine-ng-client

+ 54
- 0
daemon/call_interfaces.c View File

@ -1997,6 +1997,9 @@ void call_ng_main_flags(const ng_parser_t *parser, str *key, parser_arg value, h
case CSH_LOOKUP("to-label"):
out->to_label = s;
break;
case CSH_LOOKUP("to-call-id"):
out->to_call_id = s;
break;
case CSH_LOOKUP("to-tag"):
out->to_tag = s;
break;
@ -4007,6 +4010,57 @@ const char *call_unsubscribe_ng(ng_command_ctx_t *ctx) {
}
const char *call_connect_ng(ng_command_ctx_t *ctx) {
g_auto(sdp_ng_flags) flags;
g_autoptr(call_t) call = NULL;
g_autoptr(call_t) call2 = NULL;
call_ng_process_flags(&flags, ctx);
if (!flags.call_id.s)
return "No call-id in message";
if (!flags.from_tag.s)
return "No from-tag in message";
if (!flags.to_tag.s)
return "No to-tag in message";
if (flags.to_call_id.s) {
call_get2_ret_t ret = call_get2(&call, &call2, &flags.call_id, &flags.to_call_id);
if (ret == CG2_NF1)
return "Unknown call-ID";
if (ret == CG2_NF2)
return "Unknown to-tag call-ID";
}
else {
call = call_get(&flags.call_id);
if (!call)
return "Unknown call-ID";
}
struct call_monologue *src_ml = call_get_or_create_monologue(call, &flags.from_tag);
if (!src_ml)
return "From-tag not found";
struct call_monologue *dest_ml = call_get_or_create_monologue(call2 ?: call, &flags.to_tag);
if (!dest_ml)
return "To-tag not found";
if (src_ml == dest_ml)
return "Trying to connect to self"; // XXX should this be allowed?
if (call2) {
if (!call_merge(call, &call2))
return "Failed to merge two calls into one";
}
dialogue_connect(src_ml, dest_ml, &flags);
call_unlock_release_update(&call);
return NULL;
}
void call_interfaces_free(void) {
if (info_re) {
pcre2_code_free(info_re);


+ 7
- 0
daemon/control_ng.c View File

@ -46,6 +46,7 @@ const char *ng_command_strings[OP_COUNT] = {
"block silence media", "unblock silence media",
"publish", "subscribe request",
"subscribe answer", "unsubscribe",
"connect"
};
const char *ng_command_strings_esc[OP_COUNT] = {
"ping", "offer", "answer", "delete", "query", "list",
@ -56,6 +57,7 @@ const char *ng_command_strings_esc[OP_COUNT] = {
"block_silence_media", "unblock_silence_media",
"publish", "subscribe_request",
"subscribe_answer", "unsubscribe",
"connect"
};
const char *ng_command_strings_short[OP_COUNT] = {
"Ping", "Offer", "Answer", "Delete", "Query", "List",
@ -65,6 +67,7 @@ const char *ng_command_strings_short[OP_COUNT] = {
"PlayDTMF", "Stats", "SlnMedia", "UnslnMedia",
"BlkSlnMedia", "UnblkSlnMedia",
"Pub", "SubReq", "SubAns", "Unsub",
"Conn"
};
typedef struct ng_ctx {
@ -841,6 +844,10 @@ static void control_ng_process_payload(ng_ctx *hctx, str *reply, str *data, cons
command_ctx.opmode = OP_UNSUBSCRIBE;
errstr = call_unsubscribe_ng(&command_ctx);
break;
case CSH_LOOKUP("connect"):
command_ctx.opmode = OP_CONNECT;
errstr = call_connect_ng(&command_ctx);
break;
default:
errstr = "Unrecognized command";
}


+ 18
- 0
docs/ng_control_protocol.md View File

@ -63,6 +63,7 @@ Currently the following commands are defined:
* subscribe request
* subscribe answer
* unsubscribe
* connect
The response dictionary must contain at least one key called `result`.
The value can be either `ok` or `error`.
@ -2322,3 +2323,20 @@ forwarding will start to the endpoint given in the answer SDP.
This message is a counterpart to `subsscribe answer` to stop an established
subscription. The subscription to be stopped is identified by the `to-tag`.
## `connect` Message
This message makes it posible to directly connect the media of two call parties
without the need for a full offer/answer exchange. The required keys are
`call-id` to identify the call, and `from-tag and `to-tag` to identify the two
call parties to connect. The media will be connected in the same way as it
would through an offer/answer exchange. Transcoding will automaticaly be
engaged if needed.
It's also possible to connect two call parties from two different calls
(different call IDs). To do so, the second call ID must be given as
`to-call-id`, with the given `to-tag` then being one of the call parties from
that second call. Internally, both calls will be merged into a single call
object, with both call IDs then corresponding to the same call. This will be
visible in certain statistics (e.g. two call IDs appearing in the list, but
only one call being counted).

+ 2
- 0
include/call_interfaces.h View File

@ -38,6 +38,7 @@ struct sdp_ng_flags {
enum message_type message_type;
unsigned int code;
str call_id;
str to_call_id;
str from_tag;
str to_tag;
str via_branch;
@ -303,6 +304,7 @@ const char *call_publish_ng(ng_command_ctx_t *, const char *,
const char *call_subscribe_request_ng(ng_command_ctx_t *);
const char *call_subscribe_answer_ng(ng_command_ctx_t *);
const char *call_unsubscribe_ng(ng_command_ctx_t *);
const char *call_connect_ng(ng_command_ctx_t *);
void add_media_to_sub_list(subscription_q *q, struct call_media *media, struct call_monologue *ml);


+ 1
- 0
include/control_ng.h View File

@ -29,6 +29,7 @@ enum ng_opmode {
OP_SUBSCRIBE_REQ,
OP_SUBSCRIBE_ANS,
OP_UNSUBSCRIBE,
OP_CONNECT,
OP_COUNT, // last, number of elements
OP_OTHER = OP_COUNT // alias to above


+ 182
- 7
t/test-stats.c View File

@ -276,6 +276,13 @@ int main(void) {
"unsubscribes_ps_max 0 150\n"
"unsubscribes_ps_avg 0 150\n"
"unsubscribe_count 0 150\n"
"connect_time_min 0.000000 150\n"
"connect_time_max 0.000000 150\n"
"connect_time_avg 0.000000 150\n"
"connects_ps_min 0 150\n"
"connects_ps_max 0 150\n"
"connects_ps_avg 0 150\n"
"connect_count 0 150\n"
"call_dur 0.000000 150\n"
"average_call_dur 0.000000 150\n"
"forced_term_sess 0 150\n"
@ -734,6 +741,14 @@ int main(void) {
"0.000000\n"
"avgunsubscribedelay\n"
"0.000000\n"
"Min/Max/Avg connect processing delay\n"
"0.000000/0.000000/0.000000 sec\n"
"minconnectdelay\n"
"0.000000\n"
"maxconnectdelay\n"
"0.000000\n"
"avgconnectdelay\n"
"0.000000\n"
"Min/Max/Avg ping requests per second\n"
"0/0/0 per sec\n"
"minpingrequestrate\n"
@ -950,6 +965,14 @@ int main(void) {
"0\n"
"avgunsubscriberequestrate\n"
"0\n"
"Min/Max/Avg connect requests per second\n"
"0/0/0 per sec\n"
"minconnectrequestrate\n"
"0\n"
"maxconnectrequestrate\n"
"0\n"
"avgconnectrequestrate\n"
"0\n"
"\n"
"\n"
"}\n"
@ -1113,7 +1136,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 \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 | Conn \n"
"\n"
"]\n"
"totalpingcount\n"
@ -1170,6 +1193,8 @@ int main(void) {
"0\n"
"totalunsubcount\n"
"0\n"
"totalconncount\n"
"0\n"
"\n"
"}\n"
"interfaces\n"
@ -1379,6 +1404,13 @@ int main(void) {
"unsubscribes_ps_max 0 150\n"
"unsubscribes_ps_avg 0 150\n"
"unsubscribe_count 0 150\n"
"connect_time_min 0.000000 150\n"
"connect_time_max 0.000000 150\n"
"connect_time_avg 0.000000 150\n"
"connects_ps_min 0 150\n"
"connects_ps_max 0 150\n"
"connects_ps_avg 0 150\n"
"connect_count 0 150\n"
"call_dur 0.000000 150\n"
"average_call_dur 0.000000 150\n"
"forced_term_sess 0 150\n"
@ -1837,6 +1869,14 @@ int main(void) {
"0.000000\n"
"avgunsubscribedelay\n"
"0.000000\n"
"Min/Max/Avg connect processing delay\n"
"0.000000/0.000000/0.000000 sec\n"
"minconnectdelay\n"
"0.000000\n"
"maxconnectdelay\n"
"0.000000\n"
"avgconnectdelay\n"
"0.000000\n"
"Min/Max/Avg ping requests per second\n"
"0/0/0 per sec\n"
"minpingrequestrate\n"
@ -2053,6 +2093,14 @@ int main(void) {
"0\n"
"avgunsubscriberequestrate\n"
"0\n"
"Min/Max/Avg connect requests per second\n"
"0/0/0 per sec\n"
"minconnectrequestrate\n"
"0\n"
"maxconnectrequestrate\n"
"0\n"
"avgconnectrequestrate\n"
"0\n"
"\n"
"\n"
"}\n"
@ -2216,7 +2264,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 \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 | Conn \n"
"\n"
"]\n"
"totalpingcount\n"
@ -2273,6 +2321,8 @@ int main(void) {
"0\n"
"totalunsubcount\n"
"0\n"
"totalconncount\n"
"0\n"
"\n"
"}\n"
"interfaces\n"
@ -2479,6 +2529,13 @@ int main(void) {
"unsubscribes_ps_max 0 150\n"
"unsubscribes_ps_avg 0 150\n"
"unsubscribe_count 0 150\n"
"connect_time_min 0.000000 150\n"
"connect_time_max 0.000000 150\n"
"connect_time_avg 0.000000 150\n"
"connects_ps_min 0 150\n"
"connects_ps_max 0 150\n"
"connects_ps_avg 0 150\n"
"connect_count 0 150\n"
"call_dur 0.000000 150\n"
"average_call_dur 0.000000 150\n"
"forced_term_sess 0 150\n"
@ -2937,6 +2994,14 @@ int main(void) {
"0.000000\n"
"avgunsubscribedelay\n"
"0.000000\n"
"Min/Max/Avg connect processing delay\n"
"0.000000/0.000000/0.000000 sec\n"
"minconnectdelay\n"
"0.000000\n"
"maxconnectdelay\n"
"0.000000\n"
"avgconnectdelay\n"
"0.000000\n"
"Min/Max/Avg ping requests per second\n"
"0/0/0 per sec\n"
"minpingrequestrate\n"
@ -3153,6 +3218,14 @@ int main(void) {
"0\n"
"avgunsubscriberequestrate\n"
"0\n"
"Min/Max/Avg connect requests per second\n"
"0/0/0 per sec\n"
"minconnectrequestrate\n"
"0\n"
"maxconnectrequestrate\n"
"0\n"
"avgconnectrequestrate\n"
"0\n"
"\n"
"\n"
"}\n"
@ -3316,7 +3389,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 \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 | Conn \n"
"\n"
"]\n"
"totalpingcount\n"
@ -3373,6 +3446,8 @@ int main(void) {
"0\n"
"totalunsubcount\n"
"0\n"
"totalconncount\n"
"0\n"
"\n"
"}\n"
"interfaces\n"
@ -3598,6 +3673,13 @@ int main(void) {
"unsubscribes_ps_max 0 157\n"
"unsubscribes_ps_avg 0 157\n"
"unsubscribe_count 0 157\n"
"connect_time_min 0.000000 157\n"
"connect_time_max 0.000000 157\n"
"connect_time_avg 0.000000 157\n"
"connects_ps_min 0 157\n"
"connects_ps_max 0 157\n"
"connects_ps_avg 0 157\n"
"connect_count 0 157\n"
"call_dur 0.000000 157\n"
"average_call_dur 0.000000 157\n"
"forced_term_sess 0 157\n"
@ -4056,6 +4138,14 @@ int main(void) {
"0.000000\n"
"avgunsubscribedelay\n"
"0.000000\n"
"Min/Max/Avg connect processing delay\n"
"0.000000/0.000000/0.000000 sec\n"
"minconnectdelay\n"
"0.000000\n"
"maxconnectdelay\n"
"0.000000\n"
"avgconnectdelay\n"
"0.000000\n"
"Min/Max/Avg ping requests per second\n"
"0/0/0 per sec\n"
"minpingrequestrate\n"
@ -4272,6 +4362,14 @@ int main(void) {
"0\n"
"avgunsubscriberequestrate\n"
"0\n"
"Min/Max/Avg connect requests per second\n"
"0/0/0 per sec\n"
"minconnectrequestrate\n"
"0\n"
"maxconnectrequestrate\n"
"0\n"
"avgconnectrequestrate\n"
"0\n"
"\n"
"\n"
"}\n"
@ -4435,7 +4533,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 \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 | Conn \n"
"\n"
"]\n"
"totalpingcount\n"
@ -4492,6 +4590,8 @@ int main(void) {
"0\n"
"totalunsubcount\n"
"0\n"
"totalconncount\n"
"0\n"
"\n"
"}\n"
"interfaces\n"
@ -4706,6 +4806,13 @@ int main(void) {
"unsubscribes_ps_max 0 157\n"
"unsubscribes_ps_avg 0 157\n"
"unsubscribe_count 0 157\n"
"connect_time_min 0.000000 157\n"
"connect_time_max 0.000000 157\n"
"connect_time_avg 0.000000 157\n"
"connects_ps_min 0 157\n"
"connects_ps_max 0 157\n"
"connects_ps_avg 0 157\n"
"connect_count 0 157\n"
"call_dur 0.000000 157\n"
"average_call_dur 0.000000 157\n"
"forced_term_sess 0 157\n"
@ -5164,6 +5271,14 @@ int main(void) {
"0.000000\n"
"avgunsubscribedelay\n"
"0.000000\n"
"Min/Max/Avg connect processing delay\n"
"0.000000/0.000000/0.000000 sec\n"
"minconnectdelay\n"
"0.000000\n"
"maxconnectdelay\n"
"0.000000\n"
"avgconnectdelay\n"
"0.000000\n"
"Min/Max/Avg ping requests per second\n"
"0/0/0 per sec\n"
"minpingrequestrate\n"
@ -5380,6 +5495,14 @@ int main(void) {
"0\n"
"avgunsubscriberequestrate\n"
"0\n"
"Min/Max/Avg connect requests per second\n"
"0/0/0 per sec\n"
"minconnectrequestrate\n"
"0\n"
"maxconnectrequestrate\n"
"0\n"
"avgconnectrequestrate\n"
"0\n"
"\n"
"\n"
"}\n"
@ -5543,7 +5666,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 \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 | Conn \n"
"\n"
"]\n"
"totalpingcount\n"
@ -5600,6 +5723,8 @@ int main(void) {
"0\n"
"totalunsubcount\n"
"0\n"
"totalconncount\n"
"0\n"
"\n"
"}\n"
"interfaces\n"
@ -5809,6 +5934,13 @@ int main(void) {
"unsubscribes_ps_max 0 200\n"
"unsubscribes_ps_avg 0 200\n"
"unsubscribe_count 0 200\n"
"connect_time_min 0.000000 200\n"
"connect_time_max 0.000000 200\n"
"connect_time_avg 0.000000 200\n"
"connects_ps_min 0 200\n"
"connects_ps_max 0 200\n"
"connects_ps_avg 0 200\n"
"connect_count 0 200\n"
"call_dur 143.000000 200\n"
"average_call_dur 0.000000 200\n"
"forced_term_sess 0 200\n"
@ -6267,6 +6399,14 @@ int main(void) {
"0.000000\n"
"avgunsubscribedelay\n"
"0.000000\n"
"Min/Max/Avg connect processing delay\n"
"0.000000/0.000000/0.000000 sec\n"
"minconnectdelay\n"
"0.000000\n"
"maxconnectdelay\n"
"0.000000\n"
"avgconnectdelay\n"
"0.000000\n"
"Min/Max/Avg ping requests per second\n"
"0/0/0 per sec\n"
"minpingrequestrate\n"
@ -6483,6 +6623,14 @@ int main(void) {
"0\n"
"avgunsubscriberequestrate\n"
"0\n"
"Min/Max/Avg connect requests per second\n"
"0/0/0 per sec\n"
"minconnectrequestrate\n"
"0\n"
"maxconnectrequestrate\n"
"0\n"
"avgconnectrequestrate\n"
"0\n"
"\n"
"\n"
"}\n"
@ -6646,7 +6794,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 \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 | Conn \n"
"\n"
"]\n"
"totalpingcount\n"
@ -6703,6 +6851,8 @@ int main(void) {
"0\n"
"totalunsubcount\n"
"0\n"
"totalconncount\n"
"0\n"
"\n"
"}\n"
"interfaces\n"
@ -6914,6 +7064,13 @@ int main(void) {
"unsubscribes_ps_max 0 200\n"
"unsubscribes_ps_avg 0 200\n"
"unsubscribe_count 0 200\n"
"connect_time_min 0.000000 200\n"
"connect_time_max 0.000000 200\n"
"connect_time_avg 0.000000 200\n"
"connects_ps_min 0 200\n"
"connects_ps_max 0 200\n"
"connects_ps_avg 0 200\n"
"connect_count 0 200\n"
"call_dur 0.000000 200\n"
"average_call_dur 93.000000 200\n"
"forced_term_sess 0 200\n"
@ -7372,6 +7529,14 @@ int main(void) {
"0.000000\n"
"avgunsubscribedelay\n"
"0.000000\n"
"Min/Max/Avg connect processing delay\n"
"0.000000/0.000000/0.000000 sec\n"
"minconnectdelay\n"
"0.000000\n"
"maxconnectdelay\n"
"0.000000\n"
"avgconnectdelay\n"
"0.000000\n"
"Min/Max/Avg ping requests per second\n"
"0/0/0 per sec\n"
"minpingrequestrate\n"
@ -7588,6 +7753,14 @@ int main(void) {
"0\n"
"avgunsubscriberequestrate\n"
"0\n"
"Min/Max/Avg connect requests per second\n"
"0/0/0 per sec\n"
"minconnectrequestrate\n"
"0\n"
"maxconnectrequestrate\n"
"0\n"
"avgconnectrequestrate\n"
"0\n"
"\n"
"\n"
"}\n"
@ -7751,7 +7924,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 \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 | Conn \n"
"\n"
"]\n"
"totalpingcount\n"
@ -7808,6 +7981,8 @@ int main(void) {
"0\n"
"totalunsubcount\n"
"0\n"
"totalconncount\n"
"0\n"
"\n"
"}\n"
"interfaces\n"


+ 1
- 0
utils/rtpengine-ng-client View File

@ -60,6 +60,7 @@ my @string_opts = qw(
from-tag
to-tag
call-id
to-call-id
transport-protocol
media-address
ICE


Loading…
Cancel
Save