dect
/
asterisk
Archived
13
0
Fork 0

- Deprecate "call-limit" in chan_sip. No other channel driver enforces call-limits

and we now have the groupcount system to implement call-limits in the dialplan. You
  can use the "setvar" option in realtime/sip.conf to set limits per device.

- Implement "callcounter" as a new option to enable the call counting we need to
  report device status to queue, manager and SIP subscriptions.

The call counter setting is now enabled in the code by setting the device call-limit
to 999. When we remove the call limit, we can simply enable this with a boolean
setting.


git-svn-id: http://svn.digium.com/svn/asterisk/trunk@89554 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
oej 2007-11-25 11:46:17 +00:00
parent 14c325e930
commit 003485a22b
3 changed files with 44 additions and 16 deletions

View File

@ -89,8 +89,14 @@ SIP changes
* SIP now adds a header to the CANCEL if the call was answered by another phone
in the same dial command, or if the new c option in dial() is used.
* The new default is that 100 Trying is not sent on REGISTER attempts as the RFC specifically
states it is not needed. For phones, however, that do require it the registertrying option
states it is not needed. For phones, however, that do require it the "registertrying" option
has been added so it can be enabled.
* The "call-limit" option is marked as deprecated. It still works in this version of
Asterisk, but will be removed in the following version. Please use the groupcount functions
in the dialplan to enforce call limits.
* A new option called "callcounter" (global/peer/user level) enables call counters needed
for better status reports needed for queues and SIP subscriptions. (Call-Limit was previously
used to enable this functionality).
IAX2 changes
------------

View File

@ -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")) {

View File

@ -23,6 +23,15 @@
; Active SIP peers will not be reconfigured
;
; ** Deprecated options **
; The "call-limit" configuation option is deprecated. It still works in
; this version of Asterisk, but will disappear in the next version.
; You are encouraged to use the dialplan groupcount functionality
; to enforce call limits instead of using this channel-specific method.
;
; You can still set limits per device in sip.conf or in a database by using
; "setvar" to set variables that can be used in the dialplan for various limits.
[general]
context=default ; Default context for incoming calls
;allowguest=no ; Allow or reject guest calls (default is yes)
@ -206,14 +215,11 @@ srvlookup=yes ; Enable DNS SRV lookups on outbound calls
; (See extensions.conf.sample for examples)
; chan_sip support two major formats for notifications: dialog-info and SIMPLE
;
; You will get more detailed reports (busy etc) if you have a call limit set
; for a device. When the call limit is filled, we will indicate busy. Note that
; you need at least 2 in order to be able to do attended transfers.
; You will get more detailed reports (busy etc) if you have a call counter enabled
; for a device.
;
; If you set the busylevel in addition to the call limit, we will indicate busy
; when we have a number of calls that matches busylevel, but still allow calls
; up to the call-limit. This allows for transfers while still having blinking
; lamps and queues understanding that a device is busy.
; If you set the busylevel, we will indicate busy when we have a number of calls that
; matches the busylevel treshold.
;
; For queues, you will need this level of detail in status reporting, regardless
; if you use SIP subscriptions. Queues and manager use the same internal interface
@ -230,12 +236,14 @@ srvlookup=yes ; Enable DNS SRV lookups on outbound calls
;notifyhold = yes ; Notify subscriptions on HOLD state (default: no)
; Turning on notifyringing and notifyhold will add a lot
; more database transactions if you are using realtime.
;limitonpeer = yes ; Apply call limits on peers only. This will improve
;limitonpeer = yes ; Apply call counting on peers only. This will improve
; status notification when you are using type=friend
; Inbound calls, that really apply to the user part
; of a friend will now be added to and compared with
; the peer limit instead of applying two call limits,
; the peer counter instead of applying two call counters,
; one for the peer and one for the user.
;callcounter = yes ; Enable call counters on devices. This can be set per
; device too.
;----------------------------------------- T.38 FAX PASSTHROUGH SUPPORT -----------------------
;
@ -561,7 +569,8 @@ srvlookup=yes ; Enable DNS SRV lookups on outbound calls
; setvar setvar
; callerid callerid
; amaflags amaflags
; call-limit call-limit
; call-limit call-limit (deprecated)
; callcounter callcounter
; allowoverlap allowoverlap
; allowsubscribe allowsubscribe
; allowtransfer allowtransfer
@ -603,9 +612,7 @@ srvlookup=yes ; Enable DNS SRV lookups on outbound calls
;fromdomain=provider.sip.domain
;host=box.provider.com
;usereqphone=yes ; This provider requires ";user=phone" on URI
;call-limit=5 ; permit only 5 simultaneous outgoing calls to this peer
; Call-limits will not be enforced on real-time peers,
; since they are not stored in-memory
;callcounter=yes ; Enable call counter
;busylevel=2 ; Signal busy at 2 or more calls
;outboundproxy=proxy.provider.domain ; send outbound signaling to this proxy, not directly to the peer
;port=80 ; The port number we want to connect to on the remote side
@ -690,11 +697,10 @@ srvlookup=yes ; Enable DNS SRV lookups on outbound calls
;canreinvite=yes ; allow RTP voice traffic to bypass Asterisk
;dtmfmode=info ; either RFC2833 or INFO for the BudgeTone
;call-limit=1 ; permit only 1 outgoing call and 1 incoming call at a time
; from the phone to asterisk
; from the phone to asterisk (deprecated)
; 1 for the explicit peer, 1 for the explicit user,
; remember that a friend equals 1 peer and 1 user in
; memory
; This will affect your subscriptions as well.
; There is no combined call counter for a "friend"
; so there's currently no way in sip.conf to limit
; to one inbound or outbound call per phone. Use