unlang_thread_instantiate(autofree);
- if (!xlat_register(NULL, "test", xlat_test, false)) {
+ if (!xlat_register(NULL, "test", xlat_test, NULL)) {
ERROR("Failed registering xlat");
EXIT_WITH_FAILURE;
}
return;
}
- xlat = xlat_register(NULL, "aka_sim_id_method", aka_sim_xlat_id_method_xlat, false);
+ xlat = xlat_register(NULL, "aka_sim_id_method", aka_sim_xlat_id_method_xlat, NULL);
xlat_func_args(xlat, aka_sim_xlat_id_method_xlat_args);
- xlat = xlat_register(NULL, "aka_sim_id_type", aka_sim_xlat_id_type_xlat, false);
+ xlat = xlat_register(NULL, "aka_sim_id_type", aka_sim_xlat_id_type_xlat, NULL);
xlat_func_args(xlat, aka_sim_xlat_id_type_xlat_args);
- xlat = xlat_register(NULL, "3gpp_temporary_id_key_index", aka_sim_id_3gpp_temporary_id_key_index_xlat, false);
+ xlat = xlat_register(NULL, "3gpp_temporary_id_key_index", aka_sim_id_3gpp_temporary_id_key_index_xlat, NULL);
xlat_func_args(xlat, aka_sim_id_3gpp_temporary_id_key_index_xlat_args);
- xlat = xlat_register(NULL, "3gpp_temporary_id_decrypt", aka_sim_3gpp_temporary_id_decrypt_xlat, false);
+ xlat = xlat_register(NULL, "3gpp_temporary_id_decrypt", aka_sim_3gpp_temporary_id_decrypt_xlat, NULL);
xlat_func_args(xlat, aka_sim_3gpp_temporary_id_decrypt_xlat_args);
- xlat = xlat_register(NULL, "3gpp_temporary_id_encrypt", aka_sim_3gpp_temporary_id_encrypt_xlat, false);
+ xlat = xlat_register(NULL, "3gpp_temporary_id_encrypt", aka_sim_3gpp_temporary_id_encrypt_xlat, NULL);
xlat_func_args(xlat, aka_sim_3gpp_temporary_id_encrypt_xlat_args);
aka_sim_xlat_refs = 1;
}
/*
* Register the %(config:section.subsection) xlat function.
*/
- xlat = xlat_register(NULL, "config", xlat_config, false);
+ xlat = xlat_register(NULL, "config", xlat_config, NULL);
xlat_func_args(xlat, xlat_config_args);
/*
xlat_t *x;
x = xlat_register(NULL, xlat_foreach_names[i],
- unlang_foreach_xlat, true);
+ unlang_foreach_xlat, XLAT_FLAG_NEEDS_ASYNC);
x->uctx = &xlat_foreach_inst[i];
fr_assert(x);
xlat_internal(x);
void unlang_interpret_init_global(void)
{
xlat_t *xlat;
- xlat = xlat_register(NULL, "interpreter", unlang_interpret_xlat, false);
+ xlat = xlat_register(NULL, "interpreter", unlang_interpret_xlat, NULL);
xlat_func_args(xlat, unlang_interpret_xlat_args);
}
bool pure; //!< has no external side effects
} xlat_flags_t;
+/*
+ * Simplify many use-cases
+ *
+ * We can't set "needs_resolving" here, and async functions can't be pure.
+ */
+#define XLAT_FLAG_NEEDS_ASYNC &(xlat_flags_t) { .needs_async = true, }
+#define XLAT_FLAG_PURE &(xlat_flags_t) { .pure = true, }
+
extern fr_table_num_sorted_t const xlat_action_table[];
extern size_t xlat_action_table_len;
xlat_instantiate_t instantiate, size_t inst_size,
size_t buf_len);
-xlat_t *xlat_register(TALLOC_CTX *ctx, char const *name, xlat_func_t func, bool needs_async) CC_HINT(nonnull(2));
+xlat_t *xlat_register(TALLOC_CTX *ctx, char const *name, xlat_func_t func, xlat_flags_t const *flags) CC_HINT(nonnull(2));
int xlat_func_args(xlat_t *xlat, xlat_arg_parser_t const args[]) CC_HINT(nonnull);
c->mod_inst = mod_inst;
c->instantiate = instantiate;
c->inst_size = inst_size;
- c->needs_async = false;
DEBUG3("%s: %s", __FUNCTION__, c->name);
* @param[in] ctx Used to automate deregistration of the xlat fnction.
* @param[in] name of the xlat.
* @param[in] func to register.
- * @param[in] needs_async Requires asynchronous evaluation.
+ * @param[in] flags various function flags
* @return
* - A handle for the newly registered xlat function on success.
* - NULL on failure.
*/
-xlat_t *xlat_register(TALLOC_CTX *ctx, char const *name, xlat_func_t func, bool needs_async)
+xlat_t *xlat_register(TALLOC_CTX *ctx, char const *name, xlat_func_t func, xlat_flags_t const *flags)
{
xlat_t *c;
return NULL;
}
+ if (!flags) flags = &(xlat_flags_t) { 0 };
+
/*
* If it already exists, replace the instance.
*/
return NULL;
}
- if ((c->type != XLAT_FUNC_NORMAL) || (c->needs_async != needs_async)) {
+ if ((c->type != XLAT_FUNC_NORMAL) || (c->flags.needs_async != flags->needs_async)) {
ERROR("%s: Cannot change async capability of %s", __FUNCTION__, name);
return NULL;
}
.async = func
},
.type = XLAT_FUNC_NORMAL,
- .needs_async = needs_async, /* this function may yield */
+ .flags = *flags,
.input_type = XLAT_INPUT_UNPROCESSED /* set default - will be overridden if args are registered */
};
talloc_set_destructor(c, _xlat_func_talloc_free);
return NULL;
}
+ /*
+ * If the function is async, it can't be pure. But
+ * non-pure functions don't need to be async.
+ */
+ fr_assert(!flags->needs_async || !flags->pure);
+ fr_assert(!flags->needs_resolving);
+
return c;
}
{
xlat_t *c = UNCONST(xlat_t *, xlat);
+ /*
+ * Pure functions can't use any thread-local
+ * variables. They MUST operate only on constant
+ * instantiation data, and on their (possibly constant)
+ * inputs.
+ */
+ fr_assert(!c->flags.pure);
+
c->thread_instantiate = thread_instantiate;
c->thread_inst_type = thread_inst_type;
c->thread_inst_size = thread_inst_size;
*/
if (!old) return 1;
- xlat = xlat_register(NULL, name2, func, old->needs_async);
+ xlat = xlat_register(NULL, name2, func, &old->flags);
if (!xlat) {
ERROR("Registering xlat for load-balance section failed");
talloc_free(xr);
if (tp_decode) {
snprintf(buffer, sizeof(buffer), "decode.%s", name);
- xlat = xlat_register(NULL, buffer, protocol_decode_xlat, false);
+ xlat = xlat_register(NULL, buffer, protocol_decode_xlat, NULL);
xlat_func_args(xlat, protocol_decode_xlat_args);
xlat_async_instantiate_set(xlat, protocol_xlat_instantiate, fr_test_point_pair_decode_t *, NULL, tp_decode);
}
if (tp_encode) {
snprintf(buffer, sizeof(buffer), "encode.%s", name);
- xlat = xlat_register(NULL, buffer, protocol_encode_xlat, false);
+ xlat = xlat_register(NULL, buffer, protocol_encode_xlat, NULL);
xlat_func_args(xlat, protocol_encode_xlat_args);
xlat_async_instantiate_set(xlat, protocol_xlat_instantiate, fr_test_point_pair_encode_t *, NULL, tp_encode);
}
#define XLAT_REGISTER_ARGS(_xlat, _func, _args) \
do { \
- if (!(xlat = xlat_register(NULL, _xlat, _func, false))) return -1; \
+ if (!(xlat = xlat_register(NULL, _xlat, _func, NULL))) return -1; \
xlat_func_args(xlat, _args); \
} while (0)
#define XLAT_REGISTER_MONO(_xlat, _func, _arg) \
do { \
- if (!(xlat = xlat_register(NULL, _xlat, _func, false))) return -1; \
+ if (!(xlat = xlat_register(NULL, _xlat, _func, NULL))) return -1; \
xlat_func_mono(xlat, &_arg); \
} while (0)
XLAT_REGISTER_MONO("map", xlat_func_map, xlat_func_map_arg);
XLAT_REGISTER_MONO("md4", xlat_func_md4, xlat_func_md4_arg);
XLAT_REGISTER_MONO("md5", xlat_func_md5, xlat_func_md5_arg);
- xlat_register(NULL, "module", xlat_func_module, false);
+ xlat_register(NULL, "module", xlat_func_module, NULL);
XLAT_REGISTER_MONO("pack", xlat_func_pack, xlat_func_pack_arg);
XLAT_REGISTER_MONO("rand", xlat_func_rand, xlat_func_rand_arg);
XLAT_REGISTER_MONO("randstr", xlat_func_randstr, xlat_func_randstr_arg);
#if defined(HAVE_REGEX_PCRE) || defined(HAVE_REGEX_PCRE2)
- xlat_register(NULL, "regex", xlat_func_regex, false);
+ xlat_register(NULL, "regex", xlat_func_regex, NULL);
#endif
XLAT_REGISTER_MONO("sha1", xlat_func_sha1, xlat_func_sha_arg);
size_t thread_inst_size; //!< Size of the thread instance data to pre-allocate.
void *thread_uctx; //!< uctx to pass to instantiation functions.
- bool needs_async; //!< If true, then it requires async operation
+ xlat_flags_t flags; //!< various flags
size_t buf_len; //!< Length of output buffer to pre-allocate.
void *mod_inst; //!< Module instance passed to xlat
return -1;
}
node->call.func = func;
- node->flags.needs_async = func->needs_async;
+ node->flags = func->flags;
}
fr_sbuff_next(in); /* Skip the ':' */
return -1;
}
node->call.func = func;
- node->flags.needs_async = func->needs_async;
+ node->flags = func->flags;
}
fr_sbuff_next(in); /* Skip the ':' */
XLAT_DEBUG("VIRTUAL <-- %pV",
fr_box_strvalue_len(vpt->name, vpt->len));
node->call.func = func;
- node->flags.needs_async = func->needs_async;
+ node->flags = func->flags;
return 0;
}
/*
* Reset node flags
*/
- node->flags = (xlat_flags_t){ .needs_async = func->needs_async };
+ node->flags = func->flags;
/*
* Merge the result of trying to resolve
node = xlat_exp_alloc(ctx, XLAT_VIRTUAL, vpt->name, vpt->len);
node->attr = talloc_move(node, vpt_p);
node->call.func = func;
+ node->flags = func->flags;
+
*head = node;
- node->flags = (xlat_flags_t) { .needs_async = func->needs_async };
} else if (tmpl_is_attr_unresolved(vpt)) {
func = xlat_func_find(tmpl_attr_unresolved(vpt), -1);
if (!func) goto unresolved;
return -1;
}
- xlat = xlat_register(inst, mctx->inst->name, always_xlat, false);
+ xlat = xlat_register(inst, mctx->inst->name, always_xlat, NULL);
xlat_func_args(xlat, always_xlat_args);
xlat_async_instantiate_set(xlat, always_xlat_instantiate, rlm_always_t *, NULL, inst);
/*
* Register the cache xlat function
*/
- xlat = xlat_register(inst, mctx->inst->name, cache_xlat, true);
+ xlat = xlat_register(inst, mctx->inst->name, cache_xlat, XLAT_FLAG_NEEDS_ASYNC);
xlat_func_args(xlat, cache_xlat_args);
xlat_async_thread_instantiate_set(xlat, mod_xlat_thread_instantiate, cache_xlat_thread_inst_t, NULL, inst);
{
xlat_t *xlat;
- xlat = xlat_register(NULL, "chap_password", xlat_func_chap_password, false);
+ xlat = xlat_register(NULL, "chap_password", xlat_func_chap_password, NULL);
if (!xlat) return -1;
xlat_func_args(xlat, xlat_func_chap_password_args);
* Register decrypt xlat
*/
xlat_name = talloc_asprintf(inst, "%s_decrypt", mctx->inst->name);
- xlat = xlat_register(inst, xlat_name, cipher_rsa_decrypt_xlat, false);
+ xlat = xlat_register(inst, xlat_name, cipher_rsa_decrypt_xlat, NULL);
xlat_func_mono(xlat, &cipher_rsa_decrypt_xlat_arg);
xlat_async_instantiate_set(xlat, cipher_xlat_instantiate,
rlm_cipher_t *,
* Verify sign xlat
*/
xlat_name = talloc_asprintf(inst, "%s_verify", mctx->inst->name);
- xlat = xlat_register(inst, xlat_name, cipher_rsa_verify_xlat, false);
+ xlat = xlat_register(inst, xlat_name, cipher_rsa_verify_xlat, NULL);
xlat_func_args(xlat, cipher_rsa_verify_xlat_arg);
xlat_async_instantiate_set(xlat, cipher_xlat_instantiate,
rlm_cipher_t *,
* Register encrypt xlat
*/
xlat_name = talloc_asprintf(inst, "%s_encrypt", mctx->inst->name);
- xlat = xlat_register(inst, xlat_name, cipher_rsa_encrypt_xlat, false);
+ xlat = xlat_register(inst, xlat_name, cipher_rsa_encrypt_xlat, NULL);
xlat_func_mono(xlat, &cipher_rsa_encrypt_xlat_arg);
xlat_async_instantiate_set(xlat, cipher_xlat_instantiate,
rlm_cipher_t *,
* Register sign xlat
*/
xlat_name = talloc_asprintf(inst, "%s_sign", mctx->inst->name);
- xlat = xlat_register(inst, xlat_name, cipher_rsa_sign_xlat, false);
+ xlat = xlat_register(inst, xlat_name, cipher_rsa_sign_xlat, NULL);
xlat_func_mono(xlat, &cipher_rsa_sign_xlat_arg);
xlat_async_instantiate_set(xlat, cipher_xlat_instantiate,
rlm_cipher_t *,
talloc_free(xlat_name);
xlat_name = talloc_asprintf(inst, "%s_certificate", mctx->inst->name);
- xlat = xlat_register(inst, xlat_name, cipher_certificate_xlat, false);
+ xlat = xlat_register(inst, xlat_name, cipher_certificate_xlat, NULL);
xlat_func_args(xlat, cipher_certificate_xlat_args);
xlat_async_instantiate_set(xlat, cipher_xlat_instantiate,
rlm_cipher_t *,
if (cf_section_name2(conf)) return 0;
- xlat = xlat_register(mctx->inst->data, "client", xlat_client, false);
+ xlat = xlat_register(mctx->inst->data, "client", xlat_client, NULL);
xlat_func_args(xlat, xlat_client_args);
map_proc_register(mctx->inst->data, "client", map_proc_client, NULL, 0);
rlm_date_t *inst = talloc_get_type_abort(mctx->inst->data, rlm_date_t );
xlat_t *xlat;
- xlat = xlat_register(inst, mctx->inst->name, xlat_date_convert, false);
+ xlat = xlat_register(inst, mctx->inst->name, xlat_date_convert, NULL);
xlat_func_args(xlat,xlat_date_convert_args);
xlat_async_instantiate_set(xlat, mod_xlat_instantiate, rlm_date_t *, NULL, inst);
rlm_delay_t *inst = talloc_get_type_abort(mctx->inst->data, rlm_delay_t);
xlat_t *xlat;
- xlat = xlat_register(inst, mctx->inst->name, xlat_delay, true);
+ xlat = xlat_register(inst, mctx->inst->name, xlat_delay, XLAT_FLAG_NEEDS_ASYNC);
xlat_func_args(xlat, xlat_delay_args);
xlat_async_instantiate_set(xlat, mod_xlat_instantiate, rlm_delay_t *, NULL, inst);
return 0;
*/
if (cf_section_name2(mctx->inst->conf) != NULL) return 0;
- xlat = xlat_register(inst, "attr_by_num", xlat_dict_attr_by_num, false);
+ xlat = xlat_register(inst, "attr_by_num", xlat_dict_attr_by_num, NULL);
xlat_func_args(xlat, xlat_dict_attr_by_num_args);
- xlat = xlat_register(inst, "attr_by_oid", xlat_dict_attr_by_oid, false);
+ xlat = xlat_register(inst, "attr_by_oid", xlat_dict_attr_by_oid, NULL);
xlat_func_args(xlat, xlat_dict_attr_by_oid_args);
- xlat = xlat_register(inst, "vendor", xlat_vendor, false);
+ xlat = xlat_register(inst, "vendor", xlat_vendor, NULL);
xlat_func_args(xlat, xlat_vendor_args);
- xlat = xlat_register(inst, "vendor_num", xlat_vendor_num, false);
+ xlat = xlat_register(inst, "vendor_num", xlat_vendor_num, NULL);
xlat_func_args(xlat, xlat_vendor_num_args);
- xlat = xlat_register(inst, "attr", xlat_attr, false);
+ xlat = xlat_register(inst, "attr", xlat_attr, NULL);
xlat_func_args(xlat, xlat_attr_args);
- xlat = xlat_register(inst, "attr_num", xlat_attr_num, false);
+ xlat = xlat_register(inst, "attr_num", xlat_attr_num, NULL);
xlat_func_args(xlat, xlat_attr_num_args);
return 0;
xlat_t *xlat;
MEM(unescape = talloc_asprintf(NULL, "un%s", mctx->inst->name));
- xlat = xlat_register(NULL, mctx->inst->name, escape_xlat, false);
+ xlat = xlat_register(NULL, mctx->inst->name, escape_xlat, NULL);
xlat_func_mono(xlat, &escape_xlat_arg);
xlat_async_instantiate_set(xlat, mod_xlat_instantiate, rlm_escape_t *, NULL, inst);
- xlat = xlat_register(NULL, unescape, unescape_xlat, false);
+ xlat = xlat_register(NULL, unescape, unescape_xlat, NULL);
xlat_func_mono(xlat, &unescape_xlat_arg);
talloc_free(unescape);
xlat_t *xlat;
char const *p;
- xlat = xlat_register(NULL, mctx->inst->name, exec_xlat, true);
+ xlat = xlat_register(NULL, mctx->inst->name, exec_xlat, XLAT_FLAG_NEEDS_ASYNC);
xlat_func_args(xlat, exec_xlat_args);
xlat_async_instantiate_set(xlat, mod_xlat_instantiate, rlm_exec_t *, NULL, inst);
{
xlat_t *xlat;
- xlat = xlat_register(mctx->inst->data, mctx->inst->name, expr_xlat, false);
+ xlat = xlat_register(mctx->inst->data, mctx->inst->name, expr_xlat, NULL);
xlat_func_mono(xlat, &expr_xlat_arg);
return 0;
rlm_icmp_t *inst = talloc_get_type_abort(mctx->inst->data, rlm_icmp_t);
xlat_t *xlat;
- xlat = xlat_register(inst, mctx->inst->name, xlat_icmp, true);
+ xlat = xlat_register(inst, mctx->inst->name, xlat_icmp, XLAT_FLAG_NEEDS_ASYNC);
xlat_func_args(xlat, xlat_icmp_args);
xlat_async_instantiate_set(xlat, mod_xlat_instantiate, rlm_icmp_t *, NULL, inst);
xlat_async_thread_instantiate_set(xlat, mod_xlat_thread_instantiate, xlat_icmp_thread_inst_t, NULL, inst);
rlm_idn_t *inst = talloc_get_type_abort(mctx->inst->data, rlm_idn_t);
xlat_t *xlat;
- xlat = xlat_register(inst, mctx->inst->name, xlat_idna, false);
+ xlat = xlat_register(inst, mctx->inst->name, xlat_idna, NULL);
xlat_func_mono(xlat, &xlat_idna_arg);
xlat_async_instantiate_set(xlat, mod_xlat_instantiate, rlm_idn_t *, NULL, inst);
char *name;
fr_json_format_t *format = inst->format;
- xlat = xlat_register(inst, "jsonquote", json_quote_xlat, false);
+ xlat = xlat_register(inst, "jsonquote", json_quote_xlat, NULL);
if (xlat) xlat_func_mono(xlat, &json_quote_xlat_arg);
- xlat = xlat_register(inst, "jpathvalidate", jpath_validate_xlat, false);
+ xlat = xlat_register(inst, "jpathvalidate", jpath_validate_xlat, NULL);
if (xlat) xlat_func_mono(xlat, &jpath_validate_xlat_arg);
name = talloc_asprintf(inst, "%s_encode", mctx->inst->name);
- xlat = xlat_register(inst, name, json_encode_xlat, false);
+ xlat = xlat_register(inst, name, json_encode_xlat, NULL);
xlat_func_mono(xlat, &json_encode_xlat_arg);
xlat_async_instantiate_set(xlat, json_xlat_instantiate,
rlm_json_t *, NULL, inst);
inst->cache_da = inst->group_da; /* Default to the group_da */
}
- xlat = xlat_register(NULL, mctx->inst->name, ldap_xlat, false);
+ xlat = xlat_register(NULL, mctx->inst->name, ldap_xlat, NULL);
xlat_func_mono(xlat, &ldap_xlat_arg);
xlat_async_thread_instantiate_set(xlat, mod_xlat_thread_instantiate, ldap_xlat_thread_inst_t, NULL, inst);
- xlat = xlat_register(NULL, "ldap_escape", ldap_escape_xlat, false);
+ xlat = xlat_register(NULL, "ldap_escape", ldap_escape_xlat, NULL);
if (xlat) xlat_func_mono(xlat, &ldap_escape_xlat_arg);
- xlat = xlat_register(NULL, "ldap_unescape", ldap_unescape_xlat, false);
+ xlat = xlat_register(NULL, "ldap_unescape", ldap_unescape_xlat, NULL);
if (xlat) xlat_func_mono(xlat, &ldap_escape_xlat_arg);
map_proc_register(inst, mctx->inst->name, mod_map_proc, ldap_map_verify, 0);
rlm_mschap_t *inst = talloc_get_type_abort(mctx->inst->data, rlm_mschap_t);
xlat_t *xlat;
- xlat = xlat_register(inst, mctx->inst->name, mschap_xlat, false);
+ xlat = xlat_register(inst, mctx->inst->name, mschap_xlat, NULL);
xlat_func_args(xlat, mschap_xlat_args);
xlat_async_instantiate_set(xlat, mod_xlat_instantiate, rlm_mschap_t *, NULL, inst);
rlm_perl_t *inst = talloc_get_type_abort(mctx->inst->data, rlm_perl_t);
xlat_t *xlat;
- xlat = xlat_register(NULL, mctx->inst->name, perl_xlat, false);
+ xlat = xlat_register(NULL, mctx->inst->name, perl_xlat, NULL);
xlat_func_args(xlat, perl_xlat_args);
xlat_async_instantiate_set(xlat, mod_xlat_instantiate, rlm_perl_xlat_t, NULL, inst);
char *name;
xlat_t *xlat;
- xlat = xlat_register(inst, mctx->inst->name, redis_xlat, false);
+ xlat = xlat_register(inst, mctx->inst->name, redis_xlat, NULL);
xlat_func_args(xlat, redis_args);
xlat_async_instantiate_set(xlat, redis_xlat_instantiate, rlm_redis_t *, NULL, inst);
* %(redis_node:<key>[ idx])
*/
name = talloc_asprintf(NULL, "%s_node", mctx->inst->name);
- xlat = xlat_register(inst, name, redis_node_xlat, false);
+ xlat = xlat_register(inst, name, redis_node_xlat, NULL);
xlat_func_args(xlat, redis_node_xlat_args);
xlat_async_instantiate_set(xlat, redis_xlat_instantiate, rlm_redis_t *, NULL, inst);
talloc_free(name);
name = talloc_asprintf(NULL, "%s_remap", mctx->inst->name);
- xlat = xlat_register(inst, name, redis_remap_xlat, false);
+ xlat = xlat_register(inst, name, redis_remap_xlat, NULL);
xlat_func_args(xlat, redis_remap_xlat_args);
xlat_async_instantiate_set(xlat, redis_xlat_instantiate, rlm_redis_t *, NULL, inst);
talloc_free(name);
rlm_rest_t *inst = talloc_get_type_abort(mctx->inst->data, rlm_rest_t);
xlat_t *xlat;
- xlat = xlat_register(inst, mctx->inst->name, rest_xlat, true);
+ xlat = xlat_register(inst, mctx->inst->name, rest_xlat, XLAT_FLAG_NEEDS_ASYNC);
xlat_func_args(xlat, rest_xlat_args);
xlat_async_thread_instantiate_set(xlat, mod_xlat_thread_instantiate, rest_xlat_thread_inst_t, NULL, inst);
rlm_soh_t *inst = talloc_get_type_abort(mctx->inst->data, rlm_soh_t);
xlat_t *xlat;
- xlat = xlat_register(inst, mctx->inst->name, soh_xlat, false);
+ xlat = xlat_register(inst, mctx->inst->name, soh_xlat, NULL);
xlat_func_args(xlat, soh_xlat_args);
return 0;
/*
* Register the SQL xlat function
*/
- xlat = xlat_register(inst, inst->name, sql_xlat, false);
+ xlat = xlat_register(inst, inst->name, sql_xlat, NULL);
/*
* The xlat escape function needs access to inst - so
}
if (!cf_section_name2(mctx->inst->conf)) {
- if (!(xlat = xlat_register(inst, "test_trigger", trigger_test_xlat, false))) return -1;
+ if (!(xlat = xlat_register(inst, "test_trigger", trigger_test_xlat, NULL))) return -1;
xlat_func_args(xlat, trigger_test_xlat_args);
- if (!(xlat = xlat_register(inst, "test", test_xlat, false))) return -1;
+ if (!(xlat = xlat_register(inst, "test", test_xlat, NULL))) return -1;
xlat_func_args(xlat, test_xlat_args);
} else {
- if (!(xlat = xlat_register(inst, mctx->inst->name, test_xlat, false))) return -1;
+ if (!(xlat = xlat_register(inst, mctx->inst->name, test_xlat, NULL))) return -1;
xlat_func_args(xlat, test_xlat_args);
}
return -1;
}
- if(!(xlat = xlat_register(NULL, mctx->inst->name, xlat_unbound, true))) return -1;
+ if(!(xlat = xlat_register(NULL, mctx->inst->name, xlat_unbound, XLAT_FLAG_NEEDS_ASYNC))) return -1;
xlat_func_args(xlat, xlat_unbound_args);
xlat_async_thread_instantiate_set(xlat, mod_xlat_thread_instantiate, unbound_xlat_thread_inst_t, NULL, inst);
{
xlat_t *xlat;
- xlat = xlat_register(NULL, "unpack", unpack_xlat, false);
+ xlat = xlat_register(NULL, "unpack", unpack_xlat, NULL);
if (xlat) xlat_func_args(xlat, unpack_xlat_args);
return 0;
}
#endif
- xlat = xlat_register(inst, "modhextohex", modhex_to_hex_xlat, false);
+ xlat = xlat_register(inst, "modhextohex", modhex_to_hex_xlat, NULL);
if (xlat) xlat_func_mono(xlat, &modhex_to_hex_xlat_arg);
return 0;