forked from cc/osmo-cc-sip-endpoint
Add timer to expire registration (from remote)
This commit is contained in:
parent
2d20ce6f71
commit
acb35e3cb5
|
@ -1006,8 +1006,6 @@ static void ep_i_register(sip_endpoint_t *sip_ep, int status, nua_t *nua, nua_ha
|
|||
if (sip->sip_expires)
|
||||
PDEBUG(DSIP, DEBUG_DEBUG, " -> Expires: %d\n", (int)sip->sip_expires->ex_delta);
|
||||
|
||||
// FIXME: set expire timer and remove remote_peer, if expires
|
||||
|
||||
if (status == 200) {
|
||||
strcpy(sip_ep->remote_contact_user, contact_user);
|
||||
strcpy(sip_ep->remote_contact_peer, contact_peer);
|
||||
|
@ -1016,8 +1014,13 @@ static void ep_i_register(sip_endpoint_t *sip_ep, int status, nua_t *nua, nua_ha
|
|||
sip_ep->register_nonce[0] = '\0';
|
||||
if (sip->sip_expires && sip->sip_expires->ex_delta == 0) {
|
||||
PDEBUG(DSIP, DEBUG_INFO, "This in an unregister session.\n");
|
||||
timer_stop(&sip_ep->register_expire_timer);
|
||||
sip_ep->remote_peer = NULL;
|
||||
}
|
||||
if (sip->sip_expires && sip->sip_expires->ex_delta > 0) {
|
||||
PDEBUG(DSIP, DEBUG_DEBUG, "Starting expire timer with extra 10 seconds: %d.\n", (int)sip->sip_expires->ex_delta + 10);
|
||||
timer_start(&sip_ep->register_expire_timer, sip->sip_expires->ex_delta + 10);
|
||||
}
|
||||
}
|
||||
|
||||
PDEBUG(DSIP, DEBUG_INFO, "Sending REGISTER response: %d %s (registration)\n", status, auth_text);
|
||||
|
@ -1773,6 +1776,16 @@ static void register_retry_timeout(struct timer *timer)
|
|||
sip_ep->register_state = REGISTER_STATE_UNREGISTERED;
|
||||
}
|
||||
|
||||
static void register_expire_timeout(struct timer *timer)
|
||||
{
|
||||
sip_endpoint_t *sip_ep = timer->priv;
|
||||
|
||||
PDEBUG(DSIP, DEBUG_DEBUG, "timeout, registration expired\n");
|
||||
|
||||
PDEBUG(DSIP, DEBUG_INFO, "Peer is now unregistered, due to registration timeout.\n");
|
||||
sip_ep->remote_peer = NULL;
|
||||
}
|
||||
|
||||
static void register_option_timeout(struct timer *timer)
|
||||
{
|
||||
sip_endpoint_t *sip_ep = timer->priv;
|
||||
|
@ -1832,6 +1845,7 @@ sip_endpoint_t *sip_endpoint_create(const char *user_agent, int send_no_ringing_
|
|||
/* create timers */
|
||||
timer_init(&sip_ep->stun_retry_timer, stun_retry_timeout, sip_ep);
|
||||
timer_init(&sip_ep->register_retry_timer, register_retry_timeout, sip_ep);
|
||||
timer_init(&sip_ep->register_expire_timer, register_expire_timeout, sip_ep);
|
||||
timer_init(&sip_ep->register_option_timer, register_option_timeout, sip_ep);
|
||||
|
||||
/* init root object */
|
||||
|
@ -1907,6 +1921,7 @@ void sip_endpoint_destroy(sip_endpoint_t *sip_ep)
|
|||
return;
|
||||
timer_exit(&sip_ep->stun_retry_timer);
|
||||
timer_exit(&sip_ep->register_retry_timer);
|
||||
timer_exit(&sip_ep->register_expire_timer);
|
||||
timer_exit(&sip_ep->register_option_timer);
|
||||
if (sip_ep->stun_socket)
|
||||
su_close(sip_ep->stun_socket);
|
||||
|
|
|
@ -74,6 +74,7 @@ typedef struct sip_endpoint {
|
|||
int stun_interval;
|
||||
struct timer stun_retry_timer;
|
||||
struct timer register_retry_timer;
|
||||
struct timer register_expire_timer;
|
||||
struct timer register_option_timer;
|
||||
|
||||
/* SIP stack */
|
||||
|
|
Loading…
Reference in New Issue