[svn-commits] trunk r20678 - /trunk/res/res_features.c

svn-commits at lists.digium.com svn-commits at lists.digium.com
Sun Apr 16 14:41:08 MST 2006


Author: rizzo
Date: Sun Apr 16 16:41:06 2006
New Revision: 20678

URL: http://svn.digium.com/view/asterisk?rev=20678&view=rev
Log:
more replaceemnt of dup code with functions.


Modified:
    trunk/res/res_features.c

Modified: trunk/res/res_features.c
URL: http://svn.digium.com/view/asterisk/trunk/res/res_features.c?rev=20678&r1=20677&r2=20678&view=diff
==============================================================================
--- trunk/res/res_features.c (original)
+++ trunk/res/res_features.c Sun Apr 16 16:41:06 2006
@@ -573,38 +573,25 @@
 	memset(xferto, 0, sizeof(xferto));
 	
 	/* Transfer */
-	if ((res=ast_streamfile(transferer, "pbx-transfer", transferer->language))) {
-		ast_moh_stop(transferee);
-		ast_autoservice_stop(transferee);
-		ast_indicate(transferee, AST_CONTROL_UNHOLD);
-		return res;
-	}
-	if ((res=ast_waitstream(transferer, AST_DIGIT_ANY)) < 0) {
-		ast_moh_stop(transferee);
-		ast_autoservice_stop(transferee);
-		ast_indicate(transferee, AST_CONTROL_UNHOLD);
-		return res;
-	} else if (res > 0) {
-		/* If they've typed a digit already, handle it */
+	res = stream_and_wait(transferer, "pbx-transfer", transferer->language, AST_DIGIT_ANY);
+	if (res < 0) {
+		finishup(transferee);
+		return -1; /* error ? */
+	} else if (res > 0) {	/* If they've typed a digit already, handle it */
 		xferto[0] = (char) res;
 	}
 
 	ast_stopstream(transferer);
 	res = ast_app_dtget(transferer, transferer_real_context, xferto, sizeof(xferto), 100, transferdigittimeout);
-	if (res < 0) {
-		ast_moh_stop(transferee);
-		ast_autoservice_stop(transferee);
-		ast_indicate(transferee, AST_CONTROL_UNHOLD);
+	if (res < 0) {  /* hangup, would be 0 for invalid and 1 for valid */
+		finishup(transferee);
 		return res;
 	}
 	if (!strcmp(xferto, ast_parking_ext())) {
-		ast_moh_stop(transferee);
-
-		res = ast_autoservice_stop(transferee);
-		ast_indicate(transferee, AST_CONTROL_UNHOLD);
+		res = finishup(transferee);
 		if (res)
 			res = -1;
-		else if (!ast_park_call(transferee, transferer, 0, NULL)) {
+		else if (!ast_park_call(transferee, transferer, 0, NULL)) {	/* success */
 			/* We return non-zero, but tell the PBX not to hang the channel when
 			   the thread dies -- We have to be careful now though.  We are responsible for 
 			   hanging up the channel, else it will never be hung up! */
@@ -617,9 +604,7 @@
 	} else if (ast_exists_extension(transferee, transferer_real_context, xferto, 1, transferer->cid.cid_num)) {
 		pbx_builtin_setvar_helper(peer, "BLINDTRANSFER", chan->name);
 		pbx_builtin_setvar_helper(chan, "BLINDTRANSFER", peer->name);
-		ast_moh_stop(transferee);
-		res=ast_autoservice_stop(transferee);
-		ast_indicate(transferee, AST_CONTROL_UNHOLD);
+		res=finishup(transferee);
 		if (!transferee->pbx) {
 			/* Doh!  Use our handy async_goto functions */
 			if (option_verbose > 2) 
@@ -638,21 +623,12 @@
 		if (option_verbose > 2)	
 			ast_verbose(VERBOSE_PREFIX_3 "Unable to find extension '%s' in context '%s'\n", xferto, transferer_real_context);
 	}
-	if (!ast_strlen_zero(xferfailsound))
-		res = ast_streamfile(transferer, xferfailsound, transferee->language);
-	else
-		res = 0;
-	if (res) {
-		ast_moh_stop(transferee);
-		ast_autoservice_stop(transferee);
-		ast_indicate(transferee, AST_CONTROL_UNHOLD);
-		return res;
-	}
-	res = ast_waitstream(transferer, AST_DIGIT_ANY);
+	if (stream_and_wait(transferer, xferfailsound, transferee->language, AST_DIGIT_ANY) < 0 ) {
+		finishup(transferee);
+		return -1;
+	}
 	ast_stopstream(transferer);
-	ast_moh_stop(transferee);
-	res = ast_autoservice_stop(transferee);
-	ast_indicate(transferee, AST_CONTROL_UNHOLD);
+	res = finishup(transferee);
 	if (res) {
 		if (option_verbose > 1)
 			ast_verbose(VERBOSE_PREFIX_2 "Hungup during autoservice stop on '%s'\n", transferee->name);
@@ -1507,7 +1483,7 @@
 				/* Start up the PBX, or hang them up */
 				if (ast_pbx_start(chan))  {
 					ast_log(LOG_WARNING, "Unable to restart the PBX for user on '%s', hanging them up...\n", chan->name);
-					ast_hangup(pu->chan);
+					ast_hangup(chan);
 				}
 				/* And take them out of the parking lot */
 				if (pl) 
@@ -1705,8 +1681,10 @@
 			ast_moh_stop(peer);
 			ast_indicate(peer, AST_CONTROL_UNHOLD);
 			if (parkedplay == 0) {
-				if (stream_and_wait(chan, courtesytone, chan->language, ""))
+				error = stream_and_wait(chan, courtesytone, chan->language, "");
 					error = 1;
+			} else if (parkedplay == 1) {
+				error = stream_and_wait(peer, courtesytone, chan->language, "");
 			} else if (parkedplay == 2) {
 				if (!ast_streamfile(chan, courtesytone, chan->language) &&
 						!ast_streamfile(peer, courtesytone, chan->language)) {
@@ -1717,9 +1695,6 @@
 					if (res < 0)
 						error = 1;
 				}
-			} else if (parkedplay == 1) {
-				if (stream_and_wait(peer, courtesytone, chan->language, ""))
-				error = 1;
                         }
 			if (error) {
 				ast_log(LOG_WARNING, "Failed to play courtesy tone!\n");
@@ -1862,9 +1837,8 @@
 
         ast_mutex_lock(&parking_lock);
 
-        cur=parkinglot;
-        while(cur) {
-			astman_append(s, "Event: ParkedCall\r\n"
+	for (cur=parkinglot; cur; cur = cur->next) {
+		astman_append(s, "Event: ParkedCall\r\n"
 			"Exten: %d\r\n"
 			"Channel: %s\r\n"
 			"From: %s\r\n"
@@ -1878,14 +1852,12 @@
 			,(cur->chan->cid.cid_num ? cur->chan->cid.cid_num : "")
 			,(cur->chan->cid.cid_name ? cur->chan->cid.cid_name : "")
 			,idText);
-
-            cur = cur->next;
         }
 
 	astman_append(s,
-	"Event: ParkedCallsComplete\r\n"
-	"%s"
-	"\r\n",idText);
+		"Event: ParkedCallsComplete\r\n"
+		"%s"
+		"\r\n",idText);
 
         ast_mutex_unlock(&parking_lock);
 



More information about the svn-commits mailing list