diff options
author | Josh Allmann <joshua.allmann@gmail.com> | 2010-06-05 19:45:46 +0000 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2010-06-05 19:45:46 +0000 |
commit | d0382374b77ad7bb274fc5d81eeef3c922d9821a (patch) | |
tree | 0fb69dcdb374c2de548b0885be9f68a2d7a82870 /libavformat | |
parent | c453d1bb8c2e54c00bd5cf252187e080cf3b1bb1 (diff) | |
download | ffmpeg-d0382374b77ad7bb274fc5d81eeef3c922d9821a.tar.gz |
RTSP: Propagate errors up from ff_rtsp_send_cmd*
Patch by Josh Allmann, joshua dot allmann at gmail
Originally committed as revision 23497 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat')
-rw-r--r-- | libavformat/rtsp.c | 25 | ||||
-rw-r--r-- | libavformat/rtsp.h | 12 |
2 files changed, 24 insertions, 13 deletions
diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c index 3b066adac0..14736d449a 100644 --- a/libavformat/rtsp.c +++ b/libavformat/rtsp.c @@ -1001,7 +1001,7 @@ int ff_rtsp_read_reply(AVFormatContext *s, RTSPMessageHeader *reply, return 0; } -void ff_rtsp_send_cmd_with_content_async(AVFormatContext *s, +int ff_rtsp_send_cmd_with_content_async(AVFormatContext *s, const char *method, const char *url, const char *headers, const unsigned char *send_content, @@ -1036,23 +1036,25 @@ void ff_rtsp_send_cmd_with_content_async(AVFormatContext *s, if (send_content_length > 0 && send_content) url_write(rt->rtsp_hd_out, send_content, send_content_length); rt->last_cmd_time = av_gettime(); + + return 0; } -void ff_rtsp_send_cmd_async(AVFormatContext *s, const char *method, +int ff_rtsp_send_cmd_async(AVFormatContext *s, const char *method, const char *url, const char *headers) { - ff_rtsp_send_cmd_with_content_async(s, method, url, headers, NULL, 0); + return ff_rtsp_send_cmd_with_content_async(s, method, url, headers, NULL, 0); } -void ff_rtsp_send_cmd(AVFormatContext *s, const char *method, const char *url, +int ff_rtsp_send_cmd(AVFormatContext *s, const char *method, const char *url, const char *headers, RTSPMessageHeader *reply, unsigned char **content_ptr) { - ff_rtsp_send_cmd_with_content(s, method, url, headers, reply, + return ff_rtsp_send_cmd_with_content(s, method, url, headers, reply, content_ptr, NULL, 0); } -void ff_rtsp_send_cmd_with_content(AVFormatContext *s, +int ff_rtsp_send_cmd_with_content(AVFormatContext *s, const char *method, const char *url, const char *header, RTSPMessageHeader *reply, @@ -1062,17 +1064,22 @@ void ff_rtsp_send_cmd_with_content(AVFormatContext *s, { RTSPState *rt = s->priv_data; HTTPAuthType cur_auth_type; + int ret; retry: cur_auth_type = rt->auth_state.auth_type; - ff_rtsp_send_cmd_with_content_async(s, method, url, header, - send_content, send_content_length); + if ((ret = ff_rtsp_send_cmd_with_content_async(s, method, url, header, + send_content, send_content_length))) + return ret; - ff_rtsp_read_reply(s, reply, content_ptr, 0); + if ((ret = ff_rtsp_read_reply(s, reply, content_ptr, 0) ) < 0) + return ret; if (reply->status_code == 401 && cur_auth_type == HTTP_AUTH_NONE && rt->auth_state.auth_type != HTTP_AUTH_NONE) goto retry; + + return 0; } /** diff --git a/libavformat/rtsp.h b/libavformat/rtsp.h index 9d8e53b061..5e990ea001 100644 --- a/libavformat/rtsp.h +++ b/libavformat/rtsp.h @@ -345,8 +345,10 @@ extern int rtsp_rtp_port_max; * @param send_content if non-null, the data to send as request body content * @param send_content_length the length of the send_content data, or 0 if * send_content is null + * + * @return zero if success, nonzero otherwise */ -void ff_rtsp_send_cmd_with_content_async(AVFormatContext *s, +int ff_rtsp_send_cmd_with_content_async(AVFormatContext *s, const char *method, const char *url, const char *headers, const unsigned char *send_content, @@ -356,7 +358,7 @@ void ff_rtsp_send_cmd_with_content_async(AVFormatContext *s, * * @see rtsp_send_cmd_with_content_async */ -void ff_rtsp_send_cmd_async(AVFormatContext *s, const char *method, +int ff_rtsp_send_cmd_async(AVFormatContext *s, const char *method, const char *url, const char *headers); /** @@ -372,8 +374,10 @@ void ff_rtsp_send_cmd_async(AVFormatContext *s, const char *method, * @param send_content if non-null, the data to send as request body content * @param send_content_length the length of the send_content data, or 0 if * send_content is null + * + * @return zero if success, nonzero otherwise */ -void ff_rtsp_send_cmd_with_content(AVFormatContext *s, +int ff_rtsp_send_cmd_with_content(AVFormatContext *s, const char *method, const char *url, const char *headers, RTSPMessageHeader *reply, @@ -386,7 +390,7 @@ void ff_rtsp_send_cmd_with_content(AVFormatContext *s, * * @see rtsp_send_cmd_with_content */ -void ff_rtsp_send_cmd(AVFormatContext *s, const char *method, +int ff_rtsp_send_cmd(AVFormatContext *s, const char *method, const char *url, const char *headers, RTSPMessageHeader *reply, unsigned char **content_ptr); |