From patchwork Fri Nov 25 03:47:29 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kevin Lo X-Patchwork-Id: 1558 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.90.1 with SMTP id o1csp121307vsb; Thu, 24 Nov 2016 19:50:31 -0800 (PST) X-Received: by 10.195.18.71 with SMTP id gk7mr5884929wjd.175.1480045831814; Thu, 24 Nov 2016 19:50:31 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id e134si11561320wmg.131.2016.11.24.19.50.31; Thu, 24 Nov 2016 19:50:31 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 378D2689B74; Fri, 25 Nov 2016 05:50:25 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from ns.kevlo.org (220-135-115-6.HINET-IP.hinet.net [220.135.115.6]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E7B64689A33 for ; Fri, 25 Nov 2016 05:50:17 +0200 (EET) Received: from ns.kevlo.org (localhost [127.0.0.1]) by ns.kevlo.org (8.15.2/8.15.2) with ESMTPS id uAP3lVXb092889 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Fri, 25 Nov 2016 11:47:32 +0800 (CST) (envelope-from kevlo@ns.kevlo.org) Received: (from kevlo@localhost) by ns.kevlo.org (8.15.2/8.15.2/Submit) id uAP3lUqX092888 for ffmpeg-devel@ffmpeg.org; Fri, 25 Nov 2016 11:47:30 +0800 (CST) (envelope-from kevlo) Date: Fri, 25 Nov 2016 11:47:29 +0800 From: Kevin Lo To: ffmpeg-devel@ffmpeg.org Message-ID: <20161125034729.GA92867@ns.kevlo.org> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.24 (2015-08-30) Subject: [FFmpeg-devel] [PATCH v2] avformat/rtsp: introduce get_sa_len() function X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Since the Linux implementation of sockaddr doesn't have sa_len as a member, but the FreeBSD version does, introduce a get_sa_len() function that determines the size based on the address family. Signed-off-by: Kevin Lo diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c index c6292c5..4c543ed 100644 --- a/libavformat/rtsp.c +++ b/libavformat/rtsp.c @@ -202,6 +202,19 @@ static int get_sockaddr(AVFormatContext *s, return 0; } +static socklen_t +get_sa_len(struct sockaddr *addr) +{ + switch (addr->sa_family) { + case AF_INET: + return (sizeof(struct sockaddr_in)); + case AF_INET6: + return (sizeof(struct sockaddr_in6)); + default: + return (sizeof(struct sockaddr)); + } +} + #if CONFIG_RTPDEC static void init_rtp_handler(RTPDynamicProtocolHandler *handler, RTSPStream *rtsp_st, AVStream *st) @@ -1614,7 +1627,8 @@ int ff_rtsp_make_setup_request(AVFormatContext *s, const char *host, int port, } if (ttl > 0) snprintf(optbuf, sizeof(optbuf), "?ttl=%d", ttl); - getnameinfo((struct sockaddr*) &addr, sizeof(addr), + getnameinfo((struct sockaddr*) &addr, + get_sa_len((struct sockaddr*) &addr), namebuf, sizeof(namebuf), NULL, 0, NI_NUMERICHOST); ff_url_join(url, sizeof(url), "rtp", NULL, namebuf, port, "%s", optbuf); @@ -1830,7 +1844,8 @@ redirect: goto fail; } if (!getpeername(tcp_fd, (struct sockaddr*) &peer, &peer_len)) { - getnameinfo((struct sockaddr*) &peer, peer_len, host, sizeof(host), + getnameinfo((struct sockaddr*) &peer, + get_sa_len((struct sockaddr*) &peer), host, sizeof(host), NULL, 0, NI_NUMERICHOST); } @@ -2310,7 +2325,7 @@ static int sdp_read_header(AVFormatContext *s) AVDictionary *opts = map_to_opts(rt); err = getnameinfo((struct sockaddr*) &rtsp_st->sdp_ip, - sizeof(rtsp_st->sdp_ip), + get_sa_len((struct sockaddr*) &rtsp_st->sdp_ip), namebuf, sizeof(namebuf), NULL, 0, NI_NUMERICHOST); if (err) { av_log(s, AV_LOG_ERROR, "getnameinfo: %s\n", gai_strerror(err));