[svn-commits] mattf: trunk r492 - in /trunk: q921.c q931.c
SVN commits to the Digium repositories
svn-commits at lists.digium.com
Tue Dec 4 18:12:54 CST 2007
Author: mattf
Date: Tue Dec 4 18:12:54 2007
New Revision: 492
URL: http://svn.digium.com/view/libpri?view=rev&rev=492
Log:
More PTMP fixes. Stand by, more changes to come
Modified:
trunk/q921.c
trunk/q931.c
Modified: trunk/q921.c
URL: http://svn.digium.com/view/libpri/trunk/q921.c?view=diff&rev=492&r1=491&r2=492
==============================================================================
--- trunk/q921.c (original)
+++ trunk/q921.c Tue Dec 4 18:12:54 2007
@@ -438,10 +438,6 @@
int q921_transmit_iframe(struct pri *pri, void *buf, int len, int cr)
{
q921_frame *f, *prev=NULL;
-
- /* Exception for BRI CPE PTMP */
- if (pri->bri && (pri->localtype == PRI_CPE) && pri->subchannel)
- return q921_transmit_iframe(pri->subchannel, buf, len, cr);
for (f=pri->txqueue; f; f = f->next) prev = f;
f = malloc(sizeof(q921_frame) + len + 2);
@@ -1062,14 +1058,11 @@
#endif
if (!((h->h.sapi == pri->sapi) && ((h->h.tei == pri->tei) || (h->h.tei == Q921_TEI_GROUP)))) {
- /* Check for SAPIs we don't yet handle */
- //if ((h->h.sapi != pri->sapi) || ((h->h.tei != pri->tei) && (h->h.tei != Q921_TEI_GROUP))) {
-//#ifdef PROCESS_SUBCHANNELS
+ /* Check for SAPIs we don't yet handle */
/* If it's not us, try any subchannels we have */
if (pri->subchannel)
return q921_receive(pri->subchannel, h, len + 2);
else
-//#endif
{
pri_error(pri, "Message for SAPI/TEI=%d/%d IS NOT HANDLED\n", h->h.sapi, h->h.tei);
return NULL;
Modified: trunk/q931.c
URL: http://svn.digium.com/view/libpri/trunk/q931.c?view=diff&rev=492&r1=491&r2=492
==============================================================================
--- trunk/q931.c (original)
+++ trunk/q931.c Tue Dec 4 18:12:54 2007
@@ -2177,10 +2177,15 @@
pri_error(pri, "!! %c Unknown IE %d (cs%d, len = %d)\n", prefix, Q931_IE_IE(base_ie), Q931_IE_CODESET(base_ie), ielen(ie));
}
-static q931_call *q931_getcall(struct pri *pri, int cr)
+static q931_call *q931_getcall(struct pri *pri, int cr, int newcall)
{
q931_call *cur, *prev;
- cur = *pri->callpool;
+ struct pri *master;
+
+ /* Find the master - He has the call pool */
+ for (master = pri; master->master; master = master->master);
+
+ cur = *master->callpool;
prev = NULL;
while(cur) {
if (cur->cr == cr)
@@ -2196,12 +2201,17 @@
call_init(cur);
/* Call reference */
cur->cr = cr;
- cur->pri = pri;
+ /* PRI is set to whoever called us */
+ if (pri->bri && (pri->localtype == PRI_CPE) && pri->subchannel && newcall)
+ cur->pri = pri->subchannel;
+ else
+ cur->pri = pri;
+
/* Append to end of list */
if (prev)
prev->next = cur;
else
- *pri->callpool = cur;
+ *master->callpool = cur;
}
return cur;
}
@@ -2209,6 +2219,7 @@
q931_call *q931_new_call(struct pri *pri)
{
q931_call *cur;
+
do {
cur = *pri->callpool;
pri->cref++;
@@ -2225,16 +2236,16 @@
cur = cur->next;
}
} while(cur);
- return q931_getcall(pri, pri->cref | 0x8000);
+
+ return q931_getcall(pri, pri->cref | 0x8000, 1);
}
static void q931_destroy(struct pri *pri, int cr, q931_call *c)
{
q931_call *cur, *prev;
- /* Magic for BRI PTMP CPE */
- if (pri->subchannel && (pri->localtype == PRI_CPE) && pri->bri)
- return q931_destroy(pri->subchannel, cr, c);
+ /* For destroying, make sure we are using the master span, since it maintains the call pool */
+ for (;pri->master; pri = pri->master);
prev = NULL;
cur = *pri->callpool;
@@ -2482,7 +2493,7 @@
}
/* Invert the logic */
len = sizeof(buf) - len;
- q931_xmit(pri, h, len, 1);
+ q931_xmit(c->pri, h, len, 1);
c->acked = 1;
return 0;
}
@@ -2785,7 +2796,7 @@
int q931_restart(struct pri *pri, int channel)
{
struct q931_call *c;
- c = q931_getcall(pri, 0 | 0x8000);
+ c = q931_getcall(pri, 0 | 0x8000, 0);
if (!c)
return -1;
if (!channel)
@@ -3091,7 +3102,7 @@
pri_error(pri, "Warning: unknown/inappropriate protocol discriminator received (%02x/%d)\n", h->pd, h->pd);
return 0;
}
- c = q931_getcall(pri, q931_cr(h));
+ c = q931_getcall(pri, q931_cr(h), 0);
if (!c) {
pri_error(pri, "Unable to locate call %d\n", q931_cr(h));
return -1;
More information about the svn-commits
mailing list