RFR:8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome

Chris Hegarty chris.hegarty at oracle.com
Wed Feb 1 12:00:03 UTC 2017


Can someone from the build group please give the build part of
this the once over.

Thanks,
-Chris.

> On 31 Jan 2017, at 19:14, Zeller, Arno <arno.zeller at sap.com> wrote:
> 
> Hi Chris,
> 
> thanks for all the improvements. I imported your webrev and prepared another webrev:
> http://cr.openjdk.java.net/~clanger/webrevs/8170868.6/
> 
> I have seen the multiple DIRECTs myself during testing and I think filtering on the java side is a very elegant solution.
> Thanks for this!
> 
> Best regards,
> Arno
> 
>> -----Original Message-----
>> From: Chris Hegarty [mailto:chris.hegarty at oracle.com]
>> Sent: Dienstag, 31. Januar 2017 12:47
>> To: Zeller, Arno <arno.zeller at sap.com>
>> Cc: net-dev at openjdk.java.net
>> Subject: Re: RFR:8170868: DefaultProxySelector should use system defaults
>> on Windows, MacOS and Gnome
>> 
>> Arno,
>> 
>> Thanks for doing this, and your patience so far. One more final round of
>> comments from me. Mostly minor. I’ve put them in the form of a webrev so
>> you can easily view and import them, if you agree.
>> 
>> http://cr.openjdk.java.net/~chegar/8170868_additional/
>> 
>> 1)  A few comment rewordings and formatting suggestions.
>> 
>> 2) I see duplicate DIRECT, and a few specific proxies, in my
>>   testing. Maybe my environment or PAC file is returning
>>   duplicate entries. I suggest that, at the java-level, we filter
>>   out duplicates while preserving ordering. ( see above webrev )
>> 
>> 3) We do not use asserts in core libraries. So I replaced the usage
>>   with an early return NULL ( no proxy ). At a later stage we could
>>   throw an exception or something, but probably not all that
>>   interesting.
>> 
>> I have run this change ( along with my additional suggestions ) through our
>> internal build and test system. No surprises.
>> 
>> -Chris.
>> 
>>> On 31 Jan 2017, at 09:14, Zeller, Arno <arno.zeller at sap.com> wrote:
>>> 
>>> Hi Chris,
>>> 
>>> thanks a lot - I did not see this case in my tests. I added your change to my
>> new webrev:
>>> http://cr.openjdk.java.net/~clanger/webrevs/8170868.5/
>>> 
>>> 
>>> Best regards,
>>> Arno
>>> 
>>>> -----Original Message-----
>>>> From: Chris Hegarty [mailto:chris.hegarty at oracle.com]
>>>> Sent: Montag, 30. Januar 2017 17:14
>>>> To: Zeller, Arno <arno.zeller at sap.com>
>>>> Cc: net-dev at openjdk.java.net
>>>> Subject: Re: RFR:8170868: DefaultProxySelector should use system
>>>> defaults on Windows, MacOS and Gnome
>>>> 
>>>> Arno,
>>>> 
>>>> I found an issue on Windows when proxies are specified per-protocol, i.e.
>>>> they are returned with their optional scheme set. I believe that the
>>>> scheme should be checked, at least without this change FTP proxies
>>>> were being returned for HTTP URL's, on my machine.
>>>> 
>>>> $ hg -R jdk diff
>>>> diff -r 07e07fecf383
>>>> src/java.base/windows/native/libnet/DefaultProxySelector.c
>>>> --- a/src/java.base/windows/native/libnet/DefaultProxySelector.c
>>>> Mon Jan 30 14:09:14 2017 +0000
>>>> +++ b/src/java.base/windows/native/libnet/DefaultProxySelector.c
>>>> Mon Jan 30 16:09:23 2017 +0000
>>>> @@ -99,6 +99,7 @@
>>>> * Returns the size of the array as int.
>>>> */
>>>> static int createProxyList(LPWSTR win_proxy, const WCHAR *pproto,
>>>> list_item **head) {
>>>> +    static const wchar_t separators[] = L"\t\r\n ;";
>>>>    list_item *current = NULL;
>>>>    int nr_elems = 0;
>>>>    wchar_t *context = NULL;
>>>> @@ -109,13 +110,26 @@
>>>>     * The proxy server list contains one or more of the following
>>>> strings separated by semicolons or whitespace.
>>>>     * ([<scheme>=][<scheme>"://"]<server>[":"<port>])
>>>>     */
>>>> -    current_proxy = wcstok_s(win_proxy, L"; ", &context);
>>>> -    while (current_proxy != NULL) {
>>>> +    current_proxy = wcstok_s(win_proxy, separators, &context);
>>>> +    while (current_proxy != NULL) {
>>>>        LPWSTR pport;
>>>>        LPWSTR phost;
>>>>        int portVal = 0;
>>>>        wchar_t *next_proxy = NULL;
>>>>        list_item *proxy = NULL;
>>>> +        wchar_t* pos = NULL;
>>>> +
>>>> +        /* Filter based on the scheme, if there is one */
>>>> +        pos = wcschr(current_proxy, L'=');
>>>> +        if (pos) {
>>>> +          *pos = L'\0';
>>>> +          if (wcscmp(current_proxy, pproto) != 0) {
>>>> +              current_proxy = wcstok_s(NULL, separators, &context);
>>>> +              continue;
>>>> +          }
>>>> +          current_proxy = pos + 1;
>>>> +        }
>>>> 
>>>>        /* Let's check for a scheme and ignore it. */
>>>>        if ((phost = wcsstr(current_proxy, L"://")) != NULL) { @@
>>>> -152,7 +166,7 @@
>>>>            }
>>>>        }
>>>>        /* goto next proxy if available... */
>>>> -        current_proxy = wcstok_s(NULL, L"; ", &context);
>>>> +        current_proxy = wcstok_s(NULL, separators, &context);
>>>>    }
>>>>    return nr_elems;
>>>> }
>>>> @@ -268,7 +282,6 @@
>>>>        if (win_proxy != NULL) {
>>>>            wchar_t *context = NULL;
>>>>            int defport = 0;
>>>> -            WCHAR pproto[MAX_STR_LEN];
>>>>            int nr_elems = 0;
>>>> 
>>>>            /**
>>>> @@ -290,10 +303,7 @@
>>>>                goto noproxy;
>>>>            }
>>>> 
>>>> -            /* Prepare protocol string to compare with. */
>>>> -            _snwprintf(pproto, sizeof(pproto), L"%s=", lpProto);
>>>> -
>>>> -            nr_elems = createProxyList(win_proxy, pproto, &head);
>>>> +            nr_elems = createProxyList(win_proxy, lpProto, &head);
>>>>            if (nr_elems != 0 && head != NULL) {
>>>>                int index = 0;
>>>>                proxy_array = (*env)->NewObjectArray(env, nr_elems,
>>>> proxy_class, NULL);
>>>> 
>>>> -Chris.
>>>> 
>>>> P.S. I will take a look at the latest webrev.
>>>> 
> 




More information about the build-dev mailing list