diff options
-rw-r--r-- | addons/cdr_mysql.c | 8 | ||||
-rw-r--r-- | autoconf/ast_ext_tool_check.m4 | 2 | ||||
-rw-r--r-- | autoconf/ast_pkgconfig.m4 | 2 | ||||
-rw-r--r-- | channels/chan_sip.c | 18 | ||||
-rwxr-xr-x | configure | 28 | ||||
-rw-r--r-- | include/asterisk/bridge.h | 11 | ||||
-rw-r--r-- | main/bridge.c | 8 | ||||
-rwxr-xr-x | menuselect/configure | 4 | ||||
-rw-r--r-- | res/res_pjsip_refer.c | 5 | ||||
-rw-r--r-- | res/res_pjsip_session.c | 2 |
10 files changed, 54 insertions, 34 deletions
diff --git a/addons/cdr_mysql.c b/addons/cdr_mysql.c index 2fefe4ed1..97ebdf26f 100644 --- a/addons/cdr_mysql.c +++ b/addons/cdr_mysql.c @@ -58,6 +58,14 @@ #define DATE_FORMAT "%Y-%m-%d %T" +#ifndef MYSQL_PORT +# ifdef MARIADB_PORT +# define MYSQL_PORT MARIADB_PORT +# else +# define MYSQL_PORT 3306 +# endif +#endif + AST_THREADSTORAGE(sql1_buf); AST_THREADSTORAGE(sql2_buf); AST_THREADSTORAGE(escape_buf); diff --git a/autoconf/ast_ext_tool_check.m4 b/autoconf/ast_ext_tool_check.m4 index ef762eb87..cbe109e4a 100644 --- a/autoconf/ast_ext_tool_check.m4 +++ b/autoconf/ast_ext_tool_check.m4 @@ -11,7 +11,7 @@ AC_DEFUN([AST_EXT_TOOL_CHECK], AC_PATH_TOOL(CONFIG_$1, $2, No, [${$1_DIR}/bin:$PATH]) if test ! "x${CONFIG_$1}" = xNo; then $1_INCLUDE=$(${CONFIG_$1} m4_default([$3],[--cflags])) - $1_INCLUDE=$(echo ${$1_INCLUDE} | $SED -e "s|-I|-I${$1_DIR}|g") + $1_INCLUDE=$(echo ${$1_INCLUDE} | $SED -e "s|-I|-I${$1_DIR}|g" -e "s|-std=c99||g") $1_LIB=$(${CONFIG_$1} m4_default([$4],[--libs])) $1_LIB=$(echo ${$1_LIB} | $SED -e "s|-L|-L${$1_DIR}|g") diff --git a/autoconf/ast_pkgconfig.m4 b/autoconf/ast_pkgconfig.m4 index ae7bbc086..3415ed547 100644 --- a/autoconf/ast_pkgconfig.m4 +++ b/autoconf/ast_pkgconfig.m4 @@ -5,7 +5,7 @@ AC_DEFUN([AST_PKG_CONFIG_CHECK], if test "x${PBX_$1}" != "x1" -a "${USE_$1}" != "no"; then PKG_CHECK_MODULES($1, $2, [ PBX_$1=1 - $1_INCLUDE="$$1_CFLAGS" + $1_INCLUDE=$(echo ${$1_CFLAGS} | $SED -e "s|-std=c99||g") $1_LIB="$$1_LIBS" AC_DEFINE([HAVE_$1], 1, [Define if your system has the $1 libraries.]) ], [ diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 138021e82..46f9ad699 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -25856,7 +25856,7 @@ static int handle_invite_replaces(struct sip_pvt *p, struct sip_request *req, int *nounlock, struct sip_pvt *replaces_pvt, struct ast_channel *replaces_chan) { struct ast_channel *c; - RAII_VAR(struct ast_bridge *, bridge, NULL, ao2_cleanup); + struct ast_bridge *bridge; if (req->ignore) { return 0; @@ -25872,6 +25872,7 @@ static int handle_invite_replaces(struct sip_pvt *p, struct sip_request *req, } append_history(p, "Xfer", "INVITE/Replace received"); + /* Get a ref to ensure the channel cannot go away on us. */ c = ast_channel_ref(p->owner); /* Fake call progress */ @@ -25886,21 +25887,24 @@ static int handle_invite_replaces(struct sip_pvt *p, struct sip_request *req, ast_raw_answer(c); - ast_channel_lock(replaces_chan); - bridge = ast_channel_get_bridge(replaces_chan); - ast_channel_unlock(replaces_chan); - + bridge = ast_bridge_transfer_acquire_bridge(replaces_chan); if (bridge) { + /* + * We have two refs of the channel. One is held in c and the other + * is notionally represented by p->owner. The impart is "stealing" + * the p->owner ref on success so the bridging system can have + * control of when the channel is hung up. + */ if (ast_bridge_impart(bridge, c, replaces_chan, NULL, AST_BRIDGE_IMPART_CHAN_INDEPENDENT)) { ast_hangup(c); - ast_channel_unref(c); } + ao2_ref(bridge, -1); } else { ast_channel_move(replaces_chan, c); ast_hangup(c); - ast_channel_unref(c); } + ast_channel_unref(c); sip_pvt_lock(p); return 0; } @@ -13427,7 +13427,7 @@ else $as_echo "yes" >&6; } PBX_LIBEDIT=1 - LIBEDIT_INCLUDE="$LIBEDIT_CFLAGS" + LIBEDIT_INCLUDE=$(echo ${LIBEDIT_CFLAGS} | $SED -e "s|-std=c99||g") LIBEDIT_LIB="$LIBEDIT_LIBS" $as_echo "#define HAVE_LIBEDIT 1" >>confdefs.h @@ -14101,7 +14101,7 @@ fi if test ! "x${CONFIG_LIBXML2}" = xNo; then LIBXML2_INCLUDE=$(${CONFIG_LIBXML2} --cflags) - LIBXML2_INCLUDE=$(echo ${LIBXML2_INCLUDE} | $SED -e "s|-I|-I${LIBXML2_DIR}|g") + LIBXML2_INCLUDE=$(echo ${LIBXML2_INCLUDE} | $SED -e "s|-I|-I${LIBXML2_DIR}|g" -e "s|-std=c99||g") LIBXML2_LIB=$(${CONFIG_LIBXML2} --libs) LIBXML2_LIB=$(echo ${LIBXML2_LIB} | $SED -e "s|-L|-L${LIBXML2_DIR}|g") @@ -20491,7 +20491,7 @@ else $as_echo "yes" >&6; } PBX_ILBC=1 - ILBC_INCLUDE="$ILBC_CFLAGS" + ILBC_INCLUDE=$(echo ${ILBC_CFLAGS} | $SED -e "s|-std=c99||g") ILBC_LIB="$ILBC_LIBS" $as_echo "#define HAVE_ILBC 1" >>confdefs.h @@ -22629,7 +22629,7 @@ fi if test ! "x${CONFIG_MYSQLCLIENT}" = xNo; then MYSQLCLIENT_INCLUDE=$(${CONFIG_MYSQLCLIENT} --cflags) - MYSQLCLIENT_INCLUDE=$(echo ${MYSQLCLIENT_INCLUDE} | $SED -e "s|-I|-I${MYSQLCLIENT_DIR}|g") + MYSQLCLIENT_INCLUDE=$(echo ${MYSQLCLIENT_INCLUDE} | $SED -e "s|-I|-I${MYSQLCLIENT_DIR}|g" -e "s|-std=c99||g") MYSQLCLIENT_LIB=$(${CONFIG_MYSQLCLIENT} --libs) MYSQLCLIENT_LIB=$(echo ${MYSQLCLIENT_LIB} | $SED -e "s|-L|-L${MYSQLCLIENT_DIR}|g") @@ -22846,7 +22846,7 @@ fi if test ! "x${CONFIG_NEON}" = xNo; then NEON_INCLUDE=$(${CONFIG_NEON} --cflags) - NEON_INCLUDE=$(echo ${NEON_INCLUDE} | $SED -e "s|-I|-I${NEON_DIR}|g") + NEON_INCLUDE=$(echo ${NEON_INCLUDE} | $SED -e "s|-I|-I${NEON_DIR}|g" -e "s|-std=c99||g") NEON_LIB=$(${CONFIG_NEON} --libs) NEON_LIB=$(echo ${NEON_LIB} | $SED -e "s|-L|-L${NEON_DIR}|g") @@ -22966,7 +22966,7 @@ fi if test ! "x${CONFIG_NEON29}" = xNo; then NEON29_INCLUDE=$(${CONFIG_NEON29} --cflags) - NEON29_INCLUDE=$(echo ${NEON29_INCLUDE} | $SED -e "s|-I|-I${NEON29_DIR}|g") + NEON29_INCLUDE=$(echo ${NEON29_INCLUDE} | $SED -e "s|-I|-I${NEON29_DIR}|g" -e "s|-std=c99||g") NEON29_LIB=$(${CONFIG_NEON29} --libs) NEON29_LIB=$(echo ${NEON29_LIB} | $SED -e "s|-L|-L${NEON29_DIR}|g") @@ -23110,7 +23110,7 @@ fi if test ! "x${CONFIG_NETSNMP}" = xNo; then NETSNMP_INCLUDE=$(${CONFIG_NETSNMP} --cflags) - NETSNMP_INCLUDE=$(echo ${NETSNMP_INCLUDE} | $SED -e "s|-I|-I${NETSNMP_DIR}|g") + NETSNMP_INCLUDE=$(echo ${NETSNMP_INCLUDE} | $SED -e "s|-I|-I${NETSNMP_DIR}|g" -e "s|-std=c99||g") NETSNMP_LIB=$(${CONFIG_NETSNMP} --agent-libs) NETSNMP_LIB=$(echo ${NETSNMP_LIB} | $SED -e "s|-L|-L${NETSNMP_DIR}|g") @@ -24596,7 +24596,7 @@ else $as_echo "yes" >&6; } PBX_PJPROJECT=1 - PJPROJECT_INCLUDE="$PJPROJECT_CFLAGS" + PJPROJECT_INCLUDE=$(echo ${PJPROJECT_CFLAGS} | $SED -e "s|-std=c99||g") PJPROJECT_LIB="$PJPROJECT_LIBS" $as_echo "#define HAVE_PJPROJECT 1" >>confdefs.h @@ -25650,7 +25650,7 @@ else $as_echo "yes" >&6; } PBX_PYTHONDEV=1 - PYTHONDEV_INCLUDE="$PYTHONDEV_CFLAGS" + PYTHONDEV_INCLUDE=$(echo ${PYTHONDEV_CFLAGS} | $SED -e "s|-std=c99||g") PYTHONDEV_LIB="$PYTHONDEV_LIBS" $as_echo "#define HAVE_PYTHONDEV 1" >>confdefs.h @@ -25836,7 +25836,7 @@ else $as_echo "yes" >&6; } PBX_PORTAUDIO=1 - PORTAUDIO_INCLUDE="$PORTAUDIO_CFLAGS" + PORTAUDIO_INCLUDE=$(echo ${PORTAUDIO_CFLAGS} | $SED -e "s|-std=c99||g") PORTAUDIO_LIB="$PORTAUDIO_LIBS" $as_echo "#define HAVE_PORTAUDIO 1" >>confdefs.h @@ -32140,7 +32140,7 @@ else $as_echo "yes" >&6; } PBX_GMIME=1 - GMIME_INCLUDE="$GMIME_CFLAGS" + GMIME_INCLUDE=$(echo ${GMIME_CFLAGS} | $SED -e "s|-std=c99||g") GMIME_LIB="$GMIME_LIBS" $as_echo "#define HAVE_GMIME 1" >>confdefs.h @@ -33049,7 +33049,7 @@ fi if test ! "x${CONFIG_SDL}" = xNo; then SDL_INCLUDE=$(${CONFIG_SDL} --cflags) - SDL_INCLUDE=$(echo ${SDL_INCLUDE} | $SED -e "s|-I|-I${SDL_DIR}|g") + SDL_INCLUDE=$(echo ${SDL_INCLUDE} | $SED -e "s|-I|-I${SDL_DIR}|g" -e "s|-std=c99||g") SDL_LIB=$(${CONFIG_SDL} --libs) SDL_LIB=$(echo ${SDL_LIB} | $SED -e "s|-L|-L${SDL_DIR}|g") @@ -33577,7 +33577,7 @@ else $as_echo "yes" >&6; } PBX_GTK2=1 - GTK2_INCLUDE="$GTK2_CFLAGS" + GTK2_INCLUDE=$(echo ${GTK2_CFLAGS} | $SED -e "s|-std=c99||g") GTK2_LIB="$GTK2_LIBS" $as_echo "#define HAVE_GTK2 1" >>confdefs.h @@ -33688,7 +33688,7 @@ else $as_echo "yes" >&6; } PBX_SYSTEMD=1 - SYSTEMD_INCLUDE="$SYSTEMD_CFLAGS" + SYSTEMD_INCLUDE=$(echo ${SYSTEMD_CFLAGS} | $SED -e "s|-std=c99||g") SYSTEMD_LIB="$SYSTEMD_LIBS" $as_echo "#define HAVE_SYSTEMD 1" >>confdefs.h diff --git a/include/asterisk/bridge.h b/include/asterisk/bridge.h index b23255844..c96cefb60 100644 --- a/include/asterisk/bridge.h +++ b/include/asterisk/bridge.h @@ -954,6 +954,17 @@ void ast_bridge_remove_video_src(struct ast_bridge *bridge, struct ast_channel * */ const char *ast_bridge_video_mode_to_string(enum ast_bridge_video_mode_type video_mode); +/*! + * \brief Acquire the channel's bridge for transfer purposes. + * \since 13.21.0 + * + * \param chan Channel involved in a transfer. + * + * \return The bridge the channel is in or NULL if it either isn't + * in a bridge or should not be considered to be in a bridge. + */ +struct ast_bridge *ast_bridge_transfer_acquire_bridge(struct ast_channel *chan); + enum ast_transfer_result { /*! The transfer completed successfully */ AST_BRIDGE_TRANSFER_SUCCESS, diff --git a/main/bridge.c b/main/bridge.c index 93c53dd15..8795081e2 100644 --- a/main/bridge.c +++ b/main/bridge.c @@ -4427,7 +4427,7 @@ static void set_transfer_variables_all(struct ast_channel *transferer, struct ao ao2_iterator_destroy(&iter); } -static struct ast_bridge *acquire_bridge(struct ast_channel *chan) +struct ast_bridge *ast_bridge_transfer_acquire_bridge(struct ast_channel *chan) { struct ast_bridge *bridge; @@ -4468,7 +4468,7 @@ enum ast_transfer_result ast_bridge_transfer_blind(int is_external, return AST_BRIDGE_TRANSFER_FAIL; } - bridge = acquire_bridge(transferer); + bridge = ast_bridge_transfer_acquire_bridge(transferer); if (!bridge) { transfer_result = AST_BRIDGE_TRANSFER_INVALID; goto publish; @@ -4715,8 +4715,8 @@ enum ast_transfer_result ast_bridge_transfer_attended(struct ast_channel *to_tra const char *app = NULL; int hangup_target = 0; - to_transferee_bridge = acquire_bridge(to_transferee); - to_target_bridge = acquire_bridge(to_transfer_target); + to_transferee_bridge = ast_bridge_transfer_acquire_bridge(to_transferee); + to_target_bridge = ast_bridge_transfer_acquire_bridge(to_transfer_target); transfer_msg = ast_attended_transfer_message_create(1, to_transferee, to_transferee_bridge, to_transfer_target, to_target_bridge, NULL, NULL); diff --git a/menuselect/configure b/menuselect/configure index 6e5331edd..a0aa10928 100755 --- a/menuselect/configure +++ b/menuselect/configure @@ -4392,7 +4392,7 @@ fi if test ! "x${CONFIG_LIBXML2}" = xNo; then LIBXML2_INCLUDE=$(${CONFIG_LIBXML2} --cflags) - LIBXML2_INCLUDE=$(echo ${LIBXML2_INCLUDE} | $SED -e "s|-I|-I${LIBXML2_DIR}|g") + LIBXML2_INCLUDE=$(echo ${LIBXML2_INCLUDE} | $SED -e "s|-I|-I${LIBXML2_DIR}|g" -e "s|-std=c99||g") LIBXML2_LIB=$(${CONFIG_LIBXML2} --libs) LIBXML2_LIB=$(echo ${LIBXML2_LIB} | $SED -e "s|-L|-L${LIBXML2_DIR}|g") @@ -4633,7 +4633,7 @@ else $as_echo "yes" >&6; } PBX_GTK2=1 - GTK2_INCLUDE="$GTK2_CFLAGS" + GTK2_INCLUDE=$(echo ${GTK2_CFLAGS} | $SED -e "s|-std=c99||g") GTK2_LIB="$GTK2_LIBS" $as_echo "#define HAVE_GTK2 1" >>confdefs.h diff --git a/res/res_pjsip_refer.c b/res/res_pjsip_refer.c index 7d892f653..120203c95 100644 --- a/res/res_pjsip_refer.c +++ b/res/res_pjsip_refer.c @@ -917,10 +917,7 @@ static int invite_replaces(void *data) ast_channel_ref(invite->session->channel); invite->channel = invite->session->channel; - ast_channel_lock(invite->channel); - invite->bridge = ast_channel_get_bridge(invite->channel); - ast_channel_unlock(invite->channel); - + invite->bridge = ast_bridge_transfer_acquire_bridge(invite->channel); return 0; } diff --git a/res/res_pjsip_session.c b/res/res_pjsip_session.c index d13b372be..49ab87568 100644 --- a/res/res_pjsip_session.c +++ b/res/res_pjsip_session.c @@ -4153,7 +4153,7 @@ static void session_outgoing_nat_hook(pjsip_tx_data *tdata, struct ast_sip_trans if (ast_sip_transport_is_local(transport_state, &our_sdp_addr) || !transport_state->localnet) { ast_debug(5, "Setting external media address to %s\n", ast_sockaddr_stringify_host(&transport_state->external_media_address)); pj_strdup2(tdata->pool, &sdp->conn->addr, ast_sockaddr_stringify_host(&transport_state->external_media_address)); - pj_strdup2(tdata->pool, &sdp->origin.addr, transport->external_media_address); + pj_strassign(&sdp->origin.addr, &sdp->conn->addr); } } |