1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
MODULE = Mail::Rspamd PACKAGE = Mail::Rspamd::Config PREFIX = rspamd_config_
PROTOTYPES: DISABLE
SV *
rspamd_config_get_scalar (cfg, param)
Mail::Rspamd::Config cfg
const char *param
CODE:
struct config_scalar *sc;
int val;
sc = g_hash_table_lookup (cfg->cfg_params, param);
if (sc == NULL) {
XSRETURN_UNDEF;
}
else {
switch (sc->type) {
case SCALAR_TYPE_SIZE:
RETVAL = newSViv ((int)(*(size_t *)sc->pointer));
break;
case SCALAR_TYPE_INT:
case SCALAR_TYPE_UINT:
RETVAL = newSViv (*(int *)sc->pointer);
break;
case SCALAR_TYPE_STR:
RETVAL = newSVpv ((char *)sc->pointer, 0);
break;
}
}
void
rspamd_config_set_scalar (cfg, param, value)
Mail::Rspamd::Config cfg
const char *param
SV* value
CODE:
char *param, *charval;
int intval;
sc = g_hash_table_lookup (cfg->cfg_params, param);
if (sc == NULL) {
XSRETURN_UNDEF;
}
else {
switch (sc->type) {
case SCALAR_TYPE_SIZE:
intval = (int)SvIV (value);
*((size_t *)sc->pointer) = intval;
break;
case SCALAR_TYPE_INT:
case SCALAR_TYPE_UINT:
intval = (int)SvIV (value);
*((int *)sc->pointer) = intval;
break;
case SCALAR_TYPE_STR:
charval = (char *)SvPVX (value);
*((char **)sc->pointer) = charval;
break;
}
}
HV *
rspamd_config_get_metric (r, name)
Mail::Rspamd::Config cfg
const char *name
CODE:
struct metric *val;
val = g_hash_table_lookup (r->metrics, name);
if (val == NULL) {
XSRETURN_UNDEF;
}
else {
RETVAL = newHV();
(void)hv_store_ent (RETVAL,
newSVpv ("name", sizeof ("name") - 1),
newSVpv (val->name, strlen (val->name)), 0);
(void)hv_store_ent (RETVAL,
newSVpv ("func_name", sizeof ("func_name") - 1),
newSVpv (val->func_name, strlen (val->func_name)), 0);
(void)hv_store_ent (RETVAL,
newSVpv ("required_score", sizeof ("required_score") - 1),
newSVnv (val->required_score), 0);
sv_2mortal((SV*)RETVAL);
}
OUTPUT:
RETVAL
HV *
rspamd_config_get_statfile (r, name)
Mail::Rspamd::Config cfg
const char *name
CODE:
struct statfile *val;
char *name;
val = g_hash_table_lookup (r->statfiles, name);
if (val == NULL) {
XSRETURN_UNDEF;
}
else {
RETVAL = newHV();
(void)hv_store_ent (RETVAL,
newSVpv ("alias", sizeof ("alias") - 1),
newSVpv (val->alias, strlen (val->alias)), 0);
(void)hv_store_ent (RETVAL,
newSVpv ("pattern", sizeof ("pattern") - 1),
newSVpv (val->pattern, strlen (val->pattern)), 0);
(void)hv_store_ent (RETVAL,
newSVpv ("metric", sizeof ("metric") - 1),
newSVpv (val->metric, strlen (val->metric)), 0);
(void)hv_store_ent (RETVAL,
newSVpv ("weight", sizeof ("weight") - 1),
newSVnv (val->weight), 0);
(void)hv_store_ent (RETVAL,
newSVpv ("size", sizeof ("size") - 1),
newSViv (val->size), 0);
sv_2mortal((SV*)RETVAL);
}
OUTPUT:
RETVAL
SV*
rspamd_config_get_module_param (r, modulename, paramname)
Mail::Rspamd::Config cfg
const char *modulename
const char *paramname
CODE:
char *value;
value = get_module_opt (r, modulename, paramname);
if (value == NULL) {
XSRETURN_UNDEF;
}
RETVAL = newSVpv (value, 0);
OUTPUT:
RETVAL
|