+ sbuf = _rmr_alloc_msg(vctx, size)
+ # make sure it's good
+ try:
+ sbuf.contents
+ if payload:
+ set_payload_and_length(payload, sbuf)
+
+ if gen_transaction_id:
+ generate_and_set_transaction_id(sbuf)
+
+ if mtype:
+ sbuf.contents.mtype = mtype
+
+ if meid:
+ rmr_set_meid(sbuf, meid)
+
+ return sbuf
+
+ except ValueError:
+ raise BadBufferAllocation