diff --git a/include/asterisk/json.h b/include/asterisk/json.h index 0a75e7838e..665380c760 100644 --- a/include/asterisk/json.h +++ b/include/asterisk/json.h @@ -89,7 +89,7 @@ typedef AST_JSON_INT_T ast_json_int_t; /*! * \brief Initialize the JSON library. */ -void ast_json_init(void); +int ast_json_init(void); /*! * \brief Set custom allocators instead of the standard ast_malloc() and ast_free(). diff --git a/main/asterisk.c b/main/asterisk.c index 36e956fd06..6d9a5f56ca 100644 --- a/main/asterisk.c +++ b/main/asterisk.c @@ -4059,7 +4059,7 @@ static void asterisk_daemon(int isroot, const char *runuser, const char *rungrou } ast_verb(0, "PBX UUID: %s\n", pbx_uuid); - ast_json_init(); + check_init(ast_json_init(), "libjansson"); ast_ulaw_init(); ast_alaw_init(); tdd_init(); diff --git a/main/json.c b/main/json.c index 9a94767c23..f72de41020 100644 --- a/main/json.c +++ b/main/json.c @@ -693,10 +693,28 @@ struct ast_json *ast_json_ipaddr(const struct ast_sockaddr *addr, enum ast_trans return ast_json_string_create(ast_str_buffer(string)); } -void ast_json_init(void) +int ast_json_init(void) { + json_t *version_check; + /* Setup to use Asterisk custom allocators */ ast_json_reset_alloc_funcs(); + + /* We depend on functionality of jansson-2.11 but don't actually use + * any symbols. If we link at runtime to less than 2.11 this json_pack + * will return NULL. */ + version_check = json_pack("{s: o?, s: o*}", + "JSON", NULL, + "Bourne", NULL); + if (!version_check) { + ast_log(LOG_ERROR, "There was a problem finding jansson 2.11 runtime libraries.\n" + "Please rebuild Asterisk using ./configure --with-jansson-bundled.\n"); + return -1; + } + + json_decref(version_check); + + return 0; } static void json_payload_destructor(void *obj)