[libpri-commits] rmudgett: branch 1.4 r2331 - /branches/1.4/q931.c

SVN commits to the libpri project libpri-commits at lists.digium.com
Mon Nov 17 14:08:01 CST 2014


Author: rmudgett
Date: Mon Nov 17 14:07:53 2014
New Revision: 2331

URL: http://svnview.digium.com/svn/libpri?view=rev&rev=2331
Log:
q931.c: Send STATUS messages when receiving messages in the wrong call state.

* Add checks to send STATUS messages when receiving SETUP ACKNOWLEDGE,
ALERTING, and CONNECT ACKNOWLEDGE messages when in the wrong call state.

LIBPRI-76 #close
Reported by: Richard Mudgett

Modified:
    branches/1.4/q931.c

Modified: branches/1.4/q931.c
URL: http://svnview.digium.com/svn/libpri/branches/1.4/q931.c?view=diff&rev=2331&r1=2330&r2=2331
==============================================================================
--- branches/1.4/q931.c (original)
+++ branches/1.4/q931.c Mon Nov 17 14:07:53 2014
@@ -8696,6 +8696,15 @@
 			q931_release_complete(ctrl, c, newcall_rel_comp_cause(c));
 			break;
 		}
+		switch (c->ourcallstate) {
+		default:
+			q931_status(ctrl, c, PRI_CAUSE_WRONG_CALL_STATE);
+			return 0;
+		case Q931_CALL_STATE_CALL_INITIATED:
+		case Q931_CALL_STATE_OVERLAP_SENDING:
+		case Q931_CALL_STATE_OUTGOING_CALL_PROCEEDING:
+			break;
+		}
 		UPDATE_OURCALLSTATE(ctrl, c, Q931_CALL_STATE_CALL_DELIVERED);
 		c->peercallstate = Q931_CALL_STATE_CALL_RECEIVED;
 		ctrl->ev.e = PRI_EVENT_RINGING;
@@ -8866,11 +8875,8 @@
 		}
 		switch (c->ourcallstate) {
 		default:
-			if (ctrl->localtype == PRI_NETWORK || ctrl->switchtype == PRI_SWITCH_QSIG) {
-				q931_status(ctrl, c, PRI_CAUSE_WRONG_MESSAGE);
-				break;
-			}
-			/* Fall through */
+			q931_status(ctrl, c, PRI_CAUSE_WRONG_CALL_STATE);
+			return 0;
 		case Q931_CALL_STATE_CONNECT_REQUEST:
 		case Q931_CALL_STATE_ACTIVE:
 			UPDATE_OURCALLSTATE(ctrl, c, Q931_CALL_STATE_ACTIVE);
@@ -9206,6 +9212,13 @@
 		stop_t303(c->master_call);
 		if (c->newcall) {
 			q931_release_complete(ctrl, c, newcall_rel_comp_cause(c));
+			break;
+		}
+		switch (c->ourcallstate) {
+		default:
+			q931_status(ctrl, c, PRI_CAUSE_WRONG_CALL_STATE);
+			return 0;
+		case Q931_CALL_STATE_CALL_INITIATED:
 			break;
 		}
 		UPDATE_OURCALLSTATE(ctrl, c, Q931_CALL_STATE_OVERLAP_SENDING);




More information about the libpri-commits mailing list