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
+
{320, 23}
@@ -155,6 +166,14 @@
16
+
@@ -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