void TunnelManager::addServer(const char *ip, int port,unsigned int udpMirrorPort,unsigned int delay) {
+ if (ip == NULL) {
+ ip = "";
+ ms_warning("Adding tunnel server with empty ip, it will not work!");
+ }
addServer(ip,port);
mUdpMirrorClients.push_back(UdpMirrorClient(ServerAddr(ip,udpMirrorPort),delay));
}
void TunnelManager::addServer(const char *ip, int port) {
+ if (ip == NULL) {
+ ip = "";
+ ms_warning("Adding tunnel server with empty ip, it will not work!");
+ }
mServerAddrs.push_back(ServerAddr(ip,port));
if (mTunnelClient) mTunnelClient->addServer(ip,port);
}
}
bool TunnelManager::isReady() const {
- return mTunnelClient && mTunnelClient->isReady();
+ return mTunnelClient && mTunnelClient->isReady() && mReady;
}
int TunnelManager::customSendto(struct _RtpTransport *t, mblk_t *msg , int flags, const struct sockaddr *to, socklen_t tolen){
,mEnabled(false)
,mTunnelClient(NULL)
,mAutoDetectStarted(false)
+,mReady(false)
,mHttpProxyPort(0){
mExosipTransport.data=this;
//force transport to udp
LCSipTransports lTransport;
- lTransport.udp_port=15060;
+ lTransport.udp_port=(0xDFFF&random())+1024;
lTransport.tcp_port=0;
lTransport.tls_port=0;
lTransport.dtls_port=0;
if (lProxy) {
linphone_proxy_config_done(lProxy);
}
+ mReady=true;
}else if (mEnabled && !mTunnelClient->isReady()){
/* we got disconnected from the tunnel */
if (lProxy && linphone_proxy_config_is_registered(lProxy)) {
linphone_proxy_config_edit(lProxy);
linphone_core_iterate(mCore);
}
+ mReady=false;
}
}
mEnabled=false;
stopClient();
-
+ mReady=false;
linphone_core_set_rtp_transport_factories(mCore,NULL);
eXosip_transport_hook_register(NULL);
}
#ifdef ANDROID
-static void linphone_android_log_handler(int lev, const char *fmt, va_list args){
+extern void linphone_android_log_handler(int prio, const char *fmt, va_list args);
+static void linphone_android_tunnel_log_handler(int lev, const char *fmt, va_list args) {
int prio;
switch(lev){
case TUNNEL_DEBUG: prio = ANDROID_LOG_DEBUG; break;
case TUNNEL_NOTICE: prio = ANDROID_LOG_INFO; break;
case TUNNEL_WARN: prio = ANDROID_LOG_WARN; break;
case TUNNEL_ERROR: prio = ANDROID_LOG_ERROR; break;
- default: prio = ANDROID_LOG_DEFAULT; break;
+ default: prio = ANDROID_LOG_DEFAULT; break;
}
- __android_log_vprint(prio, LOG_DOMAIN, fmt, args);
+ linphone_android_log_handler(prio, fmt, args);
}
#endif /*ANDROID*/
void TunnelManager::enableLogs(bool isEnabled,LogHandler logHandler) {
if (logHandler != NULL) SetLogHandler(logHandler);
#ifdef ANDROID
- else SetLogHandler(linphone_android_log_handler);
+ else SetLogHandler(linphone_android_tunnel_log_handler);
#else
else SetLogHandler(default_log_handler);
#endif
enable(false);
mAutoDetectStarted = false;
} else {
+ mCurrentUdpMirrorClient++;
if (mCurrentUdpMirrorClient !=mUdpMirrorClients.end()) {
// enable tunnel but also try backup server
LOGI("Tunnel is required, enabling; Trying backup udp mirror");