summaryrefslogtreecommitdiffstats
path: root/perl/Rspamd/Part.xs
diff options
context:
space:
mode:
Diffstat (limited to 'perl/Rspamd/Part.xs')
-rw-r--r--perl/Rspamd/Part.xs160
1 files changed, 160 insertions, 0 deletions
diff --git a/perl/Rspamd/Part.xs b/perl/Rspamd/Part.xs
new file mode 100644
index 000000000..b95a5fc99
--- /dev/null
+++ b/perl/Rspamd/Part.xs
@@ -0,0 +1,160 @@
+MODULE = Mail::Rspamd PACKAGE = Mail::Rspamd::Part PREFIX = rspamd_part
+
+Mail::Rspamd::Part
+g_mime_part_new (Class = "Mail::Rspamd::Part", type = "text", subtype = "plain")
+ char * Class;
+ const char * type;
+ const char * subtype;
+ CODE:
+ RETVAL = g_mime_part_new_with_type (type, subtype);
+ plist = g_list_prepend (plist, RETVAL);
+ OUTPUT:
+ RETVAL
+
+void
+DESTROY (mime_part)
+ Mail::Rspamd::Part mime_part
+ CODE:
+ if (g_list_find (plist,mime_part)) {
+ g_object_unref (G_OBJECT (mime_part));
+ plist = g_list_remove (plist, mime_part);
+ }
+
+void
+interface_p_set(mime_part, value)
+ Mail::Rspamd::Part mime_part
+ char * value
+ INTERFACE_MACRO:
+ XSINTERFACE_FUNC
+ XSINTERFACE_FUNC_RSPAMD_PART_SET
+ INTERFACE:
+ set_content_description
+ set_content_md5
+ set_content_location
+ set_content_disposition
+ set_filename
+
+
+const char *
+interface_p_get(mime_part)
+ Mail::Rspamd::Part mime_part
+ INTERFACE_MACRO:
+ XSINTERFACE_FUNC
+ XSINTERFACE_FUNC_RSPAMD_PART_SET
+ INTERFACE:
+ get_content_description
+ get_content_md5
+ get_content_location
+ get_content_disposition
+ get_filename
+
+void
+rspamd_part_set_content_header (mime_part, field, value)
+ Mail::Rspamd::Part mime_part
+ const char * field
+ const char * value
+ CODE:
+ g_mime_part_set_content_header (mime_part, field, value);
+
+const char *
+rspamd_part_get_content_header (mime_part, field)
+ Mail::Rspamd::Part mime_part
+ const char * field
+ CODE:
+ RETVAL = g_mime_part_get_content_header (mime_part, field);
+ OUTPUT:
+ RETVAL
+
+void
+rspamd_part_set_content_type (mime_part, content_type)
+ Mail::Rspamd::Part mime_part
+ Mail::Rspamd::ContentType content_type
+ CODE:
+ g_mime_part_set_content_type (mime_part, content_type);
+ plist = g_list_remove (plist, content_type);
+
+
+void
+rspamd_part_set_encoding (mime_part, encoding)
+ Mail::Rspamd::Part mime_part
+ Mail::Rspamd::PartEncodingType encoding
+ CODE:
+ g_mime_part_set_encoding (mime_part, encoding);
+
+Mail::Rspamd::PartEncodingType
+rspamd_part_get_encoding (mime_part)
+ Mail::Rspamd::Part mime_part
+ CODE:
+ RETVAL = g_mime_part_get_encoding (mime_part);
+ OUTPUT:
+ RETVAL
+
+const char *
+rspamd_part_encoding_to_string (encoding)
+ Mail::Rspamd::PartEncodingType encoding
+ CODE:
+ RETVAL = g_mime_part_encoding_to_string (encoding);
+ OUTPUT:
+ RETVAL
+
+Mail::Rspamd::PartEncodingType
+rspamd_part_encoding_from_string (encoding)
+ const char * encoding
+ CODE:
+ RETVAL = g_mime_part_encoding_from_string(encoding);
+ OUTPUT:
+ RETVAL
+
+void
+rspamd_part_add_content_disposition_parameter (mime_part, name, value)
+ Mail::Rspamd::Part mime_part
+ const char * name
+ const char * value
+ CODE:
+ g_mime_part_add_content_disposition_parameter (mime_part, name, value);
+
+const char *
+rspamd_part_get_content_disposition_parameter (mime_part, name)
+ Mail::Rspamd::Part mime_part
+ const char * name
+ CODE:
+ RETVAL = g_mime_part_get_content_disposition_parameter (mime_part, name);
+ OUTPUT:
+ RETVAL
+
+
+void
+rspamd_part_set_pre_encoded_content(mime_part, content, encoding)
+ Mail::Rspamd::Part mime_part
+ SV * content
+ Mail::Rspamd::PartEncodingType encoding
+ PREINIT:
+ char * data;
+ STRLEN len;
+ CODE:
+ data = SvPV (content, len);
+ g_mime_part_set_pre_encoded_content (mime_part, data, len, encoding);
+
+
+SV *
+rspamd_part_get_content(mime_part)
+ Mail::Rspamd::Part mime_part
+ PREINIT:
+ guint len;
+ const char * content_char;
+ SV * content;
+ CODE:
+ ST(0) = &PL_sv_undef;
+ if (!(mime_part->content) || !(mime_part->content->stream) ||
+ (content_char = g_mime_part_get_content(mime_part, &len)) == NULL) {
+ return;
+ }
+ content = sv_newmortal ();
+ SvUPGRADE (content, SVt_PV);
+ SvREADONLY_on (content);
+ SvPVX(content) = (char *) (content_char);
+ SvCUR_set (content, len);
+ SvLEN_set (content, 0);
+ SvPOK_only (content);
+ ST(0) = content;
+