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

Zeller, Arno arno.zeller at sap.com
Tue Jan 31 19:14:20 UTC 2017


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 net-dev mailing list