1
0
Fork 0

Add timer to expire registration (from remote)

This commit is contained in:
Andreas Eversberg 2023-04-01 08:58:35 +02:00
parent 2d20ce6f71
commit acb35e3cb5
2 changed files with 18 additions and 2 deletions

View File

@ -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);

View File

@ -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 */