From 012bcc4b2172a96f9eb753b2610eeaad5ac0b4a6 Mon Sep 17 00:00:00 2001 From: smititelu Date: Mon, 23 Nov 2015 17:14:00 +0100 Subject: [PATCH] Add 'rtpengine-ctl list maxopenfiles' command --- daemon/cli.c | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/daemon/cli.c b/daemon/cli.c index 763f8d3fb..ba3d1007e 100644 --- a/daemon/cli.c +++ b/daemon/cli.c @@ -110,6 +110,30 @@ static void cli_incoming_list_maxsessions(char* buffer, int len, struct callmast /* don't lock anything while reading the value */ printlen = snprintf(replybuffer,(outbufend-replybuffer), "Maximum sessions configured on rtpengine: %d\n", m->conf.max_sessions); ADJUSTLEN(printlen,outbufend,replybuffer); + + return ; +} + +static void cli_incoming_list_maxopenfiles(char* buffer, int len, struct callmaster* m, char* replybuffer, const char* outbufend) { + int printlen=0; + struct rlimit rlim; + pid_t pid = getpid(); + + if (getrlimit(RLIMIT_NOFILE, &rlim) == -1) { + printlen = snprintf(replybuffer,(outbufend-replybuffer), "Fail getting rtpengine configured limits; cat /proc/%u/limits\n", pid); + ADJUSTLEN(printlen,outbufend,replybuffer); + return ; + } + + if (rlim.rlim_cur == RLIM_INFINITY) { + printlen = snprintf(replybuffer,(outbufend-replybuffer), "Maximum open-files configured on rtpengine: infinite; cat /proc/%u/limits\n", pid); + ADJUSTLEN(printlen,outbufend,replybuffer); + } else { + printlen = snprintf(replybuffer,(outbufend-replybuffer), "Maximum open-files configured on rtpengine: %lld; cat /proc/%u/limits\n", (long long) rlim.rlim_cur, pid); + ADJUSTLEN(printlen,outbufend,replybuffer); + } + + return ; } static void cli_incoming_list_callid(char* buffer, int len, struct callmaster* m, char* replybuffer, const char* outbufend) { @@ -220,7 +244,7 @@ static void cli_incoming_list_callid(char* buffer, int len, struct callmaster* m obj_put(c); } -static void cli_incoming_set_max_open_files(char* buffer, int len, struct callmaster* m, char* replybuffer, const char* outbufend) { +static void cli_incoming_set_maxopenfiles(char* buffer, int len, struct callmaster* m, char* replybuffer, const char* outbufend) { int printlen = 0; unsigned int open_files_num; str open_files; @@ -302,6 +326,7 @@ static void cli_incoming_list(char* buffer, int len, struct callmaster* m, char* static const char* LIST_SESSIONS = "sessions"; static const char* LIST_SESSION = "session"; static const char* LIST_TOTALS = "totals"; + static const char* LIST_MAX_OPEN_FILES = "maxopenfiles"; static const char* LIST_MAX_SESSIONS = "maxsessions"; if (len<=1) { @@ -338,6 +363,8 @@ static void cli_incoming_list(char* buffer, int len, struct callmaster* m, char* cli_incoming_list_totals(buffer+strlen(LIST_TOTALS), len-strlen(LIST_TOTALS), m, replybuffer, outbufend); } else if (len>=strlen(LIST_MAX_SESSIONS) && strncmp(buffer,LIST_MAX_SESSIONS,strlen(LIST_MAX_SESSIONS)) == 0) { cli_incoming_list_maxsessions(buffer+strlen(LIST_MAX_SESSIONS), len-strlen(LIST_MAX_SESSIONS), m, replybuffer, outbufend); + } else if (len>=strlen(LIST_MAX_OPEN_FILES) && strncmp(buffer,LIST_MAX_OPEN_FILES,strlen(LIST_MAX_OPEN_FILES)) == 0) { + cli_incoming_list_maxopenfiles(buffer+strlen(LIST_MAX_OPEN_FILES), len-strlen(LIST_MAX_OPEN_FILES), m, replybuffer, outbufend); } else { printlen = snprintf(replybuffer, outbufend-replybuffer, "%s:%s\n", "Unknown 'list' command", buffer); ADJUSTLEN(printlen,outbufend,replybuffer); @@ -347,7 +374,7 @@ static void cli_incoming_list(char* buffer, int len, struct callmaster* m, char* static void cli_incoming_set(char* buffer, int len, struct callmaster* m, char* replybuffer, const char* outbufend) { int printlen=0; - static const char* SET_OPEN_FILES = "max-open-files"; + static const char* SET_MAX_OPEN_FILES = "maxopenfiles"; static const char* SET_MAX_SESSIONS = "maxsessions"; if (len<=1) { @@ -357,8 +384,8 @@ static void cli_incoming_set(char* buffer, int len, struct callmaster* m, char* } ++buffer; --len; // one space - if (len>=strlen(SET_OPEN_FILES) && strncmp(buffer,SET_OPEN_FILES,strlen(SET_OPEN_FILES)) == 0) { - cli_incoming_set_max_open_files(buffer+strlen(SET_OPEN_FILES), len-strlen(SET_OPEN_FILES), m, replybuffer, outbufend); + if (len>=strlen(SET_MAX_OPEN_FILES) && strncmp(buffer,SET_MAX_OPEN_FILES,strlen(SET_MAX_OPEN_FILES)) == 0) { + cli_incoming_set_maxopenfiles(buffer+strlen(SET_MAX_OPEN_FILES), len-strlen(SET_MAX_OPEN_FILES), m, replybuffer, outbufend); } else if (len>=strlen(SET_MAX_SESSIONS) && strncmp(buffer,SET_MAX_SESSIONS,strlen(SET_MAX_SESSIONS)) == 0) { cli_incoming_set_maxsessions(buffer+strlen(SET_MAX_SESSIONS), len-strlen(SET_MAX_SESSIONS), m, replybuffer, outbufend); } else {