|
|
|
@@ -700,6 +700,9 @@ void rtsp_parse_line(RTSPMessageHeader *reply, const char *buf) |
|
|
|
} else if (av_stristart(p, "Server:", &p)) { |
|
|
|
skip_spaces(&p); |
|
|
|
av_strlcpy(reply->server, p, sizeof(reply->server)); |
|
|
|
} else if (av_stristart(p, "Notice:", &p) || |
|
|
|
av_stristart(p, "X-Notice:", &p)) { |
|
|
|
reply->notice = strtol(p, NULL, 10); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@@ -823,6 +826,17 @@ rtsp_read_reply (AVFormatContext *s, RTSPMessageHeader *reply, |
|
|
|
else |
|
|
|
av_free(content); |
|
|
|
|
|
|
|
/* EOS */ |
|
|
|
if (reply->notice == 2101 /* End-of-Stream Reached */ || |
|
|
|
reply->notice == 2104 /* Start-of-Stream Reached */ || |
|
|
|
reply->notice == 2306 /* Continuous Feed Terminated */) |
|
|
|
rt->state = RTSP_STATE_IDLE; |
|
|
|
else if (reply->notice >= 4400 && reply->notice < 5500) |
|
|
|
return AVERROR(EIO); /* data or server error */ |
|
|
|
else if (reply->notice == 2401 /* Ticket Expired */ || |
|
|
|
(reply->notice >= 5500 && reply->notice < 5600) /* end of term */ ) |
|
|
|
return AVERROR(EPERM); |
|
|
|
|
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
@@ -1314,6 +1328,8 @@ static int tcp_read_packet(AVFormatContext *s, RTSPStream **prtsp_st, |
|
|
|
if (ret == 1) /* received '$' */ |
|
|
|
break; |
|
|
|
/* XXX: parse message */ |
|
|
|
if (rt->state != RTSP_STATE_PLAYING) |
|
|
|
return 0; |
|
|
|
} |
|
|
|
ret = url_read_complete(rt->rtsp_hd, buf, 3); |
|
|
|
if (ret != 3) |
|
|
|
@@ -1399,6 +1415,8 @@ static int udp_read_packet(AVFormatContext *s, RTSPStream **prtsp_st, |
|
|
|
|
|
|
|
rtsp_read_reply(s, &reply, NULL, 0); |
|
|
|
/* XXX: parse message */ |
|
|
|
if (rt->state != RTSP_STATE_PLAYING) |
|
|
|
return 0; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@@ -1506,6 +1524,8 @@ static int rtsp_read_packet(AVFormatContext *s, |
|
|
|
} |
|
|
|
if (len < 0) |
|
|
|
return len; |
|
|
|
if (len == 0) |
|
|
|
return AVERROR_EOF; |
|
|
|
if (rt->transport == RTSP_TRANSPORT_RDT) |
|
|
|
ret = ff_rdt_parse_packet(rtsp_st->transport_priv, pkt, buf, len); |
|
|
|
else |
|
|
|
|