[svn-commits] russell: branch russell/issue_8413 r62562 - /team/russell/issue_8413/res/

svn-commits at lists.digium.com svn-commits at lists.digium.com
Tue May 1 15:04:17 MST 2007


Author: russell
Date: Tue May  1 17:04:16 2007
New Revision: 62562

URL: http://svn.digium.com/view/asterisk?view=rev&rev=62562
Log:
only attempt the callback twice before giving up

Modified:
    team/russell/issue_8413/res/res_features.c

Modified: team/russell/issue_8413/res/res_features.c
URL: http://svn.digium.com/view/asterisk/team/russell/issue_8413/res/res_features.c?view=diff&rev=62562&r1=62561&r2=62562
==============================================================================
--- team/russell/issue_8413/res/res_features.c (original)
+++ team/russell/issue_8413/res/res_features.c Tue May  1 17:04:16 2007
@@ -849,7 +849,7 @@
 		ast_set_flag(&(bconfig.features_caller), AST_FEATURE_DISCONNECT);
 		ast_set_flag(&(bconfig.features_callee), AST_FEATURE_DISCONNECT);
 		res = ast_bridge_call(transferer, newchan, &bconfig);
-		if (newchan->_softhangup || newchan->_state != AST_STATE_UP || !transferer->_softhangup) {
+		if (newchan->_softhangup || !transferer->_softhangup) {
 			ast_hangup(newchan);
 			if (ast_stream_and_wait(transferer, xfersound, ""))
 				ast_log(LOG_WARNING, "Failed to play transfer sound!\n");
@@ -900,7 +900,7 @@
 			ast_log(LOG_WARNING, "Failed to play transfer sound!\n");
 		ast_bridge_call_thread_launch(tobj);
 		return -1;      /* XXX meaning the channel is bridged ? */
-	} else if(!ast_check_hangup(transferee)) {
+	} else if (!ast_check_hangup(transferee)) {
 		/* act as blind transfer */
 		if (ast_autoservice_stop(transferee) < 0) {
 			ast_hangup(newchan);
@@ -908,6 +908,8 @@
 		}
 
 		if (!newchan) {
+			unsigned int tries = 0;
+
 			/* newchan wasn't created - we should callback to transferer */
 			if (!ast_exists_extension(transferer, transferer_real_context, transferer->cid.cid_num, 1, transferee->cid.cid_num)) {
 				ast_log(LOG_WARNING, "Extension %s does not exist in context %s - callback failed\n",transferer->cid.cid_num,transferer_real_context);
@@ -919,7 +921,7 @@
 
 			newchan = ast_feature_request_and_dial(transferee, NULL, "Local", ast_best_codec(transferee->nativeformats),
 				callbackto, atxfernoanswertimeout, &outstate, transferee->cid.cid_num, transferee->cid.cid_name, 0);
-			while (!newchan && !atxferdropcall) {
+			while (!newchan && !atxferdropcall && tries < 2) {
 				/* Trying to transfer again */
 				ast_autoservice_start(transferee);
 				ast_indicate(transferee, AST_CONTROL_HOLD);
@@ -932,17 +934,19 @@
 				}
 				if (!newchan) {
 					/* Transfer failed, sleeping */
-					ast_log(LOG_DEBUG, "Sleeping for %d ms before callback.\n", atxferloopdelay);
+					if (option_debug)
+						ast_log(LOG_DEBUG, "Sleeping for %d ms before callback.\n", atxferloopdelay);
 					ast_safe_sleep(transferee, atxferloopdelay);
-					ast_log(LOG_DEBUG, "Trying to callback...\n");
+					if (option_debug)
+						ast_log(LOG_DEBUG, "Trying to callback...\n");
 					newchan = ast_feature_request_and_dial(transferee, NULL, "Local", ast_best_codec(transferee->nativeformats),
 						callbackto, atxfernoanswertimeout, &outstate, transferee->cid.cid_num, transferee->cid.cid_name, 0);
 				}
+				tries++;
 			}
 		}
-		if (!newchan) {
+		if (!newchan)
 			return -1;
-		}
 
 		/* newchan is up, we should prepare transferee and bridge them */
 		if (check_compat(transferee, newchan))



More information about the svn-commits mailing list