+#if (LIBCYASSL_VERSION_HEX > 0)
+static int io_recv_cb(SSL* ssl, char *buf, int sz, void *ctx)
+{
+ return s_ustream_read(buf, sz, ctx);
+}
+
+static int io_send_cb(SSL* ssl, char *buf, int sz, void *ctx)
+{
+ return s_ustream_write(buf, sz, ctx);
+}
+#else
+/* not defined in the header file */
+typedef int (*CallbackIORecv)(char *buf, int sz, void *ctx);
+typedef int (*CallbackIOSend)(char *buf, int sz, void *ctx);
+
+void SetCallbackIORecv_Ctx(SSL_CTX*, CallbackIORecv);
+void SetCallbackIOSend_Ctx(SSL_CTX*, CallbackIOSend);
+void SetCallbackIO_ReadCtx(SSL* ssl, void *rctx);
+void SetCallbackIO_WriteCtx(SSL* ssl, void *wctx);
+
+#define CyaSSL_SetIOReadCtx SetCallbackIO_ReadCtx
+#define CyaSSL_SetIOWriteCtx SetCallbackIO_WriteCtx
+#define CyaSSL_SetIORecv SetCallbackIORecv_Ctx
+#define CyaSSL_SetIOSend SetCallbackIOSend_Ctx
+
+static int io_recv_cb(char *buf, int sz, void *ctx)
+{
+ return s_ustream_read(buf, sz, ctx);
+}
+
+static int io_send_cb(char *buf, int sz, void *ctx)
+{
+ return s_ustream_write(buf, sz, ctx);
+}
+#endif
+