summaryrefslogtreecommitdiffstats
path: root/libmpdemux/realrtsp/rtsp_session.c
diff options
context:
space:
mode:
authorrtognimp <rtognimp@b3059339-0415-0410-9bf9-f77b7e298cf2>2004-04-24 10:33:19 +0000
committerrtognimp <rtognimp@b3059339-0415-0410-9bf9-f77b7e298cf2>2004-04-24 10:33:19 +0000
commit31d8127a156a01e5f664374543b8f1c38ad15a85 (patch)
treea4e6da4e1f1e01205be32f026571331c41793db9 /libmpdemux/realrtsp/rtsp_session.c
parentebfa9397279dff0f73686eba0f48c9fd9c0c6e9b (diff)
downloadmpv-31d8127a156a01e5f664374543b8f1c38ad15a85.tar.bz2
mpv-31d8127a156a01e5f664374543b8f1c38ad15a85.tar.xz
Some sanity and bound checking
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@12267 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux/realrtsp/rtsp_session.c')
-rw-r--r--libmpdemux/realrtsp/rtsp_session.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/libmpdemux/realrtsp/rtsp_session.c b/libmpdemux/realrtsp/rtsp_session.c
index 195afa7a64..2cc789fd6f 100644
--- a/libmpdemux/realrtsp/rtsp_session.c
+++ b/libmpdemux/realrtsp/rtsp_session.c
@@ -45,6 +45,7 @@
#include "real.h"
#include "rmff.h"
#include "asmrp.h"
+#include "xbuffer.h"
/*
#define LOG
@@ -58,7 +59,7 @@ struct rtsp_session_s {
rtsp_t *s;
/* receive buffer */
- uint8_t recv[BUF_SIZE];
+ uint8_t *recv;
int recv_size;
int recv_read;
@@ -78,6 +79,8 @@ rtsp_session_t *rtsp_session_start(int fd, char **mrl, char *path, char *host, i
rmff_header_t *h;
uint32_t bandwidth=10485800;
+ rtsp_session->recv = xbuffer_init(BUF_SIZE);
+
//connect:
*redir = 0;
@@ -86,6 +89,7 @@ rtsp_session_t *rtsp_session_start(int fd, char **mrl, char *path, char *host, i
if (!rtsp_session->s)
{
printf("rtsp_session: failed to connect to server %s\n", path);
+ rtsp_session->recv = xbuffer_free(rtsp_session->recv);
free(rtsp_session);
return NULL;
}
@@ -124,6 +128,7 @@ rtsp_session_t *rtsp_session_start(int fd, char **mrl, char *path, char *host, i
{
printf("rtsp_session: session can not be established.\n");
rtsp_close(rtsp_session->s);
+ rtsp_session->recv = xbuffer_free(rtsp_session->recv);
free(rtsp_session);
return NULL;
}
@@ -131,7 +136,7 @@ rtsp_session_t *rtsp_session_start(int fd, char **mrl, char *path, char *host, i
rtsp_session->header_len=rmff_dump_header(h,rtsp_session->header,1024);
- memcpy(rtsp_session->recv, rtsp_session->header, rtsp_session->header_len);
+ rtsp_session->recv = xbuffer_copyin(rtsp_session->recv, 0, rtsp_session->header, rtsp_session->header_len);
rtsp_session->recv_size = rtsp_session->header_len;
rtsp_session->recv_read = 0;
@@ -140,6 +145,7 @@ rtsp_session_t *rtsp_session_start(int fd, char **mrl, char *path, char *host, i
printf("rtsp_session: Not a Real server. Server type is '%s'.\n",server);
rtsp_close(rtsp_session->s);
free(server);
+ rtsp_session->recv = xbuffer_free(rtsp_session->recv);
free(rtsp_session);
return NULL;
}
@@ -162,8 +168,8 @@ int rtsp_session_read (rtsp_session_t *this, char *data, int len) {
to_copy -= fill;
dest += fill;
this->recv_read = 0;
+ this->recv_size = real_get_rdt_chunk (this->s, &(this->recv));
source = this->recv;
- this->recv_size = real_get_rdt_chunk (this->s, source);
fill = this->recv_size;
if (this->recv_size == 0) {
@@ -197,5 +203,6 @@ int rtsp_session_peek_header(rtsp_session_t *this, char *buf, int maxsize) {
void rtsp_session_end(rtsp_session_t *session) {
rtsp_close(session->s);
+ session->recv = xbuffer_free(session->recv);
free(session);
}