@@ -151,17 +151,48 @@ private Http2StreamManager(Http2StreamManagerOptions options) {
151151 public CompletableFuture <Http2Stream > acquireStream (Http2Request request ,
152152 HttpStreamBaseResponseHandler streamHandler ) {
153153
154- return this .acquireStream ((HttpRequestBase ) request , streamHandler );
154+ return this .acquireStream ((HttpRequestBase ) request , streamHandler , false );
155+ }
156+
157+ /**
158+ * Request a Http2Stream from StreamManager.
159+ *
160+ * @param request The Request to make to the Server.
161+ * @param streamHandler The Stream Handler to be called from the Native
162+ * EventLoop
163+ * @param useManualDataWrites When {@code true}, request body data is provided via
164+ * {@link HttpStreamBase#writeData} instead of from the
165+ * request's {@link HttpRequestBodyStream}. See
166+ * {@link Http2ClientConnection#makeRequest(HttpRequestBase, HttpStreamBaseResponseHandler, boolean)}
167+ * for caveats on combining a body stream with manual writes.
168+ * @return A future for a Http2Stream that will be completed when the stream is
169+ * acquired.
170+ */
171+ public CompletableFuture <Http2Stream > acquireStream (Http2Request request ,
172+ HttpStreamBaseResponseHandler streamHandler , boolean useManualDataWrites ) {
173+
174+ return this .acquireStream ((HttpRequestBase ) request , streamHandler , useManualDataWrites );
155175 }
156176
157177 public CompletableFuture <Http2Stream > acquireStream (HttpRequest request ,
158178 HttpStreamBaseResponseHandler streamHandler ) {
159179
160- return this .acquireStream ((HttpRequestBase ) request , streamHandler );
180+ return this .acquireStream ((HttpRequestBase ) request , streamHandler , false );
181+ }
182+
183+ public CompletableFuture <Http2Stream > acquireStream (HttpRequest request ,
184+ HttpStreamBaseResponseHandler streamHandler , boolean useManualDataWrites ) {
185+
186+ return this .acquireStream ((HttpRequestBase ) request , streamHandler , useManualDataWrites );
161187 }
162188
163189 public CompletableFuture <Http2Stream > acquireStream (HttpRequestBase request ,
164190 HttpStreamBaseResponseHandler streamHandler ) {
191+ return this .acquireStream (request , streamHandler , false );
192+ }
193+
194+ public CompletableFuture <Http2Stream > acquireStream (HttpRequestBase request ,
195+ HttpStreamBaseResponseHandler streamHandler , boolean useManualDataWrites ) {
165196 CompletableFuture <Http2Stream > completionFuture = new CompletableFuture <>();
166197 AsyncCallback acquireStreamCompleted = AsyncCallback .wrapFuture (completionFuture , null );
167198 if (isNull ()) {
@@ -174,7 +205,8 @@ public CompletableFuture<Http2Stream> acquireStream(HttpRequestBase request,
174205 request .marshalForJni (),
175206 request .getBodyStream (),
176207 new HttpStreamResponseHandlerNativeAdapter (streamHandler ),
177- acquireStreamCompleted );
208+ acquireStreamCompleted ,
209+ useManualDataWrites );
178210 } catch (CrtRuntimeException ex ) {
179211 completionFuture .completeExceptionally (ex );
180212 }
@@ -278,7 +310,8 @@ private static native void http2StreamManagerAcquireStream(long stream_manager,
278310 byte [] marshalledRequest ,
279311 HttpRequestBodyStream bodyStream ,
280312 HttpStreamResponseHandlerNativeAdapter responseHandler ,
281- AsyncCallback completedCallback ) throws CrtRuntimeException ;
313+ AsyncCallback completedCallback ,
314+ boolean useManualDataWrites ) throws CrtRuntimeException ;
282315
283316 private static native HttpManagerMetrics http2StreamManagerFetchMetrics (long stream_manager ) throws CrtRuntimeException ;
284317}
0 commit comments