[svn-commits] moy: branch moy/mfcr2-1.4 r182167 - /team/moy/mfcr2-1.4/channels/chan_dahdi.c

SVN commits to the Digium repositories svn-commits at lists.digium.com
Sun Mar 15 22:04:08 CDT 2009


Author: moy
Date: Sun Mar 15 22:04:05 2009
New Revision: 182167

URL: http://svn.digium.com/svn-view/asterisk?view=rev&rev=182167
Log:
Added support for MFCR2_DOUBLE_ANSWER variable to set this feature from the dial plan 

Modified:
    team/moy/mfcr2-1.4/channels/chan_dahdi.c

Modified: team/moy/mfcr2-1.4/channels/chan_dahdi.c
URL: http://svn.digium.com/svn-view/asterisk/team/moy/mfcr2-1.4/channels/chan_dahdi.c?view=diff&rev=182167&r1=182166&r2=182167
==============================================================================
--- team/moy/mfcr2-1.4/channels/chan_dahdi.c (original)
+++ team/moy/mfcr2-1.4/channels/chan_dahdi.c Sun Mar 15 22:04:05 2009
@@ -952,6 +952,30 @@
 	}
 }
 
+static int dahdi_r2_answer(struct dahdi_pvt *p)
+{
+	int res = 0;
+	/* openr2 1.1.0 and older does not even define OR2_LIB_INTERFACE
+	 * and does not has support for openr2_chan_answer_call_with_mode
+	 *  */
+#if defined(OR2_LIB_INTERFACE) && OR2_LIB_INTERFACE > 1
+	const char *double_answer = pbx_builtin_getvar_helper(p->owner, "MFCR2_DOUBLE_ANSWER");
+	int wants_double_answer = ast_true(double_answer) ? 1 : 0;
+	if (!double_answer) {
+		/* this still can result in double answer if the channel context 
+		 * was configured that way */
+		res = openr2_chan_answer_call(p->r2chan);
+	} else if (wants_double_answer) {
+		res = openr2_chan_answer_call_with_mode(p->r2chan, OR2_ANSWER_DOUBLE);
+	} else {
+		res = openr2_chan_answer_call_with_mode(p->r2chan, OR2_ANSWER_SIMPLE);
+	} 
+#else
+	res = openr2_chan_answer_call(p->r2chan);
+#endif
+	return res;
+}
+
 static openr2_calling_party_category_t dahdi_r2_get_channel_category(struct ast_channel *c)
 {
 	openr2_calling_party_category_t cat;
@@ -1138,7 +1162,7 @@
 		if (!p->mfcr2_accept_on_offer) {
 			openr2_chan_disable_read(r2chan);
 			ast_log(LOG_NOTICE, "Answering MFC/R2 call after accepting it on chan %d\n", openr2_chan_get_number(r2chan));
-			openr2_chan_answer_call(r2chan);
+			dahdi_r2_answer(p);
 			return;
 		}
 		c = dahdi_new(p, AST_STATE_RING, 1, SUB_REAL, DAHDI_LAW_ALAW, 0);
@@ -3533,7 +3557,7 @@
 			}
 		} else {
 			ast_log(LOG_DEBUG, "Answering MFC/R2 call on chan %d\n", p->channel);
-			openr2_chan_answer_call(p->r2chan);
+			res = dahdi_r2_answer(p);
 		}
 		break;
 #endif




More information about the svn-commits mailing list