Mercurial > mplayer.hg
comparison libmpdemux/realrtsp/rtsp_session.c @ 12266:096072d234c6
Some sanity and bound checking
author | rtognimp |
---|---|
date | Sat, 24 Apr 2004 10:33:19 +0000 |
parents | d572c605f665 |
children | ec342714b8a9 |
comparison
equal
deleted
inserted
replaced
12265:c9e1fe032d10 | 12266:096072d234c6 |
---|---|
43 #include "rtsp.h" | 43 #include "rtsp.h" |
44 #include "rtsp_session.h" | 44 #include "rtsp_session.h" |
45 #include "real.h" | 45 #include "real.h" |
46 #include "rmff.h" | 46 #include "rmff.h" |
47 #include "asmrp.h" | 47 #include "asmrp.h" |
48 #include "xbuffer.h" | |
48 | 49 |
49 /* | 50 /* |
50 #define LOG | 51 #define LOG |
51 */ | 52 */ |
52 | 53 |
56 struct rtsp_session_s { | 57 struct rtsp_session_s { |
57 | 58 |
58 rtsp_t *s; | 59 rtsp_t *s; |
59 | 60 |
60 /* receive buffer */ | 61 /* receive buffer */ |
61 uint8_t recv[BUF_SIZE]; | 62 uint8_t *recv; |
62 int recv_size; | 63 int recv_size; |
63 int recv_read; | 64 int recv_read; |
64 | 65 |
65 /* header buffer */ | 66 /* header buffer */ |
66 uint8_t header[HEADER_SIZE]; | 67 uint8_t header[HEADER_SIZE]; |
76 char *server; | 77 char *server; |
77 char *mrl_line = NULL; | 78 char *mrl_line = NULL; |
78 rmff_header_t *h; | 79 rmff_header_t *h; |
79 uint32_t bandwidth=10485800; | 80 uint32_t bandwidth=10485800; |
80 | 81 |
82 rtsp_session->recv = xbuffer_init(BUF_SIZE); | |
83 | |
81 //connect: | 84 //connect: |
82 *redir = 0; | 85 *redir = 0; |
83 | 86 |
84 /* connect to server */ | 87 /* connect to server */ |
85 rtsp_session->s=rtsp_connect(fd,*mrl,path,host,port,NULL); | 88 rtsp_session->s=rtsp_connect(fd,*mrl,path,host,port,NULL); |
86 if (!rtsp_session->s) | 89 if (!rtsp_session->s) |
87 { | 90 { |
88 printf("rtsp_session: failed to connect to server %s\n", path); | 91 printf("rtsp_session: failed to connect to server %s\n", path); |
92 rtsp_session->recv = xbuffer_free(rtsp_session->recv); | |
89 free(rtsp_session); | 93 free(rtsp_session); |
90 return NULL; | 94 return NULL; |
91 } | 95 } |
92 | 96 |
93 /* looking for server type */ | 97 /* looking for server type */ |
122 // goto connect; /* *shudder* i made a design mistake somewhere */ | 126 // goto connect; /* *shudder* i made a design mistake somewhere */ |
123 } else | 127 } else |
124 { | 128 { |
125 printf("rtsp_session: session can not be established.\n"); | 129 printf("rtsp_session: session can not be established.\n"); |
126 rtsp_close(rtsp_session->s); | 130 rtsp_close(rtsp_session->s); |
131 rtsp_session->recv = xbuffer_free(rtsp_session->recv); | |
127 free(rtsp_session); | 132 free(rtsp_session); |
128 return NULL; | 133 return NULL; |
129 } | 134 } |
130 } | 135 } |
131 | 136 |
132 rtsp_session->header_len=rmff_dump_header(h,rtsp_session->header,1024); | 137 rtsp_session->header_len=rmff_dump_header(h,rtsp_session->header,1024); |
133 | 138 |
134 memcpy(rtsp_session->recv, rtsp_session->header, rtsp_session->header_len); | 139 rtsp_session->recv = xbuffer_copyin(rtsp_session->recv, 0, rtsp_session->header, rtsp_session->header_len); |
135 rtsp_session->recv_size = rtsp_session->header_len; | 140 rtsp_session->recv_size = rtsp_session->header_len; |
136 rtsp_session->recv_read = 0; | 141 rtsp_session->recv_read = 0; |
137 | 142 |
138 } else | 143 } else |
139 { | 144 { |
140 printf("rtsp_session: Not a Real server. Server type is '%s'.\n",server); | 145 printf("rtsp_session: Not a Real server. Server type is '%s'.\n",server); |
141 rtsp_close(rtsp_session->s); | 146 rtsp_close(rtsp_session->s); |
142 free(server); | 147 free(server); |
148 rtsp_session->recv = xbuffer_free(rtsp_session->recv); | |
143 free(rtsp_session); | 149 free(rtsp_session); |
144 return NULL; | 150 return NULL; |
145 } | 151 } |
146 free(server); | 152 free(server); |
147 | 153 |
160 | 166 |
161 memcpy(dest, source, fill); | 167 memcpy(dest, source, fill); |
162 to_copy -= fill; | 168 to_copy -= fill; |
163 dest += fill; | 169 dest += fill; |
164 this->recv_read = 0; | 170 this->recv_read = 0; |
171 this->recv_size = real_get_rdt_chunk (this->s, &(this->recv)); | |
165 source = this->recv; | 172 source = this->recv; |
166 this->recv_size = real_get_rdt_chunk (this->s, source); | |
167 fill = this->recv_size; | 173 fill = this->recv_size; |
168 | 174 |
169 if (this->recv_size == 0) { | 175 if (this->recv_size == 0) { |
170 #ifdef LOG | 176 #ifdef LOG |
171 printf ("librtsp: %d of %d bytes provided\n", len-to_copy, len); | 177 printf ("librtsp: %d of %d bytes provided\n", len-to_copy, len); |
195 } | 201 } |
196 | 202 |
197 void rtsp_session_end(rtsp_session_t *session) { | 203 void rtsp_session_end(rtsp_session_t *session) { |
198 | 204 |
199 rtsp_close(session->s); | 205 rtsp_close(session->s); |
206 session->recv = xbuffer_free(session->recv); | |
200 free(session); | 207 free(session); |
201 } | 208 } |