annotate stream/librtsp/rtsp.c @ 34979:93a763f04563

Fix bug with definition of IDPLAYDISK in Win32 GUI. Numeric identifiers starting from IDPLAYDISK are used for CDROM/DVD drive menu entries and there must be enough identifier for all drives available. Introduce IDPLAYDISK_LIMIT for a range of such identifiers. Additionally, add a check when creating menu entries and rework the condition for checking the play command for reasons of clarity. Reported by Stephen Sheldon, sfsheldo gmail com.
author ib
date Sat, 11 Aug 2012 13:02:58 +0000
parents 8fa2f43cb760
children 389d43c448b3
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"
31500
b01f807eb183 Use MSG_NOSIGNAL flag if available for send().
reimar
parents: 29263
diff changeset
54 #include "stream/network.h"
18799
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 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
57 #define LOG
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 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
61 * network utilities
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
62 */
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
63
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
64 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
65 int total, timeout;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
66
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
67 total = 0; timeout = 30;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
68 while (total < len){
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
69 int n;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
70
31500
b01f807eb183 Use MSG_NOSIGNAL flag if available for send().
reimar
parents: 29263
diff changeset
71 n = send (s, &buf[total], len - total, DEFAULT_SEND_FLAGS);
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
72
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
73 if (n > 0)
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
74 total += n;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
75 else if (n < 0) {
28402
c884d17bd005 Convert HAVE_WINSOCK2_H into a 0/1 definition.
diego
parents: 27461
diff changeset
76 #if !HAVE_WINSOCK2_H
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
77 if ((timeout>0) && ((errno == EAGAIN) || (errno == EINPROGRESS))) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
78 #else
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
79 if ((timeout>0) && ((errno == EAGAIN) || (WSAGetLastError() == WSAEINPROGRESS))) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
80 #endif
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
81 usec_sleep (1000000); timeout--;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
82 } else
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
83 return -1;
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
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
87 return total;
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
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
90 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
91
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
92 ssize_t ret, total;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
93
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
94 total = 0;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
95
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
96 while (total < count) {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
97
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
98 ret=recv (fd, ((uint8_t*)buf)+total, count-total, 0);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
99
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
100 if (ret<0) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
101 if(errno == EAGAIN) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
102 fd_set rset;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
103 struct timeval timeout;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
104
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
105 FD_ZERO (&rset);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
106 FD_SET (fd, &rset);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
107
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
108 timeout.tv_sec = 30;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
109 timeout.tv_usec = 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
110
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
111 if (select (fd+1, &rset, NULL, NULL, &timeout) <= 0) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
112 return -1;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
113 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
114 continue;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
115 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
116
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
117 mp_msg(MSGT_OPEN, MSGL_ERR, "rtsp: read error.\n");
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
118 return ret;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
119 } else
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
120 total += ret;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
121
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
122 /* end of stream */
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
123 if (!ret) break;
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
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
126 return total;
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 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
130 * rtsp_get gets a line from stream
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
131 * and returns a null terminated string.
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
132 */
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
133
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
134 static char *rtsp_get(rtsp_t *s) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
135
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
136 int n=1;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
137 char *buffer = malloc(BUF_SIZE);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
138 char *string = NULL;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
139
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
140 read_stream(s->s, buffer, 1);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
141 while (n<BUF_SIZE) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
142 read_stream(s->s, &(buffer[n]), 1);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
143 if ((buffer[n-1]==0x0d)&&(buffer[n]==0x0a)) break;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
144 n++;
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
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
147 if (n>=BUF_SIZE) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
148 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
149 exit(1);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
150 }
18854
a973acb2e572 cosmetic patch to remove useless sizeof(char) statements
ben
parents: 18853
diff changeset
151 string=malloc(n);
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
152 memcpy(string,buffer,n-1);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
153 string[n-1]=0;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
154
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
155 #ifdef LOG
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
156 mp_msg(MSGT_OPEN, MSGL_INFO, "librtsp: << '%s'\n", string);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
157 #endif
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
158
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
159
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
160 free(buffer);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
161 return string;
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 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
165 * rtsp_put puts a line on stream
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
166 */
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
167
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
168 static void rtsp_put(rtsp_t *s, const char *string) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
169
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
170 int len=strlen(string);
18854
a973acb2e572 cosmetic patch to remove useless sizeof(char) statements
ben
parents: 18853
diff changeset
171 char *buf=malloc(len+2);
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
172
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
173 #ifdef LOG
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
174 mp_msg(MSGT_OPEN, MSGL_INFO, "librtsp: >> '%s'", string);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
175 #endif
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
176
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
177 memcpy(buf,string,len);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
178 buf[len]=0x0d;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
179 buf[len+1]=0x0a;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
180
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
181 write_stream(s->s, buf, len+2);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
182
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
183 #ifdef LOG
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
184 mp_msg(MSGT_OPEN, MSGL_INFO, " done.\n");
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
185 #endif
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
186
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
187 free(buf);
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 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
191 * extract server status code
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
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
194 static int rtsp_get_code(const char *string) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
195
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
196 char buf[4];
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
197 int code=0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
198
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
199 if (!strncmp(string, RTSP_PROTOCOL_VERSION, strlen(RTSP_PROTOCOL_VERSION)))
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
200 {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
201 memcpy(buf, string+strlen(RTSP_PROTOCOL_VERSION)+1, 3);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
202 buf[3]=0;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
203 code=atoi(buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
204 } else if (!strncmp(string, RTSP_METHOD_SET_PARAMETER,8))
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
205 {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
206 return RTSP_STATUS_SET_PARAMETER;
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
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
209 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
210
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
211 return code;
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 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
215 * send a request
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
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
218 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
219
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
220 char **payload=s->scheduled;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
221 char *buf;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
222
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
223 buf = malloc(strlen(type)+strlen(what)+strlen(RTSP_PROTOCOL_VERSION)+3);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
224
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
225 sprintf(buf,"%s %s %s",type, what, RTSP_PROTOCOL_VERSION);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
226 rtsp_put(s,buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
227 free(buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
228 if (payload)
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
229 while (*payload) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
230 rtsp_put(s,*payload);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
231 payload++;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
232 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
233 rtsp_put(s,"");
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
234 rtsp_unschedule_all(s);
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 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
238 * schedule standard fields
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
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
241 static void rtsp_schedule_standard(rtsp_t *s) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
242
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
243 char tmp[17];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
244
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
245 snprintf(tmp, 17, "CSeq: %u", s->cseq);
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
246 rtsp_schedule_field(s, tmp);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
247
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
248 if (s->session) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
249 char *buf;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
250 buf = malloc(strlen(s->session)+15);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
251 sprintf(buf, "Session: %s", s->session);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
252 rtsp_schedule_field(s, buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
253 free(buf);
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 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
257 * 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
258 */
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
259
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
260 static int rtsp_get_answers(rtsp_t *s) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
261
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
262 char *answer=NULL;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
263 unsigned int answer_seq;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
264 char **answer_ptr=s->answers;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
265 int code;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
266 int ans_count = 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
267
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
268 answer=rtsp_get(s);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
269 if (!answer)
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
270 return 0;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
271 code=rtsp_get_code(answer);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
272 free(answer);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
273
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
274 rtsp_free_answers(s);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
275
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
276 do { /* while we get answer lines */
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
277
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
278 answer=rtsp_get(s);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
279 if (!answer)
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
280 return 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
281
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
282 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
283 sscanf(answer,"%*s %u",&answer_seq);
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
284 if (s->cseq != answer_seq) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
285 #ifdef LOG
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
286 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
287 #endif
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
288 s->cseq=answer_seq;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
289 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
290 }
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
291 if (!strncasecmp(answer,"Server:",7)) {
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
292 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
293 sscanf(answer,"%*s %s",buf);
32537
8fa2f43cb760 Remove most of the NULL pointer check before free all over the code
cboesch
parents: 31500
diff changeset
294 free(s->server);
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
295 s->server=strdup(buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
296 free(buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
297 }
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
298 if (!strncasecmp(answer,"Session:",8)) {
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
299 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
300 sscanf(answer,"%*s %s",buf);
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
301 if (s->session) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
302 if (strcmp(buf, s->session)) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
303 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
304 free(s->session);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
305 s->session=strdup(buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
306 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
307 } else
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
308 {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
309 #ifdef LOG
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
310 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
311 #endif
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
312 s->session=strdup(buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
313 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
314 free(buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
315 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
316 *answer_ptr=answer;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
317 answer_ptr++;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
318 } while ((strlen(answer)!=0) && (++ans_count < MAX_FIELDS));
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
319
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
320 s->cseq++;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
321
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
322 *answer_ptr=NULL;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
323 rtsp_schedule_standard(s);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
324
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
325 return code;
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 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
329 * send an ok message
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
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
332 int rtsp_send_ok(rtsp_t *s) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
333 char cseq[16];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
334
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
335 rtsp_put(s, "RTSP/1.0 200 OK");
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
336 sprintf(cseq,"CSeq: %u", s->cseq);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
337 rtsp_put(s, cseq);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
338 rtsp_put(s, "");
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
339 return 0;
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 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
343 * implementation of must-have rtsp requests; functions return
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
344 * server status code.
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
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
347 int rtsp_request_options(rtsp_t *s, const char *what) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
348
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
349 char *buf;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
350
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
351 if (what) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
352 buf=strdup(what);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
353 } else
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
354 {
18854
a973acb2e572 cosmetic patch to remove useless sizeof(char) statements
ben
parents: 18853
diff changeset
355 buf=malloc(strlen(s->host)+16);
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
356 sprintf(buf,"rtsp://%s:%i", s->host, s->port);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
357 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
358 rtsp_send_request(s,RTSP_METHOD_OPTIONS,buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
359 free(buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
360
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
361 return rtsp_get_answers(s);
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
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
364 int rtsp_request_describe(rtsp_t *s, const char *what) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
365
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
366 char *buf;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
367
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
368 if (what) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
369 buf=strdup(what);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
370 } else
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
371 {
18854
a973acb2e572 cosmetic patch to remove useless sizeof(char) statements
ben
parents: 18853
diff changeset
372 buf=malloc(strlen(s->host)+strlen(s->path)+16);
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
373 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
374 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
375 rtsp_send_request(s,RTSP_METHOD_DESCRIBE,buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
376 free(buf);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
377
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
378 return rtsp_get_answers(s);
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
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
381 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
382
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
383 char *buf = NULL;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
384
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
385 if (what)
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
386 buf = strdup (what);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
387 else
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
388 {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
389 int len = strlen (s->host) + strlen (s->path) + 16;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
390 if (control)
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
391 len += strlen (control) + 1;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
392
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
393 buf = malloc (len);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
394 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
395 control ? "/" : "", control ? control : "");
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
396 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
397
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
398 rtsp_send_request (s, RTSP_METHOD_SETUP, buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
399 free (buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
400 return rtsp_get_answers (s);
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
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
403 int rtsp_request_setparameter(rtsp_t *s, const char *what) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
404
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
405 char *buf;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
406
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
407 if (what) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
408 buf=strdup(what);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
409 } else
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
410 {
18854
a973acb2e572 cosmetic patch to remove useless sizeof(char) statements
ben
parents: 18853
diff changeset
411 buf=malloc(strlen(s->host)+strlen(s->path)+16);
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
412 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
413 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
414 rtsp_send_request(s,RTSP_METHOD_SET_PARAMETER,buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
415 free(buf);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
416
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
417 return rtsp_get_answers(s);
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
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
420 int rtsp_request_play(rtsp_t *s, const char *what) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
421
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
422 char *buf;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
423 int ret;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
424
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
425 if (what) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
426 buf=strdup(what);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
427 } else
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
428 {
18854
a973acb2e572 cosmetic patch to remove useless sizeof(char) statements
ben
parents: 18853
diff changeset
429 buf=malloc(strlen(s->host)+strlen(s->path)+16);
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
430 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
431 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
432 rtsp_send_request(s,RTSP_METHOD_PLAY,buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
433 free(buf);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
434
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
435 ret = rtsp_get_answers (s);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
436 if (ret == RTSP_STATUS_OK)
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
437 s->server_state = RTSP_PLAYING;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
438
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
439 return ret;
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
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
442 int rtsp_request_teardown(rtsp_t *s, const char *what) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
443
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
444 char *buf;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
445
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
446 if (what)
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
447 buf = strdup (what);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
448 else
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
449 {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
450 buf =
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
451 malloc (strlen (s->host) + strlen (s->path) + 16);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
452 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
453 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
454 rtsp_send_request (s, RTSP_METHOD_TEARDOWN, buf);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
455 free (buf);
18801
f17474882196 prevent a buffer overflow to occur at teardown
ben
parents: 18799
diff changeset
456
f17474882196 prevent a buffer overflow to occur at teardown
ben
parents: 18799
diff changeset
457 /* 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
458 reading more will only result to garbage and buffer overflow */
f17474882196 prevent a buffer overflow to occur at teardown
ben
parents: 18799
diff changeset
459 return RTSP_STATUS_OK;
18799
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 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
463 * read opaque data from stream
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
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
466 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
467
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
468 int i,seq;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
469
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
470 if (size>=4) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
471 i=read_stream(s->s, buffer, 4);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
472 if (i<4) return i;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
473 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
474 ((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
475 {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
476 char *rest=rtsp_get(s);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
477 if (!rest)
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
478 return -1;
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
479
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
480 seq=-1;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
481 do {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
482 free(rest);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
483 rest=rtsp_get(s);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
484 if (!rest)
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
485 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
486 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
487 sscanf(rest,"%*s %u",&seq);
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
488 } while (strlen(rest)!=0);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
489 free(rest);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
490 if (seq<0) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
491 #ifdef LOG
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
492 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
493 #endif
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
494 seq=1;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
495 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
496 /* let's make the server happy */
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
497 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
498 rest=malloc(17);
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
499 sprintf(rest,"CSeq: %u", seq);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
500 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
501 free(rest);
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
502 rtsp_put(s, "");
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
503 i=read_stream(s->s, buffer, size);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
504 } else
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
505 {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
506 i=read_stream(s->s, buffer+4, size-4);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
507 i+=4;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
508 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
509 } else
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
510 i=read_stream(s->s, buffer, size);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
511 #ifdef LOG
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
512 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
513 #endif
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
514
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
515 return i;
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 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
519 * connect to a rtsp server
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
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
522 //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
523 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
524
27103
a3f6dc43b585 Move rtsp_close away by simplification - avoids symbol clash with libnemesi
lu_zero
parents: 19271
diff changeset
525 rtsp_t *s;
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
526 int i;
27103
a3f6dc43b585 Move rtsp_close away by simplification - avoids symbol clash with libnemesi
lu_zero
parents: 19271
diff changeset
527
a3f6dc43b585 Move rtsp_close away by simplification - avoids symbol clash with libnemesi
lu_zero
parents: 19271
diff changeset
528 if (fd < 0) {
a3f6dc43b585 Move rtsp_close away by simplification - avoids symbol clash with libnemesi
lu_zero
parents: 19271
diff changeset
529 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
530 return NULL;
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
a3f6dc43b585 Move rtsp_close away by simplification - avoids symbol clash with libnemesi
lu_zero
parents: 19271
diff changeset
533 s = malloc(sizeof(rtsp_t));
a3f6dc43b585 Move rtsp_close away by simplification - avoids symbol clash with libnemesi
lu_zero
parents: 19271
diff changeset
534
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
535 for (i=0; i<MAX_FIELDS; i++) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
536 s->answers[i]=NULL;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
537 s->scheduled[i]=NULL;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
538 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
539
27103
a3f6dc43b585 Move rtsp_close away by simplification - avoids symbol clash with libnemesi
lu_zero
parents: 19271
diff changeset
540 s->s = fd;
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
541 s->server=NULL;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
542 s->server_state=0;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
543 s->server_caps=0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
544
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
545 s->cseq=0;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
546 s->session=NULL;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
547
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
548 if (user_agent)
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
549 s->user_agent=strdup(user_agent);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
550 else
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
551 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
552
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
553 s->mrl = strdup(mrl);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
554 s->host = strdup(host);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
555 s->port = port;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
556 s->path = strdup(path);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
557 while (*path == '/')
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
558 path++;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
559 if ((s->param = strchr(s->path, '?')) != NULL)
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
560 s->param++;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
561 //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
562 //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
563
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
564 s->server_state=RTSP_CONNECTED;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
565
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
566 /* now let's send an options request. */
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
567 rtsp_schedule_field(s, "CSeq: 1");
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
568 rtsp_schedule_field(s, s->user_agent);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
569 rtsp_schedule_field(s, "ClientChallenge: 9e26d33f2984236010ef6253fb1887f7");
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
570 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
571 rtsp_schedule_field(s, "CompanyID: KnKV4M4I/B2FjJ1TToLycw==");
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
572 rtsp_schedule_field(s, "GUID: 00000000-0000-0000-0000-000000000000");
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
573 rtsp_schedule_field(s, "RegionData: 0");
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
574 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
575 /*rtsp_schedule_field(s, "Pragma: initiate-session");*/
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
576 rtsp_request_options(s, NULL);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
577
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
578 return s;
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 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
583 * 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
584 * 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
585 */
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
586
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
587 char *rtsp_search_answers(rtsp_t *s, const char *tag) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
588
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
589 char **answer;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
590 char *ptr;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
591
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
592 if (!s->answers) return NULL;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
593 answer=s->answers;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
594
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
595 while (*answer) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
596 if (!strncasecmp(*answer,tag,strlen(tag))) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
597 ptr=strchr(*answer,':');
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
598 if (!ptr) return NULL;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
599 ptr++;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
600 while(*ptr==' ') ptr++;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
601 return ptr;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
602 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
603 answer++;
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
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
606 return NULL;
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 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
610 * session id management
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
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
613 void rtsp_set_session(rtsp_t *s, const char *id) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
614
32537
8fa2f43cb760 Remove most of the NULL pointer check before free all over the code
cboesch
parents: 31500
diff changeset
615 free(s->session);
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
616
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
617 s->session=strdup(id);
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
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
621 char *rtsp_get_session(rtsp_t *s) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
622
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
623 return s->session;
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
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
627 char *rtsp_get_mrl(rtsp_t *s) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
628
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
629 return s->mrl;
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 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
632
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
633 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
634 int len;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
635 char *param;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
636 if (!s->param)
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
637 return NULL;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
638 if (!p)
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
639 return strdup(s->param);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
640 len = strlen(p);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
641 param = s->param;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
642 while (param && *param) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
643 char *nparam = strchr(param, '&');
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
644 if (strncmp(param, p, len) == 0 && param[len] == '=') {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
645 param += len + 1;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
646 len = nparam ? nparam - param : strlen(param);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
647 nparam = malloc(len + 1);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
648 memcpy(nparam, param, len);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
649 nparam[len] = 0;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
650 return nparam;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
651 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
652 param = nparam ? nparam + 1 : NULL;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
653 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
654 return NULL;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
655 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
656
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
657 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
658 * schedules a field for transmission
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
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
661 void rtsp_schedule_field(rtsp_t *s, const char *string) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
662
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
663 int i=0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
664
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
665 if (!string) return;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
666
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
667 while(s->scheduled[i]) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
668 i++;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
669 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
670 s->scheduled[i]=strdup(string);
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
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
673 /*
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
674 * removes the first scheduled field which prefix matches string.
18799
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
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
677 void rtsp_unschedule_field(rtsp_t *s, const char *string) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
678
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
679 char **ptr=s->scheduled;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
680
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
681 if (!string) return;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
682
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
683 while(*ptr) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
684 if (!strncmp(*ptr, string, strlen(string)))
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
685 break;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
686 else
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
687 ptr++;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
688 }
32537
8fa2f43cb760 Remove most of the NULL pointer check before free all over the code
cboesch
parents: 31500
diff changeset
689 free(*ptr);
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
690 ptr++;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
691 do {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
692 *(ptr-1)=*ptr;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
693 } while(*ptr);
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 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
697 * unschedule all fields
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
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
700 void rtsp_unschedule_all(rtsp_t *s) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
701
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
702 char **ptr;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
703
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
704 if (!s->scheduled) return;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
705 ptr=s->scheduled;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
706
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
707 while (*ptr) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
708 free(*ptr);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
709 *ptr=NULL;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
710 ptr++;
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 /*
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
714 * free answers
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
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
717 void rtsp_free_answers(rtsp_t *s) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
718
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
719 char **answer;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
720
18799
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
721 if (!s->answers) return;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
722 answer=s->answers;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
723
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
724 while (*answer) {
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
725 free(*answer);
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
726 *answer=NULL;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
727 answer++;
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
728 }
e16345b97dab moved generic rtsp related files from realrtsp to librtsp
ben
parents:
diff changeset
729 }