Index: channels/chan_dahdi.c
===================================================================
472a473
> int h324musellc;
1193a1195
> .h324musellc = 0,
3049a3052,3058
> if (p->digital) {
> if (option_verbose > 2)
> ast_verbose(VERBOSE_PREFIX_3 "digital call, setting user information layer 1 to %d (0x%x)\n",
> ast->userinformationlayer1, ast->userinformationlayer1);
> d
> }
>
3052c3061
< (p->digital ? -1 :
---
> (p->digital ? ast->userinformationlayer1 :
3053a3063,3073
>
> /* check if h324m is configure to use low layer compatibility instead of bearer capability */
> ast_verbose(VERBOSE_PREFIX_3 "dahdi call: h324musellc=%d, ast->userinformationlayer1=%d\n",
> p->pri->h324musellc, ast->userinformationlayer1);
>
> if (p->pri->h324musellc && (ast->userinformationlayer1==PRI_LAYER_1_H223_H245)) {
> pri_sr_set_llc(sr, p->digital ? PRI_TRANS_CAP_DIGITAL : ast->transfercapability,
> (p->digital ? ast->userinformationlayer1 :
> ((p->law == DAHDI_LAW_ALAW) ? PRI_LAYER_1_ALAW : PRI_LAYER_1_ULAW)));
> }
>
4696c4716
< static struct ast_channel *dahdi_new(struct dahdi_pvt *, int, int, int, int, int);
---
> static struct ast_channel *dahdi_new(struct dahdi_pvt *, int, int, int, int, int, int);
5483c5503
< chan = dahdi_new(p, AST_STATE_RESERVED, 0, SUB_THREEWAY, 0, 0);
---
> chan = dahdi_new(p, AST_STATE_RESERVED, 0, SUB_THREEWAY, 0, 0, -1);
6524c6544,6545
< static struct ast_channel *dahdi_new(struct dahdi_pvt *i, int state, int startpbx, int idx, int law, int transfercapability)
---
> static struct ast_channel *dahdi_new(struct dahdi_pvt *i, int state, int startpbx, int idx, int law,
> int transfercapability, int userinformationlayer1)
6566c6587,6588
< if (ps.curlaw == DAHDI_LAW_ALAW)
---
> if (ps.curlaw == DAHDI_LAW_ALAW) {
> ast_log(LOG_DEBUG, "dahdi_new: ps.curlaw=DAHDI_LAW_ALAW, setting deflaw to AST_FORMAT_ALAW\n");
6568c6590,6591
< else
---
> } else {
> ast_log(LOG_DEBUG, "dahdi_new: ps.curlaw!=DAHDI_LAW_ALAW, setting deflaw to AST_FORMAT_ULAW\n");
6569a6593
> }
6571c6595,6596
< if (law == DAHDI_LAW_ALAW)
---
> if (law == DAHDI_LAW_ALAW) {
> ast_log(LOG_DEBUG, "zt_new: law=DAHDI_LAW_ALAW, setting deflaw to AST_FORMAT_ALAW\n");
6573c6598,6599
< else
---
> } else {
> ast_log(LOG_DEBUG, "zt_new: law=DAHDI_LAW_ALAW, setting deflaw to AST_FORMAT_ULAW\n");
6575a6602,6603
> }
>
6681a6710
> tmp->userinformationlayer1 = userinformationlayer1;
7660a7690,7695
> if (option_verbose > 2)
> /* this only shows up if you have n of the dring patterns filled in */
> ast_verbose( VERBOSE_PREFIX_3 "Checking %d,%d,%d\n",
> p->drings.ringnum[counter].ring[0],
> p->drings.ringnum[counter].ring[1],
> p->drings.ringnum[counter].ring[2]);
8062c8097
< if ((chan = dahdi_new(mtd->pvt, AST_STATE_RING, 0, SUB_REAL, 0, 0))) {
---
> if ((chan = dahdi_new(mtd->pvt, AST_STATE_RING, 0, SUB_REAL, 0, 0, -1))) {
8381c8416
< chan = dahdi_new(i, AST_STATE_RING, 1, SUB_REAL, 0, 0);
---
> chan = dahdi_new(i, AST_STATE_RING, 1, SUB_REAL, 0, 0, -1);
8390c8425
< chan = dahdi_new(i, AST_STATE_RESERVED, 0, SUB_REAL, 0, 0);
---
> chan = dahdi_new(i, AST_STATE_RESERVED, 0, SUB_REAL, 0, 0, -1);
8433c8468
< chan = dahdi_new(i, AST_STATE_PRERING, 0, SUB_REAL, 0, 0);
---
> chan = dahdi_new(i, AST_STATE_PRERING, 0, SUB_REAL, 0, 0, -1);
8435c8470
< chan = dahdi_new(i, AST_STATE_RING, 0, SUB_REAL, 0, 0);
---
> chan = dahdi_new(i, AST_STATE_RING, 0, SUB_REAL, 0, 0, -1);
8543c8578
< chan = dahdi_new(i, AST_STATE_PRERING, 0, SUB_REAL, 0, 0);
---
> chan = dahdi_new(i, AST_STATE_PRERING, 0, SUB_REAL, 0, 0, -1);
9920c9955
< tmp = dahdi_new(p, AST_STATE_RESERVED, 0, p->owner ? SUB_CALLWAIT : SUB_REAL, 0, 0);
---
> tmp = dahdi_new(p, AST_STATE_RESERVED, 0, p->owner ? SUB_CALLWAIT : SUB_REAL, 0, 0, -1);
11685a11721
> ast_log(LOG_DEBUG, "PRI_EVENT_RING: seting incoming call on channel %d to law=%d\n", pri->pvts[chanpos]->channel, law);
11689c11725,11726
< if (e->ring.layer1 == PRI_LAYER_1_ALAW)
---
> ast_log(LOG_DEBUG, "PRI_EVENT_RING: user information layer 1 of incoming call = %d (0x%x)\n",e->ring.layer1, e->ring.layer1);
> if (e->ring.layer1 == PRI_LAYER_1_ALAW) {
11691c11728,11729
< else
---
> ast_log(LOG_DEBUG, "PRI_EVENT_RING: treat incoming call on channel %d as ALAW(%d)\n", pri->pvts[chanpos]->channel, law);
> } else {
11692a11731,11733
> ast_log(LOG_DEBUG, "PRI_EVENT_RING: treat incoming call on channel %d as ULAW(%d)\n", pri->pvts[chanpos]->channel, law);
> }
> ast_log(LOG_DEBUG, "PRI_EVENT_RING: seting incoming call on channel %d to law=%d\n", pri->pvts[chanpos]->channel, law);
11719c11760
< c = dahdi_new(crv, AST_STATE_RESERVED, 0, SUB_REAL, law, e->ring.ctype);
---
> c = dahdi_new(crv, AST_STATE_RESERVED, 0, SUB_REAL, law, e->ring.ctype, e->ring.layer1);
11723c11764
< c = dahdi_new(pri->pvts[chanpos], AST_STATE_RESERVED, 0, SUB_REAL, law, e->ring.ctype);
---
> c = dahdi_new(pri->pvts[chanpos], AST_STATE_RESERVED, 0, SUB_REAL, law, e->ring.ctype, e->ring.layer1);
11767c11808,11809
< c = dahdi_new(pri->pvts[chanpos], AST_STATE_RING, 1, SUB_REAL, law, e->ring.ctype);
---
> ast_log(LOG_DEBUG, "PRI_EVENT_RING: zt_new: law=%d,ul1=%d\n",law, e->ring.layer1);
> c = dahdi_new(pri->pvts[chanpos], AST_STATE_RING, 1, SUB_REAL, law, e->ring.ctype, e->ring.layer1);
13189a13232,13235
> if (tmp->pri->h324musellc == 1)
> ast_cli(fd, "H324M Signalling: use 'Low Layer Compatibility' IE\n");
> else
> ast_cli(fd, "H324M Signalling: use 'Bearer Capability' IE\n");
15047a15094,15103
> } else if (!strcasecmp(v->name, "h324m")) {
> if (!strcasecmp(v->value, "bc")) {
> confp->pri.h324musellc = 0;
> ast_log(LOG_WARNING, "h324m mode: confp->pri.h324musellc=%d\n",confp->pri.h324musellc);
> } else if (!strcasecmp(v->value, "llc")) {
> confp->pri.h324musellc = 1;
> ast_log(LOG_WARNING, "h324m mode: confp->pri.h324musellc=%d\n",confp->pri.h324musellc);
> } else {
> ast_log(LOG_WARNING, "Unknown h324m mode '%s' at line %d. Using default=bc\n", v->value, v->lineno);
> }
Index: apps/app_dial.c
===================================================================
1746a1747
> tc->userinformationlayer1 = chan->userinformationlayer1;
Index: funcs/func_channel.c
===================================================================
94a95,97
>
> R/W transfercapability ISDN transfer capability (part of ISDN transfer capability).
>
97a101,103
>
> R/W userinformationlayer1 ISDN User Information Layer 1 (part of ISDN transfer capability)
>
260c266,270
< else if (!strcasecmp(data, "callgroup")) {
---
> else if (!strcasecmp(data, "userinformationlayer1")) {
> char ul1[10];
> snprintf(ul1,9,"%d",chan->userinformationlayer1);
> locked_copy_string(chan, buf, ul1, len);
> } else if (!strcasecmp(data, "callgroup")) {
327a338,339
> } else if (!strcasecmp(data, "userinformationlayer1")) {
> chan->userinformationlayer1 = atoi(value);
330,331c342
< ast_log(LOG_WARNING, "Unknown or unavailable item requested: '%s'\n",
< data);
---
> ast_log(LOG_WARNING, "Unknown or unavailable item requested: '%s'\n", data);
Index: include/asterisk/channel.h
===================================================================
497a498
> unsigned short userinformationlayer1; /*!< ISDN User Information Layer 1 - transfercapability is not enough */
Index: configs/chan_dahdi.conf.sample
===================================================================
336a337,345
> ; H324M signalling. 3G UMTS video calls require to set a certain User Information Layer 1
> ; value. The UL1 can be set either in the Bearer Capability Information Element or in the
> ; Low Layer Compatiblity Information Element. Depending on the switch were your PRI is
> ; connected to, you need one or the other.
> ; Allowed values: bc or llc
> ; Default value: bc
> ;
> ;h324m=lcc
> ;