summaryrefslogtreecommitdiffstats
path: root/perl/Rspamd/Message.xs
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@rambler-co.ru>2009-02-26 18:09:28 +0300
committerVsevolod Stakhov <vsevolod@rambler-co.ru>2009-02-26 18:09:28 +0300
commitcfb5348f75790ef694edd5a9c131890eeceec204 (patch)
tree55c6bc5ff03a346ced6008dcae0a70ba6b36fb32 /perl/Rspamd/Message.xs
parent5d77f4552b6e39ab1072d2c91b219dac2498ac88 (diff)
downloadrspamd-cfb5348f75790ef694edd5a9c131890eeceec204.tar.gz
rspamd-cfb5348f75790ef694edd5a9c131890eeceec204.zip
* Completely rewrite and reorganize perl API
* Add documentation for Mail::Rspamd * Add install targets to cmake --HG-- rename : perl/rspamd.pm => perl/Rspamd.pm rename : perl/rspamd.xs => perl/Rspamd.xs
Diffstat (limited to 'perl/Rspamd/Message.xs')
-rw-r--r--perl/Rspamd/Message.xs264
1 files changed, 264 insertions, 0 deletions
diff --git a/perl/Rspamd/Message.xs b/perl/Rspamd/Message.xs
new file mode 100644
index 000000000..6e3a16d8b
--- /dev/null
+++ b/perl/Rspamd/Message.xs
@@ -0,0 +1,264 @@
+MODULE = Mail::Rspamd PACKAGE = Mail::Rspamd::Message PREFIX = rspamd_message_
+
+Mail::Rspamd::Message
+rspamd_message_new(Class, pretty_headers = FALSE)
+ char * Class
+ gboolean pretty_headers
+ CODE:
+ RETVAL = g_mime_message_new (pretty_headers);
+ plist = g_list_prepend(plist, RETVAL);
+ OUTPUT:
+ RETVAL
+
+void
+DESTROY(message)
+ Mail::Rspamd::Message message
+ CODE:
+ if (g_list_find(plist,message)) {
+ g_mime_object_unref (GMIME_OBJECT (message));
+ plist = g_list_remove(plist, message);
+ }
+
+void
+rspamd_message_add_recipient(message, type, name, address)
+ Mail::Rspamd::Message message
+ char * type
+ const char * name
+ const char * address
+ CODE:
+ g_mime_message_add_recipient (message, type, name, address);
+
+void
+rspamd_message_add_recipients_from_string(message, type, recipients)
+ Mail::Rspamd::Message message
+ char * type
+ const char * recipients
+ CODE:
+ g_mime_message_add_recipients_from_string (message, type, recipients);
+
+AV *
+rspamd_message_get_recipients(message, type)
+ Mail::Rspamd::Message message
+ const char * type
+ PREINIT:
+ const InternetAddressList * rcpt;
+ AV * retav;
+ CODE:
+ retav = newAV();
+ rcpt = g_mime_message_get_recipients (message, type);
+ while (rcpt) {
+ SV * address = newSViv(0);
+ sv_setref_pv(address, "Mail::Rspamd::InternetAddress", (Mail__Rspamd__InternetAddress)(rcpt->address));
+ av_push(retav, address);
+ rcpt = rcpt->next;
+ }
+ RETVAL = retav;
+ OUTPUT:
+ RETVAL
+
+
+void
+interface_m_set (message, value)
+ Mail::Rspamd::Message message
+ char * value
+ INTERFACE_MACRO:
+ XSINTERFACE_FUNC
+ XSINTERFACE_FUNC_RSPAMD_MESSAGE_SET
+ INTERFACE:
+ set_subject
+ set_message_id
+ set_reply_to
+ set_sender
+
+const char *
+interface_m_get (message)
+ Mail::Rspamd::Message message
+ INTERFACE_MACRO:
+ XSINTERFACE_FUNC
+ XSINTERFACE_FUNC_RSPAMD_MESSAGE_SET
+ INTERFACE:
+ get_subject
+ get_message_id
+ get_reply_to
+ get_sender
+
+ # date
+void
+rspamd_message_set_date (message, date, gmt_offset)
+ Mail::Rspamd::Message message
+ time_t date
+ int gmt_offset
+ CODE:
+ g_mime_message_set_date (message, date, gmt_offset);
+
+void
+rspamd_message_set_date_from_string (message, str)
+ Mail::Rspamd::Message message
+ const char * str
+ PREINIT:
+ time_t date;
+ int offset = 0;
+ CODE:
+ date = g_mime_utils_header_decode_date (str, &offset);
+ g_mime_message_set_date (message, date, offset);
+
+
+void
+rspamd_message_get_date (message)
+ Mail::Rspamd::Message message
+ PREINIT:
+ time_t date;
+ int gmt_offset;
+ I32 gimme = GIMME_V;
+ char * str;
+ PPCODE:
+ if (gimme == G_SCALAR) {
+ str = g_mime_message_get_date_string (message);
+ if (str) {
+ XPUSHs (sv_2mortal (newSVpv (str,0)));
+ g_free (str);
+ }
+ } else if (gimme == G_ARRAY) {
+ g_mime_message_get_date (message, &date, &gmt_offset);
+ XPUSHs (sv_2mortal (newSVnv (date)));
+ XPUSHs (sv_2mortal (newSViv (gmt_offset)));
+ }
+
+void
+rspamd_message_set_header (message, field, value)
+ Mail::Rspamd::Message message
+ const char * field
+ const char * value
+ CODE:
+ g_mime_message_set_header (message, field, value);
+
+void
+rspamd_message_remove_header (message, field)
+ Mail::Rspamd::Message message
+ const char * field
+ CODE:
+ g_mime_object_remove_header (GMIME_OBJECT (message), field);
+
+void
+rspamd_message_add_header (message, field, value)
+ Mail::Rspamd::Message message
+ const char * field
+ const char * value
+ CODE:
+ g_mime_message_set_header (message, field, value);
+
+const char *
+rspamd_message_get_header (message, field)
+ Mail::Rspamd::Message message
+ const char * field
+ CODE:
+ RETVAL = g_mime_message_get_header (message, field);
+ OUTPUT:
+ RETVAL
+
+void
+rspamd_message_set_mime_part (message, mime_part)
+ Mail::Rspamd::Message message
+ Mail::Rspamd::Object mime_part
+ CODE:
+ g_mime_message_set_mime_part (message, GMIME_OBJECT (mime_part));
+ plist = g_list_remove (plist, mime_part);
+
+SV *
+rspamd_message_get_body (message, want_plain = 1, is_html = 0)
+ CASE: items == 1
+ Mail::Rspamd::Message message
+ PREINIT:
+ gboolean want_plain = 1;
+ gboolean is_html;
+ char * textdata;
+ CODE:
+ textdata = g_mime_message_get_body (message, want_plain, &is_html);
+ if (textdata == NULL)
+ XSRETURN_UNDEF;
+ RETVAL = newSVpv (textdata, 0);
+ g_free (textdata);
+ OUTPUT:
+ RETVAL
+ CASE: items == 2
+ Mail::Rspamd::Message message
+ gboolean want_plain
+ PREINIT:
+ gboolean is_html;
+ char * textdata;
+ CODE:
+ textdata = g_mime_message_get_body (message, want_plain, &is_html);
+ if (textdata == NULL)
+ XSRETURN_UNDEF;
+ RETVAL = newSVpv (textdata, 0);
+ g_free (textdata);
+ OUTPUT:
+ RETVAL
+ CASE: items == 3
+ Mail::Rspamd::Message message
+ gboolean want_plain
+ gboolean &is_html
+ PREINIT:
+ char * textdata;
+ CODE:
+ textdata = g_mime_message_get_body (message, want_plain, &is_html);
+ if (textdata == NULL) {
+ RETVAL = &PL_sv_undef;
+ }
+ RETVAL = newSVpv (textdata, 0);
+ g_free (textdata);
+ OUTPUT:
+ is_html
+ RETVAL
+
+SV *
+rspamd_message_get_headers(message)
+ Mail::Rspamd::Message message
+ PREINIT:
+ char * textdata;
+ CODE:
+ textdata = g_mime_message_get_headers (message);
+ if (textdata == NULL) {
+ RETVAL = &PL_sv_undef;
+ }
+ RETVAL = newSVpv (textdata, 0);
+ g_free (textdata);
+ OUTPUT:
+ RETVAL
+
+void
+rspamd_message_foreach_part (message, callback, svdata)
+ Mail::Rspamd::Message message
+ SV * callback
+ SV * svdata
+ PREINIT:
+ struct _user_data_sv *data;
+
+ CODE:
+ data = g_new0 (struct _user_data_sv, 1);
+ data->svuser_data = newSVsv (svdata);
+ data->svfunc = newSVsv (callback);
+ g_mime_message_foreach_part (message, call_sub_foreach, data);
+ g_free (data);
+
+SV *
+get_mime_part(message)
+ Mail::Rspamd::Message message
+ PREINIT:
+ GMimeObject * mime_object;
+ CODE:
+ if (message->mime_part != NULL) {
+ RETVAL = newSViv(4);
+ mime_object = GMIME_OBJECT (message->mime_part);
+ if (GMIME_IS_PART(mime_object)) {
+ sv_setref_pv(RETVAL, "Mail::Rspamd::Part", (Mail__Rspamd__Part)mime_object);
+ } else {
+ plist = g_list_prepend(plist, RETVAL);
+ }
+ g_mime_object_ref( mime_object );
+ } else {
+ RETVAL = &PL_sv_undef;
+ }
+ OUTPUT:
+ RETVAL
+