Can we clarify which meaning this is:

1) The argument 'line' must end in LF
2) Regardless of what you pass in, I'm going to put LF on the end for you

I suspect from the usage the former, but I don't know why 'writeOne' needs to demand that lines must end in LF; if the protocol requires you to terminate each statement with a LF, then that's fine - but does this mean this fn can only be used to write out a complete 'sentence' each time? 

If this is just 'writing output' then it should be possible to call this multiple times (e.g. writeOne(cap) writeOne(' ') writeOne(capName)). But if the 'writeOne' is a single advertisment line (as is) then why doesn't it add the newline for you?

PS I've dealt with an API where the 'write' call automatically added a CRLF on the end for you, and it was a nightmare to maintain, esp. when writing out multiple 'lines' because you always had to remember that you only added the CRLF *between* lines rather than at the end.