// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.


// This file is autogenerated by
//     third_party/jni_zero/jni_generator.py
// For
//     android/net/connectivity/org/chromium/net/impl/CronetBidirectionalStream

#ifndef android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_JNI
#define android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_JNI

#include <jni.h>

#include "third_party/jni_zero/jni_export.h"
#include "third_party/jni_zero/jni_zero_helper.h"


// Step 1: Forward declarations.

JNI_ZERO_COMPONENT_BUILD_EXPORT extern const char
    kClassPath_android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream[];
const char kClassPath_android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream[] =
    "android/net/connectivity/org/chromium/net/impl/CronetBidirectionalStream";
// Leaking this jclass as we cannot use LazyInstance from some threads.
JNI_ZERO_COMPONENT_BUILD_EXPORT std::atomic<jclass>
    g_android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_clazz(nullptr);
#ifndef android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_clazz_defined
#define android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_clazz_defined
inline jclass android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_clazz(JNIEnv*
    env) {
  return base::android::LazyGetClass(env,
      kClassPath_android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream,
      &g_android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_clazz);
}
#endif


// Step 2: Constants (optional).


// Step 3: Method stubs.
namespace cronet {

static jlong JNI_CronetBidirectionalStream_CreateBidirectionalStream(JNIEnv* env, const
    base::android::JavaParamRef<jobject>& caller,
    jlong urlRequestContextAdapter,
    jboolean sendRequestHeadersAutomatically,
    jboolean trafficStatsTagSet,
    jint trafficStatsTag,
    jboolean trafficStatsUidSet,
    jint trafficStatsUid,
    jlong networkHandle);

JNI_BOUNDARY_EXPORT jlong Java_android_net_connectivity_J_N_MmcHPrML(
    JNIEnv* env,
    jclass jcaller,
    jobject caller,
    jlong urlRequestContextAdapter,
    jboolean sendRequestHeadersAutomatically,
    jboolean trafficStatsTagSet,
    jint trafficStatsTag,
    jboolean trafficStatsUidSet,
    jint trafficStatsUid,
    jlong networkHandle) {
  return JNI_CronetBidirectionalStream_CreateBidirectionalStream(env,
      base::android::JavaParamRef<jobject>(env, caller), urlRequestContextAdapter,
      sendRequestHeadersAutomatically, trafficStatsTagSet, trafficStatsTag, trafficStatsUidSet,
      trafficStatsUid, networkHandle);
}

JNI_BOUNDARY_EXPORT void Java_android_net_connectivity_J_N_MfKLon3Z(
    JNIEnv* env,
    jclass jcaller,
    jlong nativePtr,
    jobject caller,
    jboolean sendOnCanceled) {
  CronetBidirectionalStreamAdapter* native =
      reinterpret_cast<CronetBidirectionalStreamAdapter*>(nativePtr);
  CHECK_NATIVE_PTR(env, jcaller, native, "Destroy");
  return native->Destroy(env, base::android::JavaParamRef<jobject>(env, caller), sendOnCanceled);
}

JNI_BOUNDARY_EXPORT jboolean Java_android_net_connectivity_J_N_Mii781MA(
    JNIEnv* env,
    jclass jcaller,
    jlong nativePtr,
    jobject caller,
    jobject byteBuffer,
    jint position,
    jint limit) {
  CronetBidirectionalStreamAdapter* native =
      reinterpret_cast<CronetBidirectionalStreamAdapter*>(nativePtr);
  CHECK_NATIVE_PTR(env, jcaller, native, "ReadData", false);
  return native->ReadData(env, base::android::JavaParamRef<jobject>(env, caller),
      base::android::JavaParamRef<jobject>(env, byteBuffer), position, limit);
}

JNI_BOUNDARY_EXPORT void Java_android_net_connectivity_J_N_Ml_00024I_00024FoI(
    JNIEnv* env,
    jclass jcaller,
    jlong nativePtr,
    jobject caller) {
  CronetBidirectionalStreamAdapter* native =
      reinterpret_cast<CronetBidirectionalStreamAdapter*>(nativePtr);
  CHECK_NATIVE_PTR(env, jcaller, native, "SendRequestHeaders");
  return native->SendRequestHeaders(env, base::android::JavaParamRef<jobject>(env, caller));
}

JNI_BOUNDARY_EXPORT jint Java_android_net_connectivity_J_N_MtMMqY08(
    JNIEnv* env,
    jclass jcaller,
    jlong nativePtr,
    jobject caller,
    jstring url,
    jint priority,
    jstring method,
    jobjectArray headers,
    jboolean endOfStream) {
  CronetBidirectionalStreamAdapter* native =
      reinterpret_cast<CronetBidirectionalStreamAdapter*>(nativePtr);
  CHECK_NATIVE_PTR(env, jcaller, native, "Start", 0);
  return native->Start(env, base::android::JavaParamRef<jobject>(env, caller),
      base::android::JavaParamRef<jstring>(env, url), priority,
      base::android::JavaParamRef<jstring>(env, method),
      base::android::JavaParamRef<jobjectArray>(env, headers), endOfStream);
}

JNI_BOUNDARY_EXPORT jboolean Java_android_net_connectivity_J_N_MRxvUykw(
    JNIEnv* env,
    jclass jcaller,
    jlong nativePtr,
    jobject caller,
    jobjectArray buffers,
    jintArray positions,
    jintArray limits,
    jboolean endOfStream) {
  CronetBidirectionalStreamAdapter* native =
      reinterpret_cast<CronetBidirectionalStreamAdapter*>(nativePtr);
  CHECK_NATIVE_PTR(env, jcaller, native, "WritevData", false);
  return native->WritevData(env, base::android::JavaParamRef<jobject>(env, caller),
      base::android::JavaParamRef<jobjectArray>(env, buffers),
      base::android::JavaParamRef<jintArray>(env, positions),
      base::android::JavaParamRef<jintArray>(env, limits), endOfStream);
}


static std::atomic<jmethodID>
    g_android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_onCanceled0(nullptr);
static void Java_CronetBidirectionalStream_onCanceled(JNIEnv* env, const
    base::android::JavaRef<jobject>& obj) {
  jclass clazz =
      android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_clazz(env);
  CHECK_CLAZZ(env, obj.obj(),
      android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_clazz(env));

  jni_generator::JniJavaCallContextChecked call_context;
  call_context.Init<
      base::android::MethodID::TYPE_INSTANCE>(
          env,
          clazz,
          "onCanceled",
          "()V",
          &g_android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_onCanceled0);

     env->CallVoidMethod(obj.obj(),
          call_context.base.method_id);
}

static std::atomic<jmethodID>
    g_android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_onError5(nullptr);
static void Java_CronetBidirectionalStream_onError(JNIEnv* env, const
    base::android::JavaRef<jobject>& obj, JniIntWrapper errorCode,
    JniIntWrapper nativeError,
    JniIntWrapper nativeQuicError,
    const base::android::JavaRef<jstring>& errorString,
    jlong receivedByteCount) {
  jclass clazz =
      android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_clazz(env);
  CHECK_CLAZZ(env, obj.obj(),
      android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_clazz(env));

  jni_generator::JniJavaCallContextChecked call_context;
  call_context.Init<
      base::android::MethodID::TYPE_INSTANCE>(
          env,
          clazz,
          "onError",
          "(IIILjava/lang/String;J)V",
          &g_android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_onError5);

     env->CallVoidMethod(obj.obj(),
          call_context.base.method_id, as_jint(errorCode), as_jint(nativeError),
              as_jint(nativeQuicError), errorString.obj(), receivedByteCount);
}

static std::atomic<jmethodID>
    g_android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_onMetricsCollected16(nullptr);
static void Java_CronetBidirectionalStream_onMetricsCollected(JNIEnv* env, const
    base::android::JavaRef<jobject>& obj, jlong requestStartMs,
    jlong dnsStartMs,
    jlong dnsEndMs,
    jlong connectStartMs,
    jlong connectEndMs,
    jlong sslStartMs,
    jlong sslEndMs,
    jlong sendingStartMs,
    jlong sendingEndMs,
    jlong pushStartMs,
    jlong pushEndMs,
    jlong responseStartMs,
    jlong requestEndMs,
    jboolean socketReused,
    jlong sentByteCount,
    jlong receivedByteCount) {
  jclass clazz =
      android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_clazz(env);
  CHECK_CLAZZ(env, obj.obj(),
      android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_clazz(env));

  jni_generator::JniJavaCallContextChecked call_context;
  call_context.Init<
      base::android::MethodID::TYPE_INSTANCE>(
          env,
          clazz,
          "onMetricsCollected",
          "(JJJJJJJJJJJJJZJJ)V",
&g_android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_onMetricsCollected16);

     env->CallVoidMethod(obj.obj(),
          call_context.base.method_id, requestStartMs, dnsStartMs, dnsEndMs, connectStartMs,
              connectEndMs, sslStartMs, sslEndMs, sendingStartMs, sendingEndMs, pushStartMs,
              pushEndMs, responseStartMs, requestEndMs, socketReused, sentByteCount,
              receivedByteCount);
}

static std::atomic<jmethodID>
    g_android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_onReadCompleted5(nullptr);
static void Java_CronetBidirectionalStream_onReadCompleted(JNIEnv* env, const
    base::android::JavaRef<jobject>& obj, const base::android::JavaRef<jobject>& byteBuffer,
    JniIntWrapper bytesRead,
    JniIntWrapper initialPosition,
    JniIntWrapper initialLimit,
    jlong receivedByteCount) {
  jclass clazz =
      android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_clazz(env);
  CHECK_CLAZZ(env, obj.obj(),
      android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_clazz(env));

  jni_generator::JniJavaCallContextChecked call_context;
  call_context.Init<
      base::android::MethodID::TYPE_INSTANCE>(
          env,
          clazz,
          "onReadCompleted",
          "(Ljava/nio/ByteBuffer;IIIJ)V",
&g_android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_onReadCompleted5);

     env->CallVoidMethod(obj.obj(),
          call_context.base.method_id, byteBuffer.obj(), as_jint(bytesRead),
              as_jint(initialPosition), as_jint(initialLimit), receivedByteCount);
}

static std::atomic<jmethodID>
    g_android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_onResponseHeadersReceived4(nullptr);
static void Java_CronetBidirectionalStream_onResponseHeadersReceived(JNIEnv* env, const
    base::android::JavaRef<jobject>& obj, JniIntWrapper httpStatusCode,
    const base::android::JavaRef<jstring>& negotiatedProtocol,
    const base::android::JavaRef<jobjectArray>& headers,
    jlong receivedByteCount) {
  jclass clazz =
      android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_clazz(env);
  CHECK_CLAZZ(env, obj.obj(),
      android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_clazz(env));

  jni_generator::JniJavaCallContextChecked call_context;
  call_context.Init<
      base::android::MethodID::TYPE_INSTANCE>(
          env,
          clazz,
          "onResponseHeadersReceived",
          "(ILjava/lang/String;[Ljava/lang/String;J)V",
&g_android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_onResponseHeadersReceived4);

     env->CallVoidMethod(obj.obj(),
          call_context.base.method_id, as_jint(httpStatusCode), negotiatedProtocol.obj(),
              headers.obj(), receivedByteCount);
}

static std::atomic<jmethodID>
    g_android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_onResponseTrailersReceived1(nullptr);
static void Java_CronetBidirectionalStream_onResponseTrailersReceived(JNIEnv* env, const
    base::android::JavaRef<jobject>& obj, const base::android::JavaRef<jobjectArray>& trailers) {
  jclass clazz =
      android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_clazz(env);
  CHECK_CLAZZ(env, obj.obj(),
      android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_clazz(env));

  jni_generator::JniJavaCallContextChecked call_context;
  call_context.Init<
      base::android::MethodID::TYPE_INSTANCE>(
          env,
          clazz,
          "onResponseTrailersReceived",
          "([Ljava/lang/String;)V",
&g_android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_onResponseTrailersReceived1);

     env->CallVoidMethod(obj.obj(),
          call_context.base.method_id, trailers.obj());
}

static std::atomic<jmethodID>
    g_android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_onStreamReady1(nullptr);
static void Java_CronetBidirectionalStream_onStreamReady(JNIEnv* env, const
    base::android::JavaRef<jobject>& obj, jboolean requestHeadersSent) {
  jclass clazz =
      android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_clazz(env);
  CHECK_CLAZZ(env, obj.obj(),
      android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_clazz(env));

  jni_generator::JniJavaCallContextChecked call_context;
  call_context.Init<
      base::android::MethodID::TYPE_INSTANCE>(
          env,
          clazz,
          "onStreamReady",
          "(Z)V",
&g_android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_onStreamReady1);

     env->CallVoidMethod(obj.obj(),
          call_context.base.method_id, requestHeadersSent);
}

static std::atomic<jmethodID>
    g_android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_onWritevCompleted4(nullptr);
static void Java_CronetBidirectionalStream_onWritevCompleted(JNIEnv* env, const
    base::android::JavaRef<jobject>& obj, const base::android::JavaRef<jobjectArray>& byteBuffers,
    const base::android::JavaRef<jintArray>& initialPositions,
    const base::android::JavaRef<jintArray>& initialLimits,
    jboolean endOfStream) {
  jclass clazz =
      android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_clazz(env);
  CHECK_CLAZZ(env, obj.obj(),
      android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_clazz(env));

  jni_generator::JniJavaCallContextChecked call_context;
  call_context.Init<
      base::android::MethodID::TYPE_INSTANCE>(
          env,
          clazz,
          "onWritevCompleted",
          "([Ljava/nio/ByteBuffer;[I[IZ)V",
&g_android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_onWritevCompleted4);

     env->CallVoidMethod(obj.obj(),
          call_context.base.method_id, byteBuffers.obj(), initialPositions.obj(),
              initialLimits.obj(), endOfStream);
}

}  // namespace cronet

#endif  // android_net_connectivity_org_chromium_net_impl_CronetBidirectionalStream_JNI
