diff --git a/Classes/LinphoneCoreSettingsStore.m b/Classes/LinphoneCoreSettingsStore.m index 7a57b6f42..a26823e82 100644 --- a/Classes/LinphoneCoreSettingsStore.m +++ b/Classes/LinphoneCoreSettingsStore.m @@ -361,9 +361,9 @@ extern void linphone_iphone_log_handler(int lev, const char *fmt, va_list args); linphone_core_enable_video(lc, enableVideo, enableVideo); NSString *menc = [self stringForKey:@"media_encryption_preference"]; - if (menc && [menc compare:@"SRTP"]) + if (menc && [menc compare:@"SRTP"] == NSOrderedSame) linphone_core_set_media_encryption(lc, LinphoneMediaEncryptionSRTP); - else if (menc && [menc compare:@"ZRTP"]) + else if (menc && [menc compare:@"ZRTP"] == NSOrderedSame) linphone_core_set_media_encryption(lc, LinphoneMediaEncryptionZRTP); else linphone_core_set_media_encryption(lc, LinphoneMediaEncryptionNone); diff --git a/Classes/LinphoneUI/UIStateBar.h b/Classes/LinphoneUI/UIStateBar.h index e9033cb53..76be85a2c 100644 --- a/Classes/LinphoneUI/UIStateBar.h +++ b/Classes/LinphoneUI/UIStateBar.h @@ -23,10 +23,12 @@ UIImageView* registrationStateImage; UILabel* registrationStateLabel; UIImageView* callQualityImage; + UIImageView* callSecurityImage; } @property (nonatomic, retain) IBOutlet UIImageView* registrationStateImage; @property (nonatomic, retain) IBOutlet UILabel* registrationStateLabel; @property (nonatomic, retain) IBOutlet UIImageView* callQualityImage; +@property (nonatomic, retain) IBOutlet UIImageView* callSecurityImage; @end diff --git a/Classes/LinphoneUI/UIStateBar.m b/Classes/LinphoneUI/UIStateBar.m index 1b14f74e5..da0d611c3 100644 --- a/Classes/LinphoneUI/UIStateBar.m +++ b/Classes/LinphoneUI/UIStateBar.m @@ -27,14 +27,21 @@ @synthesize registrationStateImage; @synthesize registrationStateLabel; @synthesize callQualityImage; +@synthesize callSecurityImage; NSTimer *callQualityTimer; +NSTimer *callSecurityTimer; #pragma mark - Lifecycle Functions - (id)init { - return [super initWithNibName:@"UIStateBar" bundle:[NSBundle mainBundle]]; + self = [super initWithNibName:@"UIStateBar" bundle:[NSBundle mainBundle]]; + if(self != nil) { + self->callSecurityImage = nil; + self->callQualityImage = nil; + } + return self; } - (void) dealloc { @@ -57,6 +64,13 @@ NSTimer *callQualityTimer; userInfo:nil repeats:YES]; + // Set callQualityTimer + callSecurityTimer = [NSTimer scheduledTimerWithTimeInterval:1 + target:self + selector:@selector(callSecurityUpdate) + userInfo:nil + repeats:YES]; + // Set observer [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(registrationUpdate:) @@ -65,6 +79,7 @@ NSTimer *callQualityTimer; [callQualityImage setHidden: true]; + [callSecurityImage setHidden: true]; // Update to default state LinphoneProxyConfig* config = NULL; @@ -81,7 +96,14 @@ NSTimer *callQualityTimer; name:@"LinphoneRegistrationUpdate" object:nil]; - [callQualityTimer invalidate]; + if(callQualityTimer != nil) { + [callQualityTimer invalidate]; + callQualityTimer = nil; + } + if(callQualityTimer != nil) { + [callSecurityTimer invalidate]; + callSecurityTimer = nil; + } } @@ -157,6 +179,44 @@ NSTimer *callQualityTimer; #pragma mark - +- (void)callSecurityUpdate { + BOOL pending = false; + BOOL security = true; + + if(![LinphoneManager isLcReady]) { + [callSecurityImage setHidden: true]; + return; + } + const MSList *list = linphone_core_get_calls([LinphoneManager getLc]); + if(list == NULL) { + [callSecurityImage setHidden: true]; + return; + } + while(list != NULL) { + LinphoneCall *call = (LinphoneCall*) list->data; + LinphoneMediaEncryption enc = linphone_call_params_get_media_encryption(linphone_call_get_current_params(call)); + if(enc == LinphoneMediaEncryptionNone) + security = false; + else if(enc == LinphoneMediaEncryptionZRTP) { + if(!linphone_call_get_authentication_token_verified(call)) { + pending = true; + } + } + list = list->next; + } + + if(security) { + if(pending) { + [callSecurityImage setImage:[UIImage imageNamed:@"security_pending.png"]]; + } else { + [callSecurityImage setImage:[UIImage imageNamed:@"security_ok.png"]]; + } + } else { + [callSecurityImage setImage:[UIImage imageNamed:@"security_ko.png"]]; + } + [callSecurityImage setHidden: false]; +} + - (void)callQualityUpdate { UIImage *image = nil; if([LinphoneManager isLcReady]) { diff --git a/Classes/LinphoneUI/UIStateBar.xib b/Classes/LinphoneUI/UIStateBar.xib index ff171f256..23f0c3c49 100644 --- a/Classes/LinphoneUI/UIStateBar.xib +++ b/Classes/LinphoneUI/UIStateBar.xib @@ -103,11 +103,22 @@ {{219, 3}, {27, 17}} - + _NS:567 NO IBCocoaTouchFramework + + + 292 + {{254, 3}, {27, 17}} + + + _NS:567 + 1 + NO + IBCocoaTouchFramework + {320, 23} @@ -155,6 +166,14 @@ 16 + + + callSecurityImage + + + + 18 + @@ -183,6 +202,7 @@ + @@ -208,7 +228,13 @@ 13 - callQualityIndicatorImage + callQualityImage + + + 17 + + + callSecurityImage @@ -219,6 +245,7 @@ com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin @@ -227,7 +254,7 @@ - 16 + 18 @@ -236,6 +263,7 @@ UIViewController UIImageView + UIImageView UIImageView UILabel @@ -244,6 +272,10 @@ callQualityImage UIImageView + + callSecurityImage + UIImageView + registrationStateImage UIImageView