forked from mirrors/linphone-iphone
add tcp support
This commit is contained in:
parent
45e8f231c7
commit
4fa1a45038
4 changed files with 80 additions and 40 deletions
|
|
@ -76,6 +76,7 @@
|
|||
bool networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReachabilityFlags flags, void * info);
|
||||
|
||||
-(void) doRegister;
|
||||
-(void) doLinphoneConfiguration:(NSNotification *)notification;
|
||||
|
||||
|
||||
@property (nonatomic, retain) IBOutlet UIWindow *window;
|
||||
|
|
|
|||
|
|
@ -275,39 +275,62 @@ extern void libmsilbc_init();
|
|||
, [confiFileName cStringUsingEncoding:[NSString defaultCStringEncoding]]
|
||||
, [factoryConfig cStringUsingEncoding:[NSString defaultCStringEncoding]]
|
||||
,self);
|
||||
|
||||
[ self doLinphoneConfiguration:nil];
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||
selector:@selector(doLinphoneConfiguration:)
|
||||
name:NSUserDefaultsDidChangeNotification object:nil];
|
||||
|
||||
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 40000
|
||||
int sipsock = linphone_core_get_sip_socket(myLinphoneCore);
|
||||
|
||||
CFReadStreamRef readStream;
|
||||
CFWriteStreamRef writeStream;
|
||||
// start scheduler
|
||||
[NSTimer scheduledTimerWithTimeInterval:0.1
|
||||
target:self
|
||||
selector:@selector(iterate)
|
||||
userInfo:nil
|
||||
repeats:YES];
|
||||
|
||||
CFStreamCreatePairWithSocket(NULL, (CFSocketNativeHandle)sipsock, &readStream, &writeStream);
|
||||
}
|
||||
-(void) doLinphoneConfiguration:(NSNotification *)notification {
|
||||
ms_message("Configuring Linphone");
|
||||
|
||||
if (!CFReadStreamSetProperty(readStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP)) {
|
||||
ms_error("cannot set service type to voip for read stream");
|
||||
isDebug = [[NSUserDefaults standardUserDefaults] boolForKey:@"debugenable_preference"];
|
||||
if (isDebug) {
|
||||
//redirect all traces to the iphone log framework
|
||||
linphone_core_enable_logs_with_cb((OrtpLogFunc)linphone_iphone_log_handler);
|
||||
}
|
||||
if (!CFWriteStreamSetProperty(writeStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP)) {
|
||||
ms_error("cannot set service type to voip for write stream");
|
||||
else {
|
||||
linphone_core_disable_logs();
|
||||
}
|
||||
if (CFReadStreamOpen(readStream) == false) {
|
||||
ms_error("cannot open read stream");
|
||||
|
||||
};
|
||||
#endif
|
||||
NSString* transport = [[NSUserDefaults standardUserDefaults] stringForKey:@"transport_preference"];
|
||||
|
||||
LCSipTransports transportValue;
|
||||
if (transport!=nil) {
|
||||
if (linphone_core_get_sip_transports(myLinphoneCore, &transportValue)) {
|
||||
ms_error("cannot get current transport");
|
||||
}
|
||||
if ([transport isEqualToString:@"tcp"]) {
|
||||
if (transportValue.tcp_port == 0) transportValue.tcp_port=transportValue.udp_port;
|
||||
transportValue.udp_port=0;
|
||||
} else if ([transport isEqualToString:@"udp"]){
|
||||
if (transportValue.udp_port == 0) transportValue.udp_port=transportValue.tcp_port;
|
||||
transportValue.tcp_port=0;
|
||||
} else {
|
||||
ms_error("unexpected trasnport [%s]",[transport cStringUsingEncoding:[NSString defaultCStringEncoding]]);
|
||||
}
|
||||
if (linphone_core_set_sip_transports(myLinphoneCore, &transportValue)) {
|
||||
ms_error("cannot set transport");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//initial state is network off
|
||||
linphone_core_set_network_reachable(myLinphoneCore,false);
|
||||
|
||||
// Set audio assets
|
||||
const char* lRing = [[myBundle pathForResource:@"oldphone-mono"ofType:@"wav"] cStringUsingEncoding:[NSString defaultCStringEncoding]];
|
||||
linphone_core_set_ring(myLinphoneCore, lRing );
|
||||
const char* lRingBack = [[myBundle pathForResource:@"ringback"ofType:@"wav"] cStringUsingEncoding:[NSString defaultCStringEncoding]];
|
||||
linphone_core_set_ringback(myLinphoneCore, lRingBack);
|
||||
|
||||
|
||||
//configure sip account
|
||||
|
||||
|
||||
//madatory parameters
|
||||
|
||||
NSString* username = [[NSUserDefaults standardUserDefaults] stringForKey:@"username_preference"];
|
||||
|
|
@ -315,13 +338,15 @@ extern void libmsilbc_init();
|
|||
NSString* accountPassword = [[NSUserDefaults standardUserDefaults] stringForKey:@"password_preference"];
|
||||
bool configCheckDisable = [[NSUserDefaults standardUserDefaults] boolForKey:@"check_config_disable_preference"];
|
||||
bool isOutboundProxy= [[NSUserDefaults standardUserDefaults] boolForKey:@"outbound_proxy_preference"];
|
||||
|
||||
|
||||
//clear auth info list
|
||||
|
||||
//clear auth info list
|
||||
linphone_core_clear_all_auth_info(myLinphoneCore);
|
||||
//clear existing proxy config
|
||||
linphone_core_clear_proxy_config(myLinphoneCore);
|
||||
|
||||
if (proxyReachability !=nil) {
|
||||
SCNetworkReachabilityUnscheduleFromRunLoop(proxyReachability,CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
|
||||
}
|
||||
if (username && [username length] >0 && domain && [domain length]>0) {
|
||||
|
||||
|
||||
|
|
@ -358,7 +383,7 @@ extern void libmsilbc_init();
|
|||
|
||||
if (isOutboundProxy)
|
||||
linphone_proxy_config_set_route(proxyCfg,proxy);
|
||||
|
||||
|
||||
if ([prefix length]>0) {
|
||||
linphone_proxy_config_set_dial_prefix(proxyCfg, [prefix cStringUsingEncoding:[NSString defaultCStringEncoding]]);
|
||||
}
|
||||
|
|
@ -371,24 +396,24 @@ extern void libmsilbc_init();
|
|||
LinphoneAddress* addr=linphone_address_new(linphone_proxy_config_get_addr(proxyCfg));
|
||||
proxyReachability=SCNetworkReachabilityCreateWithName(nil, linphone_address_get_domain(addr));
|
||||
|
||||
|
||||
|
||||
|
||||
[self doRegister];
|
||||
} else if (configCheckDisable == false) {
|
||||
UIAlertView* error = [[UIAlertView alloc] initWithTitle:@"Warning"
|
||||
message:@"It seems you have not configured any proxy server from settings"
|
||||
delegate:self
|
||||
cancelButtonTitle:@"Continue"
|
||||
otherButtonTitles:@"Never remind",nil];
|
||||
message:@"It seems you have not configured any proxy server from settings"
|
||||
delegate:self
|
||||
cancelButtonTitle:@"Continue"
|
||||
otherButtonTitles:@"Never remind",nil];
|
||||
[error show];
|
||||
proxyReachability=SCNetworkReachabilityCreateWithName(nil, "linphone.org");
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
proxyReachabilityContext.info=self;
|
||||
SCNetworkReachabilitySetCallback(proxyReachability, (SCNetworkReachabilityCallBack)networkReachabilityCallBack,&proxyReachabilityContext);
|
||||
SCNetworkReachabilityScheduleWithRunLoop(proxyReachability, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
|
||||
|
||||
|
||||
//Configure Codecs
|
||||
|
||||
PayloadType *pt;
|
||||
|
|
@ -447,15 +472,9 @@ extern void libmsilbc_init();
|
|||
linphone_core_enable_payload_type(myLinphoneCore,pt, TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
// start scheduler
|
||||
[NSTimer scheduledTimerWithTimeInterval:0.1
|
||||
target:self
|
||||
selector:@selector(iterate)
|
||||
userInfo:nil
|
||||
repeats:YES];
|
||||
|
||||
}
|
||||
|
||||
// no proxy configured alert
|
||||
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
|
||||
if (buttonIndex == 1) {
|
||||
|
|
|
|||
|
|
@ -194,6 +194,26 @@
|
|||
<key>AutocorrectionType</key>
|
||||
<string>No</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Type</key>
|
||||
<string>PSMultiValueSpecifier</string>
|
||||
<key>Values</key>
|
||||
<array>
|
||||
<string>udp</string>
|
||||
<string>tcp</string>
|
||||
</array>
|
||||
<key>Titles</key>
|
||||
<array>
|
||||
<string>udp</string>
|
||||
<string>tcp</string>
|
||||
</array>
|
||||
<key>Title</key>
|
||||
<string>Transport</string>
|
||||
<key>Key</key>
|
||||
<string>transport_preference</string>
|
||||
<key>DefaultValue</key>
|
||||
<string>udp</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ register_only_when_network_is_up=0
|
|||
default_proxy=-1
|
||||
auto_net_state_mon=0
|
||||
transport=udp
|
||||
keepalive_period=3600
|
||||
keepalive_period=3600000
|
||||
|
||||
[rtp]
|
||||
audio_rtp_port=7076
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue