diff --git a/libpri.h b/libpri.h index d9e0d8f..869ccdb 100755 --- a/libpri.h +++ b/libpri.h @@ -395,6 +395,6 @@ extern int pri_fd(struct pri *pri); #define PRI_PROGRESS /* Send call proceeding */ -extern int pri_progress(struct pri *pri, q931_call *c); +extern int pri_progress(struct pri *pri, q931_call *c, int info); #endif diff --git a/pri.c b/pri.c index 8811d7c..48247be 100755 --- a/pri.c +++ b/pri.c @@ -191,11 +191,11 @@ int pri_acknowledge(struct pri *pri, q931_call *call, int channel, int info) return q931_alerting(pri, call, channel, info); } -int pri_progress(struct pri *pri, q931_call *call) +int pri_progress(struct pri *pri, q931_call *call, int info) { if (!pri || !call) return -1; - return q931_call_proceeding(pri, call); + return q931_call_proceeding(pri, call,info); } int pri_information(struct pri *pri, q931_call *call, char digit) diff --git a/pri_q931.h b/pri_q931.h index 585ca07..ae0b409 100755 --- a/pri_q931.h +++ b/pri_q931.h @@ -243,7 +243,7 @@ extern int q931_receive(struct pri *pri, q931_h *h, int len); extern int q931_alerting(struct pri *pri, q931_call *call, int channel, int info); -extern int q931_call_proceeding(struct pri *pri, q931_call *call); +extern int q931_call_proceeding(struct pri *pri, q931_call *call, int info); extern int q931_setup_ack(struct pri *pri, q931_call *call, int channel, int nonisdn); diff --git a/q931.c b/q931.c index 4f3868c..53c8574 100755 --- a/q931.c +++ b/q931.c @@ -1565,10 +1565,16 @@ static int restart_ack(struct pri *pri, q931_call *c) static int call_proceeding_ies[] = { Q931_CHANNEL_IDENT, -1 }; -int q931_call_proceeding(struct pri *pri, q931_call *c) +int q931_call_proceeding(struct pri *pri, q931_call *c, int info) { c->ourcallstate = Q931_CALL_STATE_INCOMING_CALL_PROCEEDING; c->peercallstate = Q931_CALL_STATE_OUTGOING_CALL_PROCEEDING; + if (info) { + c->progloc = LOC_PRIV_NET_LOCAL_USER; + c->progcode = CODE_CCITT; + c->progress = Q931_PROG_INBAND_AVAILABLE; + } else + c->progress = -1; c->proc = 1; c->alive = 1; return send_message(pri, c, Q931_CALL_PROCEEDING, call_proceeding_ies); @@ -1592,7 +1598,7 @@ int q931_alerting(struct pri *pri, q931_call *c, int channel, int info) } else c->progress = -1; if (!c->proc) - q931_call_proceeding(pri, c); + q931_call_proceeding(pri, c, 0); c->ourcallstate = Q931_CALL_STATE_CALL_RECEIVED; c->peercallstate = Q931_CALL_STATE_CALL_DELIVERED; c->alive = 1;