summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pjsip/src/pjsua-lib/pjsua_call.c32
1 files changed, 30 insertions, 2 deletions
diff --git a/pjsip/src/pjsua-lib/pjsua_call.c b/pjsip/src/pjsua-lib/pjsua_call.c
index a40dceb9..466d9818 100644
--- a/pjsip/src/pjsua-lib/pjsua_call.c
+++ b/pjsip/src/pjsua-lib/pjsua_call.c
@@ -409,6 +409,8 @@ pj_bool_t pjsua_call_on_incoming(pjsip_rx_data *rdata)
pjsip_endpt_respond_stateless(pjsua_var.endpt, rdata,
PJSIP_SC_BUSY_HERE, NULL,
NULL, NULL);
+ PJ_LOG(2,(THIS_FILE,
+ "Unable to accept incoming call (too many calls)"));
return PJ_TRUE;
}
@@ -458,8 +460,20 @@ pj_bool_t pjsua_call_on_incoming(pjsip_rx_data *rdata)
/* Create invite session: */
status = pjsip_inv_create_uas( dlg, rdata, answer, 0, &inv);
if (status != PJ_SUCCESS) {
- pjsip_dlg_respond(dlg, rdata, 500, NULL, NULL, NULL);
+ pjsip_hdr hdr_list;
+ pjsip_warning_hdr *w;
+
+ w = pjsip_warning_hdr_create_from_status(dlg->pool,
+ pjsip_endpt_name(pjsua_var.endpt),
+ status);
+ pj_list_init(&hdr_list);
+ pj_list_push_back(&hdr_list, w);
+
+ pjsip_dlg_respond(dlg, rdata, 500, NULL, &hdr_list, NULL);
+
+ /* Can't terminate dialog because transaction is in progress.
pjsip_dlg_terminate(dlg);
+ */
return PJ_TRUE;
}
@@ -1701,6 +1715,20 @@ static void pjsua_call_on_forked( pjsip_inv_session *inv,
/*
+ * Disconnect call upon error.
+ */
+static void call_disconnect( pjsip_inv_session *inv,
+ int code )
+{
+ pjsip_tx_data *tdata;
+ pj_status_t status;
+
+ status = pjsip_inv_end_session(inv, code, NULL, &tdata);
+ if (status == PJ_SUCCESS)
+ pjsip_inv_send_msg(inv, tdata);
+}
+
+/*
* Callback to be called when SDP offer/answer negotiation has just completed
* in the session. This function will start/update media if negotiation
* has succeeded.
@@ -1778,7 +1806,7 @@ static void pjsua_call_on_media_update(pjsip_inv_session *inv,
if (status != PJ_SUCCESS) {
pjsua_perror(THIS_FILE, "Unable to create media session",
status);
- //call_disconnect(inv, PJSIP_SC_UNSUPPORTED_MEDIA_TYPE);
+ call_disconnect(inv, PJSIP_SC_UNSUPPORTED_MEDIA_TYPE);
PJSUA_UNLOCK();
return;
}