diff -r 5229a5d098b2 -r cefec18b8268 src/lib/msg_proto.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/lib/msg_proto.h Thu May 28 01:17:36 2009 +0300 @@ -0,0 +1,54 @@ +#ifndef LIBQMSK_MSG_PROTO_H +#define LIBQMSK_MSG_PROTO_H + +/** + * @param + * + * Support for simple protocols that send/recieve length-prefixed messages over a transport stream. + * + * This implementation is mostly geared towards handling a reasonable number of reasonably sized messages in a + * reasonable way. Hence, + */ +#include "transport.h" + +/** + * Protocol state struct + */ +struct msg_proto; + +/** + * User callbacks + */ +struct msg_proto_callbacks { + /** + * Message recieved. + * + * XXX: currently you must not call msg_proto_destroy from within this callback + */ + void (*on_msg) (struct msg_proto *proto, void *data, size_t len, void *arg); + + /** + * Transport/protocol error occured in event handling. + */ + void (*on_error) (struct msg_proto *proto, const error_t *err, void *arg); +}; + +/** + * Create a msg_proto state using the given transport. + * + * This will install our callback handlers on the given transport. + */ +err_t msg_proto_create (struct msg_proto **proto_ptr, transport_t *transport, const struct msg_proto_callbacks *cb_tbl, void *cb_arg, error_t *err); + +/** + * Send a message to the other endpoint + */ +err_t msg_proto_send (struct msg_proto *proto, const void *data, size_t len, error_t *err); + +/** + * Destroy the protocol state and transport + */ +void msg_proto_destroy (struct msg_proto *proto); + + +#endif