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 }