# HG changeset patch # User mstorsjo # Date 1275767146 0 # Node ID c5337969b43b9cebcf48fd5629a69d6244f46100 # Parent e6d6b3826eb231a79de3fadf65f412d014b5637e RTSP: Propagate errors up from ff_rtsp_send_cmd* Patch by Josh Allmann, joshua dot allmann at gmail diff -r e6d6b3826eb2 -r c5337969b43b rtsp.c --- a/rtsp.c Sat Jun 05 19:43:57 2010 +0000 +++ b/rtsp.c Sat Jun 05 19:45:46 2010 +0000 @@ -1001,7 +1001,7 @@ 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 @@ 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 @@ { 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 -r e6d6b3826eb2 -r c5337969b43b rtsp.h --- a/rtsp.h Sat Jun 05 19:43:57 2010 +0000 +++ b/rtsp.h Sat Jun 05 19:45:46 2010 +0000 @@ -345,8 +345,10 @@ * @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 @@ * * @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 @@ * @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 @@ * * @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);