[asterisk-commits] twilson: branch 1.6.1 r168981 - in /branches/1.6.1: ./ main/features.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Fri Jan 16 16:59:42 CST 2009


Author: twilson
Date: Fri Jan 16 16:59:41 2009
New Revision: 168981

URL: http://svn.digium.com/svn-view/asterisk?view=rev&rev=168981
Log:
Merged revisions 168941 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/trunk

................
  r168941 | twilson | 2009-01-16 16:16:23 -0600 (Fri, 16 Jan 2009) | 19 lines
  
  Merged revisions 168716 via svnmerge from 
  https://origsvn.digium.com/svn/asterisk/branches/1.4
  
  ........
    r168716 | twilson | 2009-01-15 12:22:49 -0600 (Thu, 15 Jan 2009) | 12 lines
    
    Convert call to park_call_full to masq_park_call_announce
    
    Since we removed the AST_PBX_KEEPALIVE return value, we need to use masqueraded
    parking, otherwise we will try to call ast_hangup() in __pbx_run() and in
    do_parking_thread() and then promptly crash.
    (closes issue #14215)
    	Reported by: waverly360	
    	Tested by: otherwiseguy
    (closes issue #14228)
    	Reported by: kobaz
    	Tested by: otherwiseguy
  ........
................

Modified:
    branches/1.6.1/   (props changed)
    branches/1.6.1/main/features.c

Propchange: branches/1.6.1/
------------------------------------------------------------------------------
Binary property 'trunk-merged' - no diff available.

Modified: branches/1.6.1/main/features.c
URL: http://svn.digium.com/svn-view/asterisk/branches/1.6.1/main/features.c?view=diff&rev=168981&r1=168980&r2=168981
==============================================================================
--- branches/1.6.1/main/features.c (original)
+++ branches/1.6.1/main/features.c Fri Jan 16 16:59:41 2009
@@ -665,12 +665,13 @@
 	return ast_park_call_full(chan, peer, &args);
 }
 
-static int masq_park_call(struct ast_channel *rchan, struct ast_channel *peer, int timeout, int *extout, int play_announcement)
+static int masq_park_call(struct ast_channel *rchan, struct ast_channel *peer, int timeout, int *extout, int play_announcement, struct ast_park_call_args *args)
 {
 	struct ast_channel *chan;
 	struct ast_frame *f;
 	char *orig_chan_name = NULL;
 	int park_status;
+	struct ast_park_call_args park_args = {0,};
 
 	/* Make a new, fake channel that we'll use to masquerade in the real one */
 	if (!(chan = ast_channel_alloc(0, AST_STATE_DOWN, 0, 0, rchan->accountcode, rchan->exten, rchan->context, rchan->amaflags, "Parked/%s",rchan->name))) {
@@ -694,19 +695,22 @@
 		orig_chan_name = ast_strdupa(chan->name);
 	}
 
-	{
-		struct ast_park_call_args args = {
-			.timeout = timeout,
-			.extout = extout,
-			.orig_chan_name = orig_chan_name,
-		};
-
-		park_status = ast_park_call_full(chan, peer, &args);
-		if (park_status == 1) {
-		/* would be nice to play "invalid parking extension" */
-			ast_hangup(chan);
-			return -1;
-		}
+	if (peer == rchan) {
+		peer = chan;
+	}
+
+	if (!args) {
+		args = &park_args;
+		args->timeout = timeout,
+		args->extout = extout,
+		args->orig_chan_name = orig_chan_name;
+	} 
+
+	park_status = ast_park_call_full(chan, peer, args);
+	if (park_status == 1) {
+	/* would be nice to play "invalid parking extension" */
+		ast_hangup(chan);
+		return -1;
 	}
 
 	return 0;
@@ -715,15 +719,18 @@
 /* Park call via masquraded channel */
 int ast_masq_park_call(struct ast_channel *rchan, struct ast_channel *peer, int timeout, int *extout)
 {
-	return masq_park_call(rchan, peer, timeout, extout, 0);
+	return masq_park_call(rchan, peer, timeout, extout, 0, NULL);
+}
+
+static int masq_park_call_announce_args(struct ast_channel *rchan, struct ast_channel *peer, struct ast_park_call_args *args)
+{
+	return masq_park_call(rchan, peer, 0, NULL, 1, args);
 }
 
 static int masq_park_call_announce(struct ast_channel *rchan, struct ast_channel *peer, int timeout, int *extout)
 {
-	return masq_park_call(rchan, peer, timeout, extout, 1);
-}
-
-
+	return masq_park_call(rchan, peer, timeout, extout, 1, NULL);
+}
 
 #define FEATURE_SENSE_CHAN	(1 << 0)
 #define FEATURE_SENSE_PEER	(1 << 1)
@@ -2608,6 +2615,10 @@
 
 					ast_channel_unlock(chan);
 
+					if (!strncmp(peername, "Parked/", 7)) {
+						peername += 7;
+					}
+
 					if (dialfeatures)
 						snprintf(returnexten, sizeof(returnexten), "%s,,%s", peername, dialfeatures->options);
 					else /* Existing default */
@@ -2853,11 +2864,7 @@
 		ast_app_parse_options(park_call_options, &flags, NULL, app_args.options);
 		args.flags = flags.flags;
 
-		res = ast_park_call_full(chan, chan, &args); /* In experiments, using the masq_park_call
-													   func here yielded no difference with 
-													   current implementation. I saw no advantage
-													   in calling it instead.
-													 */
+		res = masq_park_call_announce_args(chan, chan, &args);
 		/* Continue on in the dialplan */
 		if (res == 1) {
 			ast_copy_string(chan->exten, orig_exten, sizeof(chan->exten));




More information about the asterisk-commits mailing list