From 87ea1449359b9725d644a7393e0f325d6176111c Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Tue, 24 Jan 2023 10:20:08 -0500 Subject: [PATCH] MT#56469 add pause_recording method Change-Id: Iaffb2120be0ad4b7241913aacd7e7e68c9e666d2 --- README.md | 17 +++- daemon/call_interfaces.c | 28 ++++++ daemon/control_ng.c | 14 ++- daemon/recording.c | 4 + include/call_interfaces.h | 1 + include/control_ng.h | 1 + include/recording.h | 1 + t/test-stats.c | 189 ++++++++++++++++++++++++++++++++++++-- utils/rtpengine-ng-client | 1 + 9 files changed, 243 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 9c9dd99d4..aab2604ff 100644 --- a/README.md +++ b/README.md @@ -635,6 +635,7 @@ a string and determines the type of message. Currently the following commands ar * query * start recording * stop recording +* pause recording * block DTMF * unblock DTMF * block media @@ -2090,11 +2091,23 @@ as an output file. Note that a filename extension will not be added. `stop recording` Message ------------------------- -The `stop recording` message must contain the key `call-id` as defined above. The reply dictionary contains -no additional keys. +The `stop recording` message must contain the key `call-id` as defined above. +The reply dictionary contains no additional keys. See below under `pause +recording` for another alternative usage for this message. Disables call recording for the call. This can be sent during a call to immediately stop recording it. +`pause recording` Message +------------------------- + +Identical to `stop recording` except that it instructs the recording daemon not +to close the recording file, but instead leave it open so that recording can +later be resumed via another `start recording` message. + +Alternatively the `stop recording` message can be used if either the string +`pause` is given in the `flags` list, or if the dictionary contains the key +`pause=yes`. + `block DTMF` and `unblock DTMF` Messages ---------------------------------------- diff --git a/daemon/call_interfaces.c b/daemon/call_interfaces.c index fd32fbdb5..0751394ad 100644 --- a/daemon/call_interfaces.c +++ b/daemon/call_interfaces.c @@ -2419,7 +2419,35 @@ const char *call_start_recording_ng(bencode_item_t *input, bencode_item_t *outpu } +static void pause_recording_fn(bencode_item_t *input, struct call *call) { + call->recording_on = 0; + recording_pause(call); +} +const char *call_pause_recording_ng(bencode_item_t *input, bencode_item_t *output) { + return call_recording_common_ng(input, output, pause_recording_fn); +} + + static void stop_recording_fn(bencode_item_t *input, struct call *call) { + // support alternative usage for "pause" call: either `pause=yes` ... + str pause; + if (bencode_dictionary_get_str(input, "pause", &pause)) { + if (!str_cmp(&pause, "yes") || !str_cmp(&pause, "on") || !str_cmp(&pause, "true")) { + pause_recording_fn(input, call); + return; + } + } + // ... or `flags=[pause]` + bencode_item_t *item = bencode_dictionary_get(input, "flags"); + if (item && item->type == BENCODE_LIST && item->child) { + for (bencode_item_t *child = item->child; child; child = child->sibling) { + if (bencode_strcmp(child, "pause") == 0) { + pause_recording_fn(input, call); + return; + } + } + } + call->recording_on = 0; recording_stop(call); } diff --git a/daemon/control_ng.c b/daemon/control_ng.c index 722d4b627..118ed4758 100644 --- a/daemon/control_ng.c +++ b/daemon/control_ng.c @@ -35,16 +35,18 @@ const char magic_load_limit_strings[__LOAD_LIMIT_MAX][64] = { [LOAD_LIMIT_BW] = "Bandwidth limit exceeded", }; const char *ng_command_strings[NGC_COUNT] = { - "ping", "offer", "answer", "delete", "query", "list", "start recording", - "stop recording", "start forwarding", "stop forwarding", "block DTMF", + "ping", "offer", "answer", "delete", "query", "list", + "start recording", "stop recording", "pause recording", + "start forwarding", "stop forwarding", "block DTMF", "unblock DTMF", "block media", "unblock media", "play media", "stop media", "play DTMF", "statistics", "silence media", "unsilence media", "publish", "subscribe request", "subscribe answer", "unsubscribe", }; const char *ng_command_strings_short[NGC_COUNT] = { - "Ping", "Offer", "Answer", "Delete", "Query", "List", "StartRec", - "StopRec", "StartFwd", "StopFwd", "BlkDTMF", + "Ping", "Offer", "Answer", "Delete", "Query", "List", + "StartRec", "StopRec", "PauseRec", + "StartFwd", "StopFwd", "BlkDTMF", "UnblkDTMF", "BlkMedia", "UnblkMedia", "PlayMedia", "StopMedia", "PlayDTMF", "Stats", "SlnMedia", "UnslnMedia", "Pub", "SubReq", "SubAns", "Unsub", @@ -257,6 +259,10 @@ int control_ng_process(str *buf, const endpoint_t *sin, char *addr, errstr = call_stop_recording_ng(dict, resp); command = NGC_STOP_RECORDING; break; + case CSH_LOOKUP("pause recording"): + errstr = call_pause_recording_ng(dict, resp); + command = NGC_PAUSE_RECORDING; + break; case CSH_LOOKUP("start forwarding"): errstr = call_start_forwarding_ng(dict, resp); command = NGC_START_FORWARDING; diff --git a/daemon/recording.c b/daemon/recording.c index e903356f2..be548e2e3 100644 --- a/daemon/recording.c +++ b/daemon/recording.c @@ -398,6 +398,10 @@ void recording_stop(struct call *call) { ilog(LOG_NOTICE, "Turning off call recording."); recording_finish(call); } +void recording_pause(struct call *call) { + ilog(LOG_NOTICE, "Pausing call recording."); + recording_update_flags(call, true); +} /** * diff --git a/include/call_interfaces.h b/include/call_interfaces.h index d1e8bd79b..2d934042d 100644 --- a/include/call_interfaces.h +++ b/include/call_interfaces.h @@ -208,6 +208,7 @@ const char *call_query_ng(bencode_item_t *, bencode_item_t *); const char *call_list_ng(bencode_item_t *, bencode_item_t *); const char *call_start_recording_ng(bencode_item_t *, bencode_item_t *); const char *call_stop_recording_ng(bencode_item_t *, bencode_item_t *); +const char *call_pause_recording_ng(bencode_item_t *, bencode_item_t *); const char *call_start_forwarding_ng(bencode_item_t *, bencode_item_t *); const char *call_stop_forwarding_ng(bencode_item_t *, bencode_item_t *); const char *call_block_dtmf_ng(bencode_item_t *, bencode_item_t *); diff --git a/include/control_ng.h b/include/control_ng.h index 01549cc89..61b84615d 100644 --- a/include/control_ng.h +++ b/include/control_ng.h @@ -12,6 +12,7 @@ enum ng_command { NGC_LIST, NGC_START_RECORDING, NGC_STOP_RECORDING, + NGC_PAUSE_RECORDING, NGC_START_FORWARDING, NGC_STOP_FORWARDING, NGC_BLOCK_DTMF, diff --git a/include/recording.h b/include/recording.h index 0b30fa914..ac64ef87a 100644 --- a/include/recording.h +++ b/include/recording.h @@ -122,6 +122,7 @@ void update_metadata_call(struct call *call, str *metadata); void update_metadata_monologue(struct call_monologue *ml, str *metadata); void recording_start(struct call *call, const char *prefix, str *output_dest); +void recording_pause(struct call *call); void recording_stop(struct call *call); diff --git a/t/test-stats.c b/t/test-stats.c index d78a73cb4..87a4061ea 100644 --- a/t/test-stats.c +++ b/t/test-stats.c @@ -132,6 +132,13 @@ int main(void) { "stop recordings_ps_max 0 150\n" "stop recordings_ps_avg 0 150\n" "stop recording_count 0 150\n" + "pause recording_time_min 0.000000 150\n" + "pause recording_time_max 0.000000 150\n" + "pause recording_time_avg 0.000000 150\n" + "pause recordings_ps_min 0 150\n" + "pause recordings_ps_max 0 150\n" + "pause recordings_ps_avg 0 150\n" + "pause recording_count 0 150\n" "start forwarding_time_min 0.000000 150\n" "start forwarding_time_max 0.000000 150\n" "start forwarding_time_avg 0.000000 150\n" @@ -550,6 +557,14 @@ int main(void) { "0.000000\n" "avgstop recordingdelay\n" "0.000000\n" + "Min/Max/Avg pause recording processing delay\n" + "0.000000/0.000000/0.000000 sec\n" + "minpause recordingdelay\n" + "0.000000\n" + "maxpause recordingdelay\n" + "0.000000\n" + "avgpause recordingdelay\n" + "0.000000\n" "Min/Max/Avg start forwarding processing delay\n" "0.000000/0.000000/0.000000 sec\n" "minstart forwardingdelay\n" @@ -742,6 +757,14 @@ int main(void) { "0\n" "avgstop recordingrequestrate\n" "0\n" + "Min/Max/Avg pause recording requests per second\n" + "0/0/0 per sec\n" + "minpause recordingrequestrate\n" + "0\n" + "maxpause recordingrequestrate\n" + "0\n" + "avgpause recordingrequestrate\n" + "0\n" "Min/Max/Avg start forwarding requests per second\n" "0/0/0 per sec\n" "minstart forwardingrequestrate\n" @@ -1033,7 +1056,7 @@ int main(void) { "{\n" "proxies\n" "[\n" - " Proxy | Ping | Offer | Answer | Delete | Query | List | StartRec | StopRec | StartFwd | StopFwd | BlkDTMF | UnblkDTMF | BlkMedia | UnblkMedia | PlayMedia | StopMedia | PlayDTMF | Stats | SlnMedia | UnslnMedia | 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 | Pub | SubReq | SubAns | Unsub \n" "\n" "]\n" "totalpingcount\n" @@ -1052,6 +1075,8 @@ int main(void) { "0\n" "totalstopreccount\n" "0\n" + "totalpausereccount\n" + "0\n" "totalstartfwdcount\n" "0\n" "totalstopfwdcount\n" @@ -1160,6 +1185,13 @@ int main(void) { "stop recordings_ps_max 0 150\n" "stop recordings_ps_avg 0 150\n" "stop recording_count 0 150\n" + "pause recording_time_min 0.000000 150\n" + "pause recording_time_max 0.000000 150\n" + "pause recording_time_avg 0.000000 150\n" + "pause recordings_ps_min 0 150\n" + "pause recordings_ps_max 0 150\n" + "pause recordings_ps_avg 0 150\n" + "pause recording_count 0 150\n" "start forwarding_time_min 0.000000 150\n" "start forwarding_time_max 0.000000 150\n" "start forwarding_time_avg 0.000000 150\n" @@ -1578,6 +1610,14 @@ int main(void) { "0.000000\n" "avgstop recordingdelay\n" "0.000000\n" + "Min/Max/Avg pause recording processing delay\n" + "0.000000/0.000000/0.000000 sec\n" + "minpause recordingdelay\n" + "0.000000\n" + "maxpause recordingdelay\n" + "0.000000\n" + "avgpause recordingdelay\n" + "0.000000\n" "Min/Max/Avg start forwarding processing delay\n" "0.000000/0.000000/0.000000 sec\n" "minstart forwardingdelay\n" @@ -1770,6 +1810,14 @@ int main(void) { "0\n" "avgstop recordingrequestrate\n" "0\n" + "Min/Max/Avg pause recording requests per second\n" + "0/0/0 per sec\n" + "minpause recordingrequestrate\n" + "0\n" + "maxpause recordingrequestrate\n" + "0\n" + "avgpause recordingrequestrate\n" + "0\n" "Min/Max/Avg start forwarding requests per second\n" "0/0/0 per sec\n" "minstart forwardingrequestrate\n" @@ -2061,7 +2109,7 @@ int main(void) { "{\n" "proxies\n" "[\n" - " Proxy | Ping | Offer | Answer | Delete | Query | List | StartRec | StopRec | StartFwd | StopFwd | BlkDTMF | UnblkDTMF | BlkMedia | UnblkMedia | PlayMedia | StopMedia | PlayDTMF | Stats | SlnMedia | UnslnMedia | 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 | Pub | SubReq | SubAns | Unsub \n" "\n" "]\n" "totalpingcount\n" @@ -2080,6 +2128,8 @@ int main(void) { "0\n" "totalstopreccount\n" "0\n" + "totalpausereccount\n" + "0\n" "totalstartfwdcount\n" "0\n" "totalstopfwdcount\n" @@ -2185,6 +2235,13 @@ int main(void) { "stop recordings_ps_max 0 150\n" "stop recordings_ps_avg 0 150\n" "stop recording_count 0 150\n" + "pause recording_time_min 0.000000 150\n" + "pause recording_time_max 0.000000 150\n" + "pause recording_time_avg 0.000000 150\n" + "pause recordings_ps_min 0 150\n" + "pause recordings_ps_max 0 150\n" + "pause recordings_ps_avg 0 150\n" + "pause recording_count 0 150\n" "start forwarding_time_min 0.000000 150\n" "start forwarding_time_max 0.000000 150\n" "start forwarding_time_avg 0.000000 150\n" @@ -2603,6 +2660,14 @@ int main(void) { "0.000000\n" "avgstop recordingdelay\n" "0.000000\n" + "Min/Max/Avg pause recording processing delay\n" + "0.000000/0.000000/0.000000 sec\n" + "minpause recordingdelay\n" + "0.000000\n" + "maxpause recordingdelay\n" + "0.000000\n" + "avgpause recordingdelay\n" + "0.000000\n" "Min/Max/Avg start forwarding processing delay\n" "0.000000/0.000000/0.000000 sec\n" "minstart forwardingdelay\n" @@ -2795,6 +2860,14 @@ int main(void) { "0\n" "avgstop recordingrequestrate\n" "0\n" + "Min/Max/Avg pause recording requests per second\n" + "0/0/0 per sec\n" + "minpause recordingrequestrate\n" + "0\n" + "maxpause recordingrequestrate\n" + "0\n" + "avgpause recordingrequestrate\n" + "0\n" "Min/Max/Avg start forwarding requests per second\n" "0/0/0 per sec\n" "minstart forwardingrequestrate\n" @@ -3086,7 +3159,7 @@ int main(void) { "{\n" "proxies\n" "[\n" - " Proxy | Ping | Offer | Answer | Delete | Query | List | StartRec | StopRec | StartFwd | StopFwd | BlkDTMF | UnblkDTMF | BlkMedia | UnblkMedia | PlayMedia | StopMedia | PlayDTMF | Stats | SlnMedia | UnslnMedia | 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 | Pub | SubReq | SubAns | Unsub \n" "\n" "]\n" "totalpingcount\n" @@ -3105,6 +3178,8 @@ int main(void) { "0\n" "totalstopreccount\n" "0\n" + "totalpausereccount\n" + "0\n" "totalstartfwdcount\n" "0\n" "totalstopfwdcount\n" @@ -3223,6 +3298,13 @@ int main(void) { "stop recordings_ps_max 0 157\n" "stop recordings_ps_avg 0 157\n" "stop recording_count 0 157\n" + "pause recording_time_min 0.000000 157\n" + "pause recording_time_max 0.000000 157\n" + "pause recording_time_avg 0.000000 157\n" + "pause recordings_ps_min 0 157\n" + "pause recordings_ps_max 0 157\n" + "pause recordings_ps_avg 0 157\n" + "pause recording_count 0 157\n" "start forwarding_time_min 0.000000 157\n" "start forwarding_time_max 0.000000 157\n" "start forwarding_time_avg 0.000000 157\n" @@ -3641,6 +3723,14 @@ int main(void) { "0.000000\n" "avgstop recordingdelay\n" "0.000000\n" + "Min/Max/Avg pause recording processing delay\n" + "0.000000/0.000000/0.000000 sec\n" + "minpause recordingdelay\n" + "0.000000\n" + "maxpause recordingdelay\n" + "0.000000\n" + "avgpause recordingdelay\n" + "0.000000\n" "Min/Max/Avg start forwarding processing delay\n" "0.000000/0.000000/0.000000 sec\n" "minstart forwardingdelay\n" @@ -3833,6 +3923,14 @@ int main(void) { "0\n" "avgstop recordingrequestrate\n" "0\n" + "Min/Max/Avg pause recording requests per second\n" + "0/0/0 per sec\n" + "minpause recordingrequestrate\n" + "0\n" + "maxpause recordingrequestrate\n" + "0\n" + "avgpause recordingrequestrate\n" + "0\n" "Min/Max/Avg start forwarding requests per second\n" "0/0/0 per sec\n" "minstart forwardingrequestrate\n" @@ -4124,7 +4222,7 @@ int main(void) { "{\n" "proxies\n" "[\n" - " Proxy | Ping | Offer | Answer | Delete | Query | List | StartRec | StopRec | StartFwd | StopFwd | BlkDTMF | UnblkDTMF | BlkMedia | UnblkMedia | PlayMedia | StopMedia | PlayDTMF | Stats | SlnMedia | UnslnMedia | 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 | Pub | SubReq | SubAns | Unsub \n" "\n" "]\n" "totalpingcount\n" @@ -4143,6 +4241,8 @@ int main(void) { "0\n" "totalstopreccount\n" "0\n" + "totalpausereccount\n" + "0\n" "totalstartfwdcount\n" "0\n" "totalstopfwdcount\n" @@ -4256,6 +4356,13 @@ int main(void) { "stop recordings_ps_max 0 157\n" "stop recordings_ps_avg 0 157\n" "stop recording_count 0 157\n" + "pause recording_time_min 0.000000 157\n" + "pause recording_time_max 0.000000 157\n" + "pause recording_time_avg 0.000000 157\n" + "pause recordings_ps_min 0 157\n" + "pause recordings_ps_max 0 157\n" + "pause recordings_ps_avg 0 157\n" + "pause recording_count 0 157\n" "start forwarding_time_min 0.000000 157\n" "start forwarding_time_max 0.000000 157\n" "start forwarding_time_avg 0.000000 157\n" @@ -4674,6 +4781,14 @@ int main(void) { "0.000000\n" "avgstop recordingdelay\n" "0.000000\n" + "Min/Max/Avg pause recording processing delay\n" + "0.000000/0.000000/0.000000 sec\n" + "minpause recordingdelay\n" + "0.000000\n" + "maxpause recordingdelay\n" + "0.000000\n" + "avgpause recordingdelay\n" + "0.000000\n" "Min/Max/Avg start forwarding processing delay\n" "0.000000/0.000000/0.000000 sec\n" "minstart forwardingdelay\n" @@ -4866,6 +4981,14 @@ int main(void) { "0\n" "avgstop recordingrequestrate\n" "0\n" + "Min/Max/Avg pause recording requests per second\n" + "0/0/0 per sec\n" + "minpause recordingrequestrate\n" + "0\n" + "maxpause recordingrequestrate\n" + "0\n" + "avgpause recordingrequestrate\n" + "0\n" "Min/Max/Avg start forwarding requests per second\n" "0/0/0 per sec\n" "minstart forwardingrequestrate\n" @@ -5157,7 +5280,7 @@ int main(void) { "{\n" "proxies\n" "[\n" - " Proxy | Ping | Offer | Answer | Delete | Query | List | StartRec | StopRec | StartFwd | StopFwd | BlkDTMF | UnblkDTMF | BlkMedia | UnblkMedia | PlayMedia | StopMedia | PlayDTMF | Stats | SlnMedia | UnslnMedia | 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 | Pub | SubReq | SubAns | Unsub \n" "\n" "]\n" "totalpingcount\n" @@ -5176,6 +5299,8 @@ int main(void) { "0\n" "totalstopreccount\n" "0\n" + "totalpausereccount\n" + "0\n" "totalstartfwdcount\n" "0\n" "totalstopfwdcount\n" @@ -5284,6 +5409,13 @@ int main(void) { "stop recordings_ps_max 0 200\n" "stop recordings_ps_avg 0 200\n" "stop recording_count 0 200\n" + "pause recording_time_min 0.000000 200\n" + "pause recording_time_max 0.000000 200\n" + "pause recording_time_avg 0.000000 200\n" + "pause recordings_ps_min 0 200\n" + "pause recordings_ps_max 0 200\n" + "pause recordings_ps_avg 0 200\n" + "pause recording_count 0 200\n" "start forwarding_time_min 0.000000 200\n" "start forwarding_time_max 0.000000 200\n" "start forwarding_time_avg 0.000000 200\n" @@ -5702,6 +5834,14 @@ int main(void) { "0.000000\n" "avgstop recordingdelay\n" "0.000000\n" + "Min/Max/Avg pause recording processing delay\n" + "0.000000/0.000000/0.000000 sec\n" + "minpause recordingdelay\n" + "0.000000\n" + "maxpause recordingdelay\n" + "0.000000\n" + "avgpause recordingdelay\n" + "0.000000\n" "Min/Max/Avg start forwarding processing delay\n" "0.000000/0.000000/0.000000 sec\n" "minstart forwardingdelay\n" @@ -5894,6 +6034,14 @@ int main(void) { "0\n" "avgstop recordingrequestrate\n" "0\n" + "Min/Max/Avg pause recording requests per second\n" + "0/0/0 per sec\n" + "minpause recordingrequestrate\n" + "0\n" + "maxpause recordingrequestrate\n" + "0\n" + "avgpause recordingrequestrate\n" + "0\n" "Min/Max/Avg start forwarding requests per second\n" "0/0/0 per sec\n" "minstart forwardingrequestrate\n" @@ -6185,7 +6333,7 @@ int main(void) { "{\n" "proxies\n" "[\n" - " Proxy | Ping | Offer | Answer | Delete | Query | List | StartRec | StopRec | StartFwd | StopFwd | BlkDTMF | UnblkDTMF | BlkMedia | UnblkMedia | PlayMedia | StopMedia | PlayDTMF | Stats | SlnMedia | UnslnMedia | 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 | Pub | SubReq | SubAns | Unsub \n" "\n" "]\n" "totalpingcount\n" @@ -6204,6 +6352,8 @@ int main(void) { "0\n" "totalstopreccount\n" "0\n" + "totalpausereccount\n" + "0\n" "totalstartfwdcount\n" "0\n" "totalstopfwdcount\n" @@ -6314,6 +6464,13 @@ int main(void) { "stop recordings_ps_max 0 200\n" "stop recordings_ps_avg 0 200\n" "stop recording_count 0 200\n" + "pause recording_time_min 0.000000 200\n" + "pause recording_time_max 0.000000 200\n" + "pause recording_time_avg 0.000000 200\n" + "pause recordings_ps_min 0 200\n" + "pause recordings_ps_max 0 200\n" + "pause recordings_ps_avg 0 200\n" + "pause recording_count 0 200\n" "start forwarding_time_min 0.000000 200\n" "start forwarding_time_max 0.000000 200\n" "start forwarding_time_avg 0.000000 200\n" @@ -6732,6 +6889,14 @@ int main(void) { "0.000000\n" "avgstop recordingdelay\n" "0.000000\n" + "Min/Max/Avg pause recording processing delay\n" + "0.000000/0.000000/0.000000 sec\n" + "minpause recordingdelay\n" + "0.000000\n" + "maxpause recordingdelay\n" + "0.000000\n" + "avgpause recordingdelay\n" + "0.000000\n" "Min/Max/Avg start forwarding processing delay\n" "0.000000/0.000000/0.000000 sec\n" "minstart forwardingdelay\n" @@ -6924,6 +7089,14 @@ int main(void) { "0\n" "avgstop recordingrequestrate\n" "0\n" + "Min/Max/Avg pause recording requests per second\n" + "0/0/0 per sec\n" + "minpause recordingrequestrate\n" + "0\n" + "maxpause recordingrequestrate\n" + "0\n" + "avgpause recordingrequestrate\n" + "0\n" "Min/Max/Avg start forwarding requests per second\n" "0/0/0 per sec\n" "minstart forwardingrequestrate\n" @@ -7215,7 +7388,7 @@ int main(void) { "{\n" "proxies\n" "[\n" - " Proxy | Ping | Offer | Answer | Delete | Query | List | StartRec | StopRec | StartFwd | StopFwd | BlkDTMF | UnblkDTMF | BlkMedia | UnblkMedia | PlayMedia | StopMedia | PlayDTMF | Stats | SlnMedia | UnslnMedia | 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 | Pub | SubReq | SubAns | Unsub \n" "\n" "]\n" "totalpingcount\n" @@ -7234,6 +7407,8 @@ int main(void) { "0\n" "totalstopreccount\n" "0\n" + "totalpausereccount\n" + "0\n" "totalstartfwdcount\n" "0\n" "totalstopfwdcount\n" diff --git a/utils/rtpengine-ng-client b/utils/rtpengine-ng-client index d77e5fff4..e8e698b62 100755 --- a/utils/rtpengine-ng-client +++ b/utils/rtpengine-ng-client @@ -48,6 +48,7 @@ my @flags = qw( no-jitter-buffer passthrough no-passthrough + pause ); my @string_opts = qw(