diff --git a/res/res_pjsip.c b/res/res_pjsip.c index 9944702c35..516cb54d86 100644 --- a/res/res_pjsip.c +++ b/res/res_pjsip.c @@ -24,6 +24,7 @@ #include #include #include +#include #include "asterisk/res_pjsip.h" #include "res_pjsip/include/res_pjsip_private.h" @@ -4287,6 +4288,19 @@ error: return AST_MODULE_LOAD_DECLINE; } +/* + * This is a place holder function to ensure that pjmedia_strerr() is at + * least directly referenced by this module to ensure that the loader + * linker will link to the function. If a module only indirectly + * references a function from another module, such as a callback parameter + * to a function, the loader linker has been known to miss the link. + */ +void never_called_res_pjsip(void); +void never_called_res_pjsip(void) +{ + pjmedia_strerror(0, NULL, 0); +} + static int load_module(void) { struct ast_threadpool_options options; @@ -4302,6 +4316,12 @@ static int load_module(void) goto error; } + /* Register PJMEDIA error codes for SDP parsing errors */ + if (pj_register_strerror(PJMEDIA_ERRNO_START, PJ_ERRNO_SPACE_SIZE, pjmedia_strerror) + != PJ_SUCCESS) { + ast_log(LOG_WARNING, "Failed to register pjmedia error codes. Codes will not be decoded.\n"); + } + if (ast_sip_initialize_system()) { ast_log(LOG_ERROR, "Failed to initialize SIP 'system' configuration section. Aborting load\n"); goto error;