diff --git a/src/mod/endpoints/mod_wanpipe/mod_wanpipe.c b/src/mod/endpoints/mod_wanpipe/mod_wanpipe.c index b7c07f1e53..2a4d233c95 100644 --- a/src/mod/endpoints/mod_wanpipe/mod_wanpipe.c +++ b/src/mod/endpoints/mod_wanpipe/mod_wanpipe.c @@ -577,11 +577,17 @@ static switch_status_t wanpipe_write_frame(switch_core_session_t *session, switc #endif towrite = bytes >= globals.mtu ? globals.mtu : bytes; + if (towrite < globals.mtu) { + int diff = globals.mtu - towrite; + memset(bp + towrite, 0, diff); + towrite = globals.mtu; + } + result = sangoma_sendmsg_socket(tech_pvt->socket, &tech_pvt->hdrframe, sizeof(tech_pvt->hdrframe), bp, towrite, 0); if (result < 0) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, - "Bad Write frame len %u write %d bytes returned %d (%s)!\n", frame->datalen, + "Bad Write frame len %u write %d bytes returned %d (%s)!\n", towrite, globals.mtu, result, strerror(errno)); if (errno == EBUSY) { continue; diff --git a/src/switch_channel.c b/src/switch_channel.c index 12b3820806..fb54780c12 100644 --- a/src/switch_channel.c +++ b/src/switch_channel.c @@ -857,6 +857,10 @@ SWITCH_DECLARE(switch_status_t) switch_channel_perform_answer(switch_channel_t * return SWITCH_STATUS_FALSE; } + if (switch_channel_test_flag(channel, CF_ANSWERED)) { + return SWITCH_STATUS_SUCCESS; + } + if (switch_core_session_answer_channel(channel->session) == SWITCH_STATUS_SUCCESS) { switch_event_t *event;