[asterisk-commits] branch bweschke/findme_followme r31689 - /team/bweschke/findme_followme/apps/

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Fri Jun 2 17:37:44 MST 2006


Author: bweschke
Date: Fri Jun  2 19:37:44 2006
New Revision: 31689

URL: http://svn.digium.com/view/asterisk?rev=31689&view=rev
Log:
 Formatting / indent cleanups. 


Modified:
    team/bweschke/findme_followme/apps/app_followme.c

Modified: team/bweschke/findme_followme/apps/app_followme.c
URL: http://svn.digium.com/view/asterisk/team/bweschke/findme_followme/apps/app_followme.c?rev=31689&r1=31688&r2=31689&view=diff
==============================================================================
--- team/bweschke/findme_followme/apps/app_followme.c (original)
+++ team/bweschke/findme_followme/apps/app_followme.c Fri Jun  2 19:37:44 2006
@@ -198,17 +198,15 @@
    
 static void profile_set_param(struct ast_call_followme *f, const char *param, const char *val, int linenum, int failunknown)
 {
-	if (!strcasecmp(param, "musicclass") || !strcasecmp(param, "musiconhold") || !strcasecmp(param, "music")) {
+	if (!strcasecmp(param, "musicclass") || !strcasecmp(param, "musiconhold") || !strcasecmp(param, "music")) 
 		ast_copy_string(f->moh, val, sizeof(f->moh));
-	} else if (!strcasecmp(param, "context")) {
+	else if (!strcasecmp(param, "context")) {
 		ast_copy_string(f->context, val, sizeof(f->context));
-	} else if(failunknown) {
-		if (linenum >= 0) {
-			ast_log(LOG_WARNING, "Unknown keyword in profile '%s': %s at line %d of followme.conf\n",
-				f->name, param, linenum);
-		} else {
+	} else if (failunknown) {
+		if (linenum >= 0)
+			ast_log(LOG_WARNING, "Unknown keyword in profile '%s': %s at line %d of followme.conf\n", f->name, param, linenum);
+		else
 			ast_log(LOG_WARNING, "Unknown keyword in profile '%s': %s\n", f->name, param);
-		}
 	}
 }
 
@@ -264,10 +262,9 @@
 	}
 	featuredigittostr = ast_variable_retrieve(cfg, "general", "featuredigittimeout");
 	
-	if (!ast_strlen_zero(featuredigittostr)) {
+	if (!ast_strlen_zero(featuredigittostr)) 
 		if (!scanf("%d", &featuredigittimeout))
 			featuredigittimeout = 5000;
-	}
 	
 	
 	/* Chug through config file */
@@ -386,272 +383,272 @@
 
 static struct ast_channel *wait_for_winner(struct findme_user *headuser, struct number *nm, struct ast_channel *caller, char *namerecloc, int *status) 
 {
-		struct ast_channel *watchers[256];
-		int pos;
-		struct ast_channel *winner;
-		struct ast_frame *f;
-		int ctstatus;
-		int dg;
-		struct findme_user *tmpuser = NULL;
-		int *to = ast_calloc(1, sizeof(*to));
-		int livechannels = 0;
-		int tmpto;
-		long totalwait = 0;
-		char *callfromname;
-		char *pressbuttonname;
-
-		/* ------------ wait_for_winner_channel start --------------- */ 
-
-		callfromname = ast_strdupa("call-from");
-		pressbuttonname = ast_strdupa("press-1-to-be-connected-or");	
-	
-		if (headuser->ochan)
-		{
-			if (!caller) {
-				ast_log(LOG_NOTICE, "Original caller hungup. Cleanup.\n");
+	struct ast_channel *watchers[256];
+	int pos;
+	struct ast_channel *winner;
+	struct ast_frame *f;
+	int ctstatus;
+	int dg;
+	struct findme_user *tmpuser = NULL;
+	int *to = ast_calloc(1, sizeof(*to));
+	int livechannels = 0;
+	int tmpto;
+	long totalwait = 0;
+	char *callfromname;
+	char *pressbuttonname;
+
+	/* ------------ wait_for_winner_channel start --------------- */ 
+
+	callfromname = ast_strdupa("call-from");
+	pressbuttonname = ast_strdupa("press-1-to-be-connected-or");	
+
+	if (headuser->ochan)
+	{
+		if (!caller) {
+			ast_log(LOG_NOTICE, "Original caller hungup. Cleanup.\n");
+			clear_calling_tree(headuser,1);
+			free(to);
+			return 0;
+		}
+		ctstatus = 0;
+		totalwait = nm->timeout * 1000;
+		while (!ctstatus) {
+			*to = 1000;
+			pos = 1;
+			livechannels = 0;
+			watchers[0] = caller;
+		
+			dg = 0;	
+			winner = NULL;	
+			tmpuser = headuser;
+			while (tmpuser) {
+				if (tmpuser->state >= 0 && tmpuser->ochan) {
+					if (tmpuser->digts && (tmpuser->digts - totalwait) > featuredigittimeout) {
+						ast_log(LOG_NOTICE, "We've been waiting for digits longer than we should have.\n");
+						tmpuser->state = 1;
+						tmpuser->digts = 0;
+						if (!ast_streamfile(tmpuser->ochan, callfromname, tmpuser->ochan->language)) {
+							ast_sched_runq(tmpuser->ochan->sched);
+						} else {
+							ast_log(LOG_WARNING, "Unable to playback %s.\n", callfromname);
+							free(to);
+							return NULL;
+						}							
+					}
+					if (tmpuser->ochan->stream) {
+						ast_sched_runq(tmpuser->ochan->sched);
+						tmpto = ast_sched_wait(tmpuser->ochan->sched);
+						if (tmpto > 0 && tmpto < *to)
+							*to = tmpto;
+						else if (tmpto < 0) {
+							ast_stopstream(tmpuser->ochan);
+							if (tmpuser->state == 1) {
+								ast_log(LOG_NOTICE, "Playback of the file appears to be done.\n");
+								if (!ast_streamfile(tmpuser->ochan, namerecloc, tmpuser->ochan->language)) {
+									tmpuser->state = 2;
+								} else {
+									ast_log(LOG_WARNING, "Unable to playback %s.\n", namerecloc);
+									free(to);
+									return NULL;
+								}
+							} else if (tmpuser->state == 2) {
+								ast_log(LOG_NOTICE, "Playback of name file appears to be done.\n");
+								memset(tmpuser->yn, 0, sizeof(tmpuser->yn));
+								tmpuser->ynidx = 0;
+								tmpuser->digts = 0;
+								if (!ast_streamfile(tmpuser->ochan, pressbuttonname, tmpuser->ochan->language)) {
+									tmpuser->state = 3;
+									
+								} else {
+									ast_log(LOG_WARNING, "Unable to playback %s.\n", pressbuttonname);										  free(to);
+									return NULL;
+								} 
+							} else if (tmpuser->state == 3) {
+								ast_log(LOG_NOTICE, "Playback of the next step file appears to be done.\n");
+							}
+						}
+					}
+					watchers[pos++] = tmpuser->ochan;
+					livechannels++;
+				}
+				tmpuser = tmpuser->next;
+			}
+			tmpto = *to;
+			winner = ast_waitfor_n(watchers, pos, to);
+			tmpto -= *to;
+			totalwait -= tmpto;
+			if (totalwait <= 0) {
+				ast_log(LOG_NOTICE, "We've hit our timeout for this step. Drop everyone and move on to the next one. %ld\n", totalwait);
 				clear_calling_tree(headuser,1);
 				free(to);
 				return 0;
 			}
-			ctstatus = 0;
-			totalwait = nm->timeout * 1000;
-			while (!ctstatus) {
-				*to = 1000;
-				pos = 1;
-				livechannels = 0;
-				watchers[0] = caller;
-			
-				dg = 0;	
-				winner = NULL;	
+			if (winner) {
+				/* Need to find out which channel this is */
+				dg = 0;
+				while ((winner != watchers[dg]) && (dg < 256))
+					dg++;
 				tmpuser = headuser;
-				while (tmpuser) {
-					if (tmpuser->state >= 0 && tmpuser->ochan) {
-						if (tmpuser->digts && (tmpuser->digts - totalwait) > featuredigittimeout) {
-							ast_log(LOG_NOTICE, "We've been waiting for digits longer than we should have.\n");
-							tmpuser->state = 1;
-							tmpuser->digts = 0;
-							if (!ast_streamfile(tmpuser->ochan, callfromname, tmpuser->ochan->language)) {
-								ast_sched_runq(tmpuser->ochan->sched);
-							} else {
-								ast_log(LOG_WARNING, "Unable to playback %s.\n", callfromname);
+				while ((tmpuser) && (tmpuser->ochan != winner)) {
+					tmpuser = tmpuser->next;
+				}
+				f = ast_read(winner);
+				if (f) {
+					if (f->frametype == AST_FRAME_CONTROL) {
+						switch(f->subclass) {
+						case AST_CONTROL_HANGUP:
+							if (option_verbose > 2)
+								ast_verbose( VERBOSE_PREFIX_3 "%s received a hangup frame.\n", winner->name);
+							if (dg == 0) {
+								if (option_verbose > 2)
+									ast_verbose( VERBOSE_PREFIX_3 "The calling channel hungup. Need to drop everyone else.\n");
+								clear_calling_tree(headuser,1);
+								ctstatus = -1;
+							}
+							break;
+						case AST_CONTROL_ANSWER:
+							/* This is our guy if someone answered. */
+							if (option_verbose > 2)
+								ast_verbose( VERBOSE_PREFIX_3 "%s answered %s\n", winner->name, caller->name);
+							/* If call has been answered, then the eventual hangup is likely to be normal hangup */ 
+							winner->hangupcause = AST_CAUSE_NORMAL_CLEARING;
+							caller->hangupcause = AST_CAUSE_NORMAL_CLEARING;
+							if (dg > 0) {
+								if (!ast_streamfile(winner, callfromname, winner->language)) {
+									ast_sched_runq(winner->sched);
+									tmpuser->state = 1;
+								} else {
+									ast_log(LOG_WARNING, "Unable to playback %s.\n", callfromname);
+									free(to);
+									return NULL;
+								}							
+							}
+							break;
+						case AST_CONTROL_BUSY:
+							if (option_verbose > 2)
+								ast_verbose( VERBOSE_PREFIX_3 "%s is busy\n", winner->name);
+							break;
+						case AST_CONTROL_CONGESTION:
+							if (option_verbose > 2)
+								ast_verbose( VERBOSE_PREFIX_3 "%s is circuit-busy\n", winner->name);
+							break;
+						case AST_CONTROL_RINGING:
+							if (option_verbose > 2)
+								ast_verbose( VERBOSE_PREFIX_3 "%s is ringing\n", winner->name);
+							break;
+						case AST_CONTROL_PROGRESS:
+							if (option_verbose > 2)
+								ast_verbose ( VERBOSE_PREFIX_3 "%s is making progress passing it to %s\n", winner->name,caller->name);
+							break;
+						case AST_CONTROL_VIDUPDATE:
+							if (option_verbose > 2)
+								ast_verbose ( VERBOSE_PREFIX_3 "%s requested a video update, passing it to %s\n", winner->name,caller->name);
+							break;
+						case AST_CONTROL_PROCEEDING:
+							if (option_verbose > 2)
+								ast_verbose ( VERBOSE_PREFIX_3 "%s is proceeding passing it to %s\n", winner->name,caller->name);
+							break;
+						case AST_CONTROL_HOLD:
+							if (option_verbose > 2)
+								ast_verbose(VERBOSE_PREFIX_3 "Call on %s placed on hold\n", winner->name);
+							break;
+						case AST_CONTROL_UNHOLD:
+							if (option_verbose > 2)
+								ast_verbose(VERBOSE_PREFIX_3 "Call on %s left from hold\n", winner->name);
+							break;
+						case AST_CONTROL_OFFHOOK:
+						case AST_CONTROL_FLASH:
+							/* Ignore going off hook and flash */
+							break;
+						case -1:
+							if (option_verbose > 2)
+								ast_verbose( VERBOSE_PREFIX_3 "%s stopped sounds\n", winner->name);
+							break;
+						default:
+							if (option_debug > 2)
+								ast_log(LOG_DEBUG, "Dunno what to do with control type %d\n", f->subclass);
+							break;
+						}
+					} 
+					if (tmpuser && tmpuser->state == 3 && f->frametype == AST_FRAME_DTMF) {
+						if (winner->stream)
+							ast_stopstream(winner);
+						if (!tmpuser->digts)
+							tmpuser->digts = totalwait;
+						ast_log(LOG_NOTICE, "DTMF received: %c\n",(char) f->subclass);
+						tmpuser->yn[tmpuser->ynidx] = (char) f->subclass;
+						tmpuser->ynidx++;
+						ast_log(LOG_NOTICE, "DTMF string: %s\n", tmpuser->yn);
+						if (tmpuser->ynidx >= ynlongest) {
+							ast_log(LOG_NOTICE, "reached longest possible match\n");
+							if (!strcmp(tmpuser->yn, takecall)) {
+								ast_log(LOG_NOTICE, "Match to take the call!\n");
 								free(to);
-								return NULL;
-							}							
+								return tmpuser->ochan;	
+							}
+							if (!strcmp(tmpuser->yn, nextindp)) {
+								ast_log(LOG_NOTICE, "Next in dial plan step requested.\n");
+								*status = 1;
+								free(to);
+								return 0;
+							}	
+							if (!strcmp(tmpuser->yn, nextinfmfm)) {
+								ast_log(LOG_NOTICE, "Next in find me/follow me step requested.\n");
+								*status = 2;
+								free(to);
+								return 0;
+							}	
+							if (!strcmp(tmpuser->yn, blindxferexten)) {
+								ast_log(LOG_NOTICE, "Blind Transfer requested.\n");
+								*status = 3;
+								free(to);
+								return 0;
+							}	
+							if (!strcmp(tmpuser->yn, atxferexten)) {
+								ast_log(LOG_NOTICE, "Attended Transfer requested.\n");
+								*status = 4;
+								free(to);
+								return 0;
+							}	
+
 						}
-						if (tmpuser->ochan->stream) {
-							ast_sched_runq(tmpuser->ochan->sched);
-							tmpto = ast_sched_wait(tmpuser->ochan->sched);
-							if (tmpto > 0 && tmpto < *to)
-								*to = tmpto;
-							else if (tmpto < 0) {
-								ast_stopstream(tmpuser->ochan);
-								if (tmpuser->state == 1) {
-									ast_log(LOG_NOTICE, "Playback of the file appears to be done.\n");
-									if (!ast_streamfile(tmpuser->ochan, namerecloc, tmpuser->ochan->language)) {
-										tmpuser->state = 2;
-									} else {
-										ast_log(LOG_WARNING, "Unable to playback %s.\n", namerecloc);
-										free(to);
-										return NULL;
-									}
-								} else if (tmpuser->state == 2) {
-									ast_log(LOG_NOTICE, "Playback of name file appears to be done.\n");
-									memset(tmpuser->yn, 0, sizeof(tmpuser->yn));
-									tmpuser->ynidx = 0;
-									tmpuser->digts = 0;
-									if (!ast_streamfile(tmpuser->ochan, pressbuttonname, tmpuser->ochan->language)) {
-										tmpuser->state = 3;
-										
-									} else {
-										ast_log(LOG_WARNING, "Unable to playback %s.\n", pressbuttonname);										  free(to);
-										return NULL;
-									} 
-								} else if (tmpuser->state == 3) {
-									ast_log(LOG_NOTICE, "Playback of the next step file appears to be done.\n");
-								}
+					}
+					
+					ast_frfree(f);
+				} else {
+					if (winner) {
+
+						ast_log(LOG_NOTICE, "we didn't get a frame. hanging up. dg is %d\n",dg);					      
+						if (!dg) {
+							clear_calling_tree(headuser,1);
+							free(to);
+							return 0;
+						} else {
+							tmpuser->state = -1;
+						 	ast_hangup(winner);  
+							livechannels--;
+							ast_log(LOG_NOTICE, "live channels left %d\n", livechannels);
+							if (!livechannels) {
+								ast_log(LOG_NOTICE, "no live channels left. exiting.\n");
+								free(to);
+								return 0;
 							}
 						}
-						watchers[pos++] = tmpuser->ochan;
-						livechannels++;
 					}
-					tmpuser = tmpuser->next;
-				}
-				tmpto = *to;
-				winner = ast_waitfor_n(watchers, pos, to);
-				tmpto -= *to;
-				totalwait -= tmpto;
-				if (totalwait <= 0) {
-					ast_log(LOG_NOTICE, "We've hit our timeout for this step. Drop everyone and move on to the next one. %ld\n", totalwait);
-					clear_calling_tree(headuser,1);
-					free(to);
-					return 0;
-				}
-				if (winner) {
-					/* Need to find out which channel this is */
-					dg = 0;
-					while ((winner != watchers[dg]) && (dg < 256))
-						dg++;
-					tmpuser = headuser;
-					while ((tmpuser) && (tmpuser->ochan != winner)) {
-						tmpuser = tmpuser->next;
-					}
-					f = ast_read(winner);
-					if (f) {
-						if (f->frametype == AST_FRAME_CONTROL) {
-							switch(f->subclass) {
-							case AST_CONTROL_HANGUP:
-								if (option_verbose > 2)
-									ast_verbose( VERBOSE_PREFIX_3 "%s received a hangup frame.\n", winner->name);
-								if (dg == 0) {
-									if (option_verbose > 2)
-										ast_verbose( VERBOSE_PREFIX_3 "The calling channel hungup. Need to drop everyone else.\n");
-									clear_calling_tree(headuser,1);
-									ctstatus = -1;
-								}
-								break;
-							case AST_CONTROL_ANSWER:
-								/* This is our guy if someone answered. */
-								if (option_verbose > 2)
-									ast_verbose( VERBOSE_PREFIX_3 "%s answered %s\n", winner->name, caller->name);
-								/* If call has been answered, then the eventual hangup is likely to be normal hangup */ 
-								winner->hangupcause = AST_CAUSE_NORMAL_CLEARING;
-								caller->hangupcause = AST_CAUSE_NORMAL_CLEARING;
-								if (dg > 0) {
-									if (!ast_streamfile(winner, callfromname, winner->language)) {
-										ast_sched_runq(winner->sched);
-										tmpuser->state = 1;
-									} else {
-										ast_log(LOG_WARNING, "Unable to playback %s.\n", callfromname);
-										free(to);
-										return NULL;
-									}							
-								}
-								break;
-							case AST_CONTROL_BUSY:
-								if (option_verbose > 2)
-									ast_verbose( VERBOSE_PREFIX_3 "%s is busy\n", winner->name);
-								break;
-							case AST_CONTROL_CONGESTION:
-								if (option_verbose > 2)
-									ast_verbose( VERBOSE_PREFIX_3 "%s is circuit-busy\n", winner->name);
-								break;
-							case AST_CONTROL_RINGING:
-								if (option_verbose > 2)
-									ast_verbose( VERBOSE_PREFIX_3 "%s is ringing\n", winner->name);
-								break;
-							case AST_CONTROL_PROGRESS:
-								if (option_verbose > 2)
-									ast_verbose ( VERBOSE_PREFIX_3 "%s is making progress passing it to %s\n", winner->name,caller->name);
-								break;
-							case AST_CONTROL_VIDUPDATE:
-								if (option_verbose > 2)
-									ast_verbose ( VERBOSE_PREFIX_3 "%s requested a video update, passing it to %s\n", winner->name,caller->name);
-								break;
-							case AST_CONTROL_PROCEEDING:
-								if (option_verbose > 2)
-									ast_verbose ( VERBOSE_PREFIX_3 "%s is proceeding passing it to %s\n", winner->name,caller->name);
-								break;
-							case AST_CONTROL_HOLD:
-								if (option_verbose > 2)
-									ast_verbose(VERBOSE_PREFIX_3 "Call on %s placed on hold\n", winner->name);
-								break;
-							case AST_CONTROL_UNHOLD:
-								if (option_verbose > 2)
-									ast_verbose(VERBOSE_PREFIX_3 "Call on %s left from hold\n", winner->name);
-								break;
-							case AST_CONTROL_OFFHOOK:
-							case AST_CONTROL_FLASH:
-								/* Ignore going off hook and flash */
-								break;
-							case -1:
-								if (option_verbose > 2)
-									ast_verbose( VERBOSE_PREFIX_3 "%s stopped sounds\n", winner->name);
-								break;
-							default:
-								if (option_debug > 2)
-									ast_log(LOG_DEBUG, "Dunno what to do with control type %d\n", f->subclass);
-								break;
-							}
-						} 
-						if (tmpuser && tmpuser->state == 3 && f->frametype == AST_FRAME_DTMF) {
-							if (winner->stream)
-								ast_stopstream(winner);
-							if (!tmpuser->digts)
-								tmpuser->digts = totalwait;
-							ast_log(LOG_NOTICE, "DTMF received: %c\n",(char) f->subclass);
-							tmpuser->yn[tmpuser->ynidx] = (char) f->subclass;
-							tmpuser->ynidx++;
-							ast_log(LOG_NOTICE, "DTMF string: %s\n", tmpuser->yn);
-							if (tmpuser->ynidx >= ynlongest) {
-								ast_log(LOG_NOTICE, "reached longest possible match\n");
-								if (!strcmp(tmpuser->yn, takecall)) {
-									ast_log(LOG_NOTICE, "Match to take the call!\n");
-									free(to);
-									return tmpuser->ochan;	
-								}
-								if (!strcmp(tmpuser->yn, nextindp)) {
-									ast_log(LOG_NOTICE, "Next in dial plan step requested.\n");
-									*status = 1;
-									free(to);
-									return 0;
-								}	
-								if (!strcmp(tmpuser->yn, nextinfmfm)) {
-									ast_log(LOG_NOTICE, "Next in find me/follow me step requested.\n");
-									*status = 2;
-									free(to);
-									return 0;
-								}	
-								if (!strcmp(tmpuser->yn, blindxferexten)) {
-									ast_log(LOG_NOTICE, "Blind Transfer requested.\n");
-									*status = 3;
-									free(to);
-									return 0;
-								}	
-								if (!strcmp(tmpuser->yn, atxferexten)) {
-									ast_log(LOG_NOTICE, "Attended Transfer requested.\n");
-									*status = 4;
-									free(to);
-									return 0;
-								}	
-
-							}
-						}
-						
-						ast_frfree(f);
-					} else {
-						if (winner) {
-
-							ast_log(LOG_NOTICE, "we didn't get a frame. hanging up. dg is %d\n",dg);					      
-							if (!dg) {
-								clear_calling_tree(headuser,1);
-								free(to);
-								return 0;
-							} else {
-								tmpuser->state = -1;
-							 	ast_hangup(winner);  
-								livechannels--;
-								ast_log(LOG_NOTICE, "live channels left %d\n", livechannels);
-								if (!livechannels) {
-									ast_log(LOG_NOTICE, "no live channels left. exiting.\n");
-									free(to);
-									return 0;
-								}
-							}
-						}
-					}					
-					
-				} 
-			}
-			
-		}
-		else
-		{
-			ast_log(LOG_NOTICE, "couldn't reach at this number.\n");
+				}					
+				
+			} 
 		}
 		
-		/* --- WAIT FOR WINNER NUMBER END! -----------*/
-		free(to);
-		return NULL;
+	}
+	else
+	{
+		ast_log(LOG_NOTICE, "couldn't reach at this number.\n");
+	}
+	
+	/* --- WAIT FOR WINNER NUMBER END! -----------*/
+	free(to);
+	return NULL;
 }
 
 static void findmeexec(void *args)
@@ -882,35 +879,35 @@
 				else
 				{
 							
-							caller = chan;
-							outbound = targs.outbound;
-							/* Bridge the two channels. */
-
-							memset(&config,0,sizeof(struct ast_bridge_config));
-								ast_set_flag(&(config.features_callee), AST_FEATURE_REDIRECT);
-								ast_set_flag(&(config.features_callee), AST_FEATURE_AUTOMON);
-								ast_set_flag(&(config.features_caller), AST_FEATURE_AUTOMON);
+					caller = chan;
+					outbound = targs.outbound;
+					/* Bridge the two channels. */
+
+					memset(&config,0,sizeof(struct ast_bridge_config));
+					ast_set_flag(&(config.features_callee), AST_FEATURE_REDIRECT);
+					ast_set_flag(&(config.features_callee), AST_FEATURE_AUTOMON);
+					ast_set_flag(&(config.features_caller), AST_FEATURE_AUTOMON);
 				
-							ast_moh_stop(caller);
-							/* Be sure no generators are left on it */
-							ast_deactivate_generator(caller);
-							/* Make sure channels are compatible */
-							res = ast_channel_make_compatible(caller, outbound);
-							if (res < 0) {
-								ast_log(LOG_WARNING, "Had to drop call because I couldn't make %s compatible with %s\n", caller->name, outbound->name);
-								ast_hangup(outbound);
-								goto outrun;
-							}
-							time(&answer_time);
-							res = ast_bridge_call(caller,outbound,&config);
-							time(&end_time);
-							snprintf(toast, sizeof(toast), "%ld", (long)(end_time - start_time));
-							pbx_builtin_setvar_helper(caller, "DIALEDTIME", toast);
-							snprintf(toast, sizeof(toast), "%ld", (long)(end_time - answer_time));
-							pbx_builtin_setvar_helper(caller, "ANSWEREDTIME", toast);
-							if (outbound)
-								ast_hangup(outbound);
-							res = 1;
+					ast_moh_stop(caller);
+					/* Be sure no generators are left on it */
+					ast_deactivate_generator(caller);
+					/* Make sure channels are compatible */
+					res = ast_channel_make_compatible(caller, outbound);
+					if (res < 0) {
+						ast_log(LOG_WARNING, "Had to drop call because I couldn't make %s compatible with %s\n", caller->name, outbound->name);
+						ast_hangup(outbound);
+						goto outrun;
+					}
+					time(&answer_time);
+					res = ast_bridge_call(caller,outbound,&config);
+					time(&end_time);
+					snprintf(toast, sizeof(toast), "%ld", (long)(end_time - start_time));
+					pbx_builtin_setvar_helper(caller, "DIALEDTIME", toast);
+					snprintf(toast, sizeof(toast), "%ld", (long)(end_time - answer_time));
+					pbx_builtin_setvar_helper(caller, "ANSWEREDTIME", toast);
+					if (outbound)
+						ast_hangup(outbound);
+					res = 1;
 					
 				}
 				



More information about the asterisk-commits mailing list