Mercurial > libavformat.hg
changeset 4644:2962d395431b libavformat
Split rtsp_send_cmd() into two functions, one for the actual sending of the
command and a second, new function to read the reply to this command. This
will make it possible to read server notices that are not in response to a
command in future versions, such as EOS or interrupt notices. See "[PATCH]
rtsp.c: split rtsp_send_cmd() in a send- and a receive-function" thread.
author | rbultje |
---|---|
date | Wed, 04 Mar 2009 00:57:37 +0000 |
parents | d148dbaebaca |
children | a9a2c60d0e84 |
files | rtsp.c |
diffstat | 1 files changed, 28 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/rtsp.c Tue Mar 03 20:24:17 2009 +0000 +++ b/rtsp.c Wed Mar 04 00:57:37 2009 +0000 @@ -739,35 +739,20 @@ } } -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 @@ 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)