本文整理汇总了C++中rspamd_lua_setclass函数的典型用法代码示例。如果您正苦于以下问题:C++ rspamd_lua_setclass函数的具体用法?C++ rspamd_lua_setclass怎么用?C++ rspamd_lua_setclass使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了rspamd_lua_setclass函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: lua_util_decode_base64
static gint
lua_util_decode_base64 (lua_State *L)
{
struct rspamd_lua_text *t;
const gchar *s = NULL;
gsize inlen, outlen;
gboolean zero_copy = FALSE, grab_own = FALSE;
gint state = 0;
guint save = 0;
if (lua_type (L, 1) == LUA_TSTRING) {
s = luaL_checklstring (L, 1, &inlen);
}
else if (lua_type (L, 1) == LUA_TUSERDATA) {
t = lua_check_text (L, 1);
if (t != NULL) {
s = t->start;
inlen = t->len;
zero_copy = TRUE;
if (t->own) {
t->own = FALSE;
grab_own = TRUE;
}
}
}
if (s != NULL) {
if (zero_copy) {
/* Decode in place */
outlen = g_base64_decode_step (s, inlen, (guchar *)s, &state, &save);
t = lua_newuserdata (L, sizeof (*t));
rspamd_lua_setclass (L, "rspamd{text}", -1);
t->start = s;
t->len = outlen;
t->own = grab_own;
}
else {
t = lua_newuserdata (L, sizeof (*t));
rspamd_lua_setclass (L, "rspamd{text}", -1);
t->len = (inlen / 4) * 3 + 3;
t->start = g_malloc (t->len);
outlen = g_base64_decode_step (s, inlen, (guchar *)t->start,
&state, &save);
t->len = outlen;
t->own = TRUE;
}
}
else {
lua_pushnil (L);
}
return 1;
}
示例2: lua_rsa_privkey_load
static gint
lua_rsa_privkey_load (lua_State *L)
{
RSA *rsa = NULL, **prsa;
const gchar *filename;
FILE *f;
filename = luaL_checkstring (L, 1);
if (filename != NULL) {
f = fopen (filename, "r");
if (f == NULL) {
msg_err ("cannot open private key from file: %s, %s",
filename,
strerror (errno));
lua_pushnil (L);
}
else {
if (!PEM_read_RSAPrivateKey (f, &rsa, NULL, NULL)) {
msg_err ("cannot open private key from file: %s, %s", filename,
ERR_error_string (ERR_get_error (), NULL));
lua_pushnil (L);
}
else {
prsa = lua_newuserdata (L, sizeof (RSA *));
rspamd_lua_setclass (L, "rspamd{rsa_privkey}", -1);
*prsa = rsa;
}
fclose (f);
}
}
else {
lua_pushnil (L);
}
return 1;
}
示例3: lua_cryptobox_hash_create
/***
* @function rspamd_cryptobox_hash.create([string])
* Creates new hash context
* @param {string} data optional string to hash
* @return {cryptobox_hash} hash object
*/
static gint
lua_cryptobox_hash_create (lua_State *L)
{
struct rspamd_lua_cryptobox_hash *h, **ph;
const gchar *s = NULL;
struct rspamd_lua_text *t;
gsize len = 0;
h = rspamd_lua_hash_create (NULL);
if (lua_type (L, 1) == LUA_TSTRING) {
s = lua_tolstring (L, 1, &len);
}
else if (lua_type (L, 1) == LUA_TUSERDATA) {
t = lua_check_text (L, 1);
if (!t) {
return luaL_error (L, "invalid arguments");
}
s = t->start;
len = t->len;
}
if (s) {
rspamd_lua_hash_update (h, s, len);
}
ph = lua_newuserdata (L, sizeof (void *));
*ph = h;
rspamd_lua_setclass (L, "rspamd{cryptobox_hash}", -1);
return 1;
}
示例4: lua_classifier_get_statfiles
/* Return table of statfiles indexed by name */
static gint
lua_classifier_get_statfiles (lua_State *L)
{
struct rspamd_classifier_config *ccf = lua_check_classifier (L);
GList *cur;
struct rspamd_statfile_config *st, **pst;
gint i;
if (ccf) {
lua_newtable (L);
cur = g_list_first (ccf->statfiles);
i = 1;
while (cur) {
st = cur->data;
pst = lua_newuserdata (L, sizeof (struct rspamd_statfile_config *));
rspamd_lua_setclass (L, "rspamd{statfile}", -1);
*pst = st;
lua_rawseti (L, -2, i++);
cur = g_list_next (cur);
}
}
else {
lua_pushnil (L);
}
return 1;
}
示例5: lua_config_add_kv_map
static gint
lua_config_add_kv_map (lua_State *L)
{
struct rspamd_config *cfg = lua_check_config (L);
const gchar *map_line, *description;
GHashTable **r, ***ud;
if (cfg) {
map_line = luaL_checkstring (L, 2);
description = lua_tostring (L, 3);
r = rspamd_mempool_alloc (cfg->cfg_pool, sizeof (GHashTable *));
*r = g_hash_table_new (rspamd_strcase_hash, rspamd_strcase_equal);
if (!add_map (cfg, map_line, description, read_kv_list, fin_kv_list,
(void **)r)) {
msg_warn ("invalid hash map %s", map_line);
g_hash_table_destroy (*r);
lua_pushnil (L);
return 1;
}
rspamd_mempool_add_destructor (cfg->cfg_pool,
(rspamd_mempool_destruct_t)g_hash_table_destroy,
*r);
ud = lua_newuserdata (L, sizeof (GHashTable *));
*ud = r;
rspamd_lua_setclass (L, "rspamd{hash_table}", -1);
return 1;
}
lua_pushnil (L);
return 1;
}
示例6: lua_classifier_get_statfile_by_label
/* Get statfile with specified label */
static gint
lua_classifier_get_statfile_by_label (lua_State *L)
{
struct rspamd_classifier_config *ccf = lua_check_classifier (L);
struct rspamd_statfile_config *st, **pst;
const gchar *label;
GList *cur;
gint i;
label = luaL_checkstring (L, 2);
if (ccf && label) {
cur = g_hash_table_lookup (ccf->labels, label);
if (cur) {
lua_newtable (L);
i = 1;
while (cur) {
st = cur->data;
pst =
lua_newuserdata (L,
sizeof (struct rspamd_statfile_config *));
rspamd_lua_setclass (L, "rspamd{statfile}", -1);
*pst = st;
lua_rawseti (L, -2, i++);
cur = g_list_next (cur);
}
return 1;
}
}
lua_pushnil (L);
return 1;
}
示例7: lua_config_add_radix_map
static gint
lua_config_add_radix_map (lua_State *L)
{
struct rspamd_config *cfg = lua_check_config (L);
const gchar *map_line, *description;
radix_compressed_t **r, ***ud;
if (cfg) {
map_line = luaL_checkstring (L, 2);
description = lua_tostring (L, 3);
r = rspamd_mempool_alloc (cfg->cfg_pool, sizeof (radix_compressed_t *));
*r = radix_create_compressed ();
if (!add_map (cfg, map_line, description, read_radix_list,
fin_radix_list, (void **)r)) {
msg_warn ("invalid radix map %s", map_line);
radix_destroy_compressed (*r);
lua_pushnil (L);
return 1;
}
ud = lua_newuserdata (L, sizeof (radix_compressed_t *));
*ud = r;
rspamd_lua_setclass (L, "rspamd{radix}", -1);
return 1;
}
lua_pushnil (L);
return 1;
}
示例8: rspamd_lua_call_pre_filters
void
rspamd_lua_call_pre_filters (struct rspamd_task *task)
{
struct lua_callback_data *cd;
struct rspamd_task **ptask;
GList *cur;
cur = task->cfg->pre_filters;
while (cur) {
cd = cur->data;
if (cd->cb_is_ref) {
lua_rawgeti (cd->L, LUA_REGISTRYINDEX, cd->callback.ref);
}
else {
lua_getglobal (cd->L, cd->callback.name);
}
ptask = lua_newuserdata (cd->L, sizeof (struct rspamd_task *));
rspamd_lua_setclass (cd->L, "rspamd{task}", -1);
*ptask = task;
if (lua_pcall (cd->L, 1, 0, 0) != 0) {
msg_info ("call to %s failed: %s",
cd->cb_is_ref ? "local function" :
cd->callback.name,
lua_tostring (cd->L, -1));
}
cur = g_list_next (cur);
}
}
示例9: lua_config_get_classifier
static gint
lua_config_get_classifier (lua_State * L)
{
struct rspamd_config *cfg = lua_check_config (L);
struct rspamd_classifier_config *clc = NULL, **pclc = NULL;
const gchar *name;
GList *cur;
if (cfg) {
name = luaL_checkstring (L, 2);
cur = g_list_first (cfg->classifiers);
while (cur) {
clc = cur->data;
if (g_ascii_strcasecmp (clc->classifier->name, name) == 0) {
pclc = &clc;
break;
}
cur = g_list_next (cur);
}
if (pclc) {
pclc = lua_newuserdata (L,
sizeof (struct rspamd_classifier_config *));
rspamd_lua_setclass (L, "rspamd{classifier}", -1);
*pclc = clc;
return 1;
}
}
lua_pushnil (L);
return 1;
}
示例10: lua_fann_load_file
/***
* @function rspamd_fann.load(file)
* Loads neural network from the file
* @param {string} file filename where fann is stored
* @return {fann} fann object
*/
static gint
lua_fann_load_file (lua_State *L)
{
#ifndef WITH_FANN
return 0;
#else
struct fann *f, **pfann;
const gchar *fname;
fname = luaL_checkstring (L, 1);
if (fname != NULL) {
f = fann_create_from_file (fname);
if (f != NULL) {
pfann = lua_newuserdata (L, sizeof (gpointer));
*pfann = f;
rspamd_lua_setclass (L, "rspamd{fann}", -1);
}
else {
lua_pushnil (L);
}
}
else {
lua_pushnil (L);
}
return 1;
#endif
}
示例11: lua_io_err_cb
static void
lua_io_err_cb (GError * err, void *arg)
{
struct lua_dispatcher_cbdata *cbdata = arg;
rspamd_io_dispatcher_t **pdispatcher;
/* callback (dispatcher, err) */
lua_rawgeti (cbdata->L, LUA_REGISTRYINDEX, cbdata->cbref_err);
pdispatcher =
lua_newuserdata (cbdata->L, sizeof (struct rspamd_io_dispatcher_s *));
rspamd_lua_setclass (cbdata->L, "rspamd{io_dispatcher}", -1);
*pdispatcher = cbdata->d;
lua_pushstring (cbdata->L, err->message);
if (lua_pcall (cbdata->L, 2, 0, 0) != 0) {
msg_info ("call to session finalizer failed: %s",
lua_tostring (cbdata->L, -1));
lua_pop (cbdata->L, 1);
}
/* Unref callbacks */
luaL_unref (cbdata->L, LUA_REGISTRYINDEX, cbdata->cbref_read);
if (cbdata->cbref_write) {
luaL_unref (cbdata->L, LUA_REGISTRYINDEX, cbdata->cbref_write);
}
luaL_unref (cbdata->L, LUA_REGISTRYINDEX, cbdata->cbref_err);
g_error_free (err);
g_slice_free1 (sizeof (struct lua_dispatcher_cbdata), cbdata);
}
示例12: lua_rsa_privkey_create
static gint
lua_rsa_privkey_create (lua_State *L)
{
RSA *rsa = NULL, **prsa;
const gchar *buf;
BIO *bp;
buf = luaL_checkstring (L, 1);
if (buf != NULL) {
bp = BIO_new_mem_buf ((void *)buf, -1);
if (!PEM_read_bio_RSAPrivateKey (bp, &rsa, NULL, NULL)) {
msg_err ("cannot parse private key: %s",
ERR_error_string (ERR_get_error (), NULL));
lua_pushnil (L);
}
else {
prsa = lua_newuserdata (L, sizeof (RSA *));
rspamd_lua_setclass (L, "rspamd{rsa_privkey}", -1);
*prsa = rsa;
}
BIO_free (bp);
}
else {
lua_pushnil (L);
}
return 1;
}
示例13: lua_html_node_foreach_cb
static gboolean
lua_html_node_foreach_cb (GNode *n, gpointer d)
{
struct lua_html_traverse_ud *ud = d;
struct html_tag *tag = n->data, **ptag;
if (tag && (ud->tag_id == -1 || ud->tag_id == tag->id)) {
lua_rawgeti (ud->L, LUA_REGISTRYINDEX, ud->cbref);
ptag = lua_newuserdata (ud->L, sizeof (*ptag));
*ptag = tag;
rspamd_lua_setclass (ud->L, "rspamd{html_tag}", -1);
lua_pushnumber (ud->L, tag->content_length);
if (lua_pcall (ud->L, 2, 1, 0) != 0) {
msg_err ("error in foreach_tag callback: %s", lua_tostring (ud->L, -1));
lua_pop (ud->L, 1);
return TRUE;
}
if (lua_toboolean (ud->L, -1)) {
lua_pop (ud->L, 1);
return TRUE;
}
lua_pop (ud->L, 1);
}
return FALSE;
}
示例14: lua_io_write_cb
static gboolean
lua_io_write_cb (void *arg)
{
struct lua_dispatcher_cbdata *cbdata = arg;
gboolean res = FALSE;
rspamd_io_dispatcher_t **pdispatcher;
if (cbdata->cbref_write) {
lua_rawgeti (cbdata->L, LUA_REGISTRYINDEX, cbdata->cbref_read);
/* callback (dispatcher) */
pdispatcher =
lua_newuserdata (cbdata->L,
sizeof (struct rspamd_io_dispatcher_s *));
rspamd_lua_setclass (cbdata->L, "rspamd{io_dispatcher}", -1);
*pdispatcher = cbdata->d;
if (lua_pcall (cbdata->L, 1, 1, 0) != 0) {
msg_info ("call to session finalizer failed: %s",
lua_tostring (cbdata->L, -1));
lua_pop (cbdata->L, 1);
}
res = lua_toboolean (cbdata->L, -1);
lua_pop (cbdata->L, 1);
}
return res;
}
示例15: lua_util_load_rspamd_config
static gint
lua_util_load_rspamd_config (lua_State *L)
{
struct rspamd_config *cfg, **pcfg;
const gchar *cfg_name;
cfg_name = luaL_checkstring (L, 1);
if (cfg_name) {
cfg = g_malloc0 (sizeof (struct rspamd_config));
rspamd_init_cfg (cfg, FALSE);
cfg->cache = rspamd_symbols_cache_new ();
if (rspamd_config_read (cfg, cfg_name, NULL, NULL, NULL)) {
msg_err ("cannot load config from %s", cfg_name);
lua_pushnil (L);
}
else {
rspamd_config_post_load (cfg);
rspamd_symbols_cache_init (cfg->cache, cfg);
pcfg = lua_newuserdata (L, sizeof (struct rspamd_config *));
rspamd_lua_setclass (L, "rspamd{config}", -1);
*pcfg = cfg;
}
}
return 1;
}