diff options
author | Vsevolod Stakhov <vsevolod@rambler-co.ru> | 2011-02-15 15:50:25 +0300 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@rambler-co.ru> | 2011-02-15 15:50:25 +0300 |
commit | b3928c8e33fe8fe7b5d496c6beeb8f66dcdfa104 (patch) | |
tree | 32c3f399c6f2627db6106257156d08024881854d /src | |
parent | 97182882b0d460ddd33450aaf82485b998b72115 (diff) | |
download | rspamd-b3928c8e33fe8fe7b5d496c6beeb8f66dcdfa104.tar.gz rspamd-b3928c8e33fe8fe7b5d496c6beeb8f66dcdfa104.zip |
Remove some legacy from source tree.
Diffstat (limited to 'src')
-rw-r--r-- | src/perl.c | 261 | ||||
-rw-r--r-- | src/perl.h | 22 |
2 files changed, 0 insertions, 283 deletions
diff --git a/src/perl.c b/src/perl.c deleted file mode 100644 index 342a0e75f..000000000 --- a/src/perl.c +++ /dev/null @@ -1,261 +0,0 @@ -/* - * Copyright (c) 2009, Rambler media - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY Rambler media ''AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL Rambler BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" -#include "url.h" -#include "main.h" -#include "perl.h" -#include "cfg_file.h" - -#include <EXTERN.h> /* from the Perl distribution */ -#include <perl.h> /* from the Perl distribution */ - -#ifndef PERL_IMPLICIT_CONTEXT -# undef dTHXa -# define dTHXa(a) -#endif - -/* Perl module init function */ -#define MODULE_INIT_FUNC "module_init" - -PerlInterpreter *perl_interpreter; - -static HV *rspamd_task_stash; -static HV *rspamd_cfg_stash; - -extern void boot_DynaLoader (pTHX_ CV * cv); -extern void boot_Socket (pTHX_ CV * cv); - -void -xs_init (pTHX) -{ - dXSUB_SYS; - /* DynaLoader is a special case */ - newXS ("DynaLoader::boot_DynaLoader", boot_DynaLoader, __FILE__); - - rspamd_task_stash = gv_stashpv ("rspamd_task", TRUE); - rspamd_cfg_stash = gv_stashpv ("rspamd_config", TRUE); -} - -void -init_perl_filters (struct config_file *cfg) -{ - struct perl_module *module; - gchar *init_func; - size_t funclen; - SV *sv; - - dTHXa (perl_interpreter); - PERL_SET_CONTEXT (perl_interpreter); - - dSP; - LIST_FOREACH (module, &cfg->perl_modules, next) { - if (module->path) { - require_pv (module->path); - ENTER; - SAVETMPS; - - PUSHMARK (SP); - sv = sv_2mortal (sv_bless (newRV_noinc (newSViv (PTR2IV (cfg))), rspamd_cfg_stash)); - XPUSHs (sv); - PUTBACK; - /* Call module init function */ - funclen = strlen (module->path) + sizeof ("::") + sizeof (MODULE_INIT_FUNC) - 1; - init_func = g_malloc (funclen); - snprintf (init_func, funclen, "%s::%s", module->path, MODULE_INIT_FUNC); - call_pv (init_func, G_DISCARD); - - FREETMPS; - LEAVE; - } - } -} - - -gint -perl_call_header_filter (const gchar *function, struct worker_task *task) -{ - gint result; - SV *sv; - - dTHXa (perl_interpreter); - PERL_SET_CONTEXT (perl_interpreter); - - dSP; - ENTER; - SAVETMPS; - - PUSHMARK (SP); - sv = sv_2mortal (sv_bless (newRV_noinc (newSViv (PTR2IV (task))), rspamd_task_stash)); - XPUSHs (sv); - PUTBACK; - - call_pv (function, G_SCALAR); - - SPAGAIN; - - result = POPi; - debug_task ("call of %s with returned mark %d\n", function, result); - - PUTBACK; - FREETMPS; - LEAVE; - - return result; -} - -gint -perl_call_chain_filter (const gchar *function, struct worker_task *task, gint *marks, guint number) -{ - gint result, i; - AV *av; - SV *sv; - - dTHXa (perl_interpreter); - PERL_SET_CONTEXT (perl_interpreter); - - dSP; - - ENTER; - SAVETMPS; - av = newAV (); - av_extend (av, number); - for (i = 0; i < number; i++) { - av_push (av, sv_2mortal (newSViv (marks[i]))); - } - PUSHMARK (SP); - sv = sv_2mortal (sv_bless (newRV_noinc (newSViv (PTR2IV (task))), rspamd_task_stash)); - XPUSHs (sv); - XPUSHs (sv_2mortal ((SV *) AvARRAY (av))); - PUTBACK; - - call_pv (function, G_SCALAR); - - SPAGAIN; - - result = POPi; - debug_task ("call of %s returned mark %d\n", function, result); - - PUTBACK; - FREETMPS; - av_undef (av); - LEAVE; - - - 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; - SV *sv; - - dTHXa (perl_interpreter); - PERL_SET_CONTEXT (perl_interpreter); - - dSP; - - ENTER; - SAVETMPS; - PUSHMARK (SP); - sv = sv_2mortal (sv_bless (newRV_noinc (newSViv (PTR2IV (callback_data->task))), rspamd_task_stash)); - XPUSHs (sv); - XPUSHs (sv_2mortal (newSViv (error))); - XPUSHs (sv_2mortal (newSVpv (ctx->param->buf, ctx->param->bufsize))); - PUTBACK; - - call_sv (callback_data->callback, G_SCALAR); - - /* Set save point */ - callback_data->task->save.saved = 0; - process_filters (callback_data->task); - - SPAGAIN; - FREETMPS; - LEAVE; - -} - -/* - * Perl custom consolidation function - */ -struct consolidation_callback_data { - struct worker_task *task; - double score; - const gchar *func; -}; - -static void -perl_consolidation_callback (gpointer key, gpointer value, gpointer arg) -{ - double res; - struct symbol *s = (struct symbol *)value; - struct consolidation_callback_data *data = (struct consolidation_callback_data *)arg; - - dTHXa (perl_interpreter); - PERL_SET_CONTEXT (perl_interpreter); - - dSP; - ENTER; - SAVETMPS; - - PUSHMARK (SP); - - XPUSHs (sv_2mortal (newSVpv ((const gchar *)key, 0))); - XPUSHs (sv_2mortal (newSVnv (s->score))); - PUTBACK; - - call_pv (data->func, G_SCALAR); - - SPAGAIN; - - res = POPi; - - data->score += res; -} - -double -perl_consolidation_func (struct worker_task *task, const gchar *metric_name, const gchar *function_name) -{ - struct metric_result *metric_res; - double res = 0.; - struct consolidation_callback_data data = { task, 0, function_name }; - - if (function_name == NULL) { - return 0; - } - - metric_res = g_hash_table_lookup (task->results, metric_name); - if (metric_res == NULL) { - return res; - } - - g_hash_table_foreach (metric_res->symbols, perl_consolidation_callback, &data); - - return data.score; -} diff --git a/src/perl.h b/src/perl.h deleted file mode 100644 index 5bc75cd3e..000000000 --- a/src/perl.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef RSPAM_PERL_H -#define RSPAM_PERL_H - - -#include "config.h" -#include "memcached.h" - - -struct uri; -struct worker_task; -struct config_file; - -void init_perl_filters (struct config_file *cfg); - -gint perl_call_filter (const gchar *function, struct worker_task *task); -gint perl_call_chain_filter (const gchar *function, struct worker_task *task, gint *marks, guint number); - -void perl_call_memcached_callback (memcached_ctx_t *ctx, memc_error_t error, void *data); - -double perl_consolidation_func (struct worker_task *task, const gchar *metric_name, const gchar *function_name); - -#endif |