diff -Naur libpri-1.4.7.orig/pri_internal.h libpri-1.4.7/pri_internal.h --- libpri-1.4.7.orig/pri_internal.h 2008-08-05 22:18:12.000000000 +0000 +++ libpri-1.4.7/pri_internal.h 2008-12-04 04:06:10.000000000 +0000 @@ -193,6 +193,7 @@ int transmoderate; int transmultiple; int userl1; + int nouserl1; /* Nonzero if userl1 unspecified */ int userl2; int userl3; int rateadaption; diff -Naur libpri-1.4.7.orig/q931.c libpri-1.4.7/q931.c --- libpri-1.4.7.orig/q931.c 2008-08-05 22:18:12.000000000 +0000 +++ libpri-1.4.7/q931.c 2008-12-04 04:15:56.000000000 +0000 @@ -766,8 +766,16 @@ while (pos < len && !(ie->data[pos-1] & 0x80)) { pos++; } - + /* Octet 5 was present */ + call->nouserl1 = 0; } + else if( (call->transcapability & PRI_TRANS_CAP_RESTRICTED_DIGITAL) || + (call->transcapability & PRI_TRANS_CAP_DIGITAL) ) { + /* The call was either DIGITAL or RESTRICTED digital, and + octet 5 was *not* present. This is acceptable per note 6, + page 60 of Q.931 */ + call->nouserl1 = 1; + } /* Look for octet 6; this is identified by bits 5,6 == 10 */ if (pos < len && @@ -820,6 +828,13 @@ /* Apparently EuroISDN switches don't seem to like user layer 2/3 */ return 4; } + + if ( ( (tc & PRI_TRANS_CAP_DIGITAL) || + (tc & PRI_TRANS_CAP_RESTRICTED_DIGITAL) ) && call->nouserl1 ) { + /* Octet 5 should remain absent */ + return 4; + } + if (call->transmoderate != TRANS_MODE_PACKET) { /* If you have an AT&T 4ESS, you don't send any more info */ if ((pri->switchtype != PRI_SWITCH_ATT4ESS) && (call->userl1 > -1)) { diff -Naur libpri-1.4.7.orig/version.c libpri-1.4.7/version.c --- libpri-1.4.7.orig/version.c 1970-01-01 00:00:00.000000000 +0000 +++ libpri-1.4.7/version.c 2008-12-04 04:11:16.000000000 +0000 @@ -0,0 +1,14 @@ +/* + * version.c + * Automatically generated + */ + +#include "libpri.h" + +static const char pri_version[] = "1.4.7"; + +const char *pri_get_version(void) +{ + return pri_version; +} +