diff options
author | Benny Prijono <bennylp@teluu.com> | 2006-07-02 14:22:35 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2006-07-02 14:22:35 +0000 |
commit | 713d5d262d7cf03d499a4b2ea06fac1dc5367d89 (patch) | |
tree | 74e14857b466bb597d141f534568eef94681bb37 /pjsip/src/pjsua-lib/pjsua_call.c | |
parent | a293625a363645b1d9b1eaede805526ec64c8c64 (diff) |
Disconnect call when failed to start media when sending 200/OK response in pjsua, also pjsua should not try to force terminate dialog after sending 500 response
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@574 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip/src/pjsua-lib/pjsua_call.c')
-rw-r--r-- | pjsip/src/pjsua-lib/pjsua_call.c | 32 |
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; } |