Fix zrtp feature

This commit is contained in:
Yann Diorcet 2013-01-14 10:37:56 +01:00
parent 1b9f022fb4
commit 6d657edc69
9 changed files with 330 additions and 22 deletions

View file

@ -431,7 +431,6 @@ extern void linphone_iphone_log_handler(int lev, const char *fmt, va_list args);
NSArray* matches = [regex matchesInString:text options:0 range:NSMakeRange(0, [text length])];
if([matches count] == 1) {
NSTextCheckingResult *match = [matches objectAtIndex:0];
NSLog(@"%d", [match numberOfRanges]);
bool range = [match rangeAtIndex:2].length > 0;
if(!range) {
NSRange rangeMinPort = [match rangeAtIndex:1];
@ -503,7 +502,8 @@ extern void linphone_iphone_log_handler(int lev, const char *fmt, va_list args);
linphone_core_set_media_encryption(lc, LinphoneMediaEncryptionSRTP);
else if (menc && [menc compare:@"ZRTP"] == NSOrderedSame)
linphone_core_set_media_encryption(lc, LinphoneMediaEncryptionZRTP);
else linphone_core_set_media_encryption(lc, LinphoneMediaEncryptionNone);
else
linphone_core_set_media_encryption(lc, LinphoneMediaEncryptionNone);
NSString* stun_server = [self stringForKey:@"stun_preference"];
if ([stun_server length] > 0){

View file

@ -19,13 +19,18 @@
#import <UIKit/UIKit.h>
#import "TPMultiLayoutViewController.h"
#import "DTActionSheet.h"
@interface UIStateBar : TPMultiLayoutViewController {
DTActionSheet *securitySheet;
}
@property (nonatomic, retain) IBOutlet UIImageView* registrationStateImage;
@property (nonatomic, retain) IBOutlet UILabel* registrationStateLabel;
@property (nonatomic, retain) IBOutlet UIImageView* callQualityImage;
@property (nonatomic, retain) IBOutlet UIImageView* callSecurityImage;
@property (nonatomic, retain) IBOutlet UIButton* callSecurityButton;
- (IBAction)doSecurityClick:(id)sender;
@end

View file

@ -19,8 +19,7 @@
#import "UIStateBar.h"
#import "LinphoneManager.h"
#include "linphonecore.h"
#import "PhoneMainView.h"
@implementation UIStateBar
@ -28,6 +27,7 @@
@synthesize registrationStateLabel;
@synthesize callQualityImage;
@synthesize callSecurityImage;
@synthesize callSecurityButton;
NSTimer *callQualityTimer;
NSTimer *callSecurityTimer;
@ -40,11 +40,20 @@ NSTimer *callSecurityTimer;
if(self != nil) {
self->callSecurityImage = nil;
self->callQualityImage = nil;
self->securitySheet = nil;
}
return self;
}
- (void) dealloc {
if(securitySheet) {
[securitySheet release];
}
[registrationStateImage release];
[registrationStateLabel release];
[callQualityImage release];
[callSecurityImage release];
[callSecurityButton release];
[[NSNotificationCenter defaultCenter] removeObserver:self];
[callQualityTimer invalidate];
[callQualityTimer release];
@ -183,6 +192,9 @@ NSTimer *callSecurityTimer;
}
const MSList *list = linphone_core_get_calls([LinphoneManager getLc]);
if(list == NULL) {
if(securitySheet) {
[securitySheet dismissWithClickedButtonIndex:securitySheet.destructiveButtonIndex animated:TRUE];
}
[callSecurityImage setHidden:true];
return;
}
@ -238,6 +250,42 @@ NSTimer *callSecurityTimer;
}
#pragma mark - Action Functions
- (IBAction)doSecurityClick:(id)sender {
if([LinphoneManager isLcReady] && linphone_core_get_calls_nb([LinphoneManager getLc])) {
LinphoneCall *call = linphone_core_get_current_call([LinphoneManager getLc]);
if(call != NULL) {
LinphoneMediaEncryption enc = linphone_call_params_get_media_encryption(linphone_call_get_current_params(call));
if(enc == LinphoneMediaEncryptionZRTP) {
bool valid = linphone_call_get_authentication_token_verified(call);
NSString *message = nil;
if(valid) {
message = NSLocalizedString(@"Remove trust in the peer?",nil);
} else {
message = [NSString stringWithFormat:NSLocalizedString(@"Confirm the following SAS with the peer:\n%s",nil),
linphone_call_get_authentication_token(call)];
}
if(securitySheet == nil) {
securitySheet = [[DTActionSheet alloc] initWithTitle:message];
[securitySheet addButtonWithTitle:NSLocalizedString(@"Ok",nil) block:^(){
linphone_call_set_authentication_token_verified(call, !valid);
[securitySheet release];
securitySheet = nil;
}];
[securitySheet addDestructiveButtonWithTitle:NSLocalizedString(@"Cancel",nil) block:^(){
[securitySheet release];
securitySheet = nil;
}];
[securitySheet showInView:[PhoneMainView instance].view];
}
}
}
}
}
#pragma mark - TPMultiLayoutViewController Functions
- (NSDictionary*)attributesForView:(UIView*)view {

View file

@ -2,9 +2,9 @@
<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="8.00">
<data>
<int key="IBDocument.SystemTarget">1536</int>
<string key="IBDocument.SystemVersion">11E53</string>
<string key="IBDocument.SystemVersion">11G63</string>
<string key="IBDocument.InterfaceBuilderVersion">2840</string>
<string key="IBDocument.AppKitVersion">1138.47</string>
<string key="IBDocument.AppKitVersion">1138.51</string>
<string key="IBDocument.HIToolboxVersion">569.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
@ -12,6 +12,7 @@
</object>
<array key="IBDocument.IntegratedClassDependencies">
<string>IBProxyObject</string>
<string>IBUIButton</string>
<string>IBUIImageView</string>
<string>IBUILabel</string>
<string>IBUIView</string>
@ -41,6 +42,7 @@
<int key="NSvFlags">274</int>
<string key="NSFrameSize">{320, 23}</string>
<reference key="NSSuperview" ref="848661322"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="332800514"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<int key="IBUITag">1</int>
@ -56,6 +58,7 @@
<int key="NSvFlags">292</int>
<string key="NSFrame">{{6, 6}, {10, 10}}</string>
<reference key="NSSuperview" ref="848661322"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="200467549"/>
<string key="NSReuseIdentifierKey">_NS:567</string>
<int key="IBUITag">2</int>
@ -75,6 +78,7 @@
<int key="NSvFlags">290</int>
<string key="NSFrame">{{22, 0}, {222, 20}}</string>
<reference key="NSSuperview" ref="848661322"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="327031870"/>
<string key="NSReuseIdentifierKey">_NS:328</string>
<bool key="IBUIOpaque">NO</bool>
@ -109,7 +113,8 @@
<int key="NSvFlags">289</int>
<string key="NSFrame">{{252, 3}, {27, 17}}</string>
<reference key="NSSuperview" ref="848661322"/>
<reference key="NSNextKeyView" ref="522045680"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="661488590"/>
<string key="NSReuseIdentifierKey">_NS:567</string>
<int key="IBUITag">4</int>
<bool key="IBUIUserInteractionEnabled">NO</bool>
@ -123,6 +128,8 @@
<int key="NSvFlags">289</int>
<string key="NSFrame">{{287, 3}, {27, 17}}</string>
<reference key="NSSuperview" ref="848661322"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView"/>
<string key="NSReuseIdentifierKey">_NS:567</string>
<int key="IBUIContentMode">1</int>
<int key="IBUITag">5</int>
@ -132,9 +139,50 @@
</object>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
</object>
<object class="IBUIButton" id="661488590">
<reference key="NSNextResponder" ref="848661322"/>
<int key="NSvFlags">289</int>
<string key="NSFrame">{{284, 0}, {33, 23}}</string>
<reference key="NSSuperview" ref="848661322"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="522045680"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="IBUIOpaque">NO</bool>
<int key="IBUITag">6</int>
<object class="IBUIAccessibilityConfiguration" key="IBUIAccessibilityConfiguration">
<boolean value="NO" key="IBUIIsAccessibilityElement"/>
</object>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
<int key="IBUIContentHorizontalAlignment">0</int>
<int key="IBUIContentVerticalAlignment">0</int>
<bool key="IBUIAdjustsImageWhenHighlighted">NO</bool>
<bool key="IBUIAdjustsImageWhenDisabled">NO</bool>
<object class="NSColor" key="IBUIHighlightedTitleColor" id="995736910">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MQA</bytes>
</object>
<object class="NSColor" key="IBUINormalTitleColor">
<int key="NSColorSpace">1</int>
<bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
</object>
<object class="NSColor" key="IBUINormalTitleShadowColor" id="863984655">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MC41AA</bytes>
</object>
<object class="IBUIFontDescription" key="IBUIFontDescription" id="373967111">
<int key="type">2</int>
<double key="pointSize">15</double>
</object>
<object class="NSFont" key="IBUIFont" id="568467497">
<string key="NSName">Helvetica-Bold</string>
<double key="NSSize">15</double>
<int key="NSfFlags">16</int>
</object>
</object>
</array>
<string key="NSFrameSize">{320, 23}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="393098359"/>
<string key="NSReuseIdentifierKey">_NS:196</string>
<object class="NSColor" key="IBUIBackgroundColor" id="139297653">
@ -152,6 +200,7 @@
<int key="NSvFlags">274</int>
<string key="NSFrameSize">{480, 23}</string>
<reference key="NSSuperview" ref="572911811"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="404338830"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<int key="IBUITag">1</int>
@ -164,6 +213,7 @@
<int key="NSvFlags">292</int>
<string key="NSFrame">{{6, 6}, {10, 10}}</string>
<reference key="NSSuperview" ref="572911811"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="314750323"/>
<string key="NSReuseIdentifierKey">_NS:567</string>
<int key="IBUITag">2</int>
@ -176,6 +226,7 @@
<int key="NSvFlags">290</int>
<string key="NSFrame">{{22, 0}, {382, 20}}</string>
<reference key="NSSuperview" ref="572911811"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="408451884"/>
<string key="NSReuseIdentifierKey">_NS:328</string>
<bool key="IBUIOpaque">NO</bool>
@ -197,6 +248,7 @@
<int key="NSvFlags">289</int>
<string key="NSFrame">{{412, 3}, {27, 17}}</string>
<reference key="NSSuperview" ref="572911811"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="695121572"/>
<string key="NSReuseIdentifierKey">_NS:567</string>
<int key="IBUITag">4</int>
@ -208,15 +260,45 @@
<int key="NSvFlags">289</int>
<string key="NSFrame">{{447, 3}, {27, 17}}</string>
<reference key="NSSuperview" ref="572911811"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="1027488456"/>
<string key="NSReuseIdentifierKey">_NS:567</string>
<int key="IBUIContentMode">1</int>
<int key="IBUITag">5</int>
<bool key="IBUIUserInteractionEnabled">NO</bool>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
</object>
<object class="IBUIButton" id="1027488456">
<reference key="NSNextResponder" ref="572911811"/>
<int key="NSvFlags">289</int>
<string key="NSFrame">{{444, 0}, {33, 23}}</string>
<reference key="NSSuperview" ref="572911811"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="IBUIOpaque">NO</bool>
<int key="IBUITag">6</int>
<object class="IBUIAccessibilityConfiguration" key="IBUIAccessibilityConfiguration">
<boolean value="NO" key="IBUIIsAccessibilityElement"/>
</object>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
<int key="IBUIContentHorizontalAlignment">0</int>
<int key="IBUIContentVerticalAlignment">0</int>
<bool key="IBUIAdjustsImageWhenHighlighted">NO</bool>
<bool key="IBUIAdjustsImageWhenDisabled">NO</bool>
<reference key="IBUIHighlightedTitleColor" ref="995736910"/>
<object class="NSColor" key="IBUINormalTitleColor">
<int key="NSColorSpace">1</int>
<bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
</object>
<reference key="IBUINormalTitleShadowColor" ref="863984655"/>
<reference key="IBUIFontDescription" ref="373967111"/>
<reference key="IBUIFont" ref="568467497"/>
</object>
</array>
<string key="NSFrameSize">{480, 23}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="274257756"/>
<string key="NSReuseIdentifierKey">_NS:196</string>
<reference key="IBUIBackgroundColor" ref="139297653"/>
@ -281,6 +363,23 @@
</object>
<int key="connectionID">26</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">callSecurityButton</string>
<reference key="source" ref="372490531"/>
<reference key="destination" ref="661488590"/>
</object>
<int key="connectionID">29</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchEventConnection" key="connection">
<string key="label">doSecurityClick:</string>
<reference key="source" ref="661488590"/>
<reference key="destination" ref="372490531"/>
<int key="IBEventType">7</int>
</object>
<int key="connectionID">30</int>
</object>
</array>
<object class="IBMutableOrderedSet" key="objectRecords">
<array key="orderedObjects">
@ -310,6 +409,7 @@
<reference ref="393098359"/>
<reference ref="327031870"/>
<reference ref="522045680"/>
<reference ref="661488590"/>
</array>
<reference key="parent" ref="0"/>
<string key="objectName">Portrait View</string>
@ -353,6 +453,7 @@
<reference ref="404338830"/>
<reference ref="408451884"/>
<reference ref="695121572"/>
<reference ref="1027488456"/>
</array>
<reference key="parent" ref="0"/>
<string key="objectName">Landscape View</string>
@ -387,6 +488,18 @@
<reference key="parent" ref="572911811"/>
<string key="objectName">registrationStateImage</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">27</int>
<reference key="object" ref="661488590"/>
<reference key="parent" ref="848661322"/>
<string key="objectName">callSecurityButton</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">28</int>
<reference key="object" ref="1027488456"/>
<reference key="parent" ref="572911811"/>
<string key="objectName">callSecurityButton</string>
</object>
</array>
</object>
<dictionary class="NSMutableDictionary" key="flattenedProperties">
@ -403,6 +516,10 @@
<string key="22.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="23.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="24.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="27.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<real value="2" key="27.IBUIButtonInspectorSelectedEdgeInsetMetadataKey"/>
<string key="28.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<real value="2" key="28.IBUIButtonInspectorSelectedEdgeInsetMetadataKey"/>
<string key="4.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="5.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="6.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
@ -411,9 +528,82 @@
<nil key="activeLocalization"/>
<dictionary class="NSMutableDictionary" key="localizations"/>
<nil key="sourceID"/>
<int key="maxID">26</int>
<int key="maxID">30</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
<object class="IBPartialClassDescription">
<string key="className">TPMultiLayoutViewController</string>
<string key="superclassName">UIViewController</string>
<dictionary class="NSMutableDictionary" key="outlets">
<string key="landscapeView">UIView</string>
<string key="portraitView">UIView</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
<object class="IBToOneOutletInfo" key="landscapeView">
<string key="name">landscapeView</string>
<string key="candidateClassName">UIView</string>
</object>
<object class="IBToOneOutletInfo" key="portraitView">
<string key="name">portraitView</string>
<string key="candidateClassName">UIView</string>
</object>
</dictionary>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/TPMultiLayoutViewController.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">UIStateBar</string>
<string key="superclassName">TPMultiLayoutViewController</string>
<object class="NSMutableDictionary" key="actions">
<string key="NS.key.0">doSecurityClick:</string>
<string key="NS.object.0">id</string>
</object>
<object class="NSMutableDictionary" key="actionInfosByName">
<string key="NS.key.0">doSecurityClick:</string>
<object class="IBActionInfo" key="NS.object.0">
<string key="name">doSecurityClick:</string>
<string key="candidateClassName">id</string>
</object>
</object>
<dictionary class="NSMutableDictionary" key="outlets">
<string key="callQualityImage">UIImageView</string>
<string key="callSecurityButton">UIButton</string>
<string key="callSecurityImage">UIImageView</string>
<string key="registrationStateImage">UIImageView</string>
<string key="registrationStateLabel">UILabel</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
<object class="IBToOneOutletInfo" key="callQualityImage">
<string key="name">callQualityImage</string>
<string key="candidateClassName">UIImageView</string>
</object>
<object class="IBToOneOutletInfo" key="callSecurityButton">
<string key="name">callSecurityButton</string>
<string key="candidateClassName">UIButton</string>
</object>
<object class="IBToOneOutletInfo" key="callSecurityImage">
<string key="name">callSecurityImage</string>
<string key="candidateClassName">UIImageView</string>
</object>
<object class="IBToOneOutletInfo" key="registrationStateImage">
<string key="name">registrationStateImage</string>
<string key="candidateClassName">UIImageView</string>
</object>
<object class="IBToOneOutletInfo" key="registrationStateLabel">
<string key="name">registrationStateLabel</string>
<string key="candidateClassName">UILabel</string>
</object>
</dictionary>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/UIStateBar.h</string>
</object>
</object>
</array>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes"/>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>

View file

@ -546,17 +546,29 @@ static UICompositeViewDescription *compositeDescription = nil;
[values removeObject:@"tls"];
[dict setObject:values forKey:@"Values"];
return [[[IASKSpecifier alloc] initWithSpecifier:dict] autorelease];
} else if ([[specifier key] isEqualToString:@"media_encryption_preference"]) {
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithDictionary:[specifier specifierDict]];
NSMutableArray *titles = [NSMutableArray arrayWithArray:[dict objectForKey:@"Titles"]];
[titles removeObject:@"ZRTP"];
[titles removeObject:@"SRTP"];
[dict setObject:titles forKey:@"Titles"];
NSMutableArray *values = [NSMutableArray arrayWithArray:[dict objectForKey:@"Values"]];
[values removeObject:@"ZRTP"];
[values removeObject:@"SRTP"];
[dict setObject:values forKey:@"Values"];
return [[[IASKSpecifier alloc] initWithSpecifier:dict] autorelease];
}
#else
if([LinphoneManager isLcReady]) {
if ([[specifier key] isEqualToString:@"media_encryption_preference"]) {
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithDictionary:[specifier specifierDict]];
if(!linphone_core_media_encryption_supported([LinphoneManager getLc], LinphoneMediaEncryptionZRTP)) {
NSMutableArray *titles = [NSMutableArray arrayWithArray:[dict objectForKey:@"Titles"]];
[titles removeObject:@"ZRTP"];
[dict setObject:titles forKey:@"Titles"];
NSMutableArray *values = [NSMutableArray arrayWithArray:[dict objectForKey:@"Values"]];
[values removeObject:@"ZRTP"];
[dict setObject:values forKey:@"Values"];
}
if(!linphone_core_media_encryption_supported([LinphoneManager getLc], LinphoneMediaEncryptionSRTP)) {
NSMutableArray *titles = [NSMutableArray arrayWithArray:[dict objectForKey:@"Titles"]];
[titles removeObject:@"SRTP"];
[dict setObject:titles forKey:@"Titles"];
NSMutableArray *values = [NSMutableArray arrayWithArray:[dict objectForKey:@"Values"]];
[values removeObject:@"SRTP"];
[dict setObject:values forKey:@"Values"];
}
return [[[IASKSpecifier alloc] initWithSpecifier:dict] autorelease];
}
}
#endif //HAVE_SSL
return specifier;

View file

@ -12175,7 +12175,7 @@
</dict>
</dict>
<key>change date</key>
<date>2012-12-06T16:35:25Z</date>
<date>2013-01-14T08:36:33Z</date>
<key>changed values</key>
<array/>
<key>class</key>
@ -12185,7 +12185,7 @@
<key>flags</key>
<integer>0</integer>
<key>hash</key>
<string>5d8dda6d0a22dfa9f07da63202a55cbb
<string>8ce7c7423abd4610ddda73d40d929ed3
</string>
<key>name</key>
<string>Localizable.strings</string>
@ -12944,6 +12944,34 @@ La cause était: %2$@</string>
<key>snapshots</key>
<dict/>
</dict>
<dict>
<key>change date</key>
<date>2001-01-01T00:00:00Z</date>
<key>changed values</key>
<array/>
<key>class</key>
<string>BLStringKeyObject</string>
<key>comment</key>
<string>No comment provided by engineer.</string>
<key>errors</key>
<array/>
<key>flags</key>
<integer>0</integer>
<key>key</key>
<string>Confirm the following SAS with the peer:
%s</string>
<key>localizations</key>
<dict>
<key>en</key>
<string>Confirm the following SAS with the peer:
%s</string>
<key>fr</key>
<string>Confirmer le SAS suivant avec l'interlocuteur:
%s</string>
</dict>
<key>snapshots</key>
<dict/>
</dict>
<dict>
<key>change date</key>
<date>2001-01-01T00:00:00Z</date>
@ -14071,6 +14099,31 @@ La cause était: %2$@</string>
<key>snapshots</key>
<dict/>
</dict>
<dict>
<key>change date</key>
<date>2001-01-01T00:00:00Z</date>
<key>changed values</key>
<array/>
<key>class</key>
<string>BLStringKeyObject</string>
<key>comment</key>
<string>No comment provided by engineer.</string>
<key>errors</key>
<array/>
<key>flags</key>
<integer>0</integer>
<key>key</key>
<string>Remove trust in the peer?</string>
<key>localizations</key>
<dict>
<key>en</key>
<string>Remove trust in the peer?</string>
<key>fr</key>
<string>Supprimer la confiance dans l'interlocuteur?</string>
</dict>
<key>snapshots</key>
<dict/>
</dict>
<dict>
<key>change date</key>
<date>2001-01-01T00:00:00Z</date>