diff --git a/libpri.h b/libpri.h index 7fcaf5c..9635268 100755 --- a/libpri.h +++ b/libpri.h @@ -361,6 +361,9 @@ extern int pri_disconnect(struct pri *pri, q931_call *call, int cause); #define PRI_HANGUP extern int pri_hangup(struct pri *pri, q931_call *call, int cause); +#define PRI_DESTROYCALL +extern void pri_destroycall(struct pri *pri, q931_call *call); + extern int pri_reset(struct pri *pri, int channel); /* Create a new call */ diff --git a/pri.c b/pri.c index 92a24b8..53394c9 100755 --- a/pri.c +++ b/pri.c @@ -190,6 +190,13 @@ int pri_information(struct pri *pri, q931_call *call, char digit) return q931_information(pri, call, digit); } +void pri_destroycall(struct pri *pri, q931_call *call) +{ + if (pri && call) + __q931_destroycall(pri, call); + return; +} + int pri_need_more_info(struct pri *pri, q931_call *call, int channel, int nonisdn) { if (!pri || !call) diff --git a/pri_q931.h b/pri_q931.h index 6d3dae6..585ca07 100755 --- a/pri_q931.h +++ b/pri_q931.h @@ -265,4 +265,7 @@ extern int q931_setup(struct pri *pri, q931_call *c, int transmode, int channel, int nonisdn, char *caller, int callerplan, char *callername, int callerpres, char *called, int calledplan, int ulay1); extern void q931_dump(q931_h *h, int len, int txrx); + +extern void __q931_destroycall(struct pri *pri, q931_call *c); + #endif diff --git a/q931.c b/q931.c index 96e4d5e..ae6bd20 100755 --- a/q931.c +++ b/q931.c @@ -1327,6 +1327,11 @@ static void q931_destroycall(struct pri *pri, int cr) pri_error("Can't destroy call %d!\n", cr); } +void __q931_destroycall(struct pri *pri, q931_call *c) { + if (pri && c) + q931_destroycall(pri,c->cr); + return; +} static int add_ie(struct pri *pri, q931_call *call, int msgtype, int ie, q931_ie *iet, int maxlen) { unsigned int x;