setup_env(chan, "async", fds[1], 0, 0, NULL);
/* read the environment */
res = read(fds[0], agi_buffer, AGI_BUF_SIZE);
- if (!res) {
- ast_log(LOG_ERROR, "Failed to read from Async AGI pipe on channel %s\n",
- ast_channel_name(chan));
+ if (res <= 0) {
+ ast_log(LOG_ERROR, "Failed to read from Async AGI pipe on channel %s: %s\n",
+ ast_channel_name(chan), res < 0 ? strerror(errno) : "EOF");
returnstatus = AGI_RESULT_FAILURE;
goto async_agi_abort;
}
* fd (the pipe), let's read the response.
*/
res = read(fds[0], agi_buffer, AGI_BUF_SIZE);
- if (!res) {
- ast_log(LOG_ERROR, "Failed to read from Async AGI pipe on channel %s\n",
- ast_channel_name(chan));
+ if (res <= 0) {
+ ast_log(LOG_ERROR, "Failed to read from Async AGI pipe on channel %s: %s\n",
+ ast_channel_name(chan), res < 0 ? strerror(errno) : "EOF");
free_agi_cmd(cmd);
returnstatus = AGI_RESULT_FAILURE;
goto async_agi_done;
/* Otherwise adjust bridged payload to match */
bridged_payload = ast_rtp_codecs_payload_code(ast_rtp_instance_get_codecs(instance1), payload_type.asterisk_format, &payload_type.format, payload_type.rtp_code);
+ /* If no codec could be matched between instance and instance1, then somehow things were made incompatible while we were still bridged. Bail. */
+ if (bridged_payload < 0) {
+ return -1;
+ }
+
/* If the payload coming in is not one of the negotiated ones then send it to the core, this will cause formats to change and the bridge to break */
if (!(ast_rtp_instance_get_codecs(instance1)->payloads[bridged_payload].rtp_code) &&
!(ast_rtp_instance_get_codecs(instance1)->payloads[bridged_payload].asterisk_format)) {