diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c index 27d6277e1b..4d7fdb632a 100644 --- a/libavformat/rtsp.c +++ b/libavformat/rtsp.c @@ -739,35 +739,20 @@ static void rtsp_skip_packet(AVFormatContext *s) } } -static void rtsp_send_cmd(AVFormatContext *s, - const char *cmd, RTSPMessageHeader *reply, - unsigned char **content_ptr) +static void +rtsp_read_reply (AVFormatContext *s, RTSPMessageHeader *reply, + unsigned char **content_ptr) { RTSPState *rt = s->priv_data; char buf[4096], buf1[1024], *q; unsigned char ch; const char *p; - int content_length, line_count; + int content_length, line_count = 0; unsigned char *content = NULL; memset(reply, 0, sizeof(*reply)); - rt->seq++; - av_strlcpy(buf, cmd, sizeof(buf)); - snprintf(buf1, sizeof(buf1), "CSeq: %d\r\n", rt->seq); - av_strlcat(buf, buf1, sizeof(buf)); - if (rt->session_id[0] != '\0' && !strstr(cmd, "\nIf-Match:")) { - snprintf(buf1, sizeof(buf1), "Session: %s\r\n", rt->session_id); - av_strlcat(buf, buf1, sizeof(buf)); - } - av_strlcat(buf, "\r\n", sizeof(buf)); -#ifdef DEBUG - printf("Sending:\n%s--\n", buf); -#endif - url_write(rt->rtsp_hd, buf, strlen(buf)); - /* parse reply (XXX: use buffers) */ - line_count = 0; rt->last_reply[0] = '\0'; for(;;) { q = buf; @@ -821,6 +806,30 @@ static void rtsp_send_cmd(AVFormatContext *s, av_free(content); } +static void rtsp_send_cmd(AVFormatContext *s, + const char *cmd, RTSPMessageHeader *reply, + unsigned char **content_ptr) +{ + RTSPState *rt = s->priv_data; + char buf[4096], buf1[1024]; + + rt->seq++; + av_strlcpy(buf, cmd, sizeof(buf)); + snprintf(buf1, sizeof(buf1), "CSeq: %d\r\n", rt->seq); + av_strlcat(buf, buf1, sizeof(buf)); + if (rt->session_id[0] != '\0' && !strstr(cmd, "\nIf-Match:")) { + snprintf(buf1, sizeof(buf1), "Session: %s\r\n", rt->session_id); + av_strlcat(buf, buf1, sizeof(buf)); + } + av_strlcat(buf, "\r\n", sizeof(buf)); +#ifdef DEBUG + printf("Sending:\n%s--\n", buf); +#endif + url_write(rt->rtsp_hd, buf, strlen(buf)); + + rtsp_read_reply(rt, reply, content_ptr); +} + /* close and free RTSP streams */ static void rtsp_close_streams(RTSPState *rt)