Ran into an issue trying to use a BIO_f_buffer to read frames line by line, where even the normal read method tries to wait to fill the passed number of bytes; making it unhelpful for reading until the null byte at the end of messages (it happened to work last week because ActiveMQ STOMP terminates messages with \0\n). Had a go at handling an arbitrary number of lines per unbuffered read, coming up with a rather hacked together solution that so far only works for lines that don't straddle reads. Looked at libstomp for some inspiration, but that gets around the issue by reading a single byte at a time (and also does nested reads). I might use the idea there of a linked list of data blocks for messages without content-length though.
Rather than spending a couple more days staring at the code, I moved on to writing a number of the helper functions for dealing with creating and destroying frames and headers, finding a header in a list, and string escaping/unescaping for STOMP 1.1. Started writing a few tests for those (as the main sending/receiving isn't very useful yet). Also had a chat with Brendon about the best way of eventually having multiple connections.