< prev index next >
src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/Stream.java
Print this page
*** 28,37 ****
--- 28,38 ----
import java.io.IOException;
import java.net.URI;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
+ import java.util.LinkedList;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executor;
*** 120,130 ****
HttpResponse.BodyProcessor<T> responseProcessor;
final HttpRequest.BodyProcessor requestProcessor;
volatile int responseCode;
volatile Response response;
volatile CompletableFuture<Response> responseCF;
! final AbstractPushPublisher<ByteBuffer> publisher;
final CompletableFuture<Void> requestBodyCF = new MinimalFuture<>();
/** True if END_STREAM has been seen in a frame received on this stream. */
private volatile boolean remotelyClosed;
private volatile boolean closed;
--- 121,131 ----
HttpResponse.BodyProcessor<T> responseProcessor;
final HttpRequest.BodyProcessor requestProcessor;
volatile int responseCode;
volatile Response response;
volatile CompletableFuture<Response> responseCF;
! final AbstractPushPublisher<List<ByteBuffer>> publisher;
final CompletableFuture<Void> requestBodyCF = new MinimalFuture<>();
/** True if END_STREAM has been seen in a frame received on this stream. */
private volatile boolean remotelyClosed;
private volatile boolean closed;
*** 198,213 ****
// RFC 7540 6.1:
// The entire DATA frame payload is included in flow control,
// including the Pad Length and Padding fields if present
int len = df.payloadLength();
ByteBufferReference[] buffers = df.getData();
for (ByteBufferReference b : buffers) {
ByteBuffer buf = b.get();
if (buf.hasRemaining()) {
! publisher.acceptData(Optional.of(buf));
}
}
connection.windowUpdater.update(len);
if (df.getFlag(DataFrame.END_STREAM)) {
setEndStreamReceived();
publisher.acceptData(Optional.empty());
return false;
--- 199,218 ----
// RFC 7540 6.1:
// The entire DATA frame payload is included in flow control,
// including the Pad Length and Padding fields if present
int len = df.payloadLength();
ByteBufferReference[] buffers = df.getData();
+ LinkedList<ByteBuffer> l = new LinkedList<>();
for (ByteBufferReference b : buffers) {
ByteBuffer buf = b.get();
if (buf.hasRemaining()) {
! l.add(buf);
}
}
+ if (!l.isEmpty()) {
+ publisher.acceptData(Optional.of(l));
+ }
connection.windowUpdater.update(len);
if (df.getFlag(DataFrame.END_STREAM)) {
setEndStreamReceived();
publisher.acceptData(Optional.empty());
return false;
< prev index next >