--- On Mon, 4/12/10, Phillip Hellewell <[email protected]> wrote:
So the goal is to implement a BIO interface that can "wrap" a file_read_random
or file_read_write object. I don't think it will be too tough, but after
reading your email I'm sure there will be a couple tricky parts. Thanks for
the hint about using the bio->ptr. I'm pretty sure that is where I will store
a pointer to my stream, but I hope OpenSSL doesn't go mucking with it...
Hi again,
I used BIO_TYPE_SOURCE_SINK and ptr was free to use. In general there are
several members available (ptr, num, flags, etc.) but which are unused
absolutely depends on your BIO type. For example ptr is *not* free to use if
you're going to knock off a memory BIO (see bss_mem.c).
I read Howard's reply just now regarding ptr and I think it would be more
correct to say it's type dependent. For example if you implement using
BIO_TYPE_MEM then ptr *is* used internally by OpenSSL. OpenSSL internal
functions in some places check the BIO type and rely on it
if (indata && (BIO_method_type(indata) == BIO_TYPE_MEM))
^^^ from pkcs7_verify()
So at that point you'd better have ptr pointing to a valid memory location that
holds the data you want read. In other words BIO_TYPE_MEM makes use of ptr so
you can't use it for your own purposes.
And of course all this could change in future OpenSSL releases. I would stick
with the generic BIO_TYPE_SOURCE_SINK and review bss_fd.c for inspiration.
-Jay