xref: /aosp_15_r20/external/aws-crt-java/src/native/http_request_response.h (revision 3c7ae9de214676c52d19f01067dc1a404272dc11)
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