1 /* GNU Mailutils -- a suite of utilities for electronic mail 2 Copyright (C) 1999-2021 Free Software Foundation, Inc. 3 4 This library is free software; you can redistribute it and/or 5 modify it under the terms of the GNU Lesser General Public 6 License as published by the Free Software Foundation; either 7 version 3 of the License, or (at your option) any later version. 8 9 This library is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 Lesser General Public License for more details. 13 14 You should have received a copy of the GNU Lesser General 15 Public License along with this library. If not, see 16 <http://www.gnu.org/licenses/>. */ 17 18 #ifndef _MAILUTILS_HEADER_H 19 #define _MAILUTILS_HEADER_H 20 21 #include <mailutils/types.h> 22 23 #ifdef __cplusplus 24 extern "C" { 25 #endif 26 27 #define MU_HEADER_UNIX_FROM "From " 28 #define MU_HEADER_RETURN_PATH "Return-Path" 29 #define MU_HEADER_RECEIVED "Received" 30 #define MU_HEADER_DATE "Date" 31 #define MU_HEADER_DCC "Dcc" 32 #define MU_HEADER_FROM "From" 33 #define MU_HEADER_SENDER "Sender" 34 #define MU_HEADER_RESENT_FROM "Resent-From" 35 #define MU_HEADER_SUBJECT "Subject" 36 #define MU_HEADER_RESENT_SENDER "Resent-Sender" 37 #define MU_HEADER_TO "To" 38 #define MU_HEADER_RESENT_TO "Resent-To" 39 #define MU_HEADER_CC "Cc" 40 #define MU_HEADER_RESENT_CC "Resent-Cc" 41 #define MU_HEADER_BCC "Bcc" 42 #define MU_HEADER_RESENT_BCC "Resent-Bcc" 43 #define MU_HEADER_REPLY_TO "Reply-To" 44 #define MU_HEADER_RESENT_REPLY_TO "Resent-Reply-To" 45 #define MU_HEADER_MESSAGE_ID "Message-ID" 46 #define MU_HEADER_RESENT_MESSAGE_ID "Resent-Message-ID" 47 #define MU_HEADER_IN_REPLY_TO "In-Reply-To" 48 #define MU_HEADER_REFERENCE "Reference" 49 #define MU_HEADER_REFERENCES "References" 50 #define MU_HEADER_ENCRYPTED "Encrypted" 51 #define MU_HEADER_PRECEDENCE "Precedence" 52 #define MU_HEADER_STATUS "Status" 53 #define MU_HEADER_CONTENT_LENGTH "Content-Length" 54 #define MU_HEADER_CONTENT_LANGUAGE "Content-Language" 55 #define MU_HEADER_CONTENT_TRANSFER_ENCODING "Content-Transfer-Encoding" 56 #define MU_HEADER_CONTENT_ID "Content-ID" 57 #define MU_HEADER_CONTENT_TYPE "Content-Type" 58 #define MU_HEADER_CONTENT_DESCRIPTION "Content-Description" 59 #define MU_HEADER_CONTENT_DISPOSITION "Content-Disposition" 60 #define MU_HEADER_CONTENT_MD5 "Content-MD5" 61 #define MU_HEADER_CONTENT_LOCATION "Content-Location" 62 #define MU_HEADER_MIME_VERSION "MIME-Version" 63 #define MU_HEADER_X_MAILER "X-Mailer" 64 #define MU_HEADER_X_UIDL "X-UIDL" 65 #define MU_HEADER_X_UID "X-UID" 66 #define MU_HEADER_X_IMAPBASE "X-IMAPbase" 67 #define MU_HEADER_ENV_SENDER "X-Envelope-Sender" 68 #define MU_HEADER_ENV_DATE "X-Envelope-Date" 69 #define MU_HEADER_FCC "Fcc" 70 #define MU_HEADER_DELIVERY_DATE "Delivery-Date" 71 #define MU_HEADER_ENVELOPE_TO "Envelope-To" 72 #define MU_HEADER_X_EXPIRE_TIMESTAMP "X-Expire-Timestamp" 73 #define MU_HEADER_USER_AGENT "User-Agent" 74 75 #define MU_HEADER_REPLACE 0x01 76 #define MU_HEADER_BEFORE 0x02 77 78 extern int mu_header_create (mu_header_t *, const char *, size_t); 79 extern void mu_header_destroy (mu_header_t *); 80 extern int mu_header_invalidate (mu_header_t); 81 extern int mu_header_clear (mu_header_t header); 82 83 extern int mu_header_is_modified (mu_header_t); 84 extern int mu_header_clear_modified (mu_header_t); 85 86 /* Set and get field values by field name. */ 87 extern int mu_header_set_value (mu_header_t, const char *, const char *, int); 88 extern int mu_header_remove (mu_header_t, const char *, int); 89 extern int mu_header_append (mu_header_t header, const char *fn, 90 const char *fv); 91 extern int mu_header_prepend (mu_header_t header, const char *fn, 92 const char *fv); 93 extern int mu_header_insert (mu_header_t, const char *, const char *, 94 const char *, int, int); 95 96 extern int mu_header_sget_value_n (mu_header_t, const char *, int, 97 const char **); 98 #define mu_header_sget_value(header, name, pval) \ 99 mu_header_sget_value_n (header, name, 1, pval) 100 101 extern int mu_header_get_value_n (mu_header_t, const char *, int, char *, 102 size_t, size_t *); 103 #define mu_header_get_value(header, name, buffer, buflen, pn) \ 104 mu_header_get_value_n (header, name, 1, buffer, buflen, pn) 105 106 extern int mu_header_aget_value_n (mu_header_t, const char *, int, char **); 107 #define mu_header_aget_value(header, name, pptr) \ 108 mu_header_aget_value_n (header, name, 1, pptr) 109 110 int mu_header_sget_firstof (mu_header_t hdr, char **names, 111 const char **pval, int *pidx); 112 113 /* Get field values as an mu_address_t. */ 114 extern int mu_header_get_address_n (mu_header_t, const char *, 115 int, mu_address_t *); 116 #define mu_header_get_address(header, name, addr) \ 117 mu_header_get_address_n (header, name, 1, addr) 118 119 /* Set and get field values by field index (1-based). */ 120 extern int mu_header_get_field_count (mu_header_t, size_t *count); 121 122 extern int mu_header_sget_field_name (mu_header_t, size_t index, 123 const char **); 124 125 extern int mu_header_get_field_name (mu_header_t, size_t index, 126 char *, size_t, size_t *); 127 extern int mu_header_aget_field_name (mu_header_t, size_t index, 128 char **); 129 130 extern int mu_header_sget_field_value (mu_header_t, size_t index, 131 const char **); 132 extern int mu_header_get_field_value (mu_header_t, size_t index, 133 char *, size_t, size_t *); 134 extern int mu_header_aget_field_value (mu_header_t, size_t index, char **); 135 136 extern int mu_header_get_value_unfold_n (mu_header_t header, 137 const char *name, int n, 138 char *buffer, size_t buflen, 139 size_t *pn); 140 #define mu_header_get_value_unfold(header, name, buffer, buflen, pn) \ 141 mu_header_get_value_unfold_n (header, name, 1, buffer, buflen, pn) 142 143 extern int mu_header_aget_value_unfold_n (mu_header_t header, 144 const char *name, int n, 145 char **pvalue); 146 #define mu_header_aget_value_unfold(header, name, pvalue) \ 147 mu_header_aget_value_unfold_n (header, name, 1, pvalue) 148 149 extern int mu_header_get_field_value_unfold (mu_header_t header, size_t num, 150 char *buf, size_t buflen, 151 size_t *nwritten); 152 extern int mu_header_aget_field_value_unfold (mu_header_t header, size_t num, 153 char **pvalue); 154 155 extern int mu_header_get_streamref (mu_header_t, mu_stream_t *); 156 157 /* FIXME: This function does not exist: 158 extern int mu_header_set_stream (mu_header_t, mu_stream_t, void *); 159 */ 160 extern int mu_header_size (mu_header_t, size_t *); 161 extern int mu_header_lines (mu_header_t, size_t *); 162 163 extern int mu_header_get_iterator (mu_header_t, mu_iterator_t *); 164 165 166 extern int mu_header_set_fill (mu_header_t, 167 int (*_fill) (void *data, char **, size_t *), 168 void *data); 169 170 extern int mu_header_get_itemptr (mu_header_t header, size_t num, 171 const void **sptr); 172 173 #ifdef __cplusplus 174 } 175 #endif 176 177 #endif /* _MAILUTILS_HEADER_H */ 178