aboutsummaryrefslogtreecommitdiffstats
path: root/perl.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@rambler-co.ru>2008-08-20 17:09:13 +0400
committerVsevolod Stakhov <vsevolod@rambler-co.ru>2008-08-20 17:09:13 +0400
commite90352d20a0d5f615c906b7719f95599cb2aaeac (patch)
tree61c2a5a7efc21fb03b4ba9a9779af8e76e641702 /perl.c
parent86fd197a95f72d09e5cccbc059829ff5f6b03b87 (diff)
downloadrspamd-e90352d20a0d5f615c906b7719f95599cb2aaeac.tar.gz
rspamd-e90352d20a0d5f615c906b7719f95599cb2aaeac.zip
* Rewrite perl module for new XS, now perl filters got only object of rspamd module that provides access to every part of message
* Add memcached access api for perl * Reorganize Makefile, add .PHONY targets * Fix memcached module as now we cannot write or read several keys in async mode
Diffstat (limited to 'perl.c')
-rw-r--r--perl.c61
1 files changed, 38 insertions, 23 deletions
diff --git a/perl.c b/perl.c
index e954292a3..e2ae086eb 100644
--- a/perl.c
+++ b/perl.c
@@ -17,7 +17,7 @@
extern PerlInterpreter *my_perl;
int
-perl_call_header_filter (const char *function, const char *header_name, const char *header_value)
+perl_call_header_filter (const char *function, struct worker_task *task)
{
int result;
dSP;
@@ -26,8 +26,7 @@ perl_call_header_filter (const char *function, const char *header_name, const ch
SAVETMPS;
PUSHMARK (SP);
- XPUSHs (sv_2mortal (newSVpv (header_name, 0)));
- XPUSHs (sv_2mortal (newSVpv (header_value, 0)));
+ XPUSHs (sv_2mortal (newSViv (PTR2IV (task))));
PUTBACK;
call_pv (function, G_SCALAR);
@@ -35,7 +34,7 @@ perl_call_header_filter (const char *function, const char *header_name, const ch
SPAGAIN;
result = POPi;
- msg_debug ("header_filter: call of %s with header %s returned mark %d\n", function, header_name, result);
+ msg_debug ("header_filter: call of %s with returned mark %d\n", function, result);
PUTBACK;
FREETMPS;
@@ -45,7 +44,7 @@ perl_call_header_filter (const char *function, const char *header_name, const ch
}
int
-perl_call_mime_filter (const char *function, GByteArray *content)
+perl_call_mime_filter (const char *function, struct worker_task *task)
{
int result;
dSP;
@@ -54,7 +53,7 @@ perl_call_mime_filter (const char *function, GByteArray *content)
SAVETMPS;
PUSHMARK (SP);
- XPUSHs (sv_2mortal (newSVpv (content->data, content->len)));
+ XPUSHs (sv_2mortal (newSViv (PTR2IV (task))));
PUTBACK;
call_pv (function, G_SCALAR);
@@ -72,7 +71,7 @@ perl_call_mime_filter (const char *function, GByteArray *content)
}
int
-perl_call_message_filter (const char *function, GByteArray *content)
+perl_call_message_filter (const char *function, struct worker_task *task)
{
int result;
dSP;
@@ -81,7 +80,7 @@ perl_call_message_filter (const char *function, GByteArray *content)
SAVETMPS;
PUSHMARK (SP);
- XPUSHs (sv_2mortal (newSVpv (content->data, content->len)));
+ XPUSHs (sv_2mortal (newSViv (PTR2IV (task))));
PUTBACK;
call_pv (function, G_SCALAR);
@@ -99,7 +98,7 @@ perl_call_message_filter (const char *function, GByteArray *content)
}
int
-perl_call_url_filter (const char *function, struct uri *uri)
+perl_call_url_filter (const char *function, struct worker_task *task)
{
int result;
dSP;
@@ -107,15 +106,8 @@ perl_call_url_filter (const char *function, struct uri *uri)
ENTER;
SAVETMPS;
- /* URL:
- * url,
- * host,
- * data
- */
PUSHMARK (SP);
- XPUSHs (sv_2mortal (newSVpv (uri->string, 0)));
- XPUSHs (sv_2mortal (newSVpv (uri->host, uri->hostlen)));
- XPUSHs (sv_2mortal (newSVpv (uri->data, uri->datalen)));
+ XPUSHs (sv_2mortal (newSViv (PTR2IV (task))));
PUTBACK;
call_pv (function, G_SCALAR);
@@ -123,7 +115,7 @@ perl_call_url_filter (const char *function, struct uri *uri)
SPAGAIN;
result = POPi;
- msg_debug ("url_filter: call of %s for url '%s' returned mark %d\n", function, uri->string, result);
+ msg_debug ("url_filter: call of %s for url returned mark %d\n", function, result);
PUTBACK;
FREETMPS;
@@ -133,18 +125,16 @@ perl_call_url_filter (const char *function, struct uri *uri)
}
int
-perl_call_chain_filter (const char *function, GArray *results)
+perl_call_chain_filter (const char *function, struct worker_task *task)
{
- int result, i;
+ int result;
dSP;
ENTER;
SAVETMPS;
PUSHMARK (SP);
- for (i = 0; i < results->len; i ++) {
- XPUSHs (sv_2mortal (newSViv (g_array_index (results, int, i))));
- }
+ XPUSHs (sv_2mortal (newSViv (PTR2IV (task))));
PUTBACK;
call_pv (function, G_SCALAR);
@@ -161,3 +151,28 @@ perl_call_chain_filter (const char *function, GArray *results)
return result;
}
+
+void perl_call_memcached_callback (memcached_ctx_t *ctx, memc_error_t error, void *data)
+{
+ struct {
+ SV *callback;
+ struct worker_task *task;
+ } *callback_data = data;
+
+ dSP;
+
+ ENTER;
+ SAVETMPS;
+ PUSHMARK (SP);
+ XPUSHs (sv_2mortal (newSViv (PTR2IV (callback_data->task))));
+ XPUSHs (sv_2mortal (newSViv (error)));
+ XPUSHs (sv_2mortal (newSVpv (ctx->param->buf, ctx->param->bufsize)));
+ PUTBACK;
+
+ call_sv (callback_data->callback, G_SCALAR);
+
+ SPAGAIN;
+ FREETMPS;
+ LEAVE;
+
+}