siptimer_a = pkt->timer_t1 * 2;
/* Schedule retransmission */
+ if (pkt->retransid > -1)
+ ast_sched_del(sched, pkt->retransid);
pkt->retransid = ast_sched_add_variable(sched, siptimer_a, retrans_pkt, pkt, 1);
if (option_debug > 3 && sipdebug)
ast_log(LOG_DEBUG, "*** SIP TIMER: Initalizing retransmit timer on packet: Id #%d\n", pkt->retransid);
p->invitestate = INV_CALLING;
/* Initialize auto-congest time */
+ if (p->initid > -1)
+ ast_sched_del(sched, p->initid);
p->initid = ast_sched_add(sched, p->maxtime ? (p->maxtime * 4) : SIP_TRANS_TIMEOUT, auto_congest, p);
}
}
r->refresh= (int) expires_ms / 1000;
/* Schedule re-registration before we expire */
- r->expire=ast_sched_add(sched, expires_ms, sip_reregister, r);
+ if (r->expire > -1)
+ ast_sched_del(sched, r->expire);
+ r->expire = ast_sched_add(sched, expires_ms, sip_reregister, r);
ASTOBJ_UNREF(r, sip_registry_destroy);
}
return 1;
peer->lastms = -1;
ast_device_state_changed("SIP/%s", peer->name);
/* Try again quickly */
+ if (peer->pokeexpire > -1)
+ ast_sched_del(sched, peer->pokeexpire);
peer->pokeexpire = ast_sched_add(sched, DEFAULT_FREQ_NOTOK, sip_poke_peer_s, peer);
return 0;
}
gettimeofday(&peer->ps, NULL);
if (xmitres == XMIT_ERROR)
sip_poke_noanswer(peer); /* Immediately unreachable, network problems */
- else
+ else {
+ if (peer->pokeexpire > -1)
+ ast_sched_del(sched, peer->pokeexpire);
peer->pokeexpire = ast_sched_add(sched, DEFAULT_MAXMS * 2, sip_poke_noanswer, peer);
+ }
return 0;
}