diff --git a/chan_capi.c b/chan_capi.c index fabc556..8153e98 100644 --- a/chan_capi.c +++ b/chan_capi.c @@ -891,18 +891,7 @@ static void interface_cleanup(struct capi_pvt *i) i->rtp = NULL; } - /* some QSIG stuff */ - if (i->qsigfeat) { - i->qsig_data.callmark = 0; - i->qsig_data.partner_ch = NULL; - i->qsig_data.calltransfer_active = 0; - i->qsig_data.calltransfer_onring = 0; - if (i->qsig_data.pr_propose_cid) - free(i->qsig_data.pr_propose_cid); - if (i->qsig_data.pr_propose_pn) - free(i->qsig_data.pr_propose_pn); - - } + interface_cleanup_qsig(i); i->peer = NULL; i->owner = NULL; diff --git a/chan_capi_qsig.h b/chan_capi_qsig.h index e8ec550..c747ef8 100644 --- a/chan_capi_qsig.h +++ b/chan_capi_qsig.h @@ -168,6 +168,8 @@ extern int pbx_capi_qsig_ssct(struct ast_channel *c, char *param); extern int pbx_capi_qsig_ct(struct ast_channel *c, char *param); extern int pbx_capi_qsig_callmark(struct ast_channel *c, char *param); +extern void interface_cleanup_qsig(struct capi_pvt *i); + /* *** ECMA QSIG Functions */ diff --git a/chan_capi_qsig_core.c b/chan_capi_qsig_core.c index a533a17..0befa4b 100644 --- a/chan_capi_qsig_core.c +++ b/chan_capi_qsig_core.c @@ -918,4 +918,21 @@ int pbx_capi_qsig_callmark(struct ast_channel *c, char *param) return 0; } +/* + * cleanup QSIG stuff on interface + */ +void interface_cleanup_qsig(struct capi_pvt *i) +{ + if (i->qsigfeat) { + i->qsig_data.callmark = 0; + i->qsig_data.partner_ch = NULL; + i->qsig_data.calltransfer_active = 0; + i->qsig_data.calltransfer_onring = 0; + if (i->qsig_data.pr_propose_cid) + free(i->qsig_data.pr_propose_cid); + if (i->qsig_data.pr_propose_pn) + free(i->qsig_data.pr_propose_pn); + + } +}