The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#include "soup-perl.h"


static GPerlCallback*
soupperl_message_callback_create (SV *func, SV *data) {
	GType param_types [] = {
		SOUP_TYPE_SESSION,
		SOUP_TYPE_MESSAGE,
	};

	return gperl_callback_new(
		func, data,
		G_N_ELEMENTS(param_types), param_types,
		G_TYPE_NONE
	);
}


static void
soupperl_message_callback (SoupSession *session, SoupMessage *msg, gpointer data) {
	GPerlCallback *callback = (GPerlCallback *) data;
	
	if (callback == NULL) {
		croak("HTTP::Soup::Session message callback is missing the data parameter");
	}
	
	gperl_callback_invoke(callback, NULL, session, msg, callback->data);
}

/* This function is shared with SessionAsync.xs */
void
soupperl_queue_message (SoupSession *session, SoupMessage *msg, SV  *sv_callback, SV *sv_user_data) {
	GPerlCallback *callback = NULL;

	g_object_ref(G_OBJECT(msg));
	callback = soupperl_message_callback_create(sv_callback, sv_user_data);
	soup_session_queue_message(session, msg, soupperl_message_callback, callback);
}


MODULE = HTTP::Soup::Session  PACKAGE = HTTP::Soup::Session  PREFIX = soup_session_


void
soup_session_queue_message (SoupSession *session, SoupMessage *msg, SV  *sv_callback, SV *sv_user_data = NULL);
	CODE:
		soupperl_queue_message(session, msg, sv_callback, sv_user_data);