summaryrefslogtreecommitdiff
path: root/libavformat/rtsp.c
diff options
context:
space:
mode:
authorRonald S. Bultje <rsbultje@gmail.com>2009-03-04 00:57:37 +0000
committerRonald S. Bultje <rsbultje@gmail.com>2009-03-04 00:57:37 +0000
commit29b9f58b37ce310965a9d7a50e3abbc582a10f69 (patch)
treef25e6565284c62bae5e34fe8e952a97a53052e48 /libavformat/rtsp.c
parent6a85fb34c99f6010f7b5d2b6de0947abc4736b5e (diff)
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. Originally committed as revision 17797 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat/rtsp.c')
-rw-r--r--libavformat/rtsp.c47
1 files changed, 28 insertions, 19 deletions
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)