MODULE = Mail::Rspamd PACKAGE = Mail::Rspamd::Object PREFIX = rspamd_object_

void
rspamd_object_set_content_type (mime_object, content_type)
		Mail::Rspamd::Object	mime_object
		Mail::Rspamd::ContentType	content_type
	CODE:
		g_mime_object_set_content_type (mime_object, content_type);
		plist = g_list_remove (plist, content_type);

Mail::Rspamd::ContentType
rspamd_object_get_content_type (mime_object)
		Mail::Rspamd::Object	mime_object
	PREINIT:
		char *			textdata;
		GMimeContentType	*ct;
	CODE:
		ct = (GMimeContentType *)g_mime_object_get_content_type (mime_object);
		textdata = g_mime_content_type_to_string (ct);
		RETVAL = g_mime_content_type_new_from_string (textdata);
		plist = g_list_prepend (plist, RETVAL);
		g_free (textdata);
	OUTPUT:
		RETVAL

void
rspamd_object_set_content_type_parameter (mime_object, name, value)
		Mail::Rspamd::Object	mime_object
		const char *		name
		const char *		value
	CODE:
		gmime_object_set_content_type_parameter (mime_object, name, value);

const char *
rspamd_object_get_content_type_parameter (mime_object, name)
		Mail::Rspamd::Object	mime_object
		const char *		name
	CODE:
		RETVAL = g_mime_object_get_content_type_parameter (mime_object, name);
	OUTPUT:
		RETVAL

void
rspamd_object_set_content_id (mime_object, content_id)
		Mail::Rspamd::Object	mime_object
		const char *		content_id
	CODE:
		g_mime_object_set_content_id (mime_object, content_id);

const char *
rspamd_object_get_content_id(mime_object)
		Mail::Rspamd::Object	mime_object
	CODE:
		RETVAL = g_mime_object_get_content_id (mime_object);
	OUTPUT:
		RETVAL


void
rspamd_object_add_header (mime_object, field, value)
		Mail::Rspamd::Object	mime_object
		const char *	field
		const char *	value
	CODE:
		g_mime_object_add_header (mime_object, field, value);

void
rspamd_object_set_header (mime_object, field, value)
		Mail::Rspamd::Object	mime_object
		const char *	field
		const char *	value
	CODE:
		g_mime_object_set_header (mime_object, field, value);

const char *
rspamd_object_get_header (mime_object, field)
		Mail::Rspamd::Object	mime_object
		const char *	field
	CODE:
		RETVAL = g_mime_object_get_header (mime_object, field);
	OUTPUT:
		RETVAL

void
rspamd_object_remove_header (mime_object, field)
		Mail::Rspamd::Object	mime_object
		const char *	field
	CODE:
		g_mime_object_remove_header (mime_object, field);

SV *
rspamd_object_get_headers(mime_object)
		Mail::Rspamd::Object	mime_object
	PREINIT:
		char *		textdata;
	CODE:
		textdata = g_mime_object_get_headers(mime_object);
		if (textdata == NULL) {
			XSRETURN_UNDEF;
		}
		RETVAL = newSVpv (textdata, 0);
		g_free (textdata);
	OUTPUT:
		RETVAL

SV *
rspamd_object_to_string(mime_object)
		Mail::Rspamd::Object	mime_object
	PREINIT:
		char *	textdata;
	CODE:
		textdata = g_mime_object_to_string (mime_object);
		if (textdata) {
	  		RETVAL = newSVpv (textdata, 0);
	  		g_free (textdata);
		} else {
	  		XSRETURN_UNDEF;
		}
	OUTPUT:
		RETVAL

guint
rspamd_object_get_content_length(mime_object)
		Mail::Rspamd::Object	mime_object
	PREINIT:
		guint			lsize = 0;
		GMimePart *		mime_part;
	CODE:
		if (mime_object) {
			if (GMIME_IS_PART(mime_object)) { // also MESSAGE_PARTIAL
				mime_part = GMIME_PART(mime_object);
				lsize = (mime_part->content && mime_part->content->stream) ?
							g_mime_stream_length (mime_part->content->stream) : 0; 
				if (lsize) {
#ifdef GMIME24
					GMimeContentEncoding enc;

					enc = _mime_part_get_encoding (mime_part);
					switch (enc) {
				  		case GMIME_CONTENT_ENCODING_BASE64:
							lsize = BASE64_ENCODE_LEN (lsize);
							break;
				  		case GMIME_CONTENT_ENCODING_QUOTEDPRINTABLE:
							lsize = QP_ENCODE_LEN (lsize);
							break;
					}
#else
					GMimePartEncodingType	enc;

					enc = g_mime_part_get_encoding (mime_part);
					switch (enc) {
				  		case GMIME_PART_ENCODING_BASE64:
							lsize = BASE64_ENCODE_LEN (lsize);
							break;
				  		case GMIME_PART_ENCODING_QUOTEDPRINTABLE:
							lsize = QP_ENCODE_LEN (lsize);
							break;
					}
#endif				
				}
			}
		}
		RETVAL = lsize;
	OUTPUT:
		RETVAL