int test_read (BIO *b, char *buf, int sz) { struct test_ctx *ctx = bio_ctx (b); if (sz <= 0) return 0; return buf_drain (&ctx->in, &ctx->insz, (unsigned char *) buf, sz); }
int test_write (BIO *b, const char *buf, int sz) { struct test_ctx *ctx = bio_ctx (b); if (sz <= 0) return 0; buf_fill (&ctx->out, &ctx->outsz, (unsigned char *) buf, sz); return sz; }
int test_free(BIO *b) { struct test_ctx *ctx; if (!b || !b->ptr) return 1; ctx = bio_ctx(b); free(ctx->in); free(ctx->out); return 1; }
void API BIO_test_add_input(BIO *b, const unsigned char *buf, size_t bufsz) { struct test_ctx *c = bio_ctx(b); return buf_fill(&c->in, &c->insz, buf, bufsz); }
size_t API BIO_test_get_output(BIO *b, unsigned char *buf, size_t bufsz) { struct test_ctx *c = bio_ctx(b); return buf_drain(&c->out, &c->outsz, buf, bufsz); }
size_t API BIO_test_output_left(BIO *b) { return bio_ctx(b)->outsz; }