# HG changeset patch # User rbultje # Date 1236128257 0 # Node ID 2962d395431b1ae758775b419506159b0a316fbc # Parent d148dbaebaca33b394308318b031228c2c9a83ec 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. diff -r d148dbaebaca -r 2962d395431b rtsp.c --- 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)