changeset 21636:c7b8d82390d4

lib-mail: message-part-data: Implemented message_part_data_get_filename(). Gets the message part's filename if it has any.
author Stephan Bosch <stephan.bosch@dovecot.fi>
date Mon, 24 Oct 2016 01:01:19 +0200
parents 30aacb0df12f
children 140000f0ba69
files src/lib-mail/message-part-data.c src/lib-mail/message-part-data.h
diffstat 2 files changed, 29 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-mail/message-part-data.c	Mon Oct 24 00:19:05 2016 +0200
+++ b/src/lib-mail/message-part-data.c	Mon Oct 24 01:01:19 2016 +0200
@@ -63,6 +63,30 @@
 	return TRUE;
 }
 
+bool message_part_data_get_filename(const struct message_part *part,
+	const char **filename_r)
+{
+	const struct message_part_data *data = part->data;
+	const struct message_part_param *params;
+	unsigned int params_count, i;
+
+	params = data->content_disposition_params;
+	params_count = data->content_disposition_params_count;
+
+	if (data->content_disposition != NULL &&
+		strcasecmp(data->content_disposition, "attachment") != 0) {
+		return FALSE;
+	}
+	for (i = 0; i < params_count; i++) {
+		if (strcasecmp(params[i].name, "filename") == 0 &&
+			params[i].value != NULL) {
+			*filename_r = params[i].value;
+			return TRUE;
+		}
+	}
+	return FALSE;
+}
+
 /*
  * Header parsing
  */
--- a/src/lib-mail/message-part-data.h	Mon Oct 24 00:19:05 2016 +0200
+++ b/src/lib-mail/message-part-data.h	Mon Oct 24 01:01:19 2016 +0200
@@ -49,6 +49,11 @@
 bool message_part_data_is_plain_7bit(const struct message_part *part)
 	ATTR_PURE;
 
+/* Returns TRUE if this message part has a filename. The filename is
+   returned in filename_r. */
+bool message_part_data_get_filename(const struct message_part *part,
+	const char **filename_r);
+
 /*
  * Header parsing
  */