Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -40,20 +40,24 @@ public class H2ConnectionException extends IOException {

private static final long serialVersionUID = -2014204317155428658L;

private final int code;
private final long code;

public H2ConnectionException(final H2Error error, final String message) {
super(message);
Args.notNull(error, "H2 Error code");
this.code = error.getCode();
}

public H2ConnectionException(final int code, final String message) {
public H2ConnectionException(final long code, final String message) {
super(message);
this.code = code;
this.code = Args.checkRange(code, 0L, 0xffffffffL, "H2 Error code");
}

public H2ConnectionException(final int code, final String message) {
this(Integer.toUnsignedLong(code), message);
}

public int getCode() {
public long getCode() {
return code;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -136,26 +136,30 @@ public enum H2Error {
*/
HTTP_1_1_REQUIRED (0x0d);

int code;
long code;

H2Error(final int code) {
H2Error(final long code) {
this.code = code;
}

public int getCode() {
public long getCode() {
return code;
}

private static final ConcurrentMap<Integer, H2Error> MAP_BY_CODE;
private static final ConcurrentMap<Long, H2Error> MAP_BY_CODE;
static {
MAP_BY_CODE = new ConcurrentHashMap<>();
for (final H2Error error: values()) {
MAP_BY_CODE.putIfAbsent(error.code, error);
}
}

public static H2Error getByCode(final int code) {
public static H2Error getByCode(final long code) {
return MAP_BY_CODE.get(code);
}

public static H2Error getByCode(final int code) {
return getByCode(Integer.toUnsignedLong(code));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -43,20 +43,24 @@ public class H2StreamResetException extends HttpStreamResetException {
* @see java.io.Serializable
*/
private static final long serialVersionUID = 4280996898701236013L;
private final int code;
private final long code;

public H2StreamResetException(final H2Error error, final String message) {
super(message);
Args.notNull(error, "H2 Error code");
this.code = error.getCode();
}

public H2StreamResetException(final int code, final String message) {
public H2StreamResetException(final long code, final String message) {
super(message);
this.code = code;
this.code = Args.checkRange(code, 0L, 0xffffffffL, "H2 Error code");
}

public H2StreamResetException(final int code, final String message) {
this(Integer.toUnsignedLong(code), message);
}

public int getCode() {
public long getCode() {
return code;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,17 +43,17 @@ public class H2Config {
public static final H2Config DEFAULT = custom().build();
public static final H2Config INIT = initial().build();

private final int headerTableSize;
private final long headerTableSize;
private final boolean pushEnabled;
private final int maxConcurrentStreams;
private final long maxConcurrentStreams;
private final int initialWindowSize;
private final int maxFrameSize;
private final int maxHeaderListSize;
private final long maxHeaderListSize;
private final boolean compressionEnabled;
private final int maxContinuations;

H2Config(final int headerTableSize, final boolean pushEnabled, final int maxConcurrentStreams,
final int initialWindowSize, final int maxFrameSize, final int maxHeaderListSize,
H2Config(final long headerTableSize, final boolean pushEnabled, final long maxConcurrentStreams,
final int initialWindowSize, final int maxFrameSize, final long maxHeaderListSize,
final boolean compressionEnabled, final int maxContinuations) {
super();
this.headerTableSize = headerTableSize;
Expand All @@ -66,15 +66,15 @@ public class H2Config {
this.maxContinuations = maxContinuations;
}

public int getHeaderTableSize() {
public long getHeaderTableSize() {
return headerTableSize;
}

public boolean isPushEnabled() {
return pushEnabled;
}

public int getMaxConcurrentStreams() {
public long getMaxConcurrentStreams() {
return maxConcurrentStreams;
}

Expand All @@ -86,7 +86,7 @@ public int getMaxFrameSize() {
return maxFrameSize;
}

public int getMaxHeaderListSize() {
public long getMaxHeaderListSize() {
return maxHeaderListSize;
}

Expand Down Expand Up @@ -147,12 +147,12 @@ public static H2Config.Builder copy(final H2Config config) {

public static class Builder {

private int headerTableSize;
private long headerTableSize;
private boolean pushEnabled;
private int maxConcurrentStreams;
private long maxConcurrentStreams;
private int initialWindowSize;
private int maxFrameSize;
private int maxHeaderListSize;
private long maxHeaderListSize;
private boolean compressionEnabled;
private int maxContinuations;

Expand All @@ -167,21 +167,29 @@ public static class Builder {
this.maxContinuations = 100;
}

public Builder setHeaderTableSize(final int headerTableSize) {
this.headerTableSize = headerTableSize;
public Builder setHeaderTableSize(final long headerTableSize) {
this.headerTableSize = Args.checkRange(headerTableSize, 0L, 0xffffffffL, "Header table size");
return this;
}

public Builder setHeaderTableSize(final int headerTableSize) {
return setHeaderTableSize((long) headerTableSize);
}

public Builder setPushEnabled(final boolean pushEnabled) {
this.pushEnabled = pushEnabled;
return this;
}

public Builder setMaxConcurrentStreams(final int maxConcurrentStreams) {
this.maxConcurrentStreams = maxConcurrentStreams;
public Builder setMaxConcurrentStreams(final long maxConcurrentStreams) {
this.maxConcurrentStreams = Args.checkRange(maxConcurrentStreams, 0L, 0xffffffffL, "Max concurrent streams");
return this;
}

public Builder setMaxConcurrentStreams(final int maxConcurrentStreams) {
return setMaxConcurrentStreams((long) maxConcurrentStreams);
}

public Builder setInitialWindowSize(final int initialWindowSize) {
this.initialWindowSize = Args.checkRange(initialWindowSize, 0, Integer.MAX_VALUE, "Initial window size");
return this;
Expand All @@ -193,11 +201,15 @@ public Builder setMaxFrameSize(final int maxFrameSize) {
return this;
}

public Builder setMaxHeaderListSize(final int maxHeaderListSize) {
this.maxHeaderListSize = maxHeaderListSize;
public Builder setMaxHeaderListSize(final long maxHeaderListSize) {
this.maxHeaderListSize = Args.checkRange(maxHeaderListSize, 0L, 0xffffffffL, "Max header list size");
return this;
}

public Builder setMaxHeaderListSize(final int maxHeaderListSize) {
return setMaxHeaderListSize((long) maxHeaderListSize);
}

public Builder setCompressionEnabled(final boolean compressionEnabled) {
this.compressionEnabled = compressionEnabled;
return this;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,20 +36,23 @@
public final class H2Setting {

private final H2Param param;
private final int value;
private final long value;

public H2Setting(final H2Param param, final int value) {
public H2Setting(final H2Param param, final long value) {
Args.notNull(param, "Setting parameter");
Args.notNegative(value, "Setting value must be a non-negative value");
this.param = param;
this.value = value;
this.value = Args.checkRange(value, 0L, 0xffffffffL, "Setting value");
}

public H2Setting(final H2Param param, final int value) {
this(param, (long) value);
}

public int getCode() {
return param.code;
}

public int getValue() {
public long getValue() {
return value;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public RawFrame createSettings(final H2Setting... settings) {
final ByteBuffer payload = ByteBuffer.allocate(settings.length * 12);
for (final H2Setting setting: settings) {
payload.putShort((short) setting.getCode());
payload.putInt(setting.getValue());
payload.putInt((int) setting.getValue());
}
payload.flip();
return new RawFrame(FrameType.SETTINGS.getValue(), 0, 0, payload);
Expand All @@ -61,14 +61,19 @@ public RawFrame createResetStream(final int streamId, final H2Error error) {
return createResetStream(streamId, error.getCode());
}

public RawFrame createResetStream(final int streamId, final int code) {
public RawFrame createResetStream(final int streamId, final long code) {
Args.positive(streamId, "Stream id");
Args.checkRange(code, 0L, 0xffffffffL, "Error code");
final ByteBuffer payload = ByteBuffer.allocate(4);
payload.putInt(code);
payload.putInt((int) code);
payload.flip();
return new RawFrame(FrameType.RST_STREAM.getValue(), 0, streamId, payload);
}

public RawFrame createResetStream(final int streamId, final int code) {
return createResetStream(streamId, Integer.toUnsignedLong(code));
}

public RawFrame createPing(final ByteBuffer opaqueData) {
Args.notNull(opaqueData, "Opaque data");
Args.check(opaqueData.remaining() == 8, "Opaque data length must be equal 8");
Expand All @@ -86,7 +91,7 @@ public RawFrame createGoAway(final int lastStream, final H2Error error, final St
final byte[] debugData = message != null ? message.getBytes(StandardCharsets.US_ASCII) : null;
final ByteBuffer payload = ByteBuffer.allocate(8 + (debugData != null ? debugData.length : 0));
payload.putInt(lastStream);
payload.putInt(error.getCode());
payload.putInt((int) error.getCode());
if (debugData != null) {
payload.put(debugData);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,13 +105,13 @@ public void printPayload(final RawFrame frame, final Appendable appendable) thro
while (buf.hasRemaining()) {
final int code = buf.getShort();
final H2Param param = H2Param.valueOf(code);
final int value = buf.getInt();
final long value = Integer.toUnsignedLong(buf.getInt());
if (param != null) {
appendable.append(param.name());
} else {
appendable.append("0x").append(Integer.toHexString(code));
}
appendable.append(": ").append(Integer.toString(value)).append("\r\n");
appendable.append(": ").append(Long.toString(value)).append("\r\n");
}
} else {
appendable.append("Invalid\r\n");
Expand All @@ -120,12 +120,12 @@ public void printPayload(final RawFrame frame, final Appendable appendable) thro
case RST_STREAM:
if (buf.remaining() == 4) {
appendable.append("Code ");
final int code = buf.getInt();
final long code = Integer.toUnsignedLong(buf.getInt());
final H2Error error = H2Error.getByCode(code);
if (error != null) {
appendable.append(error.name());
} else {
appendable.append("0x").append(Integer.toHexString(code));
appendable.append("0x").append(Long.toHexString(code));
}
appendable.append("\r\n");
} else {
Expand All @@ -137,12 +137,12 @@ public void printPayload(final RawFrame frame, final Appendable appendable) thro
final int lastStream = buf.getInt() & 0x7fffffff;
appendable.append("Last stream ").append(Integer.toString(lastStream)).append("\r\n");
appendable.append("Code ");
final int code2 = buf.getInt();
final long code2 = Integer.toUnsignedLong(buf.getInt());
final H2Error error2 = H2Error.getByCode(code2);
if (error2 != null) {
appendable.append(error2.name());
} else {
appendable.append("0x").append(Integer.toHexString(code2));
appendable.append("0x").append(Long.toHexString(code2));
}
appendable.append("\r\n");
final byte[] tmp = new byte[buf.remaining()];
Expand Down
Loading
Loading