From 34bb030bffe0f2905ff888740fbf526923576f58 Mon Sep 17 00:00:00 2001 From: Donat Zenichev Date: Fri, 22 May 2026 22:04:58 +0200 Subject: [PATCH] MT#61856 control_ng: make NG commands consistent Instead of keeping separate arrays (essentially it's a duplication) for command strings, escaped strings or short version of commands, just create one single macro pattern, which keeps these as an array. And then using designated array initializers, use the marco pattern to generate accordingly an array of the required type (usual strings, those escaped or the short version of them). This prevents the human mistakes, or at least makes them less possible in case of new command introduction. Change-Id: I27271ed4852f95760424552ce66fc8bc340c76a3 --- daemon/control_ng.c | 81 +++++++++++++++++++++++++++------------------ 1 file changed, 49 insertions(+), 32 deletions(-) diff --git a/daemon/control_ng.c b/daemon/control_ng.c index fd93500c2..045d1e307 100644 --- a/daemon/control_ng.c +++ b/daemon/control_ng.c @@ -31,43 +31,60 @@ const char magic_load_limit_strings[__LOAD_LIMIT_MAX][64] = { [LOAD_LIMIT_LOAD] = "Load limit exceeded", [LOAD_LIMIT_BW] = "Bandwidth limit exceeded", }; + +#define NG_COMMANDS(X) \ + X(OP_PING, "ping", "ping", "Ping") \ + X(OP_OFFER, "offer", "offer", "Offer") \ + X(OP_ANSWER, "answer", "answer", "Answer") \ + X(OP_DELETE, "delete", "delete", "Delete") \ + X(OP_QUERY, "query", "query", "Query") \ + X(OP_LIST, "list", "list", "List") \ + X(OP_START_RECORDING, "start recording", "start_recording", "StartRec") \ + X(OP_STOP_RECORDING, "stop recording", "stop_recording", "StopRec") \ + X(OP_PAUSE_RECORDING, "pause recording", "pause_recording", "PauseRec") \ + X(OP_START_FORWARDING, "start forwarding", "start_forwarding", "StartFwd") \ + X(OP_STOP_FORWARDING, "stop forwarding", "stop_forwarding", "StopFwd") \ + X(OP_BLOCK_DTMF, "block DTMF", "block_DTMF", "BlkDTMF") \ + X(OP_UNBLOCK_DTMF, "unblock DTMF", "unblock_DTMF", "UnblkDTMF") \ + X(OP_BLOCK_MEDIA, "block media", "block_media", "BlkMedia") \ + X(OP_UNBLOCK_MEDIA, "unblock media", "unblock_media", "UnblkMedia") \ + X(OP_PLAY_MEDIA, "play media", "play_media", "PlayMedia") \ + X(OP_STOP_MEDIA, "stop media", "stop_media", "StopMedia") \ + X(OP_PLAY_DTMF, "play DTMF", "play_DTMF", "PlayDTMF") \ + X(OP_STATISTICS, "statistics", "statistics", "Stats") \ + X(OP_SILENCE_MEDIA, "silence media", "silence_media", "SlnMedia") \ + X(OP_UNSILENCE_MEDIA, "unsilence media", "unsilence_media", "UnslnMedia") \ + X(OP_BLOCK_SILENCE_MEDIA, "block silence media", "block_silence_media", "BlkSlnMedia") \ + X(OP_UNBLOCK_SILENCE_MEDIA, "unblock silence media", "unblock_silence_media", "UnblkSlnMedia") \ + X(OP_PUBLISH, "publish", "publish", "Pub") \ + X(OP_SUBSCRIBE_REQ, "subscribe request", "subscribe_request", "SubReq") \ + X(OP_SUBSCRIBE_ANS, "subscribe answer", "subscribe_answer", "SubAns") \ + X(OP_UNSUBSCRIBE, "unsubscribe", "unsubscribe", "Unsub") \ + X(OP_INJECT_START, "inject start", "inject_start", "InjStart") \ + X(OP_INJECT_STOP, "inject stop", "inject_stop", "InjStop") \ + X(OP_CONNECT, "connect", "connect", "Conn") \ + X(OP_CLI, "cli", "cli", "CLI") \ + X(OP_TRANSFORM, "transform", "transform", "Trnsfm") \ + X(OP_CREATE, "create", "create", "Create") \ + X(OP_CREATE_ANSWER, "create answer", "create_answer", "CrtAnsw") \ + X(OP_MESH, "mesh", "mesh", "Mesh") + const char *ng_command_strings[OP_COUNT] = { - "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", - "block silence media", "unblock silence media", - "publish", "subscribe request", - "subscribe answer", "unsubscribe", - "inject start", "inject stop", - "connect", "cli", "transform", - "create", "create answer", "mesh", +#define X(op, name, esc, short_name) [op] = name, + NG_COMMANDS(X) +#undef X }; + const char *ng_command_strings_esc[OP_COUNT] = { - "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", - "block_silence_media", "unblock_silence_media", - "publish", "subscribe_request", - "subscribe_answer", "unsubscribe", - "inject_start", "inject_stop", - "connect", "cli", "transform", - "create", "create_answer", "mesh", +#define X(op, name, esc, short_name) [op] = esc, + NG_COMMANDS(X) +#undef X }; + const char *ng_command_strings_short[OP_COUNT] = { - "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", "Mesh", +#define X(op, name, esc, short_name) [op] = short_name, + NG_COMMANDS(X) +#undef X }; typedef struct ng_ctx {