static void
multipart_signed_set_mime_type_field (CamelDataWrapper *data_wrapper,
                                      CamelContentType *mime_type)
{
	CamelDataWrapperClass *data_wrapper_class;
	CamelMultipartSigned *mps = (CamelMultipartSigned *) data_wrapper;

	/* we snoop the mime type to get boundary and hash info */

	/* Chain up to parent's set_mime_type_field() method. */
	data_wrapper_class = CAMEL_DATA_WRAPPER_CLASS (camel_multipart_signed_parent_class);
	data_wrapper_class->set_mime_type_field (data_wrapper, mime_type);

	if (mime_type) {
		const gchar *micalg, *protocol;

		protocol = camel_content_type_param (mime_type, "protocol");
		g_free (mps->protocol);
		mps->protocol = g_strdup (protocol);

		micalg = camel_content_type_param (mime_type, "micalg");
		g_free (mps->micalg);
		mps->micalg = g_strdup (micalg);
	}
}
Example #2
0
static gssize
mime_message_write_to_stream_sync (CamelDataWrapper *data_wrapper,
                                   CamelStream *stream,
                                   GCancellable *cancellable,
                                   GError **error)
{
	CamelDataWrapperClass *data_wrapper_class;
	CamelMimeMessage *mm = CAMEL_MIME_MESSAGE (data_wrapper);

	/* force mandatory headers ... */
	if (mm->from == NULL) {
		/* FIXME: should we just abort?  Should we make one up? */
		g_warning ("No from set for message");
		camel_medium_set_header ((CamelMedium *) mm, "From", "");
	}
	if (!camel_medium_get_header ((CamelMedium *) mm, "Date"))
		camel_mime_message_set_date (mm, CAMEL_MESSAGE_DATE_CURRENT, 0);

	if (mm->subject == NULL)
		camel_mime_message_set_subject (mm, "No Subject");

	if (mm->message_id == NULL)
		camel_mime_message_set_message_id (mm, NULL);

	/* FIXME: "To" header needs to be set explicitly as well ... */

	if (!camel_medium_get_header ((CamelMedium *) mm, "Mime-Version"))
		camel_medium_set_header ((CamelMedium *) mm, "Mime-Version", "1.0");

	/* Chain up to parent's write_to_stream_sync() method. */
	data_wrapper_class = CAMEL_DATA_WRAPPER_CLASS (
		camel_mime_message_parent_class);
	return data_wrapper_class->write_to_stream_sync (
		data_wrapper, stream, cancellable, error);
}
static void
camel_multipart_encrypted_class_init (CamelMultipartEncryptedClass *klass)
{
	CamelDataWrapperClass *camel_data_wrapper_class = CAMEL_DATA_WRAPPER_CLASS (klass);

	parent_class = (CamelMultipartClass *) camel_multipart_get_type ();

	/* virtual method overload */
	camel_data_wrapper_class->set_mime_type_field = set_mime_type_field;
}
static gssize
mime_message_write_to_output_stream_sync (CamelDataWrapper *data_wrapper,
                                          GOutputStream *output_stream,
                                          GCancellable *cancellable,
                                          GError **error)
{
	CamelMimeMessage *message;

	message = CAMEL_MIME_MESSAGE (data_wrapper);
	mime_message_ensure_required_headers (message);

	/* Chain up to parent's write_to_output_stream_sync() method. */
	return CAMEL_DATA_WRAPPER_CLASS (camel_mime_message_parent_class)->
		write_to_output_stream_sync (
		data_wrapper, output_stream, cancellable, error);
}
static gboolean
multipart_is_offline (CamelDataWrapper *data_wrapper)
{
	CamelMultipart *multipart = CAMEL_MULTIPART (data_wrapper);
	GList *node;
	CamelDataWrapper *part;

	if (CAMEL_DATA_WRAPPER_CLASS (camel_multipart_parent_class)->is_offline (data_wrapper))
		return TRUE;
	for (node = multipart->parts; node; node = node->next) {
		part = node->data;
		if (camel_data_wrapper_is_offline (part))
			return TRUE;
	}

	return FALSE;
}
static gboolean
multipart_signed_construct_from_stream_sync (CamelDataWrapper *data_wrapper,
                                             CamelStream *stream,
                                             GCancellable *cancellable,
                                             GError **error)
{
	CamelDataWrapperClass *parent_class;
	CamelMultipartSigned *mps;
	gboolean success;

	mps = CAMEL_MULTIPART_SIGNED (data_wrapper);

	/* Chain up to parent's construct_from_stream_sync() method. */
	parent_class = CAMEL_DATA_WRAPPER_CLASS (
		camel_multipart_signed_parent_class);
	success = parent_class->construct_from_stream_sync (
		data_wrapper, stream, cancellable, error);

	if (success) {
		mps->start1 = -1;
		if (mps->content != NULL) {
			g_object_unref (mps->content);
			mps->content = NULL;
		}
		if (mps->contentraw != NULL) {
			g_object_unref (mps->contentraw);
			mps->contentraw = NULL;
		}
		if (mps->signature != NULL) {
			g_object_unref (mps->signature);
			mps->signature = NULL;
		}
	}

	return success;
}