1*3c7ae9deSAndroid Build Coastguard Worker /** 2*3c7ae9deSAndroid Build Coastguard Worker * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 3*3c7ae9deSAndroid Build Coastguard Worker * SPDX-License-Identifier: Apache-2.0. 4*3c7ae9deSAndroid Build Coastguard Worker */ 5*3c7ae9deSAndroid Build Coastguard Worker 6*3c7ae9deSAndroid Build Coastguard Worker #ifndef AWS_JNI_CRT_HTTP_REQUEST_RESPONSE_H 7*3c7ae9deSAndroid Build Coastguard Worker #define AWS_JNI_CRT_HTTP_REQUEST_RESPONSE_H 8*3c7ae9deSAndroid Build Coastguard Worker 9*3c7ae9deSAndroid Build Coastguard Worker #include <aws/http/request_response.h> 10*3c7ae9deSAndroid Build Coastguard Worker #include <jni.h> 11*3c7ae9deSAndroid Build Coastguard Worker 12*3c7ae9deSAndroid Build Coastguard Worker struct aws_http_message; 13*3c7ae9deSAndroid Build Coastguard Worker struct aws_http_stream; 14*3c7ae9deSAndroid Build Coastguard Worker struct aws_byte_buf; 15*3c7ae9deSAndroid Build Coastguard Worker struct aws_atomic_var; 16*3c7ae9deSAndroid Build Coastguard Worker 17*3c7ae9deSAndroid Build Coastguard Worker struct http_stream_binding { 18*3c7ae9deSAndroid Build Coastguard Worker JavaVM *jvm; 19*3c7ae9deSAndroid Build Coastguard Worker 20*3c7ae9deSAndroid Build Coastguard Worker // TEMP: Until Java API changes to match "H1B" native HTTP API, 21*3c7ae9deSAndroid Build Coastguard Worker // create aws_http_message and aws_input_stream under the hood. 22*3c7ae9deSAndroid Build Coastguard Worker struct aws_http_message *native_request; 23*3c7ae9deSAndroid Build Coastguard Worker 24*3c7ae9deSAndroid Build Coastguard Worker jobject java_http_response_stream_handler; 25*3c7ae9deSAndroid Build Coastguard Worker jobject java_http_stream_base; 26*3c7ae9deSAndroid Build Coastguard Worker struct aws_http_stream *native_stream; 27*3c7ae9deSAndroid Build Coastguard Worker struct aws_byte_buf headers_buf; 28*3c7ae9deSAndroid Build Coastguard Worker int response_status; 29*3c7ae9deSAndroid Build Coastguard Worker /* For the native http stream and the Java stream object */ 30*3c7ae9deSAndroid Build Coastguard Worker struct aws_atomic_var ref; 31*3c7ae9deSAndroid Build Coastguard Worker }; 32*3c7ae9deSAndroid Build Coastguard Worker 33*3c7ae9deSAndroid Build Coastguard Worker jobject aws_java_http_stream_from_native_new(JNIEnv *env, void *opaque, int version); 34*3c7ae9deSAndroid Build Coastguard Worker void aws_java_http_stream_from_native_delete(JNIEnv *env, jobject jHttpStream); 35*3c7ae9deSAndroid Build Coastguard Worker 36*3c7ae9deSAndroid Build Coastguard Worker void *aws_http_stream_binding_release(JNIEnv *env, struct http_stream_binding *binding); 37*3c7ae9deSAndroid Build Coastguard Worker void *aws_http_stream_binding_acquire(struct http_stream_binding *binding); 38*3c7ae9deSAndroid Build Coastguard Worker 39*3c7ae9deSAndroid Build Coastguard Worker // If error occurs, A Java exception is thrown and NULL is returned. 40*3c7ae9deSAndroid Build Coastguard Worker struct http_stream_binding *aws_http_stream_binding_new(JNIEnv *env, jobject java_callback_handler); 41*3c7ae9deSAndroid Build Coastguard Worker 42*3c7ae9deSAndroid Build Coastguard Worker /* Default callbacks using binding */ 43*3c7ae9deSAndroid Build Coastguard Worker int aws_java_http_stream_on_incoming_headers_fn( 44*3c7ae9deSAndroid Build Coastguard Worker struct aws_http_stream *stream, 45*3c7ae9deSAndroid Build Coastguard Worker enum aws_http_header_block block_type, 46*3c7ae9deSAndroid Build Coastguard Worker const struct aws_http_header *header_array, 47*3c7ae9deSAndroid Build Coastguard Worker size_t num_headers, 48*3c7ae9deSAndroid Build Coastguard Worker void *user_data); 49*3c7ae9deSAndroid Build Coastguard Worker int aws_java_http_stream_on_incoming_header_block_done_fn( 50*3c7ae9deSAndroid Build Coastguard Worker struct aws_http_stream *stream, 51*3c7ae9deSAndroid Build Coastguard Worker enum aws_http_header_block block_type, 52*3c7ae9deSAndroid Build Coastguard Worker void *user_data); 53*3c7ae9deSAndroid Build Coastguard Worker int aws_java_http_stream_on_incoming_body_fn( 54*3c7ae9deSAndroid Build Coastguard Worker struct aws_http_stream *stream, 55*3c7ae9deSAndroid Build Coastguard Worker const struct aws_byte_cursor *data, 56*3c7ae9deSAndroid Build Coastguard Worker void *user_data); 57*3c7ae9deSAndroid Build Coastguard Worker void aws_java_http_stream_on_stream_complete_fn(struct aws_http_stream *stream, int error_code, void *user_data); 58*3c7ae9deSAndroid Build Coastguard Worker void aws_java_http_stream_on_stream_destroy_fn(void *user_data); 59*3c7ae9deSAndroid Build Coastguard Worker 60*3c7ae9deSAndroid Build Coastguard Worker #endif /* AWS_JNI_CRT_HTTP_REQUEST_RESPONSE_H */ 61