"Fossies" - the Fresh Open Source Software Archive

Member "jitsi-meet-7561/ios/sdk/src/RCTBridgeWrapper.m" (29 Sep 2023, 4237 Bytes) of package /linux/misc/jitsi-meet-7561.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Matlab source code syntax highlighting (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file.

    1 /*
    2  * Copyright @ 2017-present Atlassian Pty Ltd
    3  *
    4  * Licensed under the Apache License, Version 2.0 (the "License");
    5  * you may not use this file except in compliance with the License.
    6  * You may obtain a copy of the License at
    7  *
    8  *     http://www.apache.org/licenses/LICENSE-2.0
    9  *
   10  * Unless required by applicable law or agreed to in writing, software
   11  * distributed under the License is distributed on an "AS IS" BASIS,
   12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   13  * See the License for the specific language governing permissions and
   14  * limitations under the License.
   15  */
   16 
   17 #include "RCTBridgeWrapper.h"
   18 
   19 /**
   20  * Wrapper around RCTBridge which also implements the RCTBridgeDelegate methods,
   21  * allowing us to specify where the bundles are loaded from.
   22  */
   23 @implementation RCTBridgeWrapper
   24 
   25 - (instancetype)init {
   26     self = [super init];
   27     if (self) {
   28         _bridge
   29             = [[RCTBridge alloc] initWithDelegate:self
   30                                     launchOptions:nil];
   31     }
   32 
   33     return self;
   34 }
   35 
   36 - (void)invalidate {
   37     [_bridge invalidate];
   38 }
   39 
   40 #pragma mark helper methods for getting the packager URL
   41 
   42 #if DEBUG
   43 static NSURL *serverRootWithHost(NSString *host) {
   44     return
   45         [NSURL URLWithString:
   46                 [NSString stringWithFormat:@"http://%@:8081/", host]];
   47 }
   48 
   49 - (BOOL)isPackagerRunning:(NSString *)host {
   50     NSURL *url = [serverRootWithHost(host) URLByAppendingPathComponent:@"status"];
   51 
   52     NSURLSession *session = [NSURLSession sharedSession];
   53     NSURLRequest *request = [NSURLRequest requestWithURL:url];
   54     __block NSURLResponse *response;
   55     __block NSData *data;
   56 
   57     dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
   58     [[session dataTaskWithRequest:request
   59                 completionHandler:^(NSData *d,
   60                                     NSURLResponse *res,
   61                                     __unused NSError *err) {
   62                     data = d;
   63                     response = res;
   64                     dispatch_semaphore_signal(semaphore);
   65                 }] resume];
   66     dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
   67 
   68     NSString *status = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
   69     return [status isEqualToString:@"packager-status:running"];
   70 }
   71 
   72 - (NSString *)guessPackagerHost {
   73     static NSString *ipGuess;
   74     static dispatch_once_t dispatchOncePredicate;
   75 
   76     dispatch_once(&dispatchOncePredicate, ^{
   77         NSString *ipPath
   78             = [[NSBundle bundleForClass:self.class] pathForResource:@"ip"
   79                                                              ofType:@"txt"];
   80 
   81         ipGuess
   82             = [[NSString stringWithContentsOfFile:ipPath
   83                                          encoding:NSUTF8StringEncoding
   84                                             error:nil]
   85                     stringByTrimmingCharactersInSet:
   86                             [NSCharacterSet newlineCharacterSet]];
   87     });
   88 
   89     NSString *host = ipGuess ?: @"localhost";
   90 
   91     if ([self isPackagerRunning:host]) {
   92         return host;
   93     }
   94 
   95     return nil;
   96 }
   97 #endif
   98 
   99 #pragma mark RCTBridgeDelegate methods
  100 
  101 - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge {
  102 #if DEBUG
  103     // In debug mode, try to fetch the bundle from the packager, or fallback to
  104     // the one inside the framework. The IP address for the packager host is
  105     // fetched from the ip.txt file inside the framework.
  106     //
  107     // This duplicates some functionality present in RCTBundleURLProvider, but
  108     // that mode is not designed to work inside a framework, because all
  109     // resources are loaded from the main bundle.
  110     NSString *host = [self guessPackagerHost];
  111 
  112     if (host != nil) {
  113         NSString *path = @"/index.bundle";
  114         NSString *query = @"platform=ios&dev=true&minify=false";
  115         NSURLComponents *components
  116             = [NSURLComponents componentsWithURL:serverRootWithHost(host)
  117                          resolvingAgainstBaseURL:NO];
  118 
  119         components.path = path;
  120         components.query = query;
  121 
  122         return components.URL;
  123     }
  124 #endif
  125 
  126     return [[NSBundle bundleForClass:self.class] URLForResource:@"main"
  127                                                   withExtension:@"jsbundle"];
  128 }
  129 
  130 @end