X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=util.h;h=a2ef82864b84d247de94e21ca4c46b8eb079f6f6;hb=715f70157516497e5f1f3237fc1d35efe94debc8;hp=d783cd076b10c7a70ecd7b215ba2947d61913d08;hpb=4add64aaef1218968a81af964ec66ab39e0755c4;p=secnet.git diff --git a/util.h b/util.h index d783cd0..a2ef828 100644 --- a/util.h +++ b/util.h @@ -59,6 +59,31 @@ void truncmsg_add_string(struct buffer_if *buf, cstring_t s); void truncmsg_add_packet_string(struct buffer_if*, int32_t, const uint8_t*); const char *truncmsg_terminate(const struct buffer_if *buf); + +struct priomsg { + /* U: uninitialised + * F: initialised but free (no memory allocated), no leak if discarded + * Z: contains no message yet + * M: contains some message; you may call truncmsg_add_* + */ + int prio; + struct buffer_if m; +}; + +void priomsg_new(struct priomsg *pm, int32_t maxlen); /* UF -> Z */ +void priomsg_destroy(struct priomsg *pm, int32_t maxlen); /* FZM -> F */ +void priomsg_reset(struct priomsg *pm); /* FZM -> Z */ +bool_t priomsg_update_p(struct priomsg *pm, int prio); /* ZM -> M */ + /* returns true iff message of priority prio ought to be added, + * caller should then call truncmsg_add_*. + * pm may be NULL, in which case it just returns false */ +const char *priomsg_getmessage(const struct priomsg *pm, const char *defmsg); + /* return value is null-terminated, valid until next call + * or until defmsg is no longer valid ZM */ + +bool_t priomsg_update_fixed(struct priomsg *pm, int prio, const char *m); + /* convenience combination of _update_p and truncmsg_add_string */ + /* * void BUF_ADD_BYTES(append, struct buffer_if*, const void*, int32_t size); * void BUF_ADD_BYTES(prepend, struct buffer_if*, const void*, int32_t size);