MODULE = MIME::Fast PACKAGE = MIME::Fast::MessagePartial PREFIX=g_mime_message_partial_
# new(id, number, total)
MIME::Fast::MessagePartial
g_mime_message_part_new(Class, id, number, total)
char * Class
char * id
int number
int total
CODE:
RETVAL = g_mime_message_partial_new(id, number, total);
plist = g_list_prepend(plist, RETVAL);
OUTPUT:
RETVAL
# destroy(partial)
void
DESTROY(partial)
MIME::Fast::MessagePartial partial
CODE:
if (gmime_debug)
warn("g_mime_message_partial_DESTROY: 0x%x %s", partial,
g_list_find(plist,partial) ? "(true destroy)" : "(only attempt)");
if (g_list_find(plist,partial)) {
g_mime_object_unref (GMIME_OBJECT (partial));
plist = g_list_remove(plist, partial);
}
const char *
g_mime_message_partial_get_id(partial)
MIME::Fast::MessagePartial partial
int
g_mime_message_partial_get_number(partial)
MIME::Fast::MessagePartial partial
int
g_mime_message_partial_get_total(partial)
MIME::Fast::MessagePartial partial
MIME::Fast::Message
g_mime_message_partial_reconstruct_message(svmixed)
SV * svmixed
PREINIT:
SV * svvalue;
svtype svvaltype;
GMimeMessagePartial **msg_list, *partial;
GMimeMessage *message;
GPtrArray *parts;
CODE:
svvalue = svmixed;
if (SvROK(svmixed)) {
svvalue = SvRV(svmixed);
}
svvaltype = SvTYPE(svvalue);
parts = g_ptr_array_new ();
if (svvaltype == SVt_PVAV) {
AV * avvalue;
I32 i, avlen;
SV * svtmp;
IV tmp;
/* set header */
avvalue = (AV *)svvalue;
avlen = av_len(avvalue); // highest index in the array
if (avlen == -1) {
croak("Usage: MIME::Fast::MessagePartial::reconstruct_message([partial,[partial]+])");
XSRETURN_UNDEF;
}
for (i=0; i<=avlen; ++i) {
svtmp = (SV *)(*(av_fetch(avvalue, i, 0)));
tmp = SvIV((SV*)SvRV(svtmp));
if (tmp) {
if (GMIME_IS_MESSAGE (tmp) && GMIME_IS_MESSAGE_PARTIAL (GMIME_MESSAGE(tmp)->mime_part)) {
partial = INT2PTR(MIME__Fast__MessagePartial, GMIME_MESSAGE(tmp)->mime_part);
} else if (GMIME_IS_MESSAGE_PARTIAL(tmp)) {
partial = INT2PTR(MIME__Fast__MessagePartial, tmp);
} else {
warn("MIME::Fast::Message::reconstruct_message: Unknown type of object 0x%x", tmp);
continue;
}
g_ptr_array_add (parts, partial);
}
}
}
msg_list = (GMimeMessagePartial **) parts->pdata;
message = g_mime_message_partial_reconstruct_message(msg_list, parts->len);
RETVAL = message;
if (gmime_debug)
warn("MIME::Fast::Message::reconstruct_message: 0x%x\n", RETVAL);
plist = g_list_prepend(plist, message);
g_ptr_array_free (parts, FALSE);
OUTPUT:
RETVAL
AV *
g_mime_message_partial_split_message(message, max_size)
MIME::Fast::Message message
size_t max_size
PREINIT:
size_t nparts = 0;
int i = 0;
AV * retav;
GMimeMessage **msg_list = NULL;
SV * svmsg;
CODE:
retav = newAV();
msg_list = g_mime_message_partial_split_message(message, max_size, &nparts);
if (nparts < 1)
XSRETURN_UNDEF;
// for nparts == 1 msg_list[0] is equal to message, then double destruction is necessary
for (i = 0; i < nparts; ++i) {
svmsg = newSViv(0);
sv_setref_pv(svmsg, "MIME::Fast::Message", (void *)msg_list[i]);
av_push(retav, svmsg);
plist = g_list_prepend(plist, msg_list[i]);
}
g_free(msg_list);
RETVAL = retav;
OUTPUT:
RETVAL