On hangup, use hangupcause from other channel or from var PRI_CAUSE.
This commit is contained in:
parent
e120941c33
commit
aaec11fea0
18
chan_capi.c
18
chan_capi.c
|
@ -633,6 +633,7 @@ static void interface_cleanup(struct ast_capi_pvt *i)
|
||||||
}
|
}
|
||||||
|
|
||||||
i->isdnstate = 0;
|
i->isdnstate = 0;
|
||||||
|
i->cause = 0;
|
||||||
|
|
||||||
i->faxhandled = 0;
|
i->faxhandled = 0;
|
||||||
i->FaxState = 0;
|
i->FaxState = 0;
|
||||||
|
@ -655,23 +656,30 @@ static void capi_activehangup(struct ast_channel *c)
|
||||||
struct ast_capi_pvt *i = CC_AST_CHANNEL_PVT(c);
|
struct ast_capi_pvt *i = CC_AST_CHANNEL_PVT(c);
|
||||||
_cmsg CMSG;
|
_cmsg CMSG;
|
||||||
int state;
|
int state;
|
||||||
|
char *cause;
|
||||||
|
|
||||||
if (i == NULL) {
|
if (i == NULL) {
|
||||||
ast_log(LOG_WARNING, "No interface!\n");
|
ast_log(LOG_WARNING, "No interface!\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
cc_ast_verbose(2, 1, VERBOSE_PREFIX_4 "%s: activehangingup\n",
|
|
||||||
i->name);
|
|
||||||
|
|
||||||
state = i->state;
|
state = i->state;
|
||||||
i->state = CAPI_STATE_DISCONNECTING;
|
i->state = CAPI_STATE_DISCONNECTING;
|
||||||
|
|
||||||
|
i->cause = c->hangupcause;
|
||||||
|
if ((cause = pbx_builtin_getvar_helper(c, "PRI_CAUSE"))) {
|
||||||
|
i->cause = atoi(cause);
|
||||||
|
}
|
||||||
|
|
||||||
|
cc_ast_verbose(2, 1, VERBOSE_PREFIX_4 "%s: activehangingup (cause=0x%02x)\n",
|
||||||
|
i->name, i->cause);
|
||||||
|
|
||||||
|
|
||||||
if ((c->_state == AST_STATE_RING) ||
|
if ((c->_state == AST_STATE_RING) ||
|
||||||
(state == CAPI_STATE_DID)) {
|
(state == CAPI_STATE_DID)) {
|
||||||
CONNECT_RESP_HEADER(&CMSG, ast_capi_ApplID, i->MessageNumber, 0);
|
CONNECT_RESP_HEADER(&CMSG, ast_capi_ApplID, i->MessageNumber, 0);
|
||||||
CONNECT_RESP_PLCI(&CMSG) = i->PLCI;
|
CONNECT_RESP_PLCI(&CMSG) = i->PLCI;
|
||||||
CONNECT_RESP_REJECT(&CMSG) = 2;
|
CONNECT_RESP_REJECT(&CMSG) = (i->cause) ? (0x3480 | (i->cause & 0x7f)) : 2;
|
||||||
_capi_put_cmsg(&CMSG);
|
_capi_put_cmsg(&CMSG);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -153,6 +153,7 @@ struct ast_capi_pvt {
|
||||||
int state;
|
int state;
|
||||||
|
|
||||||
unsigned int isdnstate;
|
unsigned int isdnstate;
|
||||||
|
int cause;
|
||||||
|
|
||||||
char context[AST_MAX_EXTENSION];
|
char context[AST_MAX_EXTENSION];
|
||||||
/*! Multiple Subscriber Number we listen to (, seperated list) */
|
/*! Multiple Subscriber Number we listen to (, seperated list) */
|
||||||
|
|
Loading…
Reference in New Issue