summaryrefslogtreecommitdiffstats
path: root/sys/i4b/layer4
diff options
context:
space:
mode:
authorhm <hm@FreeBSD.org>2002-03-26 15:13:54 +0000
committerhm <hm@FreeBSD.org>2002-03-26 15:13:54 +0000
commit25f947ea149db4604529c9e31feda26269f819e5 (patch)
tree5abe05bd14e0b0acac3cdcf57a344efa514c2941 /sys/i4b/layer4
parent35f8225fa61cfd2d64f4156d7ea09e738df689bd (diff)
downloadFreeBSD-src-25f947ea149db4604529c9e31feda26269f819e5.zip
FreeBSD-src-25f947ea149db4604529c9e31feda26269f819e5.tar.gz
Add support for Q.931 subaddresses.
Submitted by: Steven Looman <fsteevie@wish.net>
Diffstat (limited to 'sys/i4b/layer4')
-rw-r--r--sys/i4b/layer4/i4b_i4bdrv.c3
-rw-r--r--sys/i4b/layer4/i4b_l4.c28
2 files changed, 27 insertions, 4 deletions
diff --git a/sys/i4b/layer4/i4b_i4bdrv.c b/sys/i4b/layer4/i4b_i4bdrv.c
index 7000add..e0c4d6a 100644
--- a/sys/i4b/layer4/i4b_i4bdrv.c
+++ b/sys/i4b/layer4/i4b_i4bdrv.c
@@ -292,6 +292,9 @@ i4bioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct thread *td)
strcpy(cd->dst_telno, mcr->dst_telno);
strcpy(cd->src_telno, mcr->src_telno);
+ strcpy(cd->dst_subaddr, mcr->dst_subaddr);
+ strcpy(cd->src_subaddr, mcr->src_subaddr);
+
if(mcr->keypad[0] != '\0')
strcpy(cd->keypad, mcr->keypad);
else
diff --git a/sys/i4b/layer4/i4b_l4.c b/sys/i4b/layer4/i4b_l4.c
index 0980862..1f5163b 100644
--- a/sys/i4b/layer4/i4b_l4.c
+++ b/sys/i4b/layer4/i4b_l4.c
@@ -204,6 +204,7 @@ i4b_l4_dialoutnumber(int driver, int driver_unit, int cmdlen, char *cmd)
if((m = i4b_Dgetmbuf(sizeof(msg_dialoutnumber_ind_t))) != NULL)
{
msg_dialoutnumber_ind_t *md = (msg_dialoutnumber_ind_t *)m->m_data;
+ int i;
md->header.type = MSG_DIALOUTNUMBER_IND;
md->header.cdid = -1;
@@ -211,11 +212,20 @@ i4b_l4_dialoutnumber(int driver, int driver_unit, int cmdlen, char *cmd)
md->driver = driver;
md->driver_unit = driver_unit;
- if(cmdlen > TELNO_MAX)
- cmdlen = TELNO_MAX;
+ for (i = 0; i < cmdlen; i++)
+ if (cmd[i] == '*')
+ break;
- md->cmdlen = cmdlen;
- bcopy(cmd, md->cmd, cmdlen);
+ /* XXX: TELNO_MAX is _with_ tailing '\0', so max is actually TELNO_MAX - 1 */
+ md->cmdlen = (i < TELNO_MAX - 1 ? i : TELNO_MAX - 1);
+ /* skip the (first) '*' */
+ md->subaddrlen = (cmdlen - i - 1 < SUBADDR_MAX - 1 ? cmdlen - i - 1 : SUBADDR_MAX - 1);
+
+ bcopy(cmd, md->cmd, md->cmdlen);
+ if (md->subaddrlen != -1)
+ bcopy(cmd+i+1, md->subaddr, md->subaddrlen);
+
+ NDBGL4(L4_TIMO, "cmd[%d]=%s, subaddr[%d]=%s", md->cmdlen, md->cmd, md->subaddrlen, md->subaddr);
i4bputqueue(m);
}
}
@@ -365,11 +375,21 @@ i4b_l4_connect_ind(call_desc_t *cd)
else
strcpy(mp->dst_telno, TELNO_EMPTY);
+ if(strlen(cd->dst_subaddr) > 0)
+ strcpy(mp->dst_subaddr, cd->dst_subaddr);
+ else
+ strcpy(mp->dst_subaddr, TELNO_EMPTY);
+
if(strlen(cd->src_telno) > 0)
strcpy(mp->src_telno, cd->src_telno);
else
strcpy(mp->src_telno, TELNO_EMPTY);
+ if(strlen(cd->src_subaddr) > 0)
+ strcpy(mp->src_subaddr, cd->src_subaddr);
+ else
+ strcpy(mp->src_subaddr, TELNO_EMPTY);
+
strcpy(mp->display, cd->display);
mp->scr_ind = cd->scr_ind;
OpenPOWER on IntegriCloud