Hi Michael

I forgot to mention that, in Utils.java [1], the exception should also be thrown in case token is the empty string. And while I'm nitpicking anyway: here 's an alternative implementation which extracts the comparison logic in a separate method:

static void validateToken(String token, String errormsg) {
    if (token.isEmpty() || token.chars().anyMatch(c -> !isTchar(c))) {
        throw new IllegalArgumentException(errormsg);
    }
}

private static boolean isTchar(int c) {
    return c >= 0x30 && c <= 0x39 // 0 - 9
            || (c >= 0x61 && c <= 0x7a) // a - z
            || (c >= 0x41 && c <= 0x5a) // A - Z
|| (c >= 0x21 && c <= 0x2e && c != 0x22 && c != 0x28 && c != 0x29 && c != 0x2c)
            || (c >= 0x5e && c <= 0x60)
            || (c == 0x7c) || (c == 0x7e);
}

PS: I have signed the OCA [2], so you can reuse any code if you wish

[1] http://cr.openjdk.java.net/~michaelm/8087112/01/src/java.base/share/classes/sun/net/httpclient/Utils.java.html
[2] http://www.oracle.com/technetwork/community/oca-486395.html#v

Kind regards,
Anthony


On 25/09/2015 21:59, Anthony Vanelverdinghe wrote:
Hi Michael

Maybe these have been fixed in the meantime, but I think I've found a bug: in http://cr.openjdk.java.net/~michaelm/8087112/01/src/java.base/share/classes/sun/net/httpclient/Utils.java.html
single quotes must be accepted, while parentheses must be rejected [1]

and a few typos:
in http://cr.openjdk.java.net/~michaelm/8087112/01/src/java.base/share/classes/sun/net/httpclient/SSLTunnelConnection.java.html
at line 56, replace
return connected & delegate.connected();
with
return connected && delegate.connected();

in http://cr.openjdk.java.net/~michaelm/8087112/01/src/java.base/share/classes/java/net/package-info.java.udiff.html
replace "superceded" with "superseded"

On a final note, when will the new API be integrated in the weekly early access builds [2]?

[1] https://tools.ietf.org/html/rfc7230#section-3.2.6
[2] https://jdk9.java.net/download/

Kind regards
Anthony


On 28/08/2015 22:50, Michael McMahon wrote:
Hi,

I'm looking for reviewers for the http client implementation.
This is just the common API layer and the http/1.1 implementation.

The webrev is at http://cr.openjdk.java.net/~michaelm/8087112/01/

Below is a description of the API classes and the relationship with
their implementation classes.

Thanks
Michael


---------------------------------------------------
java.net
---------------------------------------------------
HttpClient
||
\/
Client
||
\/
sun.net.httpclient.HtpClientImpl


HttpRequest
||
\/
Request
||
\/
sun.net.httpclient.HtpRequestImpl


----------------------------------------------------------
sun.net.httpclient
----------------------------------------------------------
Implementation classes showing calling relationship. Classes
below have synchronous and asynchronous variants for sending/receiving

HttpRequestImpl - overall implementation of HTTP
  ||
  \/
MultiExchange - manages multiple request/response exchanges that
|| occur as a result of errors or filters (only used internally)
  \/
Exchange - manages one request response interaction, possibly including
  ||       intermediate 100 Continue response.
  ||
  \/
ExchangeImpl - separates request sending, response receiving. Class is
|| abstract with different implementations for Http/1 and Http/2
  \/
Http1Exchange - implementation for HTTP/1. Manages TCP connection pools
|| | HttpConnection (and its subtypes). Interacts with NIO selector
 ||        |    in HttpClientImpl
 ||        +-------+
 ||               ||
 \/               \/
Http1Request   Http1Response


HttpConnection
     | (subtypes)
     |
PlainHttpConnection
PlainProxyConnection
PlainTunnelingConnection
SSLConnection
SSLTunnelingConnection

FilterFactory - factory for filters
HeaderFilter - internal API for filters (not exposed externally)
AuthenticationFilter - implements HTTP Basic auth
RedirectionFilter - implements automatic redirection of 3XX responses
CookieFilter - implements CookieManager interface






Reply via email to