in native/src/ssl.c [546:571]
static int jbs_read(BIO *b, char *out, int outl)
{
jint ret = 0;
if (BIO_get_init(b) && out != NULL) {
BIO_JAVA *j = (BIO_JAVA *)BIO_get_data(b);
JNIEnv *e = NULL;
jbyteArray jb;
tcn_get_java_env(&e);
jb = (*e)->NewByteArray(e, outl);
if (!(*e)->ExceptionOccurred(e)) {
BIO_clear_retry_flags(b);
ret = (*e)->CallIntMethod(e, j->cb.obj,
j->cb.mid[1], jb);
if (ret > 0) {
jbyte *jout = (*e)->GetPrimitiveArrayCritical(e, jb, NULL);
memcpy(out, jout, ret);
(*e)->ReleasePrimitiveArrayCritical(e, jb, jout, 0);
} else if (outl != 0) {
ret = -1;
BIO_set_retry_read(b);
}
(*e)->DeleteLocalRef(e, jb);
}
}
return ret;
}