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
This commit is contained in:
parent
c453d1bb8c
commit
d0382374b7
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user