diff options
Diffstat (limited to 'channels/chan_sip.c')
-rw-r--r-- | channels/chan_sip.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index ed691c650..07601f321 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -515,6 +515,7 @@ static const struct cfsip_options { #define DEFAULT_CALLERID "asterisk" #define DEFAULT_NOTIFYMIME "application/simple-message-summary" #define DEFAULT_ALLOWGUEST TRUE +#define DEFAULT_CALLCOUNTER FALSE #define DEFAULT_SRVLOOKUP TRUE /*!< Recommended setting is ON */ #define DEFAULT_COMPACTHEADERS FALSE #define DEFAULT_TOS_SIP 0 /*!< Call signalling packets should be marked as DSCP CS3, but the default is 0 to be compatible with previous versions. */ @@ -584,6 +585,9 @@ static int global_rtpkeepalive; /*!< Send RTP keepalives */ static int global_reg_timeout; static int global_regattempts_max; /*!< Registration attempts before giving up */ static int global_allowguest; /*!< allow unauthenticated users/peers to connect? */ +static int global_callcounter; /*!< Enable call counters for all devices. This is currently enabled by setting the peer + call-limit to 999. When we remove the call-limit from the code, we can make it + with just a boolean flag in the device structure */ static int global_allowsubscribe; /*!< Flag for disabling ALL subscriptions, this is FALSE only if all peers are FALSE the global setting is in globals_flags[1] */ static unsigned int global_tos_sip; /*!< IP type of service for SIP packets */ @@ -11711,6 +11715,7 @@ static char *sip_show_settings(struct ast_cli_entry *e, int cmd, struct ast_cli_ ast_cli(a->fd, " MatchAuthUsername: %s\n", cli_yesno(global_match_auth_username)); ast_cli(a->fd, " Allow unknown access: %s\n", cli_yesno(global_allowguest)); ast_cli(a->fd, " Allow subscriptions: %s\n", cli_yesno(ast_test_flag(&global_flags[1], SIP_PAGE2_ALLOWSUBSCRIBE))); + ast_cli(a->fd, " Enable call counters: %s\n", cli_yesno(global_callcounter)); ast_cli(a->fd, " Allow overlap dialing: %s\n", cli_yesno(ast_test_flag(&global_flags[1], SIP_PAGE2_ALLOWOVERLAP))); ast_cli(a->fd, " Promsic. redir: %s\n", cli_yesno(ast_test_flag(&global_flags[0], SIP_PROMISCREDIR))); ast_cli(a->fd, " SIP domain support: %s\n", cli_yesno(!AST_LIST_EMPTY(&domain_list))); @@ -17469,6 +17474,8 @@ static struct sip_user *build_user(const char *name, struct ast_variable *v, int user->allowtransfer = global_allowtransfer; user->maxcallbitrate = default_maxcallbitrate; user->autoframing = global_autoframing; + if (global_callcounter) + user->call_limit=999; user->prefs = default_prefs; /* set default context */ strcpy(user->context, default_context); @@ -17516,6 +17523,8 @@ static struct sip_user *build_user(const char *name, struct ast_variable *v, int ast_copy_string(user->mohsuggest, v->value, sizeof(user->mohsuggest)); } else if (!strcasecmp(v->name, "accountcode")) { ast_copy_string(user->accountcode, v->value, sizeof(user->accountcode)); + } else if (!strcasecmp(v->name, "callcounter")) { + user->call_limit = ast_strue(v->value) ? 999 : 0; } else if (!strcasecmp(v->name, "call-limit")) { user->call_limit = atoi(v->value); if (user->call_limit < 0) @@ -17585,6 +17594,8 @@ static void set_peer_defaults(struct sip_peer *peer) peer->rtpkeepalive = global_rtpkeepalive; peer->allowtransfer = global_allowtransfer; peer->autoframing = global_autoframing; + if (global_callcounter) + peer->call_limit=999; strcpy(peer->vmexten, default_vmexten); peer->secret[0] = '\0'; peer->md5secret[0] = '\0'; @@ -17810,6 +17821,8 @@ static struct sip_peer *build_peer(const char *name, struct ast_variable *v, str ast_copy_string(peer->regexten, v->value, sizeof(peer->regexten)); } else if (!strcasecmp(v->name, "callbackextension")) { ast_copy_string(callback, v->value, sizeof(callback)); + } else if (!strcasecmp(v->name, "callcounter")) { + peer->call_limit = ast_strue(v->value) ? 999 : 0; } else if (!strcasecmp(v->name, "call-limit")) { peer->call_limit = atoi(v->value); if (peer->call_limit < 0) @@ -18057,6 +18070,7 @@ static int reload_config(enum channelreloadreason reason) autocreatepeer = DEFAULT_AUTOCREATEPEER; global_autoframing = 0; global_allowguest = DEFAULT_ALLOWGUEST; + global_callcounter = DEFAULT_CALLCOUNTER; global_match_auth_username = FALSE; /*!< Match auth username if available instead of From: Default off. */ global_rtptimeout = 0; global_rtpholdtimeout = 0; @@ -18112,6 +18126,8 @@ static int reload_config(enum channelreloadreason reason) ast_copy_string(default_context, v->value, sizeof(default_context)); } else if (!strcasecmp(v->name, "subscribecontext")) { ast_copy_string(default_subscribecontext, v->value, sizeof(default_subscribecontext)); + } else if (!strcasecmp(v->name, "callcounter")) { + global_callcounter = ast_true(v->value) ? 1 : 0; } else if (!strcasecmp(v->name, "allowguest")) { global_allowguest = ast_true(v->value) ? 1 : 0; } else if (!strcasecmp(v->name, "realm")) { |