diff options
author | Hendrik Leppkes | 2015-11-29 16:13:24 +0100 |
---|---|---|
committer | Hendrik Leppkes | 2015-11-29 16:13:24 +0100 |
commit | f62fe535d5c08562abcc1b302b0220c95acb307d (patch) | |
tree | 7e2f987a2f522f9c826630d1331d986aa8250b04 /libavformat | |
parent | a6dac0b41054510eb88210197246f9fc40c5781c (diff) | |
parent | 2c17fb61ced2059034856a6c6cd303014aed01fe (diff) |
Merge commit '2c17fb61ced2059034856a6c6cd303014aed01fe'
* commit '2c17fb61ced2059034856a6c6cd303014aed01fe':
rtsp: Log getaddrinfo failures
Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
Diffstat (limited to 'libavformat')
-rw-r--r-- | libavformat/rtsp.c | 25 | ||||
-rw-r--r-- | libavformat/rtsp.h | 3 | ||||
-rw-r--r-- | libavformat/rtspdec.c | 2 |
3 files changed, 20 insertions, 10 deletions
diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c index 3e012cd93d..c2db27f52c 100644 --- a/libavformat/rtsp.c +++ b/libavformat/rtsp.c @@ -184,12 +184,19 @@ static void rtsp_parse_range_npt(const char *p, int64_t *start, int64_t *end) } } -static int get_sockaddr(const char *buf, struct sockaddr_storage *sock) +static int get_sockaddr(AVFormatContext *s, + const char *buf, struct sockaddr_storage *sock) { struct addrinfo hints = { 0 }, *ai = NULL; + int ret; + hints.ai_flags = AI_NUMERICHOST; - if (getaddrinfo(buf, NULL, &hints, &ai)) + if ((ret = getaddrinfo(buf, NULL, &hints, &ai))) { + av_log(s, AV_LOG_ERROR, "getaddrinfo(%s): %s\n", + buf, + gai_strerror(ret)); return -1; + } memcpy(sock, ai->ai_addr, FFMIN(sizeof(*sock), ai->ai_addrlen)); freeaddrinfo(ai); return 0; @@ -397,7 +404,7 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1, if (strcmp(buf1, "IP4") && strcmp(buf1, "IP6")) return; get_word_sep(buf1, sizeof(buf1), "/", &p); - if (get_sockaddr(buf1, &sdp_ip)) + if (get_sockaddr(s, buf1, &sdp_ip)) return; ttl = 16; if (*p == '/') { @@ -861,7 +868,8 @@ static void rtsp_parse_range(int *min_ptr, int *max_ptr, const char **pp) } /* XXX: only one transport specification is parsed */ -static void rtsp_parse_transport(RTSPMessageHeader *reply, const char *p) +static void rtsp_parse_transport(AVFormatContext *s, + RTSPMessageHeader *reply, const char *p) { char transport_protocol[16]; char profile[16]; @@ -953,7 +961,7 @@ static void rtsp_parse_transport(RTSPMessageHeader *reply, const char *p) if (*p == '=') { p++; get_word_sep(buf, sizeof(buf), ";,", &p); - get_sockaddr(buf, &th->destination); + get_sockaddr(s, buf, &th->destination); } } else if (!strcmp(parameter, "source")) { if (*p == '=') { @@ -1040,7 +1048,8 @@ static void rtsp_parse_rtp_info(RTSPState *rt, const char *p) handle_rtp_info(rt, url, seq, rtptime); } -void ff_rtsp_parse_line(RTSPMessageHeader *reply, const char *buf, +void ff_rtsp_parse_line(AVFormatContext *s, + RTSPMessageHeader *reply, const char *buf, RTSPState *rt, const char *method) { const char *p; @@ -1057,7 +1066,7 @@ void ff_rtsp_parse_line(RTSPMessageHeader *reply, const char *buf, } else if (av_stristart(p, "Content-Length:", &p)) { reply->content_length = strtol(p, NULL, 10); } else if (av_stristart(p, "Transport:", &p)) { - rtsp_parse_transport(reply, p); + rtsp_parse_transport(s, reply, p); } else if (av_stristart(p, "CSeq:", &p)) { reply->seq = strtol(p, NULL, 10); } else if (av_stristart(p, "Range:", &p)) { @@ -1186,7 +1195,7 @@ start: request = 1; } } else { - ff_rtsp_parse_line(reply, p, rt, method); + ff_rtsp_parse_line(s, reply, p, rt, method); av_strlcat(rt->last_reply, p, sizeof(rt->last_reply)); av_strlcat(rt->last_reply, "\n", sizeof(rt->last_reply)); } diff --git a/libavformat/rtsp.h b/libavformat/rtsp.h index d9e76ec667..bd837b5752 100644 --- a/libavformat/rtsp.h +++ b/libavformat/rtsp.h @@ -470,7 +470,8 @@ typedef struct RTSPStream { char crypto_params[100]; } RTSPStream; -void ff_rtsp_parse_line(RTSPMessageHeader *reply, const char *buf, +void ff_rtsp_parse_line(AVFormatContext *s, + RTSPMessageHeader *reply, const char *buf, RTSPState *rt, const char *method); /** diff --git a/libavformat/rtspdec.c b/libavformat/rtspdec.c index 3c0010e04d..77389b6ea6 100644 --- a/libavformat/rtspdec.c +++ b/libavformat/rtspdec.c @@ -151,7 +151,7 @@ static inline int rtsp_read_request(AVFormatContext *s, return ret; if (rbuflen > 1) { av_log(s, AV_LOG_TRACE, "Parsing[%d]: %s\n", rbuflen, rbuf); - ff_rtsp_parse_line(request, rbuf, rt, method); + ff_rtsp_parse_line(s, request, rbuf, rt, method); } } while (rbuflen > 0); if (request->seq != rt->seq + 1) { |