diff --git a/Classes/LinphoneUI/LinphoneManager.h b/Classes/LinphoneUI/LinphoneManager.h index 9ac87aaee..59e811e9d 100644 --- a/Classes/LinphoneUI/LinphoneManager.h +++ b/Classes/LinphoneUI/LinphoneManager.h @@ -27,6 +27,13 @@ typedef enum _Connectivity { wwan ,none } Connectivity; +typedef enum _TunnelMode { + off + ,on + ,wwan_only + ,autodetect +} TunnelMode; + @class FastAddressBook; @interface LinphoneManager : NSObject { @private @@ -42,6 +49,7 @@ typedef enum _Connectivity { UIViewController* mCurrentViewController; Connectivity connectivity; FastAddressBook* mFastAddressBook; + TunnelMode tunnelMode; } +(LinphoneManager*) instance; @@ -60,6 +68,7 @@ typedef enum _Connectivity { @property (nonatomic, retain) id callDelegate; @property (nonatomic, retain) id registrationDelegate; @property Connectivity connectivity; +@property TunnelMode tunnelMode; @end diff --git a/Classes/LinphoneUI/LinphoneManager.m b/Classes/LinphoneUI/LinphoneManager.m index bfc154153..f77842e16 100644 --- a/Classes/LinphoneUI/LinphoneManager.m +++ b/Classes/LinphoneUI/LinphoneManager.m @@ -44,10 +44,12 @@ extern void libmsamr_init(); @synthesize callDelegate; @synthesize registrationDelegate; @synthesize connectivity; +@synthesize tunnelMode; -(id) init { if ((self= [super init])) { mFastAddressBook = [[FastAddressBook alloc] init]; + tunnelMode = off; } return self; } @@ -339,6 +341,18 @@ void networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach linphone_core_set_network_reachable([LinphoneManager getLc],true); } lLinphoneMgr.connectivity=newConnectivity; + switch (lLinphoneMgr.tunnelMode) { + case wwan_only: + sTunnelMgr->enable(lLinphoneMgr.connectivity == wwan); + break; + case autodetect: + sTunnelMgr->autoDetect(); + break; + default: + //nothing to do + break; + } + ms_message("new network connectivity of type [%s]",(newConnectivity==wifi?"wifi":"wwan")); } @@ -468,7 +482,7 @@ void networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach } } //tunnel - BOOL lTunnelPrefEnabled = [[NSUserDefaults standardUserDefaults] boolForKey:@"tunnel_enabled_preference"]; + NSString* lTunnelPrefEnabled = [[NSUserDefaults standardUserDefaults] stringForKey:@"tunnel_enabled_preference"]; NSString* lTunnelPrefAddress = [[NSUserDefaults standardUserDefaults] stringForKey:@"tunnel_address_preference"]; NSString* lTunnelPrefPort = [[NSUserDefaults standardUserDefaults] stringForKey:@"tunnel_port_preference"]; int lTunnelPort = 443; @@ -477,9 +491,36 @@ void networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach } if (lTunnelPrefAddress && [lTunnelPrefAddress length]) { sTunnelMgr->cleanServers(); - sTunnelMgr->addServer([lTunnelPrefAddress cStringUsingEncoding:[NSString defaultCStringEncoding]],lTunnelPort); + sTunnelMgr->addServer([lTunnelPrefAddress cStringUsingEncoding:[NSString defaultCStringEncoding]],lTunnelPort,12345/*default port*/,1000); + } + if ([lTunnelPrefEnabled isEqualToString:@"off"]) { + tunnelMode=off; + } else if ([lTunnelPrefEnabled isEqualToString:@"on"]) { + tunnelMode=on; + }else if ([lTunnelPrefEnabled isEqualToString:@"wwan"]) { + tunnelMode=wwan_only; + }else if ([lTunnelPrefEnabled isEqualToString:@"auto"]) { + tunnelMode=autodetect; + } else { + ms_error("Unexpected tunnel mode [%s]",[lTunnelPrefEnabled cStringUsingEncoding:[NSString defaultCStringEncoding]]); + } + switch (tunnelMode) { + case off: + sTunnelMgr->enable(false); + break; + case on: + sTunnelMgr->enable(true); + break; + case wwan_only: + if (connectivity != wwan) { + sTunnelMgr->enable(false); + } + break; + case autodetect: + sTunnelMgr->autoDetect(); + break; + } - sTunnelMgr->enable(lTunnelPrefEnabled); //Configure Codecs @@ -763,5 +804,4 @@ void networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach -(void) registerLogView:(id) view { mLogView = view; } - @end diff --git a/Settings.bundle/Root.plist b/Settings.bundle/Root.plist index 7f27df2bd..a0eb4d096 100644 --- a/Settings.bundle/Root.plist +++ b/Settings.bundle/Root.plist @@ -161,38 +161,50 @@ Title Tunnel - Type + Type PSGroupSpecifier - Type - PSTextFieldSpecifier - Title - Address Key tunnel_address_preference - - + Title + Address Type PSTextFieldSpecifier - Title - port + + Key tunnel_port_preference + Title + port + Type + PSTextFieldSpecifier - Type - PSToggleSwitchSpecifier - Title - Enable + DefaultValue + off + Titles + + off + on + wwan + auto + Key tunnel_enabled_preference - DefaultValue - + Title + Enable + Type + PSMultiValueSpecifier + Values + + off + on + wwan + auto + - Type - PSGroupSpecifier Title Advanced Type diff --git a/submodules/tunnel b/submodules/tunnel index 37968787d..5890673a1 160000 --- a/submodules/tunnel +++ b/submodules/tunnel @@ -1 +1 @@ -Subproject commit 37968787d92eb67457b9e5e9197451b9b0765461 +Subproject commit 5890673a1ea3a5e3606a9b2fa472857807b8b6ce