diff options
Diffstat (limited to 'drivers/isdn/eicon/eicon_idi.c')
-rw-r--r-- | drivers/isdn/eicon/eicon_idi.c | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/drivers/isdn/eicon/eicon_idi.c b/drivers/isdn/eicon/eicon_idi.c index eb3590069..9cef520bc 100644 --- a/drivers/isdn/eicon/eicon_idi.c +++ b/drivers/isdn/eicon/eicon_idi.c @@ -1,4 +1,4 @@ -/* $Id: eicon_idi.c,v 1.31 2000/02/22 16:26:40 armin Exp $ +/* $Id: eicon_idi.c,v 1.33 2000/03/06 15:45:17 armin Exp $ * * ISDN lowlevel-module for Eicon active cards. * IDI interface @@ -26,6 +26,14 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * $Log: eicon_idi.c,v $ + * Revision 1.33 2000/03/06 15:45:17 armin + * Fixed incomplete number handling with BRI PtP connection. + * + * Revision 1.32 2000/03/04 17:04:21 armin + * Fix of statemachine, B-connect before D-connect, + * thanks to Helmut Adams <adams@ipcon.de> + * Minor change in send-data packet handling. + * * Revision 1.31 2000/02/22 16:26:40 armin * Fixed membase error message. * Fixed missing log buffer struct. @@ -156,7 +164,7 @@ #undef EICON_FULL_SERVICE_OKTETT -char *eicon_idi_revision = "$Revision: 1.31 $"; +char *eicon_idi_revision = "$Revision: 1.33 $"; eicon_manifbuf *manbuf; @@ -2515,15 +2523,7 @@ idi_handle_ind(eicon_card *ccard, struct sk_buff *skb) break; case 3: /* incomplete number */ eicon_log(ccard, 8, "idi_req: Ch%d: Incomplete Number\n", chan->No); - switch(ccard->type) { - case EICON_CTYPE_MAESTRAP: - case EICON_CTYPE_S2M: - /* TODO (other protocols) */ - chan->fsm_state = EICON_STATE_ICALLW; - break; - default: - idi_do_req(ccard, chan, HANGUP, 0); - } + chan->fsm_state = EICON_STATE_ICALLW; break; } break; @@ -2560,8 +2560,10 @@ idi_handle_ind(eicon_card *ccard, struct sk_buff *skb) /* On most incoming calls we use automatic connect */ /* idi_do_req(ccard, chan, IDI_N_CONNECT, 1); */ } - } else - idi_hangup(ccard, chan); + } else { + if (chan->fsm_state != EICON_STATE_ACTIVE) + idi_hangup(ccard, chan); + } break; case CALL_CON: eicon_log(ccard, 8, "idi_ind: Ch%d: Call_Con\n", chan->No); @@ -3012,11 +3014,13 @@ idi_send_data(eicon_card *card, eicon_chan *chan, int ack, struct sk_buff *skb, reqbuf = (eicon_REQ *)skb_put(xmit_skb, plen + sizeof(eicon_REQ)); if (((len - offset) > 270) && + (chan->l2prot != ISDN_PROTO_L2_MODEM) && + (chan->l2prot != ISDN_PROTO_L2_FAX) && (chan->l2prot != ISDN_PROTO_L2_TRANS)) { reqbuf->Req = IDI_N_MDATA; } else { reqbuf->Req = IDI_N_DATA; - if (ack) reqbuf->Req |= N_D_BIT; + /* if (ack) reqbuf->Req |= N_D_BIT; */ } reqbuf->ReqCh = chan->e.IndCh; reqbuf->ReqId = 1; |