mirror of
https://github.com/danog/libtgvoip.git
synced 2024-12-02 09:37:52 +01:00
Fixes
This commit is contained in:
parent
100f7ecbd8
commit
8faf6f6700
@ -526,7 +526,8 @@ void VoIPController::InitializeTimers(){
|
|||||||
}, 0.1, 0.1);
|
}, 0.1, 0.1);
|
||||||
}
|
}
|
||||||
|
|
||||||
messageThread.Post(std::bind(&VoIPController::SendUdpPings, this), 0.0, 0.5);
|
udpConnectivityState=UDP_PING_PENDING;
|
||||||
|
udpPingTimeoutID=messageThread.Post(std::bind(&VoIPController::SendUdpPings, this), 0.0, 0.5);
|
||||||
messageThread.Post(std::bind(&VoIPController::SendRelayPings, this), 0.0, 2.0);
|
messageThread.Post(std::bind(&VoIPController::SendRelayPings, this), 0.0, 2.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1891,7 +1892,7 @@ void VoIPController::SetNetworkType(int type){
|
|||||||
if(itfName!=activeNetItfName){
|
if(itfName!=activeNetItfName){
|
||||||
udpSocket->OnActiveInterfaceChanged();
|
udpSocket->OnActiveInterfaceChanged();
|
||||||
LOGI("Active network interface changed: %s -> %s", activeNetItfName.c_str(), itfName.c_str());
|
LOGI("Active network interface changed: %s -> %s", activeNetItfName.c_str(), itfName.c_str());
|
||||||
bool isFirstChange=activeNetItfName.length()==0;
|
bool isFirstChange=activeNetItfName.length()==0 && state!=STATE_ESTABLISHED && state!=STATE_RECONNECTING;
|
||||||
activeNetItfName=itfName;
|
activeNetItfName=itfName;
|
||||||
if(isFirstChange)
|
if(isFirstChange)
|
||||||
return;
|
return;
|
||||||
@ -1921,8 +1922,6 @@ void VoIPController::SetNetworkType(int type){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
udpConnectivityState=UDP_UNKNOWN;
|
|
||||||
udpPingCount=0;
|
|
||||||
lastUdpPingTime=0;
|
lastUdpPingTime=0;
|
||||||
if(proxyProtocol==PROXY_SOCKS5)
|
if(proxyProtocol==PROXY_SOCKS5)
|
||||||
InitUDPProxy();
|
InitUDPProxy();
|
||||||
@ -1939,9 +1938,9 @@ void VoIPController::SetNetworkType(int type){
|
|||||||
}
|
}
|
||||||
selectCanceller->CancelSelect();
|
selectCanceller->CancelSelect();
|
||||||
didSendIPv6Endpoint=false;
|
didSendIPv6Endpoint=false;
|
||||||
udpPingCount=0;
|
|
||||||
|
|
||||||
AddIPv6Relays();
|
AddIPv6Relays();
|
||||||
|
ResetUdpAvailability();
|
||||||
}
|
}
|
||||||
LOGI("set network type: %d, active interface %s", type, activeNetItfName.c_str());
|
LOGI("set network type: %d, active interface %s", type, activeNetItfName.c_str());
|
||||||
}
|
}
|
||||||
@ -2747,6 +2746,22 @@ void VoIPController::SetEchoCancellationStrength(int strength){
|
|||||||
echoCanceller->SetAECStrength(strength);
|
echoCanceller->SetAECStrength(strength);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VoIPController::ResetUdpAvailability(){
|
||||||
|
LOGI("Resetting UDP availability");
|
||||||
|
if(udpPingTimeoutID!=MessageThread::INVALID_ID){
|
||||||
|
messageThread.Cancel(udpPingTimeoutID);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
MutexGuard m(endpointsMutex);
|
||||||
|
for(shared_ptr<Endpoint>& e:endpoints){
|
||||||
|
e->udpPongCount=0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
udpPingCount=0;
|
||||||
|
udpConnectivityState=UDP_PING_PENDING;
|
||||||
|
udpPingTimeoutID=messageThread.Post(std::bind(&VoIPController::SendUdpPings, this), 0.0, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
#pragma mark - Timer methods
|
#pragma mark - Timer methods
|
||||||
|
|
||||||
void VoIPController::SendUdpPings(){
|
void VoIPController::SendUdpPings(){
|
||||||
@ -2755,12 +2770,12 @@ void VoIPController::SendUdpPings(){
|
|||||||
SendUdpPing(e);
|
SendUdpPing(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(udpConnectivityState==UDP_UNKNOWN)
|
if(udpConnectivityState==UDP_UNKNOWN || udpConnectivityState==UDP_PING_PENDING)
|
||||||
udpConnectivityState=UDP_PING_SENT;
|
udpConnectivityState=UDP_PING_SENT;
|
||||||
udpPingCount++;
|
udpPingCount++;
|
||||||
if(udpPingCount==4 || udpPingCount==10){
|
if(udpPingCount==4 || udpPingCount==10){
|
||||||
messageThread.CancelSelf();
|
messageThread.CancelSelf();
|
||||||
messageThread.Post(std::bind(&VoIPController::EvaluateUdpPingResults, this), 1.0);
|
udpPingTimeoutID=messageThread.Post(std::bind(&VoIPController::EvaluateUdpPingResults, this), 1.0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2795,11 +2810,13 @@ void VoIPController::EvaluateUdpPingResults(){
|
|||||||
useTCP=true;
|
useTCP=true;
|
||||||
AddTCPRelays();
|
AddTCPRelays();
|
||||||
setCurrentEndpointToTCP=true;
|
setCurrentEndpointToTCP=true;
|
||||||
messageThread.Post(std::bind(&VoIPController::SendUdpPings, this), 0.5, 0.5);
|
udpPingTimeoutID=messageThread.Post(std::bind(&VoIPController::SendUdpPings, this), 0.5, 0.5);
|
||||||
}else{
|
}else{
|
||||||
|
udpPingTimeoutID=MessageThread::INVALID_ID;
|
||||||
udpConnectivityState=UDP_AVAILABLE;
|
udpConnectivityState=UDP_AVAILABLE;
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
|
udpPingTimeoutID=MessageThread::INVALID_ID;
|
||||||
udpConnectivityState=UDP_NOT_AVAILABLE;
|
udpConnectivityState=UDP_NOT_AVAILABLE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2966,6 +2983,7 @@ void VoIPController::UpdateAudioBitrate(){
|
|||||||
|
|
||||||
if(state==STATE_ESTABLISHED && time-lastRecvPacketTime>=reconnectingTimeout){
|
if(state==STATE_ESTABLISHED && time-lastRecvPacketTime>=reconnectingTimeout){
|
||||||
SetState(STATE_RECONNECTING);
|
SetState(STATE_RECONNECTING);
|
||||||
|
ResetUdpAvailability();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(state==STATE_ESTABLISHED || state==STATE_RECONNECTING){
|
if(state==STATE_ESTABLISHED || state==STATE_RECONNECTING){
|
||||||
|
@ -436,6 +436,7 @@ namespace tgvoip{
|
|||||||
};
|
};
|
||||||
enum{
|
enum{
|
||||||
UDP_UNKNOWN=0,
|
UDP_UNKNOWN=0,
|
||||||
|
UDP_PING_PENDING,
|
||||||
UDP_PING_SENT,
|
UDP_PING_SENT,
|
||||||
UDP_AVAILABLE,
|
UDP_AVAILABLE,
|
||||||
UDP_NOT_AVAILABLE,
|
UDP_NOT_AVAILABLE,
|
||||||
@ -475,6 +476,7 @@ namespace tgvoip{
|
|||||||
void UpdateQueuedPackets();
|
void UpdateQueuedPackets();
|
||||||
void SendNopPacket();
|
void SendNopPacket();
|
||||||
void TickJitterBufferAngCongestionControl();
|
void TickJitterBufferAngCongestionControl();
|
||||||
|
void ResetUdpAvailability();
|
||||||
|
|
||||||
int state;
|
int state;
|
||||||
std::vector<std::shared_ptr<Endpoint>> endpoints;
|
std::vector<std::shared_ptr<Endpoint>> endpoints;
|
||||||
@ -594,6 +596,7 @@ namespace tgvoip{
|
|||||||
|
|
||||||
uint32_t initTimeoutID=MessageThread::INVALID_ID;
|
uint32_t initTimeoutID=MessageThread::INVALID_ID;
|
||||||
uint32_t noStreamsNopID=MessageThread::INVALID_ID;
|
uint32_t noStreamsNopID=MessageThread::INVALID_ID;
|
||||||
|
uint32_t udpPingTimeoutID=MessageThread::INVALID_ID;
|
||||||
|
|
||||||
/*** server config values ***/
|
/*** server config values ***/
|
||||||
uint32_t maxAudioBitrate;
|
uint32_t maxAudioBitrate;
|
||||||
|
Loading…
Reference in New Issue
Block a user