annotate stream/librtsp/rtsp.c @ 30017:7119354805e7

Use on-stack subtitle struct for temporary storage for passing subtitles on for rendering by libass. This avoids mangling the static subtitle struct that is supposed to contain the subtitles that will actually be displayed and it also minimally reduces memory usage by freeing the subtitle lines again as early as possible.
author reimar
date Fri, 18 Dec 2009 19:29:33 +0000
parents 0f1b5b68af32
children b01f807eb183
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
1 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
2 * This file was ported to MPlayer from xine CVS rtsp.c,v 1.9 2003/04/10 02:30:48
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
3 */
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
4
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
5 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
6 * Copyright (C) 2000-2002 the xine project
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
7 *
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
8 * This file is part of xine, a free video player.
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
9 *
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
10 * xine is free software; you can redistribute it and/or modify
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
11 * it under the terms of the GNU General Public License as published by
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
12 * the Free Software Foundation; either version 2 of the License, or
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
13 * (at your option) any later version.
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
14 *
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
15 * xine is distributed in the hope that it will be useful,
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
18 * GNU General Public License for more details.
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
19 *
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
20 * You should have received a copy of the GNU General Public License
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
21 * along with this program; if not, write to the Free Software
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
22 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
23 *
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
24 *
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
25 * a minimalistic implementation of rtsp protocol,
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
26 * *not* RFC 2326 compilant yet.
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
27 *
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
28 * 2006, Benjamin Zores and Vincent Mussard
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
29 * fixed a lot of RFC compliance issues.
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
30 */
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
31
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
32 #include <unistd.h>
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
33 #include <stdio.h>
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
34 #include <assert.h>
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
35 #include "config.h"
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
36 #include <string.h>
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
37 #include <sys/stat.h>
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
38 #include <fcntl.h>
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
39 #include <errno.h>
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
40 #include <stdlib.h>
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
41 #include <time.h>
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
42 #include <sys/time.h>
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
43 #include <sys/types.h>
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
44 #include <inttypes.h>
28402
c884d17bd005 Convert HAVE_WINSOCK2_H into a 0/1 definition.
diego
parents: 27461
diff changeset
45 #if HAVE_WINSOCK2_H
27109
9440e551f9e3 mingw uses Windows sockets.
vayne
parents: 27104
diff changeset
46 #include <winsock2.h>
27320
44341e4d5621 Do not include sys/socket.h when using winsock2, it is pointless
reimar
parents: 27202
diff changeset
47 #else
44341e4d5621 Do not include sys/socket.h when using winsock2, it is pointless
reimar
parents: 27202
diff changeset
48 #include <sys/socket.h>
27109
9440e551f9e3 mingw uses Windows sockets.
vayne
parents: 27104
diff changeset
49 #endif
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
50 #include "mp_msg.h"
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
51 #include "rtsp.h"
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
52 #include "rtsp_session.h"
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
53 #include "osdep/timer.h"
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
54
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
55 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
56 #define LOG
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
57 */
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
58
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
59 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
60 * network utilities
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
61 */
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
62
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
63 static int write_stream(int s, const char *buf, int len) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
64 int total, timeout;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
65
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
66 total = 0; timeout = 30;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
67 while (total < len){
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
68 int n;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
69
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
70 n = send (s, &buf[total], len - total, 0);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
71
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
72 if (n > 0)
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
73 total += n;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
74 else if (n < 0) {
28402
c884d17bd005 Convert HAVE_WINSOCK2_H into a 0/1 definition.
diego
parents: 27461
diff changeset
75 #if !HAVE_WINSOCK2_H
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
76 if ((timeout>0) && ((errno == EAGAIN) || (errno == EINPROGRESS))) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
77 #else
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
78 if ((timeout>0) && ((errno == EAGAIN) || (WSAGetLastError() == WSAEINPROGRESS))) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
79 #endif
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
80 usec_sleep (1000000); timeout--;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
81 } else
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
82 return -1;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
83 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
84 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
85
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
86 return total;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
87 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
88
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
89 static ssize_t read_stream(int fd, void *buf, size_t count) {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
90
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
91 ssize_t ret, total;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
92
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
93 total = 0;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
94
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
95 while (total < count) {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
96
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
97 ret=recv (fd, ((uint8_t*)buf)+total, count-total, 0);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
98
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
99 if (ret<0) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
100 if(errno == EAGAIN) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
101 fd_set rset;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
102 struct timeval timeout;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
103
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
104 FD_ZERO (&rset);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
105 FD_SET (fd, &rset);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
106
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
107 timeout.tv_sec = 30;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
108 timeout.tv_usec = 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
109
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
110 if (select (fd+1, &rset, NULL, NULL, &timeout) <= 0) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
111 return -1;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
112 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
113 continue;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
114 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
115
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
116 mp_msg(MSGT_OPEN, MSGL_ERR, "rtsp: read error.\n");
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
117 return ret;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
118 } else
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
119 total += ret;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
120
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
121 /* end of stream */
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
122 if (!ret) break;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
123 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
124
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
125 return total;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
126 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
127
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
128 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
129 * rtsp_get gets a line from stream
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
130 * and returns a null terminated string.
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
131 */
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
132
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
133 static char *rtsp_get(rtsp_t *s) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
134
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
135 int n=1;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
136 char *buffer = malloc(BUF_SIZE);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
137 char *string = NULL;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
138
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
139 read_stream(s->s, buffer, 1);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
140 while (n<BUF_SIZE) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
141 read_stream(s->s, &(buffer[n]), 1);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
142 if ((buffer[n-1]==0x0d)&&(buffer[n]==0x0a)) break;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
143 n++;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
144 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
145
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
146 if (n>=BUF_SIZE) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
147 mp_msg(MSGT_OPEN, MSGL_FATAL, "librtsp: buffer overflow in rtsp_get\n");
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
148 exit(1);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
149 }
18854
a973acb2e572 cosmetic patch to remove useless sizeof(char) statements
ben
parents: 18853
diff changeset
150 string=malloc(n);
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
151 memcpy(string,buffer,n-1);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
152 string[n-1]=0;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
153
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
154 #ifdef LOG
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
155 mp_msg(MSGT_OPEN, MSGL_INFO, "librtsp: << '%s'\n", string);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
156 #endif
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
157
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
158
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
159 free(buffer);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
160 return string;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
161 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
162
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
163 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
164 * rtsp_put puts a line on stream
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
165 */
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
166
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
167 static void rtsp_put(rtsp_t *s, const char *string) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
168
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
169 int len=strlen(string);
18854
a973acb2e572 cosmetic patch to remove useless sizeof(char) statements
ben
parents: 18853
diff changeset
170 char *buf=malloc(len+2);
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
171
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
172 #ifdef LOG
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
173 mp_msg(MSGT_OPEN, MSGL_INFO, "librtsp: >> '%s'", string);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
174 #endif
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
175
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
176 memcpy(buf,string,len);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
177 buf[len]=0x0d;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
178 buf[len+1]=0x0a;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
179
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
180 write_stream(s->s, buf, len+2);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
181
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
182 #ifdef LOG
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
183 mp_msg(MSGT_OPEN, MSGL_INFO, " done.\n");
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
184 #endif
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
185
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
186 free(buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
187 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
188
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
189 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
190 * extract server status code
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
191 */
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
192
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
193 static int rtsp_get_code(const char *string) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
194
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
195 char buf[4];
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
196 int code=0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
197
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
198 if (!strncmp(string, RTSP_PROTOCOL_VERSION, strlen(RTSP_PROTOCOL_VERSION)))
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
199 {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
200 memcpy(buf, string+strlen(RTSP_PROTOCOL_VERSION)+1, 3);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
201 buf[3]=0;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
202 code=atoi(buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
203 } else if (!strncmp(string, RTSP_METHOD_SET_PARAMETER,8))
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
204 {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
205 return RTSP_STATUS_SET_PARAMETER;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
206 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
207
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
208 if(code != RTSP_STATUS_OK) mp_msg(MSGT_OPEN, MSGL_INFO, "librtsp: server responds: '%s'\n",string);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
209
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
210 return code;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
211 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
212
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
213 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
214 * send a request
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
215 */
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
216
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
217 static void rtsp_send_request(rtsp_t *s, const char *type, const char *what) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
218
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
219 char **payload=s->scheduled;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
220 char *buf;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
221
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
222 buf = malloc(strlen(type)+strlen(what)+strlen(RTSP_PROTOCOL_VERSION)+3);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
223
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
224 sprintf(buf,"%s %s %s",type, what, RTSP_PROTOCOL_VERSION);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
225 rtsp_put(s,buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
226 free(buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
227 if (payload)
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
228 while (*payload) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
229 rtsp_put(s,*payload);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
230 payload++;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
231 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
232 rtsp_put(s,"");
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
233 rtsp_unschedule_all(s);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
234 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
235
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
236 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
237 * schedule standard fields
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
238 */
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
239
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
240 static void rtsp_schedule_standard(rtsp_t *s) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
241
18853
1ec19da0c642 increase buffer size, "CSeq: %u" has a worst case of 17 (fix 1.18 from xine, see http://xine.cvs.sourceforge.net/xine/xine-lib/src/input/librtsp/rtsp.c?r1=1.17&r2=1.18)
ben
parents: 18852
diff changeset
242 char tmp[17];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
243
18853
1ec19da0c642 increase buffer size, "CSeq: %u" has a worst case of 17 (fix 1.18 from xine, see http://xine.cvs.sourceforge.net/xine/xine-lib/src/input/librtsp/rtsp.c?r1=1.17&r2=1.18)
ben
parents: 18852
diff changeset
244 snprintf(tmp, 17, "CSeq: %u", s->cseq);
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
245 rtsp_schedule_field(s, tmp);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
246
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
247 if (s->session) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
248 char *buf;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
249 buf = malloc(strlen(s->session)+15);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
250 sprintf(buf, "Session: %s", s->session);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
251 rtsp_schedule_field(s, buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
252 free(buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
253 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
254 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
255 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
256 * get the answers, if server responses with something != 200, return NULL
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
257 */
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
258
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
259 static int rtsp_get_answers(rtsp_t *s) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
260
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
261 char *answer=NULL;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
262 unsigned int answer_seq;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
263 char **answer_ptr=s->answers;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
264 int code;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
265 int ans_count = 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
266
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
267 answer=rtsp_get(s);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
268 if (!answer)
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
269 return 0;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
270 code=rtsp_get_code(answer);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
271 free(answer);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
272
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
273 rtsp_free_answers(s);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
274
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
275 do { /* while we get answer lines */
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
276
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
277 answer=rtsp_get(s);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
278 if (!answer)
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
279 return 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
280
18852
b17648e2762e be more tolerant on server responses parameters case (fix 1.17 from xine, see http://xine.cvs.sourceforge.net/xine/xine-lib/src/input/librtsp/rtsp.c?r1=1.16&r2=1.17)
ben
parents: 18851
diff changeset
281 if (!strncasecmp(answer,"CSeq:",5)) {
b17648e2762e be more tolerant on server responses parameters case (fix 1.17 from xine, see http://xine.cvs.sourceforge.net/xine/xine-lib/src/input/librtsp/rtsp.c?r1=1.16&r2=1.17)
ben
parents: 18851
diff changeset
282 sscanf(answer,"%*s %u",&answer_seq);
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
283 if (s->cseq != answer_seq) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
284 #ifdef LOG
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
285 mp_msg(MSGT_OPEN, MSGL_WARN, "librtsp: warning: CSeq mismatch. got %u, assumed %u", answer_seq, s->cseq);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
286 #endif
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
287 s->cseq=answer_seq;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
288 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
289 }
18852
b17648e2762e be more tolerant on server responses parameters case (fix 1.17 from xine, see http://xine.cvs.sourceforge.net/xine/xine-lib/src/input/librtsp/rtsp.c?r1=1.16&r2=1.17)
ben
parents: 18851
diff changeset
290 if (!strncasecmp(answer,"Server:",7)) {
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
291 char *buf = malloc(strlen(answer));
18852
b17648e2762e be more tolerant on server responses parameters case (fix 1.17 from xine, see http://xine.cvs.sourceforge.net/xine/xine-lib/src/input/librtsp/rtsp.c?r1=1.16&r2=1.17)
ben
parents: 18851
diff changeset
292 sscanf(answer,"%*s %s",buf);
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
293 if (s->server) free(s->server);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
294 s->server=strdup(buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
295 free(buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
296 }
18852
b17648e2762e be more tolerant on server responses parameters case (fix 1.17 from xine, see http://xine.cvs.sourceforge.net/xine/xine-lib/src/input/librtsp/rtsp.c?r1=1.16&r2=1.17)
ben
parents: 18851
diff changeset
297 if (!strncasecmp(answer,"Session:",8)) {
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
298 char *buf = calloc(1, strlen(answer));
18852
b17648e2762e be more tolerant on server responses parameters case (fix 1.17 from xine, see http://xine.cvs.sourceforge.net/xine/xine-lib/src/input/librtsp/rtsp.c?r1=1.16&r2=1.17)
ben
parents: 18851
diff changeset
299 sscanf(answer,"%*s %s",buf);
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
300 if (s->session) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
301 if (strcmp(buf, s->session)) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
302 mp_msg(MSGT_OPEN, MSGL_WARN, "rtsp: warning: setting NEW session: %s\n", buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
303 free(s->session);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
304 s->session=strdup(buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
305 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
306 } else
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
307 {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
308 #ifdef LOG
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
309 mp_msg(MSGT_OPEN, MSGL_INFO, "rtsp: setting session id to: %s\n", buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
310 #endif
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
311 s->session=strdup(buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
312 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
313 free(buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
314 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
315 *answer_ptr=answer;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
316 answer_ptr++;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
317 } while ((strlen(answer)!=0) && (++ans_count < MAX_FIELDS));
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
318
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
319 s->cseq++;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
320
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
321 *answer_ptr=NULL;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
322 rtsp_schedule_standard(s);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
323
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
324 return code;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
325 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
326
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
327 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
328 * send an ok message
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
329 */
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
330
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
331 int rtsp_send_ok(rtsp_t *s) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
332 char cseq[16];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
333
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
334 rtsp_put(s, "RTSP/1.0 200 OK");
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
335 sprintf(cseq,"CSeq: %u", s->cseq);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
336 rtsp_put(s, cseq);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
337 rtsp_put(s, "");
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
338 return 0;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
339 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
340
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
341 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
342 * implementation of must-have rtsp requests; functions return
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
343 * server status code.
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
344 */
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
345
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
346 int rtsp_request_options(rtsp_t *s, const char *what) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
347
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
348 char *buf;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
349
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
350 if (what) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
351 buf=strdup(what);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
352 } else
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
353 {
18854
a973acb2e572 cosmetic patch to remove useless sizeof(char) statements
ben
parents: 18853
diff changeset
354 buf=malloc(strlen(s->host)+16);
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
355 sprintf(buf,"rtsp://%s:%i", s->host, s->port);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
356 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
357 rtsp_send_request(s,RTSP_METHOD_OPTIONS,buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
358 free(buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
359
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
360 return rtsp_get_answers(s);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
361 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
362
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
363 int rtsp_request_describe(rtsp_t *s, const char *what) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
364
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
365 char *buf;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
366
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
367 if (what) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
368 buf=strdup(what);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
369 } else
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
370 {
18854
a973acb2e572 cosmetic patch to remove useless sizeof(char) statements
ben
parents: 18853
diff changeset
371 buf=malloc(strlen(s->host)+strlen(s->path)+16);
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
372 sprintf(buf,"rtsp://%s:%i/%s", s->host, s->port, s->path);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
373 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
374 rtsp_send_request(s,RTSP_METHOD_DESCRIBE,buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
375 free(buf);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
376
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
377 return rtsp_get_answers(s);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
378 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
379
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
380 int rtsp_request_setup(rtsp_t *s, const char *what, char *control) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
381
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
382 char *buf = NULL;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
383
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
384 if (what)
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
385 buf = strdup (what);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
386 else
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
387 {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
388 int len = strlen (s->host) + strlen (s->path) + 16;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
389 if (control)
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
390 len += strlen (control) + 1;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
391
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
392 buf = malloc (len);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
393 sprintf (buf, "rtsp://%s:%i/%s%s%s", s->host, s->port, s->path,
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
394 control ? "/" : "", control ? control : "");
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
395 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
396
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
397 rtsp_send_request (s, RTSP_METHOD_SETUP, buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
398 free (buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
399 return rtsp_get_answers (s);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
400 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
401
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
402 int rtsp_request_setparameter(rtsp_t *s, const char *what) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
403
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
404 char *buf;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
405
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
406 if (what) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
407 buf=strdup(what);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
408 } else
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
409 {
18854
a973acb2e572 cosmetic patch to remove useless sizeof(char) statements
ben
parents: 18853
diff changeset
410 buf=malloc(strlen(s->host)+strlen(s->path)+16);
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
411 sprintf(buf,"rtsp://%s:%i/%s", s->host, s->port, s->path);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
412 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
413 rtsp_send_request(s,RTSP_METHOD_SET_PARAMETER,buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
414 free(buf);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
415
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
416 return rtsp_get_answers(s);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
417 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
418
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
419 int rtsp_request_play(rtsp_t *s, const char *what) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
420
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
421 char *buf;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
422 int ret;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
423
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
424 if (what) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
425 buf=strdup(what);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
426 } else
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
427 {
18854
a973acb2e572 cosmetic patch to remove useless sizeof(char) statements
ben
parents: 18853
diff changeset
428 buf=malloc(strlen(s->host)+strlen(s->path)+16);
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
429 sprintf(buf,"rtsp://%s:%i/%s", s->host, s->port, s->path);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
430 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
431 rtsp_send_request(s,RTSP_METHOD_PLAY,buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
432 free(buf);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
433
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
434 ret = rtsp_get_answers (s);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
435 if (ret == RTSP_STATUS_OK)
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
436 s->server_state = RTSP_PLAYING;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
437
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
438 return ret;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
439 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
440
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
441 int rtsp_request_teardown(rtsp_t *s, const char *what) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
442
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
443 char *buf;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
444
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
445 if (what)
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
446 buf = strdup (what);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
447 else
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
448 {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
449 buf =
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
450 malloc (strlen (s->host) + strlen (s->path) + 16);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
451 sprintf (buf, "rtsp://%s:%i/%s", s->host, s->port, s->path);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
452 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
453 rtsp_send_request (s, RTSP_METHOD_TEARDOWN, buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
454 free (buf);
18801
f17474882196 prevent a buffer overflow to occur at teardown
ben
parents: 18799
diff changeset
455
f17474882196 prevent a buffer overflow to occur at teardown
ben
parents: 18799
diff changeset
456 /* after teardown we're done with RTSP streaming, no need to get answer as
f17474882196 prevent a buffer overflow to occur at teardown
ben
parents: 18799
diff changeset
457 reading more will only result to garbage and buffer overflow */
f17474882196 prevent a buffer overflow to occur at teardown
ben
parents: 18799
diff changeset
458 return RTSP_STATUS_OK;
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
459 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
460
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
461 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
462 * read opaque data from stream
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
463 */
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
464
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
465 int rtsp_read_data(rtsp_t *s, char *buffer, unsigned int size) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
466
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
467 int i,seq;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
468
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
469 if (size>=4) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
470 i=read_stream(s->s, buffer, 4);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
471 if (i<4) return i;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
472 if (((buffer[0]=='S')&&(buffer[1]=='E')&&(buffer[2]=='T')&&(buffer[3]=='_')) ||
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
473 ((buffer[0]=='O')&&(buffer[1]=='P')&&(buffer[2]=='T')&&(buffer[3]=='I'))) // OPTIONS
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
474 {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
475 char *rest=rtsp_get(s);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
476 if (!rest)
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
477 return -1;
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
478
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
479 seq=-1;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
480 do {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
481 free(rest);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
482 rest=rtsp_get(s);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
483 if (!rest)
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
484 return -1;
18852
b17648e2762e be more tolerant on server responses parameters case (fix 1.17 from xine, see http://xine.cvs.sourceforge.net/xine/xine-lib/src/input/librtsp/rtsp.c?r1=1.16&r2=1.17)
ben
parents: 18851
diff changeset
485 if (!strncasecmp(rest,"CSeq:",5))
b17648e2762e be more tolerant on server responses parameters case (fix 1.17 from xine, see http://xine.cvs.sourceforge.net/xine/xine-lib/src/input/librtsp/rtsp.c?r1=1.16&r2=1.17)
ben
parents: 18851
diff changeset
486 sscanf(rest,"%*s %u",&seq);
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
487 } while (strlen(rest)!=0);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
488 free(rest);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
489 if (seq<0) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
490 #ifdef LOG
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
491 mp_msg(MSGT_OPEN, MSGL_WARN, "rtsp: warning: CSeq not recognized!\n");
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
492 #endif
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
493 seq=1;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
494 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
495 /* let's make the server happy */
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
496 rtsp_put(s, "RTSP/1.0 451 Parameter Not Understood");
18854
a973acb2e572 cosmetic patch to remove useless sizeof(char) statements
ben
parents: 18853
diff changeset
497 rest=malloc(17);
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
498 sprintf(rest,"CSeq: %u", seq);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
499 rtsp_put(s, rest);
18855
a60bcf4969c3 coverity report #179 from xine: variable "rest" not freed or pointed-to in function "rtsp_put" (see http://xine.cvs.sourceforge.net/xine/xine-lib/src/input/librtsp/rtsp.c?r1=1.19&r2=1.20)
ben
parents: 18854
diff changeset
500 free(rest);
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
501 rtsp_put(s, "");
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
502 i=read_stream(s->s, buffer, size);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
503 } else
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
504 {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
505 i=read_stream(s->s, buffer+4, size-4);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
506 i+=4;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
507 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
508 } else
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
509 i=read_stream(s->s, buffer, size);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
510 #ifdef LOG
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
511 mp_msg(MSGT_OPEN, MSGL_INFO, "librtsp: << %d of %d bytes\n", i, size);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
512 #endif
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
513
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
514 return i;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
515 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
516
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
517 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
518 * connect to a rtsp server
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
519 */
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
520
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
521 //rtsp_t *rtsp_connect(const char *mrl, const char *user_agent) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
522 rtsp_t *rtsp_connect(int fd, char* mrl, char *path, char *host, int port, char *user_agent) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
523
27103
a3f6dc43b585 Move rtsp_close away by simplification - avoids symbol clash with libnemesi
lu_zero
parents: 19271
diff changeset
524 rtsp_t *s;
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
525 int i;
27103
a3f6dc43b585 Move rtsp_close away by simplification - avoids symbol clash with libnemesi
lu_zero
parents: 19271
diff changeset
526
a3f6dc43b585 Move rtsp_close away by simplification - avoids symbol clash with libnemesi
lu_zero
parents: 19271
diff changeset
527 if (fd < 0) {
a3f6dc43b585 Move rtsp_close away by simplification - avoids symbol clash with libnemesi
lu_zero
parents: 19271
diff changeset
528 mp_msg(MSGT_OPEN, MSGL_ERR, "rtsp: failed to connect to '%s'\n", host);
a3f6dc43b585 Move rtsp_close away by simplification - avoids symbol clash with libnemesi
lu_zero
parents: 19271
diff changeset
529 return NULL;
a3f6dc43b585 Move rtsp_close away by simplification - avoids symbol clash with libnemesi
lu_zero
parents: 19271
diff changeset
530 }
a3f6dc43b585 Move rtsp_close away by simplification - avoids symbol clash with libnemesi
lu_zero
parents: 19271
diff changeset
531
a3f6dc43b585 Move rtsp_close away by simplification - avoids symbol clash with libnemesi
lu_zero
parents: 19271
diff changeset
532 s = malloc(sizeof(rtsp_t));
a3f6dc43b585 Move rtsp_close away by simplification - avoids symbol clash with libnemesi
lu_zero
parents: 19271
diff changeset
533
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
534 for (i=0; i<MAX_FIELDS; i++) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
535 s->answers[i]=NULL;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
536 s->scheduled[i]=NULL;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
537 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
538
27103
a3f6dc43b585 Move rtsp_close away by simplification - avoids symbol clash with libnemesi
lu_zero
parents: 19271
diff changeset
539 s->s = fd;
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
540 s->server=NULL;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
541 s->server_state=0;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
542 s->server_caps=0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
543
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
544 s->cseq=0;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
545 s->session=NULL;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
546
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
547 if (user_agent)
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
548 s->user_agent=strdup(user_agent);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
549 else
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
550 s->user_agent=strdup("User-Agent: RealMedia Player Version 6.0.9.1235 (linux-2.0-libc6-i386-gcc2.95)");
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
551
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
552 s->mrl = strdup(mrl);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
553 s->host = strdup(host);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
554 s->port = port;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
555 s->path = strdup(path);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
556 while (*path == '/')
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
557 path++;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
558 if ((s->param = strchr(s->path, '?')) != NULL)
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
559 s->param++;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
560 //mp_msg(MSGT_OPEN, MSGL_INFO, "path=%s\n", s->path);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
561 //mp_msg(MSGT_OPEN, MSGL_INFO, "param=%s\n", s->param ? s->param : "NULL");
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
562
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
563 s->server_state=RTSP_CONNECTED;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
564
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
565 /* now let's send an options request. */
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
566 rtsp_schedule_field(s, "CSeq: 1");
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
567 rtsp_schedule_field(s, s->user_agent);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
568 rtsp_schedule_field(s, "ClientChallenge: 9e26d33f2984236010ef6253fb1887f7");
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
569 rtsp_schedule_field(s, "PlayerStarttime: [28/03/2003:22:50:23 00:00]");
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
570 rtsp_schedule_field(s, "CompanyID: KnKV4M4I/B2FjJ1TToLycw==");
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
571 rtsp_schedule_field(s, "GUID: 00000000-0000-0000-0000-000000000000");
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
572 rtsp_schedule_field(s, "RegionData: 0");
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
573 rtsp_schedule_field(s, "ClientID: Linux_2.4_6.0.9.1235_play32_RN01_EN_586");
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
574 /*rtsp_schedule_field(s, "Pragma: initiate-session");*/
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
575 rtsp_request_options(s, NULL);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
576
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
577 return s;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
578 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
579
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
580
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
581 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
582 * search in answers for tags. returns a pointer to the content
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
583 * after the first matched tag. returns NULL if no match found.
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
584 */
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
585
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
586 char *rtsp_search_answers(rtsp_t *s, const char *tag) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
587
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
588 char **answer;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
589 char *ptr;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
590
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
591 if (!s->answers) return NULL;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
592 answer=s->answers;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
593
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
594 while (*answer) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
595 if (!strncasecmp(*answer,tag,strlen(tag))) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
596 ptr=strchr(*answer,':');
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
597 if (!ptr) return NULL;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
598 ptr++;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
599 while(*ptr==' ') ptr++;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
600 return ptr;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
601 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
602 answer++;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
603 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
604
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
605 return NULL;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
606 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
607
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
608 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
609 * session id management
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
610 */
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
611
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
612 void rtsp_set_session(rtsp_t *s, const char *id) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
613
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
614 if (s->session) free(s->session);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
615
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
616 s->session=strdup(id);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
617
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
618 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
619
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
620 char *rtsp_get_session(rtsp_t *s) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
621
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
622 return s->session;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
623
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
624 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
625
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
626 char *rtsp_get_mrl(rtsp_t *s) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
627
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
628 return s->mrl;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
629
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
630 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
631
19108
5e767cabf4cd marks several read-only string parameters and function return-values which can only be used read-only as const. Patch by Stefan Huehner, stefan _AT huener-org
reynaldo
parents: 18855
diff changeset
632 char *rtsp_get_param(rtsp_t *s, const char *p) {
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
633 int len;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
634 char *param;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
635 if (!s->param)
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
636 return NULL;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
637 if (!p)
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
638 return strdup(s->param);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
639 len = strlen(p);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
640 param = s->param;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
641 while (param && *param) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
642 char *nparam = strchr(param, '&');
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
643 if (strncmp(param, p, len) == 0 && param[len] == '=') {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
644 param += len + 1;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
645 len = nparam ? nparam - param : strlen(param);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
646 nparam = malloc(len + 1);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
647 memcpy(nparam, param, len);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
648 nparam[len] = 0;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
649 return nparam;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
650 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
651 param = nparam ? nparam + 1 : NULL;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
652 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
653 return NULL;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
654 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
655
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
656 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
657 * schedules a field for transmission
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
658 */
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
659
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
660 void rtsp_schedule_field(rtsp_t *s, const char *string) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
661
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
662 int i=0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
663
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
664 if (!string) return;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
665
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
666 while(s->scheduled[i]) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
667 i++;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
668 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
669 s->scheduled[i]=strdup(string);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
670 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
671
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
672 /*
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
673 * removes the first scheduled field which prefix matches string.
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
674 */
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
675
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
676 void rtsp_unschedule_field(rtsp_t *s, const char *string) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
677
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
678 char **ptr=s->scheduled;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
679
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
680 if (!string) return;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
681
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
682 while(*ptr) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
683 if (!strncmp(*ptr, string, strlen(string)))
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
684 break;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
685 else
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
686 ptr++;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
687 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
688 if (*ptr) free(*ptr);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
689 ptr++;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
690 do {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
691 *(ptr-1)=*ptr;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
692 } while(*ptr);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
693 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
694
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
695 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
696 * unschedule all fields
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
697 */
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
698
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
699 void rtsp_unschedule_all(rtsp_t *s) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
700
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
701 char **ptr;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
702
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
703 if (!s->scheduled) return;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
704 ptr=s->scheduled;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
705
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
706 while (*ptr) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
707 free(*ptr);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
708 *ptr=NULL;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
709 ptr++;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
710 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
711 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
712 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
713 * free answers
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
714 */
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
715
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
716 void rtsp_free_answers(rtsp_t *s) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
717
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
718 char **answer;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
719
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
720 if (!s->answers) return;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
721 answer=s->answers;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
722
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
723 while (*answer) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
724 free(*answer);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
725 *answer=NULL;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
726 answer++;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
727 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
728 }