Просмотр исходного кода

Add ApplicationParameters to iOS library

Amir Khan 3 лет назад
Родитель
Сommit
b1e7cc13ce

+ 5 - 0
MobileLibrary/iOS/PsiphonTunnel/PsiphonTunnel/PsiphonTunnel.h

@@ -294,6 +294,11 @@ WWAN or vice versa or VPN state changed
  */
 - (void)onServerAlert:(NSString * _Nonnull)reason :(NSString * _Nonnull)subject :(NSArray * _Nonnull)actionURLs;
 
+/*!
+ Called when tunnel-core receives "ApplicationParameters" from the server.
+ */
+- (void)onApplicationParameter:(NSString * _Nonnull)key :(id _Nonnull)value;
+
 @end
 
 /*!

+ 22 - 0
MobileLibrary/iOS/PsiphonTunnel/PsiphonTunnel/PsiphonTunnel.m

@@ -1133,7 +1133,29 @@ typedef NS_ERROR_ENUM(PsiphonTunnelErrorDomain, PsiphonTunnelErrorCode) {
             });
         }
     }
+    else if ([noticeType isEqualToString:@"ApplicationParameter"]) {
+        
+        id key = [notice valueForKeyPath:@"data.key"];
+        if (![key isKindOfClass:[NSString class]]) {
+            [self logMessage:[NSString stringWithFormat: @"ApplicationParameter notice missing data.key: %@", noticeJSON]];
+            return;
+        }
+
+        id maybeValue = [notice valueForKeyPath:@"data.value"];
+        if (!maybeValue) {
+            [self logMessage:[NSString stringWithFormat: @"ApplicationParameter notice missing data.value: %@", noticeJSON]];
+            return;
+        }
 
+        // value is nil if data.value is NSNull.
+        id value = maybeValue == [NSNull null] ? nil : maybeValue;
+
+        if ([self.tunneledAppDelegate respondsToSelector:@selector(onApplicationParameter::)]) {
+            dispatch_sync(self->callbackQueue, ^{
+                [self.tunneledAppDelegate onApplicationParameter:(NSString *)key :value];
+            });
+        }
+    }
     else if ([noticeType isEqualToString:@"InternalError"]) {
         internalError = TRUE;
     }