+bool OpenSSLUtils::setCustomBioReadMethod(
+ BIO_METHOD* bioMeth,
+ int (*meth)(BIO*, char*, int)) {
+ bool ret = false;
+#if OPENSSL_IS_110
+ ret = (BIO_meth_set_read(bioMeth, meth) == 1);
+#elif (defined(OPENSSL_IS_BORINGSSL) || OPENSSL_IS_101 || OPENSSL_IS_102)
+ bioMeth->bread = meth;
+ ret = true;
+#endif
+
+ return ret;
+}
+
+bool OpenSSLUtils::setCustomBioWriteMethod(
+ BIO_METHOD* bioMeth,
+ int (*meth)(BIO*, const char*, int)) {
+ bool ret = false;
+#if OPENSSL_IS_110
+ ret = (BIO_meth_set_write(bioMeth, meth) == 1);
+#elif (defined(OPENSSL_IS_BORINGSSL) || OPENSSL_IS_101 || OPENSSL_IS_102)
+ bioMeth->bwrite = meth;
+ ret = true;
+#endif
+
+ return ret;
+}
+
+int OpenSSLUtils::getBioShouldRetryWrite(int r) {
+ int ret = 0;
+#if defined(OPENSSL_IS_BORINGSSL)
+ ret = boringssl_bio_fd_should_retry(r);
+#else
+ ret = BIO_sock_should_retry(r);
+#endif
+ return ret;
+}
+
+void OpenSSLUtils::setBioAppData(BIO* b, void* ptr) {
+#if defined(OPENSSL_IS_BORINGSSL)
+ BIO_set_callback_arg(b, static_cast<char*>(ptr));
+#else
+ BIO_set_app_data(b, ptr);
+#endif
+}
+
+void* OpenSSLUtils::getBioAppData(BIO* b) {
+#if defined(OPENSSL_IS_BORINGSSL)
+ return BIO_get_callback_arg(b);
+#else
+ return BIO_get_app_data(b);
+#endif
+}
+
+void OpenSSLUtils::setCustomBioMethod(BIO* b, BIO_METHOD* meth) {
+#if defined(OPENSSL_IS_BORINGSSL)
+ b->method = meth;
+#else
+ BIO_set(b, meth);
+#endif
+}
+