static void _ConfigureSessionConfigurationWithRequestConfiguration()

in Source/TNLURLSessionManager.m [1765:1815]


static void _ConfigureSessionConfigurationWithRequestConfiguration(NSURLSessionConfiguration * __nullable sessionConfig,
                                                                   TNLRequestConfiguration *requestConfig)
{
    // Transfer
    sessionConfig.allowsCellularAccess = requestConfig.allowsCellularAccess;
    sessionConfig.discretionary = requestConfig.isDiscretionary;
    sessionConfig.networkServiceType = requestConfig.networkServiceType;
    sessionConfig.requestCachePolicy = requestConfig.cachePolicy;
    if (tnl_available_ios_11) {
        const TNLRequestConnectivityOptions connectivityOptions = requestConfig.connectivityOptions;
        if (TNL_BITMASK_INTERSECTS_FLAGS(connectivityOptions, TNLRequestConnectivityOptionWaitForConnectivity)) {
            sessionConfig.waitsForConnectivity = YES;
        } else if (TNL_BITMASK_INTERSECTS_FLAGS(connectivityOptions, TNLRequestConnectivityOptionWaitForConnectivityWhenRetryPolicyProvided) && requestConfig.retryPolicyProvider != nil) {
            sessionConfig.waitsForConnectivity = YES;
        } else {
            sessionConfig.waitsForConnectivity = NO;
        }

        if (![NSURLSessionConfiguration tnl_URLSessionCanUseWaitsForConnectivity]) {
            if (sessionConfig.waitsForConnectivity) {
                TNL_LOG_WAITS_FOR_CONNECTIVITY_WARNING();
                sessionConfig.waitsForConnectivity = NO;
            }
        }
    }
#if TARGET_OS_IPHONE // == IOS + WATCH + TV
    sessionConfig.sessionSendsLaunchEvents = requestConfig.shouldLaunchAppForBackgroundEvents;
#endif
    sessionConfig.HTTPCookieAcceptPolicy = requestConfig.cookieAcceptPolicy;
    sessionConfig.HTTPShouldSetCookies = requestConfig.shouldSetCookies;
    sessionConfig.sharedContainerIdentifier = requestConfig.sharedContainerIdentifier;
#if TARGET_OS_IOS
    if (tnl_available_ios_11) {
        sessionConfig.multipathServiceType = requestConfig.multipathServiceType;
    }
#endif
    sessionConfig.shouldUseExtendedBackgroundIdleMode = requestConfig.shouldUseExtendedBackgroundIdleMode;

    // Transfer protocols
    NSArray<Class> *additionalClasses = TNLProtocolClassesForProtocolOptions(requestConfig.protocolOptions);
    [sessionConfig tnl_insertProtocolClasses:additionalClasses];

    // Transfer potentially proxied values
    sessionConfig.URLCredentialStorage = TNLUnwrappedURLCredentialStorage(requestConfig.URLCredentialStorage);
    sessionConfig.URLCache = TNLUnwrappedURLCache(requestConfig.URLCache);
    sessionConfig.HTTPCookieStorage = TNLUnwrappedCookieStorage(requestConfig.cookieStorage);

    // Best proxy values
    sessionConfig.timeoutIntervalForRequest = (requestConfig.idleTimeout < MIN_TIMER_INTERVAL) ? NSTimeIntervalSince1970 : requestConfig.idleTimeout;
    sessionConfig.timeoutIntervalForResource = (requestConfig.attemptTimeout < MIN_TIMER_INTERVAL) ? NSTimeIntervalSince1970 : requestConfig.attemptTimeout;
}