jdk/src/java.base/macosx/native/libnet/DefaultProxySelector.c
author ihse
Tue, 09 May 2017 12:57:30 +0200
changeset 45028 b0ea3c0bfb81
parent 43501 243c346dc905
permissions -rw-r--r--
8179889: Fix typographic errors in copyright headers Reviewed-by: erikj, dholmes
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
43501
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
     1
/*
45028
b0ea3c0bfb81 8179889: Fix typographic errors in copyright headers
ihse
parents: 43501
diff changeset
     2
 * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
43501
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
     3
 * Copyright (c) 2017 SAP SE. All rights reserved.
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
     4
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
     5
 *
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
     6
 * This code is free software; you can redistribute it and/or modify it
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
     7
 * under the terms of the GNU General Public License version 2 only, as
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
     8
 * published by the Free Software Foundation.  Oracle designates this
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
     9
 * particular file as subject to the "Classpath" exception as provided
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    10
 * by Oracle in the LICENSE file that accompanied this code.
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    11
 *
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    12
 * This code is distributed in the hope that it will be useful, but WITHOUT
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    13
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    14
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    15
 * version 2 for more details (a copy is included in the LICENSE file that
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    16
 * accompanied this code).
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    17
 *
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    18
 * You should have received a copy of the GNU General Public License version
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    19
 * 2 along with this work; if not, write to the Free Software Foundation,
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    20
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    21
 *
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    22
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    23
 * or visit www.oracle.com if you need additional information or have any
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    24
 * questions.
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    25
 */
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    26
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    27
#include <string.h>
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    28
#include <CoreFoundation/CoreFoundation.h>
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    29
#include <CoreServices/CoreServices.h>
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    30
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    31
#include "jni.h"
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    32
#include "jni_util.h"
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    33
#include "jvm.h"
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    34
#include "jvm_md.h"
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    35
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    36
#include "proxy_util.h"
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    37
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    38
#include "sun_net_spi_DefaultProxySelector.h"
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    39
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    40
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    41
/**
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    42
 * For more information on how to use the APIs in "CFProxySupport.h" see:
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    43
 * https://developer.apple.com/legacy/library/samplecode/CFProxySupportTool/Introduction/Intro.html
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    44
 */
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    45
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    46
#define kResolveProxyRunLoopMode CFSTR("sun.net.spi.DefaultProxySelector")
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    47
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    48
#define BUFFER_SIZE 1024
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    49
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    50
/* Callback for CFNetworkExecuteProxyAutoConfigurationURL. */
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    51
static void proxyUrlCallback(void * client, CFArrayRef proxies, CFErrorRef error) {
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    52
    /* client is a pointer to a CFTypeRef and holds either proxies or an error. */
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    53
    CFTypeRef* resultPtr = (CFTypeRef *)client;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    54
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    55
    if (error != NULL) {
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    56
        *resultPtr = CFRetain(error);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    57
    } else {
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    58
        *resultPtr = CFRetain(proxies);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    59
    }
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    60
    CFRunLoopStop(CFRunLoopGetCurrent());
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    61
}
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    62
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    63
/*
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    64
 * Returns a new array of proxies containing all the given non-PAC proxies as
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    65
 * well as the results of executing all the given PAC-based proxies, for the
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    66
 * specified URL. 'proxies' is a list that may contain both PAC and non-PAC
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    67
 * proxies.
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    68
 */
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    69
static CFArrayRef createExpandedProxiesArray(CFArrayRef proxies, CFURLRef url) {
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    70
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    71
    CFIndex count;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    72
    CFIndex index;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    73
    CFMutableArrayRef expandedProxiesArray;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    74
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    75
    expandedProxiesArray = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    76
    if (expandedProxiesArray == NULL)
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    77
        return NULL;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    78
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    79
    /* Iterate over the array of proxies */
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    80
    count = CFArrayGetCount(proxies);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    81
    for (index = 0; index < count ; index++) {
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    82
        CFDictionaryRef currentProxy;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    83
        CFStringRef     proxyType;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    84
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    85
        currentProxy = (CFDictionaryRef) CFArrayGetValueAtIndex(proxies, index);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    86
        if(currentProxy == NULL) {
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    87
            CFRelease(expandedProxiesArray);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    88
            return NULL;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    89
        }
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    90
        proxyType = (CFStringRef) CFDictionaryGetValue(currentProxy, kCFProxyTypeKey);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    91
        if (proxyType == NULL) {
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    92
            CFRelease(expandedProxiesArray);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    93
            return NULL;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    94
        }
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    95
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    96
        if (!CFEqual(proxyType, kCFProxyTypeAutoConfigurationURL)) {
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    97
            /* Non-PAC entry, just copy it to the new array */
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    98
            CFArrayAppendValue(expandedProxiesArray, currentProxy);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
    99
        } else {
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   100
            /* PAC-based URL, execute its script append its results */
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   101
            CFRunLoopSourceRef      runLoop;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   102
            CFURLRef                scriptURL;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   103
            CFTypeRef               result = NULL;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   104
            CFStreamClientContext   context = { 0, &result, NULL, NULL, NULL };
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   105
            CFTimeInterval timeout = 5;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   106
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   107
            scriptURL = CFDictionaryGetValue(currentProxy, kCFProxyAutoConfigurationURLKey);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   108
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   109
            runLoop = CFNetworkExecuteProxyAutoConfigurationURL(scriptURL, url, proxyUrlCallback,
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   110
                                                                &context);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   111
            if (runLoop != NULL) {
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   112
                /*
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   113
                 * Despite the fact that CFNetworkExecuteProxyAutoConfigurationURL has
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   114
                 * neither a "Create" nor a "Copy" in the name, we are required to
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   115
                 * release the return CFRunLoopSourceRef <rdar://problem/5533931>.
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   116
                 */
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   117
                CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoop, kResolveProxyRunLoopMode);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   118
                CFRunLoopRunInMode(kResolveProxyRunLoopMode, timeout, false);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   119
                CFRunLoopRemoveSource(CFRunLoopGetCurrent(), runLoop, kResolveProxyRunLoopMode);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   120
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   121
                /*
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   122
                 * Once the runloop returns, there will be either an error result or
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   123
                 * a proxies array result. Do the appropriate thing with that result.
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   124
                 */
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   125
                if (result != NULL) {
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   126
                    if (CFGetTypeID(result) == CFArrayGetTypeID()) {
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   127
                        /*
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   128
                         * Append the new array from the PAC list - it contains
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   129
                         * only non-PAC entries.
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   130
                         */
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   131
                        CFArrayAppendArray(expandedProxiesArray, result,
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   132
                                           CFRangeMake(0, CFArrayGetCount(result)));
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   133
                    }
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   134
                    CFRelease(result);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   135
                }
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   136
                CFRelease(runLoop);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   137
            }
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   138
        }
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   139
    }
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   140
    return expandedProxiesArray;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   141
}
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   142
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   143
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   144
/*
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   145
 * Class:     sun_net_spi_DefaultProxySelector
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   146
 * Method:    init
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   147
 * Signature: ()Z
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   148
 */
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   149
JNIEXPORT jboolean JNICALL
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   150
Java_sun_net_spi_DefaultProxySelector_init(JNIEnv *env, jclass clazz) {
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   151
    if (!initJavaClass(env)) {
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   152
        return JNI_FALSE;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   153
    }
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   154
    return JNI_TRUE;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   155
}
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   156
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   157
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   158
/*
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   159
 * Class:     sun_net_spi_DefaultProxySelector
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   160
 * Method:    getSystemProxies
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   161
 * Signature: ([Ljava/lang/String;Ljava/lang/String;)[Ljava/net/Proxy;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   162
 */
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   163
JNIEXPORT jobjectArray JNICALL
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   164
Java_sun_net_spi_DefaultProxySelector_getSystemProxies(JNIEnv *env,
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   165
                                                       jobject this,
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   166
                                                       jstring proto,
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   167
                                                       jstring host)
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   168
{
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   169
    CFDictionaryRef proxyDicRef = NULL;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   170
    CFURLRef        urlRef = NULL;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   171
    bool proxyFound = false;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   172
    jobjectArray proxyArray = NULL;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   173
    const char *cproto;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   174
    const char *chost;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   175
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   176
    /* Get system proxy settings */
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   177
    proxyDicRef = CFNetworkCopySystemProxySettings();
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   178
    if (proxyDicRef == NULL) {
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   179
        return NULL;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   180
    }
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   181
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   182
    /* Create CFURLRef from proto and host */
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   183
    cproto = (*env)->GetStringUTFChars(env, proto, NULL);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   184
    if (cproto != NULL) {
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   185
        chost  = (*env)->GetStringUTFChars(env, host, NULL);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   186
        if (chost != NULL) {
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   187
            char* uri = NULL;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   188
            size_t protoLen = 0;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   189
            size_t hostLen = 0;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   190
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   191
            protoLen = strlen(cproto);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   192
            hostLen = strlen(chost);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   193
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   194
            /* Construct the uri, cproto + "://" + chost */
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   195
            uri = malloc(protoLen + hostLen + 4);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   196
            if (uri != NULL) {
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   197
                memcpy(uri, cproto, protoLen);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   198
                memcpy(uri + protoLen, "://", 3);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   199
                memcpy(uri + protoLen + 3, chost, hostLen + 1);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   200
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   201
                urlRef = CFURLCreateWithBytes(NULL, (const UInt8 *) uri, strlen(uri),
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   202
                                              kCFStringEncodingUTF8, NULL);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   203
                free(uri);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   204
            }
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   205
            (*env)->ReleaseStringUTFChars(env, host, chost);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   206
        }
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   207
        (*env)->ReleaseStringUTFChars(env, proto, cproto);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   208
    }
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   209
    if (urlRef != NULL) {
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   210
        CFArrayRef urlProxyArrayRef = CFNetworkCopyProxiesForURL(urlRef, proxyDicRef);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   211
        if (urlProxyArrayRef != NULL) {
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   212
            CFIndex count;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   213
            CFIndex index;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   214
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   215
            CFArrayRef expandedProxyArray = createExpandedProxiesArray(urlProxyArrayRef, urlRef);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   216
            CFRelease(urlProxyArrayRef);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   217
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   218
            if (expandedProxyArray == NULL) {
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   219
                CFRelease(urlRef);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   220
                CFRelease(proxyDicRef);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   221
                return NULL;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   222
            }
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   223
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   224
            count = CFArrayGetCount(expandedProxyArray);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   225
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   226
            proxyArray = (*env)->NewObjectArray(env, count, proxy_class, NULL);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   227
            if (proxyArray != NULL || (*env)->ExceptionCheck(env)) {
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   228
                /* Iterate over the expanded array of proxies */
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   229
                for (index = 0; index < count ; index++) {
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   230
                    CFDictionaryRef currentProxy;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   231
                    CFStringRef proxyType;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   232
                    jobject proxy = NULL;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   233
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   234
                    currentProxy = (CFDictionaryRef) CFArrayGetValueAtIndex(expandedProxyArray,
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   235
                                                                            index);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   236
                    proxyType = (CFStringRef) CFDictionaryGetValue(currentProxy, kCFProxyTypeKey);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   237
                    if (CFEqual(proxyType, kCFProxyTypeNone)) {
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   238
                        /* This entry states no proxy, therefore just add a NO_PROXY object. */
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   239
                        proxy = (*env)->GetStaticObjectField(env, proxy_class, pr_no_proxyID);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   240
                    } else {
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   241
                        /*
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   242
                         * Create a proxy object for this entry.
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   243
                         * Differentiate between SOCKS and HTTP type.
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   244
                         */
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   245
                        jfieldID typeID = ptype_httpID;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   246
                        if (CFEqual(proxyType, kCFProxyTypeSOCKS)) {
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   247
                            typeID = ptype_socksID;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   248
                        }
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   249
                        CFNumberRef portNumberRef = (CFNumberRef)CFDictionaryGetValue(currentProxy,
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   250
                                                    (const void*)kCFProxyPortNumberKey);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   251
                        if (portNumberRef  != NULL) {
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   252
                            int port = 0;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   253
                            if (CFNumberGetValue(portNumberRef, kCFNumberSInt32Type, &port)) {
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   254
                                CFStringRef hostNameRef = (CFStringRef)CFDictionaryGetValue(
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   255
                                              currentProxy, (const void*)kCFProxyHostNameKey);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   256
                                if (hostNameRef != NULL) {
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   257
                                    char hostNameBuffer[BUFFER_SIZE];
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   258
                                    if (CFStringGetCString(hostNameRef, hostNameBuffer,
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   259
                                                           BUFFER_SIZE, kCFStringEncodingUTF8)) {
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   260
                                        proxy = createProxy(env, typeID, &hostNameBuffer[0], port);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   261
                                    }
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   262
                                }
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   263
                            }
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   264
                        }
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   265
                    }
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   266
                    if (proxy == NULL || (*env)->ExceptionCheck(env)) {
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   267
                        proxyArray = NULL;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   268
                        break;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   269
                    }
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   270
                    (*env)->SetObjectArrayElement(env, proxyArray, index, proxy);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   271
                    if ((*env)->ExceptionCheck(env)) {
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   272
                        proxyArray = NULL;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   273
                        break;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   274
                    }
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   275
                }
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   276
            }
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   277
            CFRelease(expandedProxyArray);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   278
        }
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   279
        CFRelease(urlRef);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   280
    }
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   281
    CFRelease(proxyDicRef);
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   282
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   283
    return proxyArray;
243c346dc905 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
diff changeset
   284
}