diff options
author | hm <hm@FreeBSD.org> | 2002-03-26 15:13:54 +0000 |
---|---|---|
committer | hm <hm@FreeBSD.org> | 2002-03-26 15:13:54 +0000 |
commit | 25f947ea149db4604529c9e31feda26269f819e5 (patch) | |
tree | 5abe05bd14e0b0acac3cdcf57a344efa514c2941 /sys/i4b/layer4 | |
parent | 35f8225fa61cfd2d64f4156d7ea09e738df689bd (diff) | |
download | FreeBSD-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.c | 3 | ||||
-rw-r--r-- | sys/i4b/layer4/i4b_l4.c | 28 |
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; |