Changed interface for reporting incoming calls.

This commit is contained in:
Fritz Elfert 1997-02-10 20:12:50 +00:00
parent 3868638288
commit 2458c3bc4d
5 changed files with 60 additions and 66 deletions

View File

@ -21,6 +21,10 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log$
* Revision 1.33 1997/02/10 10:05:42 fritz
* More changes for Kernel 2.1.X
* Symbol information moved to isdn_syms.c
*
* Revision 1.32 1997/02/03 22:55:26 fritz
* Reformatted according CodingStyle.
* Changed isdn_writebuf_stub static.
@ -455,7 +459,7 @@ isdn_all_eaz(int di, int ch)
cmd.driver = di;
cmd.arg = ch;
cmd.command = ISDN_CMD_SETEAZ;
cmd.num[0] = '\0';
cmd.parm.num[0] = '\0';
(void) dev->drv[di]->interface->command(&cmd);
}
@ -518,13 +522,13 @@ isdn_status_callback(isdn_ctrl * c)
cmd.arg = c->arg;
cmd.command = ISDN_CMD_LOCK;
dev->drv[di]->interface->command(&cmd);
r = isdn_net_find_icall(di, c->arg, i, c->num);
r = isdn_net_find_icall(di, c->arg, i, c->parm.setup);
switch (r) {
case 0:
/* No network-device replies. Schedule RING-message to
* tty and set RI-bit of modem-status.
*/
if ((mi = isdn_tty_find_icall(di, c->arg, c->num)) >= 0) {
if ((mi = isdn_tty_find_icall(di, c->arg, c->parm.setup)) >= 0) {
info = &dev->mdm.info[mi];
info->msr |= UART_MSR_RI;
isdn_tty_modem_result(2, info);
@ -579,18 +583,18 @@ isdn_status_callback(isdn_ctrl * c)
#endif
if (dev->global_flags & ISDN_GLOBAL_STOPPED)
return 0;
if (strcmp(c->num, "0"))
if (strcmp(c->parm.num, "0"))
isdn_net_stat_callback(i, c->command);
break;
case ISDN_STAT_CAUSE:
#ifdef ISDN_DEBUG_STATCALLB
printk(KERN_DEBUG "CAUSE: %ld %s\n", c->arg, c->num);
#endif
printk(KERN_INFO "isdn: cause: %s\n", c->num);
printk(KERN_INFO "isdn: cause: %s\n", c->parm.num);
if ((mi = dev->m_idx[i]) >= 0) {
/* Signal cause to tty-device */
info = &dev->mdm.info[mi];
strncpy(info->last_cause, c->num, 5);
strncpy(info->last_cause, c->parm.num, 5);
}
break;
case ISDN_STAT_DCONN:
@ -1702,9 +1706,9 @@ isdn_ioctl(struct inode *inode, struct file *file, uint cmd, ulong arg)
c.driver = drvidx;
c.command = ISDN_CMD_IOCTL;
c.arg = cmd;
memcpy(c.num, (char *) &iocts.arg, sizeof(ulong));
memcpy(c.parm.num, (char *) &iocts.arg, sizeof(ulong));
ret = dev->drv[drvidx]->interface->command(&c);
memcpy((char *) &iocts.arg, c.num, sizeof(ulong));
memcpy((char *) &iocts.arg, c.parm.num, sizeof(ulong));
copy_to_user((char *) arg, &iocts, sizeof(isdn_ioctl_struct));
return ret;
} else

View File

@ -21,6 +21,14 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log$
* Revision 1.34 1997/02/03 23:15:07 fritz
* Reformatted according CodingStyle.
* replaced arp_find prototype by proper include.
* made dev_purge_queues static.
* Bugfix in bogocps calculation.
* removed isdn_net_receive_callback - was never used ;-)
* Misc. fixes for Kernel 2.1.X comaptibility.
*
* Revision 1.33 1997/01/17 01:19:25 fritz
* Applied chargeint patch.
*
@ -521,7 +529,7 @@ isdn_net_dial(void)
cmd.arg = p->local.isdn_channel;
cmd.command = ISDN_CMD_CLREAZ;
dev->drv[p->local.isdn_device]->interface->command(&cmd);
sprintf(cmd.num, "%s", isdn_map_eaz2msn(p->local.msn, cmd.driver));
sprintf(cmd.parm.num, "%s", isdn_map_eaz2msn(p->local.msn, cmd.driver));
cmd.command = ISDN_CMD_SETEAZ;
dev->drv[p->local.isdn_device]->interface->command(&cmd);
p->local.dialretry = 0;
@ -557,7 +565,7 @@ isdn_net_dial(void)
printk(KERN_INFO "%s: Open leased line ...\n", p->local.name);
} else {
cmd.command = ISDN_CMD_DIAL;
sprintf(cmd.num, "%s,%s,7,0", p->local.dial->num,
sprintf(cmd.parm.num, "%s,%s,7,0", p->local.dial->num,
isdn_map_eaz2msn(p->local.msn, cmd.driver));
i = isdn_dc2minor(p->local.isdn_device, p->local.isdn_channel);
if (i >= 0) {
@ -1554,7 +1562,7 @@ isdn_net_swap_usage(int i1, int i2)
* 4 = Wait cbdelay, then call back
*/
int
isdn_net_find_icall(int di, int ch, int idx, char *num)
isdn_net_find_icall(int di, int ch, int idx, setup_parm setup)
{
char *eaz;
int si1;
@ -1565,40 +1573,24 @@ isdn_net_find_icall(int di, int ch, int idx, char *num)
isdn_net_dev *p;
isdn_net_phone *n;
ulong flags;
char nr[31];
char *s;
char nr[32];
/* Search name in netdev-chain */
save_flags(flags);
cli();
if (num[0] == ',') {
if (!setup.phone[0]) {
nr[0] = '0';
strncpy(&nr[1], num, 30);
nr[1] = '\0';
printk(KERN_INFO "isdn_net: Incoming call without OAD, assuming '0'\n");
} else
strncpy(nr, num, 30);
s = strtok(nr, ",");
s = strtok(NULL, ",");
if (!s) {
printk(KERN_WARNING "isdn_net: Incoming callinfo garbled, ignored: %s\n",
num);
restore_flags(flags);
return 0;
}
si1 = (int) simple_strtoul(s, NULL, 10);
s = strtok(NULL, ",");
if (!s) {
printk(KERN_WARNING "isdn_net: Incoming callinfo garbled, ignored: %s\n",
num);
restore_flags(flags);
return 0;
}
si2 = (int) simple_strtoul(s, NULL, 10);
eaz = strtok(NULL, ",");
if (!eaz) {
strcpy(nr, setup.phone);
si1 = (int)setup.si1;
si2 = (int)setup.si2;
if (!setup.eazmsn[0]) {
printk(KERN_WARNING "isdn_net: Incoming call without CPN, assuming '0'\n");
eaz = "0";
}
} else
eaz = setup.eazmsn;
if (dev->net_verbose > 1)
printk(KERN_INFO "isdn_net: call from %s,%d,%d -> %s\n", nr, si1, si2, eaz);
/* Accept only calls with Si1 = 7 (Data-Transmission) */
@ -2024,6 +2016,9 @@ isdn_net_newslave(char *parm)
/* Master must be a real interface, not a slave */
if (n->local.master)
return NULL;
/* Master must not be started yet */
if (n->dev.start)
return NULL;
return (isdn_net_new(newname, &(n->dev)));
}
return NULL;

View File

@ -21,6 +21,9 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log$
* Revision 1.4 1997/02/03 23:16:48 fritz
* Removed isdn_net_receive_callback prototype.
*
* Revision 1.3 1997/01/17 01:19:30 fritz
* Applied chargeint patch.
*
@ -49,7 +52,7 @@ extern int isdn_net_getcfg(isdn_net_ioctl_cfg *);
extern int isdn_net_addphone(isdn_net_ioctl_phone *);
extern int isdn_net_getphones(isdn_net_ioctl_phone *, char *);
extern int isdn_net_delphone(isdn_net_ioctl_phone *);
extern int isdn_net_find_icall(int, int, int, char *);
extern int isdn_net_find_icall(int, int, int, setup_parm);
extern void isdn_net_hangup(struct device *);
extern void isdn_net_dial(void);
extern void isdn_net_autohup(void);

View File

@ -20,6 +20,11 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log$
* Revision 1.25 1997/02/03 23:04:30 fritz
* Reformatted according CodingStyle.
* skb->free stuff replaced by macro.
* Finished full-duplex audio.
*
* Revision 1.24 1997/01/14 01:32:42 fritz
* Changed audio receive not to rely on skb->users and skb->lock.
* Added ATI2 and related variables.
@ -603,7 +608,7 @@ isdn_tty_dial(char *n, modem_info * info, atemu * m)
cmd.arg = info->isdn_channel;
cmd.command = ISDN_CMD_CLREAZ;
dev->drv[info->isdn_driver]->interface->command(&cmd);
strcpy(cmd.num, isdn_map_eaz2msn(m->msn, info->isdn_driver));
strcpy(cmd.parm.num, isdn_map_eaz2msn(m->msn, info->isdn_driver));
cmd.driver = info->isdn_driver;
cmd.command = ISDN_CMD_SETEAZ;
dev->drv[info->isdn_driver]->interface->command(&cmd);
@ -618,7 +623,7 @@ isdn_tty_dial(char *n, modem_info * info, atemu * m)
dev->drv[info->isdn_driver]->interface->command(&cmd);
cmd.driver = info->isdn_driver;
cmd.arg = info->isdn_channel;
sprintf(cmd.num, "%s,%s,%d,%d", n, isdn_map_eaz2msn(m->msn, info->isdn_driver),
sprintf(cmd.parm.num, "%s,%s,%d,%d", n, isdn_map_eaz2msn(m->msn, info->isdn_driver),
si, m->mdmreg[19]);
cmd.command = ISDN_CMD_DIAL;
info->dialing = 1;
@ -1732,47 +1737,31 @@ isdn_tty_modem_init(void)
* Return Index to dev->mdm or -1 if none found.
*/
int
isdn_tty_find_icall(int di, int ch, char *num)
isdn_tty_find_icall(int di, int ch, setup_parm setup)
{
char *eaz;
int i;
int idx;
int si1;
int si2;
char *s;
char nr[31];
char nr[32];
ulong flags;
save_flags(flags);
cli();
if (num[0] == ',') {
if (!setup.phone[0]) {
nr[0] = '0';
strncpy(&nr[1], num, 29);
nr[1] = '\0';
printk(KERN_INFO "isdn_tty: Incoming call without OAD, assuming '0'\n");
} else
strncpy(nr, num, 30);
s = strtok(nr, ",");
s = strtok(NULL, ",");
if (!s) {
printk(KERN_WARNING "isdn_tty: Incoming callinfo garbled, ignored: %s\n",
num);
restore_flags(flags);
return -1;
}
si1 = (int) simple_strtoul(s, NULL, 10);
s = strtok(NULL, ",");
if (!s) {
printk(KERN_WARNING "isdn_tty: Incoming callinfo garbled, ignored: %s\n",
num);
restore_flags(flags);
return -1;
}
si2 = (int) simple_strtoul(s, NULL, 10);
eaz = strtok(NULL, ",");
if (!eaz) {
strcpy(nr, setup.phone);
si1 = (int) setup.si1;
si2 = (int) setup.si2;
if (!setup.eazmsn[0]) {
printk(KERN_WARNING "isdn_tty: Incoming call without CPN, assuming '0'\n");
eaz = "0";
}
} else
eaz = setup.eazmsn;
#ifdef ISDN_DEBUG_MODEM_ICALL
printk(KERN_DEBUG "m_fi: eaz=%s si1=%d si2=%d\n", eaz, si1, si2);
#endif

View File

@ -20,6 +20,9 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log$
* Revision 1.7 1997/02/03 23:06:10 fritz
* Reformatted according CodingStyle
*
* Revision 1.6 1997/01/14 01:35:19 fritz
* Changed prototype of isdn_tty_modem_hup.
*
@ -48,7 +51,7 @@ extern void isdn_tty_modem_hup(modem_info *, int);
extern int isdn_tty_modem_init(void);
extern void isdn_tty_readmodem(void);
extern int isdn_tty_try_read(modem_info *, struct sk_buff *);
extern int isdn_tty_find_icall(int, int, char *);
extern int isdn_tty_find_icall(int, int, setup_parm);
extern int isdn_tty_countDLE(unsigned char *, int);
extern void isdn_tty_bsent(int, int);
extern void isdn_tty_cleanup_xmit(modem_info *);