[Asterisk-cvs] asterisk/apps app_dial.c,1.109,1.110
markster at lists.digium.com
markster at lists.digium.com
Sun Nov 28 17:09:50 CST 2004
Update of /usr/cvsroot/asterisk/apps
In directory mongoose.digium.com:/tmp/cvs-serv23237/apps
Modified Files:
app_dial.c
Log Message:
Implement max # of forwards (bug #2942, different strategy)
Index: app_dial.c
===================================================================
RCS file: /usr/cvsroot/asterisk/apps/app_dial.c,v
retrieving revision 1.109
retrieving revision 1.110
diff -u -d -r1.109 -r1.110
--- app_dial.c 22 Nov 2004 22:40:06 -0000 1.109
+++ app_dial.c 28 Nov 2004 22:08:44 -0000 1.110
@@ -122,6 +122,7 @@
int allowdisconnect_in;
int allowdisconnect_out;
int forcecallerid;
+ int forwards;
struct localuser *next;
};
@@ -141,6 +142,8 @@
}
}
+#define AST_MAX_FORWARDS 8
+
#define AST_MAX_WATCHERS 256
#define HANDLE_CAUSE(blah, bleh) do { \
@@ -255,12 +258,21 @@
tech = "Local";
}
/* Before processing channel, go ahead and check for forwarding */
- if (option_verbose > 2)
- ast_verbose(VERBOSE_PREFIX_3 "Now forwarding %s to '%s/%s' (thanks to %s)\n", in->name, tech, stuff, o->chan->name);
- /* Setup parameters */
- o->chan = ast_request(tech, in->nativeformats, stuff, &cause);
+ o->forwards++;
+ if (o->forwards < AST_MAX_FORWARDS) {
+ if (option_verbose > 2)
+ ast_verbose(VERBOSE_PREFIX_3 "Now forwarding %s to '%s/%s' (thanks to %s)\n", in->name, tech, stuff, o->chan->name);
+ /* Setup parameters */
+ o->chan = ast_request(tech, in->nativeformats, stuff, &cause);
+ if (!o->chan)
+ ast_log(LOG_NOTICE, "Unable to create local channel for call forward to '%s/%s' (cause = %d)\n", tech, stuff, cause);
+ } else {
+ if (option_verbose > 2)
+ ast_verbose(VERBOSE_PREFIX_3 "Too many forwards from %s\n", o->chan->name);
+ cause = AST_CAUSE_CONGESTION;
+ o->chan = NULL;
+ }
if (!o->chan) {
- ast_log(LOG_NOTICE, "Unable to create local channel for call forward to '%s/%s' (cause = %d)\n", tech, stuff, cause);
o->stillgoing = 0;
HANDLE_CAUSE(cause, in);
} else {
@@ -804,14 +816,23 @@
stuff = tmpchan;
tech = "Local";
}
- /* Before processing channel, go ahead and check for forwarding */
- if (option_verbose > 2)
- ast_verbose(VERBOSE_PREFIX_3 "Forwarding %s to '%s/%s' (thanks to %s)\n", chan->name, tech, stuff, tmp->chan->name);
- /* Setup parameters */
- ast_hangup(tmp->chan);
- tmp->chan = ast_request(tech, chan->nativeformats, stuff, &cause);
+ tmp->forwards++;
+ if (tmp->forwards < AST_MAX_FORWARDS) {
+ if (option_verbose > 2)
+ ast_verbose(VERBOSE_PREFIX_3 "Now forwarding %s to '%s/%s' (thanks to %s)\n", chan->name, tech, stuff, tmp->chan->name);
+ ast_hangup(tmp->chan);
+ /* Setup parameters */
+ tmp->chan = ast_request(tech, chan->nativeformats, stuff, &cause);
+ if (!tmp->chan)
+ ast_log(LOG_NOTICE, "Unable to create local channel for call forward to '%s/%s' (cause = %d)\n", tech, stuff, cause);
+ } else {
+ if (option_verbose > 2)
+ ast_verbose(VERBOSE_PREFIX_3 "Too many forwards from %s\n", tmp->chan->name);
+ ast_hangup(tmp->chan);
+ tmp->chan = NULL;
+ cause = AST_CAUSE_CONGESTION;
+ }
if (!tmp->chan) {
- ast_log(LOG_NOTICE, "Unable to create local channel for call forward to '%s/%s' (cause %d)\n", tech, stuff, cause);
HANDLE_CAUSE(cause, chan);
cur = rest;
continue;
More information about the svn-commits
mailing list