Skip to content

Commit c58d650

Browse files
committed
add for h2
1 parent b65c1e4 commit c58d650

4 files changed

Lines changed: 42 additions & 7 deletions

File tree

src/main/java/software/amazon/awssdk/crt/http/Http2StreamManager.java

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

src/main/java/software/amazon/awssdk/crt/http/HttpStreamManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public CompletableFuture<HttpStreamBase> acquireStream(HttpRequestBase request,
7272
public CompletableFuture<HttpStreamBase> acquireStream(HttpRequestBase request,
7373
HttpStreamBaseResponseHandler streamHandler, boolean useManualDataWrites) {
7474
if (this.h2StreamManager != null) {
75-
return this.h2StreamManager.acquireStream(request, streamHandler)
75+
return this.h2StreamManager.acquireStream(request, streamHandler, useManualDataWrites)
7676
.thenApply(stream -> (HttpStreamBase) stream);
7777
} else {
7878
return this.h1StreamManager.acquireStream(request, streamHandler, useManualDataWrites)

src/native/http2_stream_manager.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,8 @@ JNIEXPORT void JNICALL Java_software_amazon_awssdk_crt_http_Http2StreamManager_h
365365
jbyteArray marshalled_request,
366366
jobject jni_http_request_body_stream,
367367
jobject jni_http_response_callback_handler,
368-
jobject java_async_callback) {
368+
jobject java_async_callback,
369+
jboolean jni_use_manual_data_writes) {
369370
(void)jni_class;
370371
aws_cache_jni_ids(env);
371372

@@ -411,6 +412,7 @@ JNIEXPORT void JNICALL Java_software_amazon_awssdk_crt_http_Http2StreamManager_h
411412
.on_complete = aws_java_http_stream_on_stream_complete_fn,
412413
.on_destroy = aws_java_http_stream_on_stream_destroy_fn,
413414
.user_data = stream_binding,
415+
.use_manual_data_writes = jni_use_manual_data_writes,
414416
};
415417

416418
struct aws_allocator *allocator = aws_jni_get_allocator();

0 commit comments

Comments
 (0)