]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 373551 via svnmerge from
authorAutomerge script <automerge@asterisk.org>
Tue, 25 Sep 2012 12:26:47 +0000 (12:26 +0000)
committerAutomerge script <automerge@asterisk.org>
Tue, 25 Sep 2012 12:26:47 +0000 (12:26 +0000)
file:///srv/subversion/repos/asterisk/branches/10

................
  r373551 | file | 2012-09-25 07:00:23 -0500 (Tue, 25 Sep 2012) | 15 lines

  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-digiumphones@373577 65c4cc65-6c06-0410-ace0-fbb531ad65f3

res/res_rtp_multicast.c

index fc22ba388abd5510a2acfb8d244d4373c8a2cd04..3f3c3773bf889f245b09ad14d120320ea10a1891 100644 (file)
@@ -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 */