Fri Jan 9 10:33:14 CST 2009 Pekka Pessi <first.last@nokia.com>
* nua_session.c: when negotiating session refresher, default to UAC git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@11783 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
parent
0074441afa
commit
906fbd4ecf
|
@ -1 +1 @@
|
||||||
Wed Feb 11 10:19:39 CST 2009
|
Wed Feb 11 10:23:03 CST 2009
|
||||||
|
|
|
@ -371,9 +371,9 @@ static int session_timer_add_headers(struct session_timer *t,
|
||||||
int initial,
|
int initial,
|
||||||
msg_t *msg, sip_t *sip);
|
msg_t *msg, sip_t *sip);
|
||||||
|
|
||||||
static void session_timer_negotiate(struct session_timer *t);
|
static void session_timer_negotiate(struct session_timer *t, int uas);
|
||||||
|
|
||||||
static void session_timer_set(nua_session_usage_t *ss);
|
static void session_timer_set(nua_session_usage_t *ss, int uas);
|
||||||
|
|
||||||
static int session_timer_check_restart(nua_client_request_t *cr,
|
static int session_timer_check_restart(nua_client_request_t *cr,
|
||||||
int status, char const *phrase,
|
int status, char const *phrase,
|
||||||
|
@ -849,6 +849,7 @@ static int nua_invite_client_response(nua_client_request_t *cr,
|
||||||
{
|
{
|
||||||
nua_dialog_usage_t *du = cr->cr_usage;
|
nua_dialog_usage_t *du = cr->cr_usage;
|
||||||
nua_session_usage_t *ss = nua_dialog_usage_private(du);
|
nua_session_usage_t *ss = nua_dialog_usage_private(du);
|
||||||
|
int uas;
|
||||||
|
|
||||||
if (ss == NULL || sip == NULL) {
|
if (ss == NULL || sip == NULL) {
|
||||||
/* Xyzzy */
|
/* Xyzzy */
|
||||||
|
@ -859,7 +860,7 @@ static int nua_invite_client_response(nua_client_request_t *cr,
|
||||||
if (session_timer_is_supported(ss->ss_timer))
|
if (session_timer_is_supported(ss->ss_timer))
|
||||||
session_timer_store(ss->ss_timer, sip);
|
session_timer_store(ss->ss_timer, sip);
|
||||||
|
|
||||||
session_timer_set(ss);
|
session_timer_set(ss, uas = 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
return nua_session_client_response(cr, status, phrase, sip);
|
return nua_session_client_response(cr, status, phrase, sip);
|
||||||
|
@ -2505,6 +2506,7 @@ int process_ack(nua_server_request_t *sr,
|
||||||
nua_session_usage_t *ss = nua_dialog_usage_private(sr->sr_usage);
|
nua_session_usage_t *ss = nua_dialog_usage_private(sr->sr_usage);
|
||||||
msg_t *msg = nta_incoming_getrequest_ackcancel(irq);
|
msg_t *msg = nta_incoming_getrequest_ackcancel(irq);
|
||||||
char const *recv = NULL;
|
char const *recv = NULL;
|
||||||
|
int uas;
|
||||||
|
|
||||||
if (ss == NULL)
|
if (ss == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -2568,7 +2570,7 @@ int process_ack(nua_server_request_t *sr,
|
||||||
|
|
||||||
nua_stack_event(nh->nh_nua, nh, msg, nua_i_ack, SIP_200_OK, NULL);
|
nua_stack_event(nh->nh_nua, nh, msg, nua_i_ack, SIP_200_OK, NULL);
|
||||||
signal_call_state_change(nh, ss, 200, "OK", nua_callstate_ready);
|
signal_call_state_change(nh, ss, 200, "OK", nua_callstate_ready);
|
||||||
session_timer_set(ss);
|
session_timer_set(ss, uas = 1);
|
||||||
|
|
||||||
nua_server_request_destroy(sr);
|
nua_server_request_destroy(sr);
|
||||||
|
|
||||||
|
@ -3331,6 +3333,7 @@ static int nua_update_client_response(nua_client_request_t *cr,
|
||||||
nua_handle_t *nh = cr->cr_owner;
|
nua_handle_t *nh = cr->cr_owner;
|
||||||
nua_dialog_usage_t *du = cr->cr_usage;
|
nua_dialog_usage_t *du = cr->cr_usage;
|
||||||
nua_session_usage_t *ss = nua_dialog_usage_private(du);
|
nua_session_usage_t *ss = nua_dialog_usage_private(du);
|
||||||
|
int uas;
|
||||||
|
|
||||||
assert(200 <= status);
|
assert(200 <= status);
|
||||||
|
|
||||||
|
@ -3345,7 +3348,7 @@ static int nua_update_client_response(nua_client_request_t *cr,
|
||||||
|
|
||||||
if (!sr && (!du->du_cr || !du->du_cr->cr_orq)) {
|
if (!sr && (!du->du_cr || !du->du_cr->cr_orq)) {
|
||||||
session_timer_store(ss->ss_timer, sip);
|
session_timer_store(ss->ss_timer, sip);
|
||||||
session_timer_set(ss);
|
session_timer_set(ss, uas = 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3553,6 +3556,7 @@ int nua_update_server_respond(nua_server_request_t *sr, tagi_t const *tags)
|
||||||
|
|
||||||
if (ss && session_timer_is_supported(ss->ss_timer)) {
|
if (ss && session_timer_is_supported(ss->ss_timer)) {
|
||||||
nua_server_request_t *sr0;
|
nua_server_request_t *sr0;
|
||||||
|
int uas;
|
||||||
|
|
||||||
session_timer_add_headers(ss->ss_timer, 0, msg, sip);
|
session_timer_add_headers(ss->ss_timer, 0, msg, sip);
|
||||||
|
|
||||||
|
@ -3561,7 +3565,7 @@ int nua_update_server_respond(nua_server_request_t *sr, tagi_t const *tags)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (!sr0 && (!sr->sr_usage->du_cr || !sr->sr_usage->du_cr->cr_orq))
|
if (!sr0 && (!sr->sr_usage->du_cr || !sr->sr_usage->du_cr->cr_orq))
|
||||||
session_timer_set(ss);
|
session_timer_set(ss, uas = 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4354,7 +4358,8 @@ void session_timer_store(struct session_timer *t,
|
||||||
static int
|
static int
|
||||||
session_timer_add_headers(struct session_timer *t,
|
session_timer_add_headers(struct session_timer *t,
|
||||||
int initial,
|
int initial,
|
||||||
msg_t *msg, sip_t *sip)
|
msg_t *msg,
|
||||||
|
sip_t *sip)
|
||||||
{
|
{
|
||||||
unsigned long expires, min;
|
unsigned long expires, min;
|
||||||
sip_min_se_t min_se[1];
|
sip_min_se_t min_se[1];
|
||||||
|
@ -4376,7 +4381,7 @@ session_timer_add_headers(struct session_timer *t,
|
||||||
min = t->remote.min_se;
|
min = t->remote.min_se;
|
||||||
|
|
||||||
if (uas) {
|
if (uas) {
|
||||||
session_timer_negotiate(t);
|
session_timer_negotiate(t, uas = 1);
|
||||||
|
|
||||||
refresher = t->refresher;
|
refresher = t->refresher;
|
||||||
expires = t->interval;
|
expires = t->interval;
|
||||||
|
@ -4417,8 +4422,8 @@ session_timer_add_headers(struct session_timer *t,
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static void
|
||||||
void session_timer_negotiate(struct session_timer *t)
|
session_timer_negotiate(struct session_timer *t, int uas)
|
||||||
{
|
{
|
||||||
if (!t->local.supported)
|
if (!t->local.supported)
|
||||||
t->refresher = nua_no_refresher;
|
t->refresher = nua_no_refresher;
|
||||||
|
@ -4428,8 +4433,11 @@ void session_timer_negotiate(struct session_timer *t)
|
||||||
t->refresher = nua_local_refresher;
|
t->refresher = nua_local_refresher;
|
||||||
else if (t->remote.refresher == nua_remote_refresher)
|
else if (t->remote.refresher == nua_remote_refresher)
|
||||||
t->refresher = nua_remote_refresher;
|
t->refresher = nua_remote_refresher;
|
||||||
|
else if (uas)
|
||||||
|
/* UAS defaults UAC to refreshing */
|
||||||
|
t->refresher = nua_remote_refresher;
|
||||||
else
|
else
|
||||||
/* Default to initiate refreshes */
|
/* UAC refreshes by itself */
|
||||||
t->refresher = nua_local_refresher;
|
t->refresher = nua_local_refresher;
|
||||||
|
|
||||||
t->interval = t->remote.expires;
|
t->interval = t->remote.expires;
|
||||||
|
@ -4452,7 +4460,7 @@ void session_timer_negotiate(struct session_timer *t)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
session_timer_set(nua_session_usage_t *ss)
|
session_timer_set(nua_session_usage_t *ss, int uas)
|
||||||
{
|
{
|
||||||
nua_dialog_usage_t *du = nua_dialog_usage_public(ss);
|
nua_dialog_usage_t *du = nua_dialog_usage_public(ss);
|
||||||
struct session_timer *t;
|
struct session_timer *t;
|
||||||
|
@ -4462,7 +4470,7 @@ session_timer_set(nua_session_usage_t *ss)
|
||||||
|
|
||||||
t = ss->ss_timer;
|
t = ss->ss_timer;
|
||||||
|
|
||||||
session_timer_negotiate(t);
|
session_timer_negotiate(t, uas);
|
||||||
|
|
||||||
if (t->refresher == nua_local_refresher) {
|
if (t->refresher == nua_local_refresher) {
|
||||||
unsigned low = t->interval / 2, high = t->interval / 2;
|
unsigned low = t->interval / 2, high = t->interval / 2;
|
||||||
|
|
Loading…
Reference in New Issue