* callback is called with a string describing where the failure
* occurred, which can be used to log a more useful error message.
*
+ * Note that tal also has a default function which calls abort() on allocation
+ * failure: see tal_set_backend().
+ *
* Example:
* static void my_handler(const char *str)
* {
* inconsistent, and the function will abort. If the state of the
* structure is valid it returns it unchanged.
*
- * Returns the list head if the list is consistent, NULL if not (it
- * can never return NULL if @abortstr is set).
+ * Returns the @msg if the message is consistent, NULL if not (it can
+ * never return NULL if @abortstr is set).
*/
struct rfc822_msg *rfc822_check(const struct rfc822_msg *msg,
const char *abortstr);
/**
* rfc822_start - start parsing a new rfc822 message
- * @ctx: talloc context to make allocations in
+ * @ctx: tal context to make allocations in (or talloc #ifdef TAL_USE_TALLOC)
* @p: pointer to a buffer containing the message text
* @len: length of the message text
*
enum rfc822_header_errors {
RFC822_HDR_NO_COLON = 1,
- RFC822_HDR_BAD_NAME = 2,
+ RFC822_HDR_BAD_NAME_CHARS = 2,
};
enum rfc822_header_errors rfc822_header_errors(struct rfc822_msg *msg,
struct bytestring rfc822_header_unfolded_value(struct rfc822_msg *msg,
struct rfc822_header *hdr);
+/**
+ * rfc822_header_is - determine if a header is of a given name
+ * @msg: message
+ * @hdr: a header handle
+ * @name: header name
+ *
+ * This returns true if the header field @hdr has name @name (case
+ * insensitive), otherwise false.
+ */
+bool rfc822_header_is(struct rfc822_msg *msg, struct rfc822_header *hdr,
+ const char *name);
+
+struct rfc822_header *rfc822_first_header_of_name(struct rfc822_msg *msg,
+ const char *name);
+struct rfc822_header *rfc822_next_header_of_name(struct rfc822_msg *msg,
+ struct rfc822_header *hdr,
+ const char *name);
+
#endif /* CCAN_RFC822_H_ */