res_pjsip.c: Register PJMEDIA error code decoder.

Registering the PJMEDIA error codes allows errors found when parsing an
incoming SDP to be easier to figure out.

"Missing SDP rtpmap for dynamic payload type (PJMEDIA_SDP_EMISSINGRTPMAP)"
is much easier to understand than "Unknown error 220030".

ASTERISK-25772

Change-Id: I44b2dcea656fedd7593171be9e845880a2c70ca0
This commit is contained in:
Richard Mudgett 2016-06-23 15:13:24 -05:00
parent 5d2fc6bab7
commit e6e12c752c
1 changed files with 20 additions and 0 deletions

View File

@ -24,6 +24,7 @@
#include <pjsip/sip_transaction.h>
#include <pj/timer.h>
#include <pjlib.h>
#include <pjmedia/errno.h>
#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;