diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c index f379b781b0..a6584d33fb 100644 --- a/libavformat/rtsp.c +++ b/libavformat/rtsp.c @@ -932,7 +932,10 @@ static int rtsp_read_reply(AVFormatContext *s, RTSPMessageHeader *reply, return 0; } -static void rtsp_send_cmd_async(AVFormatContext *s, const char *cmd) +static void rtsp_send_cmd_with_content_async(AVFormatContext *s, + const char *cmd, + const unsigned char *send_content, + int send_content_length) { RTSPState *rt = s->priv_data; char buf[4096], buf1[1024]; @@ -949,14 +952,23 @@ static void rtsp_send_cmd_async(AVFormatContext *s, const char *cmd) av_strlcatf(buf, sizeof(buf), "Authorization: Basic %s\r\n", rt->auth_b64); + if (send_content_length > 0 && send_content) + av_strlcatf(buf, sizeof(buf), "Content-Length: %d\r\n", send_content_length); av_strlcat(buf, "\r\n", sizeof(buf)); dprintf(s, "Sending:\n%s--\n", buf); url_write(rt->rtsp_hd, buf, strlen(buf)); + if (send_content_length > 0 && send_content) + url_write(rt->rtsp_hd, send_content, send_content_length); rt->last_cmd_time = av_gettime(); } +static void rtsp_send_cmd_async(AVFormatContext *s, const char *cmd) +{ + rtsp_send_cmd_with_content_async(s, cmd, NULL, 0); +} + static void rtsp_send_cmd(AVFormatContext *s, const char *cmd, RTSPMessageHeader *reply, unsigned char **content_ptr) @@ -966,6 +978,18 @@ static void rtsp_send_cmd(AVFormatContext *s, rtsp_read_reply(s, reply, content_ptr, 0); } +static void rtsp_send_cmd_with_content(AVFormatContext *s, + const char *cmd, + RTSPMessageHeader *reply, + unsigned char **content_ptr, + const unsigned char *send_content, + int send_content_length) +{ + rtsp_send_cmd_with_content_async(s, cmd, send_content, send_content_length); + + rtsp_read_reply(s, reply, content_ptr, 0); +} + /** * @returns 0 on success, <0 on error, 1 if protocol is unavailable. */