sipretransmitmanager.cxx
来自「一个SIP协议栈」· CXX 代码 · 共 90 行
CXX
90 行
#include "SIPRetransmitManager.h"namespace msip{ //---------------------------------------------------------------------------------- RetransmitManager::RetransmitManager(long t1, long t2, double exp_val) : tr_T1(t1), tr_T2(t2), tr_Exp(exp_val), tr_Interval(t1), tr_Status(trIdle) { } //---------------------------------------------------------------------------------- void RetransmitManager::setTimeoutValues(long t1, long t2, double exp_val) { tr_T1 = t1; tr_T2 = t2; tr_Exp = exp_val; } //---------------------------------------------------------------------------------- void RetransmitManager::start() { tr_Interval = tr_T1; tr_Timer1.setInterval(long(tr_Interval)); tr_Timer2.setInterval(tr_T2); tr_Status = trPending; } //---------------------------------------------------------------------------------- void RetransmitManager::cancel() { tr_Status = trIdle; } //---------------------------------------------------------------------------------- RetransmitManager::Status RetransmitManager::poll() { Status st = tr_Status; if(tr_Status == trPending) { Timer tm; tm.setCurrent(); if(tr_Timer2.outOfInterval(tm)) { st = tr_Status = trTimeoutReached; } else { if(tr_Timer1.outOfInterval(tm)) { tr_Interval = int(tr_Interval * tr_Exp); tr_Timer1.setInterval(long(tr_Interval)); st = trTransmitIndicated; } } } return st; } //---------------------------------------------------------------------------------- long RetransmitManager::getTimeLeft() const { long interval = 0x7FFFFFFFl; //MAX_LONG if(tr_Status == trPending) { interval = tr_Timer1.getInterval(); if(interval < 0) interval = 0; } return interval; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?