[libpri-commits] mattf: branch mattf/libpri-1.4-q921-rewrite r1363 - /team/mattf/libpri-1.4-q9...
SVN commits to the libpri project
libpri-commits at lists.digium.com
Mon Dec 7 17:02:29 CST 2009
Author: mattf
Date: Mon Dec 7 17:02:25 2009
New Revision: 1363
URL: http://svnview.digium.com/svn/libpri?view=rev&rev=1363
Log:
Add more MDL handling code for NT-PTMP TEI error handling. Also add PRI_EVENT_DCHAN_DOWN when it should be down on PTP links for backwards compatibility.
Modified:
team/mattf/libpri-1.4-q921-rewrite/pri_internal.h
team/mattf/libpri-1.4-q921-rewrite/q921.c
Modified: team/mattf/libpri-1.4-q921-rewrite/pri_internal.h
URL: http://svnview.digium.com/svn/libpri/team/mattf/libpri-1.4-q921-rewrite/pri_internal.h?view=diff&rev=1363&r1=1362&r2=1363
==============================================================================
--- team/mattf/libpri-1.4-q921-rewrite/pri_internal.h (original)
+++ team/mattf/libpri-1.4-q921-rewrite/pri_internal.h Mon Dec 7 17:02:25 2009
@@ -93,6 +93,7 @@
int mdl_error;
int mdl_error_state;
int mdl_timer;
+ int mdl_free_me;
/* Q.921 State */
int q921_state;
Modified: team/mattf/libpri-1.4-q921-rewrite/q921.c
URL: http://svnview.digium.com/svn/libpri/team/mattf/libpri-1.4-q921-rewrite/q921.c?view=diff&rev=1363&r1=1362&r2=1363
==============================================================================
--- team/mattf/libpri-1.4-q921-rewrite/q921.c (original)
+++ team/mattf/libpri-1.4-q921-rewrite/q921.c Mon Dec 7 17:02:25 2009
@@ -1113,6 +1113,14 @@
pri_error(pri, "Cannot handle MDL remove when PRI is in state %d\n", pri->q921_state);
break;
}
+
+ if (BRI_NT_PTMP(pri) && pri->q921_state == Q921_TEI_UNASSIGNED) {
+ if (pri == PRI_MASTER(pri)) {
+ pri_error(pri, "Bad bad bad! Asked to free master\n");
+ return;
+ }
+ pri->mdl_free_me = 1;
+ }
}
static int q921_mdl_handle_network_error(struct pri *pri, char error)
@@ -1123,6 +1131,9 @@
case 'D':
case 'G':
case 'H':
+ q921_mdl_remove(pri);
+ handled = 1;
+ break;
case 'A':
case 'B':
case 'E':
@@ -1172,6 +1183,11 @@
/* We pick it back up and put it back together for this case */
q921_discard_iqueue(pri);
q921_establish_data_link(pri);
+ q921_setstate(pri, Q921_AWAITING_ESTABLISHMENT);
+
+ pri->schedev = 1;
+ pri->ev.gen.e = PRI_EVENT_DCHAN_DOWN;
+
handled = 1;
break;
default:
@@ -1224,6 +1240,8 @@
pri_error(pri, "MDL-ERROR (%c) in state %d\n", error, errored_state);
}
+
+ return;
}
static void q921_mdl_handle_error_callback(void *vpri)
@@ -1234,6 +1252,32 @@
pri->mdl_error = 0;
pri->mdl_timer = 0;
+
+ if (pri->mdl_free_me) {
+ struct pri *master = PRI_MASTER(pri);
+ struct pri *freep = NULL, *prev, *cur;
+ prev = master;
+ cur = master->subchannel;
+
+ while (cur) {
+ if (cur == pri) {
+ prev->subchannel = cur->subchannel;
+ freep = cur;
+ break;
+ }
+ prev = cur;
+ cur = cur->subchannel;
+ }
+
+ if (free == NULL) {
+ pri_error(pri, "Huh!? no match found in list for TEI %d\n", pri->tei);
+ return;
+ }
+
+ free(free);
+ }
+
+ return;
}
static void q921_mdl_error(struct pri *pri, char error)
More information about the libpri-commits
mailing list