diff --git a/chan_capi.c b/chan_capi.c index a40af98..604e1b0 100644 --- a/chan_capi.c +++ b/chan_capi.c @@ -1913,6 +1913,14 @@ static void handle_info_disconnect(_cmsg *CMSG, unsigned int PLCI, unsigned int */ static void handle_setup_element(_cmsg *CMSG, unsigned int PLCI, struct ast_capi_pvt *i) { + if (i->isdnstate & CAPI_ISDN_STATE_SETUP) { + cc_ast_verbose(3, 1, VERBOSE_PREFIX_4 "%s: IE SETUP already received.\n", + i->name); + return; + } + + i->isdnstate |= CAPI_ISDN_STATE_SETUP; + if (!i->owner) { ast_log(LOG_ERROR, "No channel for interface!\n"); return; diff --git a/chan_capi.h b/chan_capi.h index 128f551..1414fb1 100644 --- a/chan_capi.h +++ b/chan_capi.h @@ -166,9 +166,10 @@ struct ast_capi_gains { unsigned char rxgains[256]; }; -#define CAPI_ISDN_STATE_SETUP_ACK 0x01 -#define CAPI_ISDN_STATE_HOLD 0x02 -#define CAPI_ISDN_STATE_ECT 0x04 +#define CAPI_ISDN_STATE_SETUP 0x01 +#define CAPI_ISDN_STATE_SETUP_ACK 0x02 +#define CAPI_ISDN_STATE_HOLD 0x04 +#define CAPI_ISDN_STATE_ECT 0x08 /* ! Private data for a capi device */ struct ast_capi_pvt {