MODULE = Mail::Rspamd PACKAGE = Mail::Rspamd::InternetAddress PREFIX = rspamd_internet_address_

Mail::Rspamd::InternetAddress
rspamd_internet_address_new (Class, name, address)
	CASE: items <= 1
		char *		Class
	CODE:
#ifdef GMIME24
		XSRETURN_UNDEF;
#else
		RETVAL = internet_address_new ();
		plist = g_list_prepend (plist, RETVAL);
#endif
	OUTPUT:
		RETVAL
	CASE: items == 2
		char *		Class
		char *		name
	CODE:
#ifdef GMIME24
		RETVAL = internet_address_group_new (name);
#else
		RETVAL = internet_address_new_group (name);
#endif
		plist = g_list_prepend (plist, RETVAL);
	OUTPUT:
		RETVAL
	CASE: items == 3
		char *		Class
		char *		name
		char *		address
	CODE:
#ifdef GMIME24
		RETVAL = internet_address_mailbox_new (name, address);
#else
		RETVAL = internet_address_new_name (name, address);
#endif
		plist = g_list_prepend (plist, RETVAL);
	OUTPUT:
		RETVAL

void
DESTROY(ia)
		Mail::Rspamd::InternetAddress	ia
	CODE:
		if (g_list_find (plist,ia)) {
			internet_address_unref (ia);
			plist = g_list_remove (plist, ia);
		}

AV *
rspamd_internet_address_parse_string (str)
		const char *		str
	PREINIT:
		InternetAddressList *		addrlist;
		AV * 		retav;
		int i;
	CODE:
#ifdef GMIME24
		addrlist = internet_address_list_parse_string (str);
#else
		addrlist = internet_address_parse_string (str);
#endif
		retav = newAV ();
#ifdef GMIME24
		i = internet_address_list_length (addrlist);
		while (i > 0) {
			SV * address = newSViv(0);
			sv_setref_pv (address, "Mail::Rspamd::InternetAddress", (Mail__Rspamd__InternetAddress)internet_address_list_get_address (addrlist, i));
			av_push (retav, address);
			-- i;
		}
#else
		while (addrlist) {
		  SV * address = newSViv (0);
		  sv_setref_pv (address, "Mail::Rspamd::InternetAddress", (Mail__Rspamd__InternetAddress)(addrlist->address));
		  av_push (retav, address);
		  addrlist = addrlist->next;
		}
#endif
		RETVAL = retav;
	OUTPUT:
		RETVAL

#ifdef GMIME24

void
interface_ia_set (ia, value)
		Mail::Rspamd::InternetAddress	ia
	char *				value
	INTERFACE_MACRO:
	XSINTERFACE_FUNC
	XSINTERFACE_FUNC_RSPAMD_IA_SET
	INTERFACE:
	set_name

#else

void
interface_ia_set (ia, value)
		Mail::Rspamd::InternetAddress	ia
	char *				value
	INTERFACE_MACRO:
	XSINTERFACE_FUNC
	XSINTERFACE_FUNC_RSPAMD_IA_SET
	INTERFACE:
	set_name
	set_addr

#endif

SV *
rspamd_internet_address_to_string (ia, encode = TRUE)
		Mail::Rspamd::InternetAddress	ia
		gboolean		encode
	PREINIT:
		char *		textdata;
	CODE:
		textdata = internet_address_to_string (ia, encode);
		if (textdata == NULL) {
			XSRETURN_UNDEF;
		}
		RETVAL = newSVpv (textdata, 0);
	OUTPUT:
		RETVAL

void
rspamd_internet_address_set_group (ia, ...)
		Mail::Rspamd::InternetAddress	ia
	PREINIT:
		Mail__Rspamd__InternetAddress	addr;
		InternetAddressList *		addrlist = NULL;
		int			i;
	CODE:
		if (items < 2) {
	  		XSRETURN_UNDEF;
		}
		for (i = items - 1; i > 0; --i) {
			/* retrieve each address from the perl array */
			if (sv_derived_from (ST (items - i), "Mail::Rspamd::InternetAddress")) {
				IV tmp = SvIV ((SV*)SvRV (ST (items - i)));
				addr = INT2PTR (Mail__Rspamd__InternetAddress, tmp);
			}
			if (addr) {
#ifdef GMIME24
				internet_address_list_add (addrlist, addr);
#else
				internet_address_list_append (addrlist, addr);
#endif
			}
		}
		if (addrlist) {
			internet_address_set_group (ia, addrlist);
		}

void
rspamd_internet_address_add_member (ia, member)
		Mail::Rspamd::InternetAddress	ia
		Mail::Rspamd::InternetAddress	member
	CODE:
		internet_address_add_memeber (ia, member);

Mail::Rspamd::InternetAddressType
rspamd_internet_address_type (ia)
		Mail::Rspamd::InternetAddress	ia
	CODE:
#ifndef GMIME24
		RETVAL = ia->type;
#else
		XSRETURN_UNDEF;
#endif
	OUTPUT:
		RETVAL