[asterisk-commits] jpeeler: trunk r211908 - /trunk/channels/

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Wed Aug 12 15:47:49 CDT 2009


Author: jpeeler
Date: Wed Aug 12 15:47:45 2009
New Revision: 211908

URL: http://svn.asterisk.org/svn-view/asterisk?view=rev&rev=211908
Log:
Fix chan_dahdi option ringtimeout

dahdi_read relies on the dahdi_pvt copy of ringt which was not getting set
in sig_analog. This patch adds a callback to do so.

(closes issue #15288)
Reported by: alecdavis
Patches:
      chan_dahdi.ringtimeout.diff.txt uploaded by alecdavis (license 585)
Tested by: alecdavis


Modified:
    trunk/channels/chan_dahdi.c
    trunk/channels/sig_analog.c
    trunk/channels/sig_analog.h

Modified: trunk/channels/chan_dahdi.c
URL: http://svn.asterisk.org/svn-view/asterisk/trunk/channels/chan_dahdi.c?view=diff&rev=211908&r1=211907&r2=211908
==============================================================================
--- trunk/channels/chan_dahdi.c (original)
+++ trunk/channels/chan_dahdi.c Wed Aug 12 15:47:45 2009
@@ -2049,6 +2049,12 @@
 	p->dialing = flag;
 }
 
+static void my_set_ringtimeout(void *pvt, int ringt)
+{
+	struct dahdi_pvt *p = pvt;
+	p->ringt = ringt;
+}
+
 static void my_increase_ss_count(void)
 {
 	ast_mutex_lock(&ss_thread_lock);
@@ -2772,6 +2778,7 @@
 	.get_sub_fd = my_get_sub_fd,
 	.set_cadence = my_set_cadence,
 	.set_dialing = my_set_dialing,
+	.set_ringtimeout = my_set_ringtimeout,
 };
 
 static struct dahdi_pvt *round_robin[32];

Modified: trunk/channels/sig_analog.c
URL: http://svn.asterisk.org/svn-view/asterisk/trunk/channels/sig_analog.c?view=diff&rev=211908&r1=211907&r2=211908
==============================================================================
--- trunk/channels/sig_analog.c (original)
+++ trunk/channels/sig_analog.c Wed Aug 12 15:47:45 2009
@@ -705,6 +705,15 @@
 	if (p->calls->set_dialing) {
 		return p->calls->set_dialing(p->chan_pvt, flag);
 	}
+}
+
+static void analog_set_ringtimeout(struct analog_pvt *p, int ringt)
+{
+	p->ringt = ringt;
+	if (!p->calls->set_ringtimeout) {
+		return;
+	}
+	p->calls->set_ringtimeout(p->chan_pvt, ringt);
 }
 
 int analog_call(struct analog_pvt *p, struct ast_channel *ast, char *rdest, int timeout)
@@ -1060,7 +1069,7 @@
 
 	if (!p->subs[ANALOG_SUB_REAL].owner && !p->subs[ANALOG_SUB_CALLWAIT].owner && !p->subs[ANALOG_SUB_THREEWAY].owner) {
 		p->owner = NULL;
-		p->ringt = 0;
+		analog_set_ringtimeout(p, 0);
 		p->outgoing = 0;
 		p->onhooktime = time(NULL);
 		p->cidrings = 1;
@@ -1130,7 +1139,7 @@
 	case ANALOG_SIG_FXSLS:
 	case ANALOG_SIG_FXSGS:
 	case ANALOG_SIG_FXSKS:
-		p->ringt = 0;
+		analog_set_ringtimeout(p, 0);
 		/* Fall through */
 	case ANALOG_SIG_EM:
 	case ANALOG_SIG_EM_E1:
@@ -2093,7 +2102,7 @@
 
 		ast_setstate(chan, AST_STATE_RING);
 		chan->rings = 1;
-		p->ringt = p->ringt_base;
+		analog_set_ringtimeout(p, p->ringt_base);
 		res = ast_pbx_run(chan);
 		if (res) {
 			ast_hangup(chan);
@@ -2413,7 +2422,7 @@
 		case ANALOG_SIG_FXSGS:
 		case ANALOG_SIG_FXSKS:
 			if (ast->_state == AST_STATE_RING) {
-				p->ringt = p->ringt_base;
+				analog_set_ringtimeout(p, p->ringt_base);
 			}
 
 			/* Fall through */
@@ -2457,7 +2466,7 @@
 		case ANALOG_SIG_FXSGS:
 		case ANALOG_SIG_FXSKS:
 			if (ast->_state == AST_STATE_RING) {
-				p->ringt = p->ringt_base;
+				analog_set_ringtimeout(p, p->ringt_base);
 			}
 			break;
 		}
@@ -3007,7 +3016,7 @@
 		case ANALOG_SIG_FXSLS:
 		case ANALOG_SIG_FXSGS:
 		case ANALOG_SIG_FXSKS:
-				i->ringt = i->ringt_base;
+				analog_set_ringtimeout(i, i->ringt_base);
 				/* Fall through */
 		case ANALOG_SIG_EMWINK:
 		case ANALOG_SIG_FEATD:

Modified: trunk/channels/sig_analog.h
URL: http://svn.asterisk.org/svn-view/asterisk/trunk/channels/sig_analog.h?view=diff&rev=211908&r1=211907&r2=211908
==============================================================================
--- trunk/channels/sig_analog.h (original)
+++ trunk/channels/sig_analog.h Wed Aug 12 15:47:45 2009
@@ -193,6 +193,7 @@
 	int (* const get_sub_fd)(void *pvt, enum analog_sub sub);
 	void (* const set_cadence)(void *pvt, int *cidrings, struct ast_channel *chan);
 	void (* const set_dialing)(void *pvt, int flag);
+	void (* const set_ringtimeout)(void *pvt, int ringt);
 };
 
 




More information about the asterisk-commits mailing list