From: Joshua Colp Date: Tue, 25 Sep 2012 12:00:23 +0000 (+0000) Subject: Fix an issue where a caller to ast_write on a MulticastRTP channel would determine... X-Git-Tag: 10.10.0-rc1~39 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bf976708de63da4b7f75cb3ca1260a3bc65b52fe;p=thirdparty%2Fasterisk.git 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/10@373551 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/res/res_rtp_multicast.c b/res/res_rtp_multicast.c index fc22ba388a..3f3c3773bf 100644 --- a/res/res_rtp_multicast.c +++ b/res/res_rtp_multicast.c @@ -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 ast_frame *f = frame; struct ast_sockaddr remote_address; - int hdrlen = 12, res, codec; + int hdrlen = 12, res = 0, codec; unsigned char *rtpheader; /* We only accept audio, nothing else */ @@ -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 */ 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_sockaddr_stringify(&remote_address), strerror(errno)); + res = -1; } /* If we were forced to duplicate the frame free the new one */