[asterisk-commits] jpeeler: branch jpeeler/asterisk-sigwork-trunk r206454 - /team/jpeeler/asteri...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Tue Jul 14 11:07:58 CDT 2009


Author: jpeeler
Date: Tue Jul 14 11:07:54 2009
New Revision: 206454

URL: http://svn.asterisk.org/svn-view/asterisk?view=rev&rev=206454
Log:
Readd code in dahdi_hangup dealing with analog signaling, as sig_analog does
not handle signaling when using radio.

Modified:
    team/jpeeler/asterisk-sigwork-trunk/channels/chan_dahdi.c
    team/jpeeler/asterisk-sigwork-trunk/channels/sig_analog.c
    team/jpeeler/asterisk-sigwork-trunk/channels/sig_analog.h

Modified: team/jpeeler/asterisk-sigwork-trunk/channels/chan_dahdi.c
URL: http://svn.asterisk.org/svn-view/asterisk/team/jpeeler/asterisk-sigwork-trunk/channels/chan_dahdi.c?view=diff&rev=206454&r1=206453&r2=206454
==============================================================================
--- team/jpeeler/asterisk-sigwork-trunk/channels/chan_dahdi.c (original)
+++ team/jpeeler/asterisk-sigwork-trunk/channels/chan_dahdi.c Tue Jul 14 11:07:54 2009
@@ -2308,7 +2308,7 @@
 	return dahdievent_to_analogevent(res);
 }
 
-static int my_is_off_hook(void *pvt, int debug)
+static int my_is_off_hook(void *pvt)
 {
 	struct dahdi_pvt *p = pvt;
 	int res;
@@ -2323,9 +2323,6 @@
 	}
 	if (res) {
 		ast_log(LOG_WARNING, "Unable to check hook state on channel %d: %s\n", p->channel, strerror(errno));
-	}
-	if (debug) {
-		ast_debug(1, "Channel %d, offhook = %d\n", p->channel, par.rxisoffhook);
 	}
 
 	return (par.rxbits > -1) || par.rxisoffhook;
@@ -4851,6 +4848,7 @@
 	struct dahdi_pvt *p = ast->tech_pvt;
 	struct dahdi_pvt *tmp = NULL;
 	struct dahdi_pvt *prev = NULL;
+	struct dahdi_params par;
 
 	ast_debug(1, "dahdi_hangup(%s)\n", ast->name);
 	if (!ast->tech_pvt) {
@@ -5131,6 +5129,38 @@
 			res = dahdi_set_hook(p->subs[SUB_REAL].dfd, DAHDI_ONHOOK);
 		if (res < 0) {
 			ast_log(LOG_WARNING, "Unable to hangup line %s\n", ast->name);
+		}
+		switch (p->sig) {
+		case SIG_FXOGS:
+		case SIG_FXOLS:
+		case SIG_FXOKS:
+			memset(&par, 0, sizeof(par));
+			res = ioctl(p->subs[SUB_REAL].dfd, DAHDI_GET_PARAMS, &par);
+			if (!res) {
+				struct analog_pvt *analog_p = p->sig_pvt;
+#if 0
+				ast_debug(1, "Hanging up channel %d, offhook = %d\n", p->channel, par.rxisoffhook);
+#endif
+				/* If they're off hook, try playing congestion */
+				if ((par.rxisoffhook) && (!(p->radio || (p->oprmode < 0))))
+					tone_zone_play_tone(p->subs[SUB_REAL].dfd, DAHDI_TONE_CONGESTION);
+				else
+					tone_zone_play_tone(p->subs[SUB_REAL].dfd, -1);
+				analog_p->fxsoffhookstate = par.rxisoffhook;
+			}
+			break;
+		case SIG_FXSGS:
+		case SIG_FXSLS:
+		case SIG_FXSKS:
+			/* Make sure we're not made available for at least two seconds assuming
+			we were actually used for an inbound or outbound call. */
+			if (ast->_state != AST_STATE_RESERVED) {
+				time(&p->guardtime);
+				p->guardtime += 2;
+			}
+			break;
+		default:
+			tone_zone_play_tone(p->subs[SUB_REAL].dfd, -1);
 		}
 		if (p->sig)
 			dahdi_disable_ec(p);

Modified: team/jpeeler/asterisk-sigwork-trunk/channels/sig_analog.c
URL: http://svn.asterisk.org/svn-view/asterisk/team/jpeeler/asterisk-sigwork-trunk/channels/sig_analog.c?view=diff&rev=206454&r1=206453&r2=206454
==============================================================================
--- team/jpeeler/asterisk-sigwork-trunk/channels/sig_analog.c (original)
+++ team/jpeeler/asterisk-sigwork-trunk/channels/sig_analog.c Tue Jul 14 11:07:54 2009
@@ -38,6 +38,7 @@
 #include "asterisk/astdb.h"
 #include "asterisk/features.h"
 #include "asterisk/cel.h"
+#include "asterisk/causes.h"
 
 #include "sig_analog.h"
 
@@ -384,10 +385,10 @@
 		return -1;
 }
 
-static int analog_is_off_hook(struct analog_pvt *p, int debug)
+static int analog_is_off_hook(struct analog_pvt *p)
 {
 	if (p->calls->is_off_hook)
-		return p->calls->is_off_hook(p->chan_pvt, debug);
+		return p->calls->is_off_hook(p->chan_pvt);
 	else
 		return -1;
 }
@@ -621,7 +622,7 @@
 		if (p->sig == ANALOG_SIG_FXSLS)
 			return 1;
 
-		offhook = analog_is_off_hook(p, 0);
+		offhook = analog_is_off_hook(p);
 
 		if ((p->sig == ANALOG_SIG_FXSKS) || (p->sig == ANALOG_SIG_FXSGS)) {
 			/* When "onhook" that means no battery on the line, and thus
@@ -1067,7 +1068,7 @@
 		case ANALOG_SIG_FXOLS:
 		case ANALOG_SIG_FXOKS:
 			/* If they're off hook, try playing congestion */
-			if (analog_is_off_hook(p, 1))
+			if (analog_is_off_hook(p))
 				analog_play_tone(p, ANALOG_SUB_REAL, ANALOG_TONE_CONGESTION);
 			else
 				analog_play_tone(p, ANALOG_SUB_REAL, -1);
@@ -2253,7 +2254,7 @@
 						/* It hasn't been long enough since the last flashook.  This is probably a bounce on
 						   hanging up.  Hangup both channels now */
 						if (p->subs[ANALOG_SUB_THREEWAY].owner)
-							ast_queue_hangup(p->subs[ANALOG_SUB_THREEWAY].owner);
+							ast_queue_hangup_with_cause(p->subs[ANALOG_SUB_THREEWAY].owner, AST_CAUSE_NO_ANSWER);
 						ast_softhangup_nolock(p->subs[ANALOG_SUB_THREEWAY].owner, AST_SOFTHANGUP_DEV);
 						ast_debug(1, "Looks like a bounced flash, hanging up both calls on %d\n", p->channel);
 						ast_channel_unlock(p->subs[ANALOG_SUB_THREEWAY].owner);

Modified: team/jpeeler/asterisk-sigwork-trunk/channels/sig_analog.h
URL: http://svn.asterisk.org/svn-view/asterisk/team/jpeeler/asterisk-sigwork-trunk/channels/sig_analog.h?view=diff&rev=206454&r1=206453&r2=206454
==============================================================================
--- team/jpeeler/asterisk-sigwork-trunk/channels/sig_analog.h (original)
+++ team/jpeeler/asterisk-sigwork-trunk/channels/sig_analog.h Tue Jul 14 11:07:54 2009
@@ -123,7 +123,7 @@
 
 	int (* const get_event)(void *pvt);
 	int (* const wait_event)(void *pvt);
-	int (* const is_off_hook)(void *pvt, int debug);
+	int (* const is_off_hook)(void *pvt);
 	int (* const is_dialing)(void *pvt, enum analog_sub sub);
 	/* Start a trunk type signalling protocol (everything except phone ports basically */
 	int (* const start)(void *pvt);




More information about the asterisk-commits mailing list