Release FAX call imediately if never received anything

Signed-off-by: Karsten Keil <keil@b1-systems.de>
This commit is contained in:
Karsten Keil 2012-09-16 23:12:12 +02:00
parent 3d596e2ace
commit 5d36b4e2b1
2 changed files with 27 additions and 2 deletions

View File

@ -592,6 +592,7 @@ static void phaseE_handler(t30_state_t *t30, void *user_data, int result)
const char *ids;
struct mFAX *fax = get_mFAX(user_data);
struct mNCCI *ncci;
struct mc_buf *mc;
if (!fax) {
eprint("Unsuccessful get_mFAX()\n");
@ -602,6 +603,20 @@ static void phaseE_handler(t30_state_t *t30, void *user_data, int result)
fax->phE_res = result;
t30_get_transfer_statistics(t30, &fax->t30stats);
ncci = get_faxncci(fax);
if (ncci && result) {
if ((ncci->ncci_m.state == ST_NCCI_N_0) && !ncci->cobj.cleaned) {
/* Never left state N0 , so we need indicate a call first */
fax->b3transfer_error = 1;
mc = alloc_mc_buf();
if (mc) {
ncciCmsgHeader(ncci, mc, CAPI_CONNECT_B3, CAPI_IND);
mc->cmsg.NCPI = NULL; /* default - we do not have info */
ncciB3Message(ncci, mc);
free_mc_buf(mc);
} else
eprint("No msg buffer\n");
}
}
StopDownLink(fax, ncci);
ids = CAPIobjIDstr(&fax->cobj);
dprint(MIDEBUG_NCCI, "%s: BitRate %d\n", ids, fax->t30stats.bit_rate);
@ -1566,7 +1581,11 @@ int FaxB3Message(struct BInstance *bi, struct mc_buf *mc)
retval = 0;
break;
case CAPI_CONNECT_B3_RESP:
retval = ncciB3Message(ncci, mc);
if (!fax->b3transfer_error) /* Do not send CONNECT_B3_ACTIVE if error */
retval = ncciB3Message(ncci, mc);
else
dprint(MIDEBUG_NCCI, "%s: ignored CONNECT_B3_RESP in %s\n",
CAPIobjIDstr(&fax->cobj), _mi_ncci_st2str(ncci));
break;
case CAPI_CONNECT_B3_ACTIVE_RESP:
retval = ncciB3Message(ncci, mc);

View File

@ -486,7 +486,12 @@ static void ncci_disconnect_active(struct FsmInst *fi, int event, void *arg)
dprint(MIDEBUG_NCCI, "%s: disconnect from L3 itemcnt:%d\n", CAPIobjIDstr(&ncci->cobj), ncci->cobj.itemcnt);
}
static void ncci_ignore(struct FsmInst *fi, int event, void *arg)
{
struct mNCCI *ncci = fi->userdata;
dprint(MIDEBUG_NCCI, "%s: ignore %s in %s\n", CAPIobjIDstr(&ncci->cobj), str_ev_ncci[event], _mi_ncci_st2str(ncci));
}
static struct FsmNode fn_ncci_list[] = {
{ST_NCCI_N_0, EV_AP_CONNECT_B3_REQ, ncci_connect_b3_req},
@ -557,6 +562,7 @@ static struct FsmNode fn_ncci_list[] = {
{ST_NCCI_N_4, EV_AP_MANUFACTURER_REQ, ncci_manufacturer_req},
{ST_NCCI_N_4, EV_NC_LINKDOWN, ncci_linkdown},
{ST_NCCI_N_5, EV_AP_CONNECT_B3_RESP, ncci_ignore},
{ST_NCCI_N_5, EV_AP_DISCONNECT_B3_RESP, ncci_disconnect_b3_resp},
{ST_NCCI_N_5, EV_AP_RELEASE, ncci_appl_release},
};
@ -1394,7 +1400,7 @@ int ncciB3Message(struct mNCCI *ncci, struct mc_buf *mc)
if (retval) {
if (subcmd == CAPI_REQ)
retval = CapiMessageNotSupportedInCurrentState;
else { /* RESP */
else { /* RESP */
wprint("%s: Error Message %s %02x/%02x not supported in state %s\n", CAPIobjIDstr(&ncci->cobj),
capi20_cmd2str(cmd, subcmd), cmd, subcmd, _mi_ncci_st2str(ncci));
retval = CapiNoError;