Changed interface for reporting incoming calls.
This commit is contained in:
parent
3868638288
commit
2458c3bc4d
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 *);
|
||||
|
|
Loading…
Reference in New Issue