+/*
+ * loading messages async via an FD:
+ * add IO->ReadMsg = NewAsyncMsg(...)
+ * and then call CtdlReadMessageBodyAsync() from your linreader handler.
+ */
+
+ReadAsyncMsg *NewAsyncMsg(const char *terminator, /* token signalling EOT */
+ long tlen,
+ size_t expectlen, /* if we expect a message, how long should it be? */
+ size_t maxlen, /* maximum message length */
+ char *exist, /* if non-null, append to it;
+ exist is ALWAYS freed */
+ long eLen, /* length of exist */
+ int crlf /* CRLF newlines instead of LF */
+ );
+
+eReadState CtdlReadMessageBodyAsync(AsyncIO *IO);
+void DeleteAsyncMsg(ReadAsyncMsg **Msg);
+
+