Skip to content
Snippets Groups Projects
Commit cdcbffee authored by Joshua Colp's avatar Joshua Colp
Browse files

Fix an issue where a caller to ast_write on a MulticastRTP channel would...

Fix an issue where a caller to ast_write on a MulticastRTP channel would determine it failed when in reality it did not.

When sending RTP packets via multicast the amount of data sent is stored in a variable and returned
from the write function. This is incorrect as any non-zero value returned is considered a failure while
a return value of 0 is success. For callers (such as ast_streamfile) that checked the return value
they would have considered it a failure when in reality nothing went wrong and it was actually a success.

The write function for the multicast RTP engine now returns -1 on failure and 0 on success, as it should.

(closes issue ASTERISK-17254)
Reported by: wybecom
........

Merged revisions 373550 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 373551 from http://svn.asterisk.org/svn/asterisk/branches/10
........

Merged revisions 373552 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@373553 65c4cc65-6c06-0410-ace0-fbb531ad65f3
parent da8c22fe
No related branches found
No related tags found
No related merge requests found
...@@ -208,7 +208,7 @@ static int multicast_rtp_write(struct ast_rtp_instance *instance, struct ast_fra ...@@ -208,7 +208,7 @@ static int multicast_rtp_write(struct ast_rtp_instance *instance, struct ast_fra
struct multicast_rtp *multicast = ast_rtp_instance_get_data(instance); struct multicast_rtp *multicast = ast_rtp_instance_get_data(instance);
struct ast_frame *f = frame; struct ast_frame *f = frame;
struct ast_sockaddr remote_address; struct ast_sockaddr remote_address;
int hdrlen = 12, res, codec; int hdrlen = 12, res = 0, codec;
unsigned char *rtpheader; unsigned char *rtpheader;
/* We only accept audio, nothing else */ /* We only accept audio, nothing else */
...@@ -237,12 +237,12 @@ static int multicast_rtp_write(struct ast_rtp_instance *instance, struct ast_fra ...@@ -237,12 +237,12 @@ static int multicast_rtp_write(struct ast_rtp_instance *instance, struct ast_fra
/* Finally send it out to the eager phones listening for us */ /* Finally send it out to the eager phones listening for us */
ast_rtp_instance_get_remote_address(instance, &remote_address); ast_rtp_instance_get_remote_address(instance, &remote_address);
res = ast_sendto(multicast->socket, (void *) rtpheader, f->datalen + hdrlen, 0, &remote_address);
if (res < 0) { if (ast_sendto(multicast->socket, (void *) rtpheader, f->datalen + hdrlen, 0, &remote_address) < 0) {
ast_log(LOG_ERROR, "Multicast RTP Transmission error to %s: %s\n", ast_log(LOG_ERROR, "Multicast RTP Transmission error to %s: %s\n",
ast_sockaddr_stringify(&remote_address), ast_sockaddr_stringify(&remote_address),
strerror(errno)); strerror(errno));
res = -1;
} }
/* If we were forced to duplicate the frame free the new one */ /* If we were forced to duplicate the frame free the new one */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment