[libpri-commits] mattf: trunk r491 - in /trunk: q921.c q931.c testprilib.c
SVN commits to the libpri project
libpri-commits at lists.digium.com
Tue Dec 4 12:01:51 CST 2007
Author: mattf
Date: Tue Dec 4 12:01:51 2007
New Revision: 491
URL: http://svn.digium.com/view/libpri?view=rev&rev=491
Log:
More magic to make BRI CPE PTMP work
Modified:
trunk/q921.c
trunk/q931.c
trunk/testprilib.c
Modified: trunk/q921.c
URL: http://svn.digium.com/view/libpri/trunk/q921.c?view=diff&rev=491&r1=490&r2=491
==============================================================================
--- trunk/q921.c (original)
+++ trunk/q921.c Tue Dec 4 12:01:51 2007
@@ -438,6 +438,11 @@
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);
if (f) {
@@ -968,8 +973,16 @@
} else if (!h->u.m2) {
if ((pri->sapi == Q921_SAPI_LAYER2_MANAGEMENT) && (pri->tei == Q921_TEI_GROUP))
q921_receive_MDL(pri, (q921_u *)h, len);
- else
- pri_message(pri, "XXX Unnumbered Information not implemented XXX\n");
+ else {
+ int res;
+
+ res = q931_receive(pri, (q931_h *) h->u.data, len - 3);
+ if (res == -1) {
+ return NULL;
+ }
+ if (res & Q931_RES_HAVEEVENT)
+ return &pri->ev;
+ }
}
break;
case 2:
@@ -1048,8 +1061,9 @@
return NULL;
#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)) {
+ //if ((h->h.sapi != pri->sapi) || ((h->h.tei != pri->tei) && (h->h.tei != Q921_TEI_GROUP))) {
//#ifdef PROCESS_SUBCHANNELS
/* If it's not us, try any subchannels we have */
if (pri->subchannel)
Modified: trunk/q931.c
URL: http://svn.digium.com/view/libpri/trunk/q931.c?view=diff&rev=491&r1=490&r2=491
==============================================================================
--- trunk/q931.c (original)
+++ trunk/q931.c Tue Dec 4 12:01:51 2007
@@ -657,7 +657,7 @@
return 0;
tc = call->transcapability;
- if (pri->subchannel) {
+ if (pri->subchannel && !pri->bri) {
/* Bearer capability is *hard coded* in GR-303 */
ie->data[0] = 0x88;
ie->data[1] = 0x90;
@@ -1285,7 +1285,7 @@
{
int code, mask;
/* Can't send progress indicator on GR-303 -- EVER! */
- if (pri->subchannel)
+ if (pri->subchannel && !pri->bri)
return 0;
if (call->progressmask > 0) {
if (call->progressmask & (mask = PRI_PROG_CALL_NOT_E2E_ISDN))
@@ -2231,6 +2231,11 @@
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);
+
prev = NULL;
cur = *pri->callpool;
while(cur) {
@@ -2408,7 +2413,7 @@
h->crv[0] = 0;
h->crv[1] = 0;
}
- if (pri->subchannel) {
+ if (pri->subchannel && !pri->bri) {
/* On GR-303, top bit is always 0 */
h->crv[0] &= 0x7f;
}
@@ -2744,7 +2749,7 @@
if (c->retranstimer)
pri_schedule_del(pri, c->retranstimer);
c->retranstimer = 0;
- if ((c->ourcallstate == Q931_CALL_STATE_CONNECT_REQUEST) && (!pri->subchannel))
+ if ((c->ourcallstate == Q931_CALL_STATE_CONNECT_REQUEST) && (pri->bri || (!pri->subchannel)))
c->retranstimer = pri_schedule_event(pri, pri->timers[PRI_TIMER_T313], pri_connect_timeout, c);
return send_message(pri, c, Q931_CONNECT, connect_ies);
}
@@ -2838,7 +2843,7 @@
c->ds1no = (req->channel & 0xff00) >> 8;
c->ds1explicit = (req->channel & 0x10000) >> 16;
req->channel &= 0xff;
- if ((pri->localtype == PRI_CPE) && pri->subchannel) {
+ if ((pri->localtype == PRI_CPE) && pri->subchannel && !pri->bri) {
req->channel = 0;
req->exclusive = 0;
}
@@ -2908,7 +2913,7 @@
pri_call_add_standard_apdus(pri, c);
- if (pri->subchannel)
+ if (pri->subchannel && !pri->bri)
res = send_message(pri, c, Q931_SETUP, gr303_setup_ies);
else if (c->justsignalling)
res = send_message(pri, c, Q931_SETUP, cis_setup_ies);
@@ -2952,7 +2957,7 @@
static int q931_connect_acknowledge(struct pri *pri, q931_call *c)
{
- if (pri->subchannel) {
+ if (pri->subchannel && !pri->bri) {
if (pri->localtype == PRI_CPE)
return send_message(pri, c, Q931_CONNECT_ACKNOWLEDGE, gr303_connect_acknowledge_ies);
} else
Modified: trunk/testprilib.c
URL: http://svn.digium.com/view/libpri/trunk/testprilib.c?view=diff&rev=491&r1=490&r2=491
==============================================================================
--- trunk/testprilib.c (original)
+++ trunk/testprilib.c Tue Dec 4 12:01:51 2007
@@ -254,7 +254,7 @@
perror("socketpair");
exit(1);
}
- if (!(pri = pri_new_bri(pair[0], PRI_NETWORK, PRI_DEF_SWITCHTYPE))) {
+ if (!(pri = pri_new_bri(pair[0], 0, PRI_NETWORK, PRI_DEF_SWITCHTYPE))) {
perror("pri(0)");
exit(1);
}
@@ -265,7 +265,7 @@
perror("thread(0)");
exit(1);
}
- if (!(pri = pri_new_bri(pair[1], PRI_CPE, PRI_DEF_SWITCHTYPE))) {
+ if (!(pri = pri_new_bri(pair[1], 0, PRI_CPE, PRI_DEF_SWITCHTYPE))) {
perror("pri(1)");
exit(1);
}
More information about the libpri-commits
mailing list