annotate stream/asf_mmst_streaming.c @ 22010:04b7b7090eee

Forgotten free on error
author reimar
date Sat, 27 Jan 2007 14:52:18 +0000
parents 4d1ba1f391f3
children 6d8f2be532d4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
19882
9ffae26c0add Restore original copyright notice as found in xine and xine-mms where this
diego
parents: 19335
diff changeset
1 /*
9ffae26c0add Restore original copyright notice as found in xine and xine-mms where this
diego
parents: 19335
diff changeset
2 * MMST implementation taken from the xine-mms plugin made by
9ffae26c0add Restore original copyright notice as found in xine and xine-mms where this
diego
parents: 19335
diff changeset
3 * Major MMS (http://geocities.com/majormms/).
9ffae26c0add Restore original copyright notice as found in xine and xine-mms where this
diego
parents: 19335
diff changeset
4 * Ported to MPlayer by Abhijeet Phatak <abhijeetphatak@yahoo.com>.
9ffae26c0add Restore original copyright notice as found in xine and xine-mms where this
diego
parents: 19335
diff changeset
5 *
9ffae26c0add Restore original copyright notice as found in xine and xine-mms where this
diego
parents: 19335
diff changeset
6 * Information about the MMS protocol can be found at http://get.to/sdp
9ffae26c0add Restore original copyright notice as found in xine and xine-mms where this
diego
parents: 19335
diff changeset
7 *
9ffae26c0add Restore original copyright notice as found in xine and xine-mms where this
diego
parents: 19335
diff changeset
8 * copyright (C) 2002 Abhijeet Phatak <abhijeetphatak@yahoo.com>
9ffae26c0add Restore original copyright notice as found in xine and xine-mms where this
diego
parents: 19335
diff changeset
9 * copyright (C) 2002 the xine project
9ffae26c0add Restore original copyright notice as found in xine and xine-mms where this
diego
parents: 19335
diff changeset
10 * copyright (C) 2000-2001 major mms
9ffae26c0add Restore original copyright notice as found in xine and xine-mms where this
diego
parents: 19335
diff changeset
11 *
9ffae26c0add Restore original copyright notice as found in xine and xine-mms where this
diego
parents: 19335
diff changeset
12 * This file is part of MPlayer.
9ffae26c0add Restore original copyright notice as found in xine and xine-mms where this
diego
parents: 19335
diff changeset
13 *
9ffae26c0add Restore original copyright notice as found in xine and xine-mms where this
diego
parents: 19335
diff changeset
14 * MPlayer is free software; you can redistribute it and/or modify
9ffae26c0add Restore original copyright notice as found in xine and xine-mms where this
diego
parents: 19335
diff changeset
15 * it under the terms of the GNU General Public License as published by
9ffae26c0add Restore original copyright notice as found in xine and xine-mms where this
diego
parents: 19335
diff changeset
16 * the Free Software Foundation; either version 2 of the License, or
9ffae26c0add Restore original copyright notice as found in xine and xine-mms where this
diego
parents: 19335
diff changeset
17 * (at your option) any later version.
9ffae26c0add Restore original copyright notice as found in xine and xine-mms where this
diego
parents: 19335
diff changeset
18 *
9ffae26c0add Restore original copyright notice as found in xine and xine-mms where this
diego
parents: 19335
diff changeset
19 * MPlayer is distributed in the hope that it will be useful,
9ffae26c0add Restore original copyright notice as found in xine and xine-mms where this
diego
parents: 19335
diff changeset
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9ffae26c0add Restore original copyright notice as found in xine and xine-mms where this
diego
parents: 19335
diff changeset
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9ffae26c0add Restore original copyright notice as found in xine and xine-mms where this
diego
parents: 19335
diff changeset
22 * GNU General Public License for more details.
9ffae26c0add Restore original copyright notice as found in xine and xine-mms where this
diego
parents: 19335
diff changeset
23 *
9ffae26c0add Restore original copyright notice as found in xine and xine-mms where this
diego
parents: 19335
diff changeset
24 * You should have received a copy of the GNU General Public License
9ffae26c0add Restore original copyright notice as found in xine and xine-mms where this
diego
parents: 19335
diff changeset
25 * along with this program; if not, write to the Free Software
9ffae26c0add Restore original copyright notice as found in xine and xine-mms where this
diego
parents: 19335
diff changeset
26 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
9ffae26c0add Restore original copyright notice as found in xine and xine-mms where this
diego
parents: 19335
diff changeset
27 */
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
28
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
29
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
30 #include <stdio.h>
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
31 #include <stdlib.h>
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
32 #include <string.h>
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
33 #include <unistd.h>
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
34 #include <errno.h>
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
35 #include <inttypes.h>
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
36
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
37 #include "config.h"
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
38
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
39 #include "mp_msg.h"
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
40 #include "help_mp.h"
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
41
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
42 #ifndef HAVE_WINSOCK2
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
43 #define closesocket close
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
44 #else
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
45 #include <winsock2.h>
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
46 #endif
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
47
13600
a0bb374553a1 typo noticed by Shixin Zeng <shixinzeng at sjtu dot edu dot cn>
diego
parents: 12968
diff changeset
48 #ifndef USE_SETLOCALE
12675
7c5dee73a7dc disable iconv in case setlocale is disabled - compile fix
alex
parents: 12674
diff changeset
49 #undef USE_ICONV
7c5dee73a7dc disable iconv in case setlocale is disabled - compile fix
alex
parents: 12674
diff changeset
50 #endif
7c5dee73a7dc disable iconv in case setlocale is disabled - compile fix
alex
parents: 12674
diff changeset
51
11350
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
52 #ifdef USE_ICONV
12674
0392f36045f4 user nl_langinfo if langinfo support present for proper chinese support, feature requested by Shixin Zheng <shixinzheng@sjtu.edu.cn>
alex
parents: 12545
diff changeset
53 #include <iconv.h>
0392f36045f4 user nl_langinfo if langinfo support present for proper chinese support, feature requested by Shixin Zheng <shixinzheng@sjtu.edu.cn>
alex
parents: 12545
diff changeset
54 #ifdef USE_LANGINFO
0392f36045f4 user nl_langinfo if langinfo support present for proper chinese support, feature requested by Shixin Zheng <shixinzheng@sjtu.edu.cn>
alex
parents: 12545
diff changeset
55 #include <langinfo.h>
0392f36045f4 user nl_langinfo if langinfo support present for proper chinese support, feature requested by Shixin Zheng <shixinzheng@sjtu.edu.cn>
alex
parents: 12545
diff changeset
56 #endif
11350
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
57 #endif
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
58
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
59 #include "url.h"
19312
ab8d6b6deb63 proper inclusion of demuxer.h (including libmpdemux in Makefile only was to make previous split easier)
ben
parents: 19271
diff changeset
60 #include "libmpdemux/asf.h"
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
61
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
62 #include "stream.h"
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
63
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
64 #include "network.h"
19335
2a9d669e5ff6 isolated tcp socket code from network.c to a dedicated file
ben
parents: 19312
diff changeset
65 #include "tcp.h"
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
66
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
67 #define BUF_SIZE 102400
14163
dd835e8f3698 fix a problem pointed out by iDEFENSE and several similar ones.
reimar
parents: 13600
diff changeset
68 #define HDR_BUF_SIZE 8192
15181
ed74657f25b1 Use define instead of hardcodec value for max streams number
rtognimp
parents: 15173
diff changeset
69 #define MAX_STREAMS 20
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
70
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
71 typedef struct
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
72 {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
73 uint8_t buf[BUF_SIZE];
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
74 int num_bytes;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
75
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
76 } command_t;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
77
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
78 static int seq_num;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
79 static int num_stream_ids;
15181
ed74657f25b1 Use define instead of hardcodec value for max streams number
rtognimp
parents: 15173
diff changeset
80 static int stream_ids[MAX_STREAMS];
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
81
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
82 static int get_data (int s, char *buf, size_t count);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
83
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
84 static void put_32 (command_t *cmd, uint32_t value)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
85 {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
86 cmd->buf[cmd->num_bytes ] = value % 256;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
87 value = value >> 8;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
88 cmd->buf[cmd->num_bytes+1] = value % 256 ;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
89 value = value >> 8;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
90 cmd->buf[cmd->num_bytes+2] = value % 256 ;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
91 value = value >> 8;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
92 cmd->buf[cmd->num_bytes+3] = value % 256 ;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
93
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
94 cmd->num_bytes += 4;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
95 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
96
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
97 static uint32_t get_32 (unsigned char *cmd, int offset)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
98 {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
99 uint32_t ret;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
100
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
101 ret = cmd[offset] ;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
102 ret |= cmd[offset+1]<<8 ;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
103 ret |= cmd[offset+2]<<16 ;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
104 ret |= cmd[offset+3]<<24 ;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
105
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
106 return ret;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
107 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
108
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
109 static void send_command (int s, int command, uint32_t switches,
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
110 uint32_t extra, int length,
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
111 char *data)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
112 {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
113 command_t cmd;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
114 int len8;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
115
11225
48bb1fd37d2a Fixing tons of 10ls. Patch by rgselk <rgselknospam@yahoo.com>
alex
parents: 10625
diff changeset
116 len8 = (length + 7) / 8;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
117
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
118 cmd.num_bytes = 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
119
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
120 put_32 (&cmd, 0x00000001); /* start sequence */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
121 put_32 (&cmd, 0xB00BFACE); /* #-)) */
11225
48bb1fd37d2a Fixing tons of 10ls. Patch by rgselk <rgselknospam@yahoo.com>
alex
parents: 10625
diff changeset
122 put_32 (&cmd, len8*8 + 32);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
123 put_32 (&cmd, 0x20534d4d); /* protocol type "MMS " */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
124 put_32 (&cmd, len8 + 4);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
125 put_32 (&cmd, seq_num);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
126 seq_num++;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
127 put_32 (&cmd, 0x0); /* unknown */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
128 put_32 (&cmd, 0x0);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
129 put_32 (&cmd, len8+2);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
130 put_32 (&cmd, 0x00030000 | command); /* dir | command */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
131 put_32 (&cmd, switches);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
132 put_32 (&cmd, extra);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
133
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
134 memcpy (&cmd.buf[48], data, length);
11225
48bb1fd37d2a Fixing tons of 10ls. Patch by rgselk <rgselknospam@yahoo.com>
alex
parents: 10625
diff changeset
135 if (length & 7)
48bb1fd37d2a Fixing tons of 10ls. Patch by rgselk <rgselknospam@yahoo.com>
alex
parents: 10625
diff changeset
136 memset(&cmd.buf[48 + length], 0, 8 - (length & 7));
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
137
11225
48bb1fd37d2a Fixing tons of 10ls. Patch by rgselk <rgselknospam@yahoo.com>
alex
parents: 10625
diff changeset
138 if (send (s, cmd.buf, len8*8+48, 0) != (len8*8+48)) {
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
139 mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_MMST_WriteError);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
140 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
141 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
142
11350
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
143 #ifdef USE_ICONV
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
144 static iconv_t url_conv;
11403
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
145 #endif
11350
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
146
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
147 static void string_utf16(char *dest, char *src, int len) {
11403
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
148 int i;
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
149 #ifdef USE_ICONV
11350
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
150 size_t len1, len2;
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
151 char *ip, *op;
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
152
11412
ec3dac7d17a0 Warning fixes (approved by A'rpi).
rathann
parents: 11403
diff changeset
153 if (url_conv != (iconv_t)(-1))
11403
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
154 {
11350
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
155 memset(dest, 0, 1000);
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
156 len1 = len; len2 = 1000;
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
157 ip = src; op = dest;
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
158
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
159 iconv(url_conv, &ip, &len1, &op, &len2);
11403
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
160 }
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
161 else
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
162 {
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
163 #endif
15150
38ec64821910 Make string_utf16 code behave almost the same with or without iconv
rtognimp
parents: 14542
diff changeset
164 if (len > 499) len = 499;
11403
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
165 for (i=0; i<len; i++) {
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
166 dest[i*2] = src[i];
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
167 dest[i*2+1] = 0;
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
168 }
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
169 /* trailing zeroes */
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
170 dest[i*2] = 0;
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
171 dest[i*2+1] = 0;
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
172 #ifdef USE_ICONV
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
173 }
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
174 #endif
11350
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
175 }
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
176
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
177 static void get_answer (int s)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
178 {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
179 char data[BUF_SIZE];
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
180 int command = 0x1b;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
181
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
182 while (command == 0x1b) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
183 int len;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
184
10206
35e306346e59 Using recv/send instead read/write for proper MinGW support (it's a 4.2BSD standard). Patch by FloDt <flodt8@yahoo.de>
alex
parents: 10183
diff changeset
185 len = recv (s, data, BUF_SIZE, 0) ;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
186 if (!len) {
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
187 mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_MMST_EOFAlert);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
188 return;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
189 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
190
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
191 command = get_32 (data, 36) & 0xFFFF;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
192
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
193 if (command == 0x1b)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
194 send_command (s, 0x1b, 0, 0, 0, data);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
195 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
196 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
197
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
198 static int get_data (int s, char *buf, size_t count)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
199 {
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
200 ssize_t len;
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
201 size_t total = 0;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
202
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
203 while (total < count) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
204
10206
35e306346e59 Using recv/send instead read/write for proper MinGW support (it's a 4.2BSD standard). Patch by FloDt <flodt8@yahoo.de>
alex
parents: 10183
diff changeset
205 len = recv (s, &buf[total], count-total, 0);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
206
12545
868376f81c30 Fix hang on broken mmst streams
rtognimp
parents: 12121
diff changeset
207 if (len<=0) {
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
208 perror ("read error:");
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
209 return 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
210 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
211
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
212 total += len;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
213
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
214 if (len != 0) {
15626
941b1a71351f printf converted to mp_msg; made static many unnecessarily global symbols
nicodvb
parents: 15181
diff changeset
215 // mp_msg(MSGT_NETWORK,MSGL_INFO,"[%d/%d]", total, count);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
216 fflush (stdout);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
217 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
218
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
219 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
220
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
221 return 1;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
222
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
223 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
224
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
225 static int get_header (int s, uint8_t *header, streaming_ctrl_t *streaming_ctrl)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
226 {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
227 unsigned char pre_header[8];
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
228 int header_len;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
229
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
230 header_len = 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
231
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
232 while (1) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
233 if (!get_data (s, pre_header, 8)) {
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
234 mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_MMST_PreHeaderReadFailed);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
235 return 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
236 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
237 if (pre_header[4] == 0x02) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
238
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
239 int packet_len;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
240
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
241 packet_len = (pre_header[7] << 8 | pre_header[6]) - 8;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
242
15626
941b1a71351f printf converted to mp_msg; made static many unnecessarily global symbols
nicodvb
parents: 15181
diff changeset
243 // mp_msg(MSGT_NETWORK,MSGL_INFO,"asf header packet detected, len=%d\n", packet_len);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
244
14163
dd835e8f3698 fix a problem pointed out by iDEFENSE and several similar ones.
reimar
parents: 13600
diff changeset
245 if (packet_len < 0 || packet_len > HDR_BUF_SIZE - header_len) {
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
246 mp_msg(MSGT_NETWORK, MSGL_FATAL, MSGTR_MPDEMUX_MMST_InvalidHeaderSize);
14163
dd835e8f3698 fix a problem pointed out by iDEFENSE and several similar ones.
reimar
parents: 13600
diff changeset
247 return 0;
dd835e8f3698 fix a problem pointed out by iDEFENSE and several similar ones.
reimar
parents: 13600
diff changeset
248 }
dd835e8f3698 fix a problem pointed out by iDEFENSE and several similar ones.
reimar
parents: 13600
diff changeset
249
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
250 if (!get_data (s, &header[header_len], packet_len)) {
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
251 mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_MMST_HeaderDataReadFailed);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
252 return 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
253 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
254
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
255 header_len += packet_len;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
256
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
257 if ( (header[header_len-1] == 1) && (header[header_len-2]==1)) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
258
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
259
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
260 if( streaming_bufferize( streaming_ctrl, header, header_len )<0 ) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
261 return -1;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
262 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
263
15626
941b1a71351f printf converted to mp_msg; made static many unnecessarily global symbols
nicodvb
parents: 15181
diff changeset
264 // mp_msg(MSGT_NETWORK,MSGL_INFO,"get header packet finished\n");
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
265
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
266 return (header_len);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
267
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
268 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
269
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
270 } else {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
271
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
272 int32_t packet_len;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
273 int command;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
274 char data[BUF_SIZE];
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
275
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
276 if (!get_data (s, (char*)&packet_len, 4)) {
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
277 mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_MMST_packet_lenReadFailed);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
278 return 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
279 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
280
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
281 packet_len = get_32 ((unsigned char*)&packet_len, 0) + 4;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
282
15626
941b1a71351f printf converted to mp_msg; made static many unnecessarily global symbols
nicodvb
parents: 15181
diff changeset
283 // mp_msg(MSGT_NETWORK,MSGL_INFO,"command packet detected, len=%d\n", packet_len);
14163
dd835e8f3698 fix a problem pointed out by iDEFENSE and several similar ones.
reimar
parents: 13600
diff changeset
284
dd835e8f3698 fix a problem pointed out by iDEFENSE and several similar ones.
reimar
parents: 13600
diff changeset
285 if (packet_len < 0 || packet_len > BUF_SIZE) {
dd835e8f3698 fix a problem pointed out by iDEFENSE and several similar ones.
reimar
parents: 13600
diff changeset
286 mp_msg(MSGT_NETWORK, MSGL_FATAL,
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
287 MSGTR_MPDEMUX_MMST_InvalidRTSPPacketSize);
14163
dd835e8f3698 fix a problem pointed out by iDEFENSE and several similar ones.
reimar
parents: 13600
diff changeset
288 return 0;
dd835e8f3698 fix a problem pointed out by iDEFENSE and several similar ones.
reimar
parents: 13600
diff changeset
289 }
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
290
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
291 if (!get_data (s, data, packet_len)) {
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
292 mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_MMST_CmdDataReadFailed);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
293 return 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
294 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
295
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
296 command = get_32 (data, 24) & 0xFFFF;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
297
15626
941b1a71351f printf converted to mp_msg; made static many unnecessarily global symbols
nicodvb
parents: 15181
diff changeset
298 // mp_msg(MSGT_NETWORK,MSGL_INFO,"command: %02x\n", command);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
299
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
300 if (command == 0x1b)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
301 send_command (s, 0x1b, 0, 0, 0, data);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
302
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
303 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
304
15626
941b1a71351f printf converted to mp_msg; made static many unnecessarily global symbols
nicodvb
parents: 15181
diff changeset
305 // mp_msg(MSGT_NETWORK,MSGL_INFO,"get header packet succ\n");
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
306 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
307 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
308
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
309 static int interp_header (uint8_t *header, int header_len)
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
310 {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
311 int i;
7472
c4434bdf6e51 tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
arpi
parents: 7309
diff changeset
312 int packet_length=-1;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
313
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
314 /*
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
315 * parse header
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
316 */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
317
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
318 i = 30;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
319 while (i<header_len) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
320
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
321 uint64_t guid_1, guid_2, length;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
322
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
323 guid_2 = (uint64_t)header[i] | ((uint64_t)header[i+1]<<8)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
324 | ((uint64_t)header[i+2]<<16) | ((uint64_t)header[i+3]<<24)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
325 | ((uint64_t)header[i+4]<<32) | ((uint64_t)header[i+5]<<40)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
326 | ((uint64_t)header[i+6]<<48) | ((uint64_t)header[i+7]<<56);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
327 i += 8;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
328
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
329 guid_1 = (uint64_t)header[i] | ((uint64_t)header[i+1]<<8)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
330 | ((uint64_t)header[i+2]<<16) | ((uint64_t)header[i+3]<<24)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
331 | ((uint64_t)header[i+4]<<32) | ((uint64_t)header[i+5]<<40)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
332 | ((uint64_t)header[i+6]<<48) | ((uint64_t)header[i+7]<<56);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
333 i += 8;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
334
15626
941b1a71351f printf converted to mp_msg; made static many unnecessarily global symbols
nicodvb
parents: 15181
diff changeset
335 // mp_msg(MSGT_NETWORK,MSGL_INFO,"guid found: %016llx%016llx\n", guid_1, guid_2);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
336
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
337 length = (uint64_t)header[i] | ((uint64_t)header[i+1]<<8)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
338 | ((uint64_t)header[i+2]<<16) | ((uint64_t)header[i+3]<<24)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
339 | ((uint64_t)header[i+4]<<32) | ((uint64_t)header[i+5]<<40)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
340 | ((uint64_t)header[i+6]<<48) | ((uint64_t)header[i+7]<<56);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
341
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
342 i += 8;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
343
12121
6d4212840048 make gcc eating this under hurd
alex
parents: 12077
diff changeset
344 if ( (guid_1 == 0x6cce6200aa00d9a6ULL) && (guid_2 == 0x11cf668e75b22630ULL) ) {
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
345 mp_msg(MSGT_NETWORK,MSGL_INFO,MSGTR_MPDEMUX_MMST_HeaderObject);
12121
6d4212840048 make gcc eating this under hurd
alex
parents: 12077
diff changeset
346 } else if ((guid_1 == 0x6cce6200aa00d9a6ULL) && (guid_2 == 0x11cf668e75b22636ULL)) {
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
347 mp_msg(MSGT_NETWORK,MSGL_INFO,MSGTR_MPDEMUX_MMST_DataObject);
12121
6d4212840048 make gcc eating this under hurd
alex
parents: 12077
diff changeset
348 } else if ((guid_1 == 0x6553200cc000e48eULL) && (guid_2 == 0x11cfa9478cabdca1ULL)) {
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
349
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
350 packet_length = get_32(header, i+92-24);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
351
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
352 mp_msg(MSGT_NETWORK,MSGL_INFO,MSGTR_MPDEMUX_MMST_FileObjectPacketLen,
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
353 packet_length, get_32(header, i+96-24));
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
354
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
355
12121
6d4212840048 make gcc eating this under hurd
alex
parents: 12077
diff changeset
356 } else if ((guid_1 == 0x6553200cc000e68eULL) && (guid_2 == 0x11cfa9b7b7dc0791ULL)) {
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
357
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
358 int stream_id = header[i+48] | header[i+49] << 8;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
359
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
360 mp_msg(MSGT_NETWORK,MSGL_INFO,MSGTR_MPDEMUX_MMST_StreamObjectStreamID, stream_id);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
361
15181
ed74657f25b1 Use define instead of hardcodec value for max streams number
rtognimp
parents: 15173
diff changeset
362 if (num_stream_ids < MAX_STREAMS) {
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
363 stream_ids[num_stream_ids] = stream_id;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
364 num_stream_ids++;
15173
424386614ad5 Fix potential buffer overflow for urls with more than 20 streams
rtognimp
parents: 15150
diff changeset
365 } else {
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
366 mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_MMST_2ManyStreamID);
15173
424386614ad5 Fix potential buffer overflow for urls with more than 20 streams
rtognimp
parents: 15150
diff changeset
367 }
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
368
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
369 } else {
15628
f0dc4a6c9063 some debugging code
alex
parents: 15626
diff changeset
370 #if 0
f0dc4a6c9063 some debugging code
alex
parents: 15626
diff changeset
371 int b = i;
f0dc4a6c9063 some debugging code
alex
parents: 15626
diff changeset
372 printf ("unknown object (guid: %016llx, %016llx, len: %lld)\n", guid_1, guid_2, length);
f0dc4a6c9063 some debugging code
alex
parents: 15626
diff changeset
373 for (; b < length; b++)
f0dc4a6c9063 some debugging code
alex
parents: 15626
diff changeset
374 {
f0dc4a6c9063 some debugging code
alex
parents: 15626
diff changeset
375 if (isascii(header[b]) || isalpha(header[b]))
f0dc4a6c9063 some debugging code
alex
parents: 15626
diff changeset
376 printf("%c ", header[b]);
f0dc4a6c9063 some debugging code
alex
parents: 15626
diff changeset
377 else
f0dc4a6c9063 some debugging code
alex
parents: 15626
diff changeset
378 printf("%x ", header[b]);
f0dc4a6c9063 some debugging code
alex
parents: 15626
diff changeset
379 }
f0dc4a6c9063 some debugging code
alex
parents: 15626
diff changeset
380 printf("\n");
f0dc4a6c9063 some debugging code
alex
parents: 15626
diff changeset
381 #else
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
382 mp_msg(MSGT_NETWORK,MSGL_WARN,MSGTR_MPDEMUX_MMST_UnknownObject);
15628
f0dc4a6c9063 some debugging code
alex
parents: 15626
diff changeset
383 #endif
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
384 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
385
15626
941b1a71351f printf converted to mp_msg; made static many unnecessarily global symbols
nicodvb
parents: 15181
diff changeset
386 // mp_msg(MSGT_NETWORK,MSGL_INFO,"length : %lld\n", length);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
387
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
388 i += length-24;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
389
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
390 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
391
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
392 return packet_length;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
393
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
394 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
395
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
396
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
397 static int get_media_packet (int s, int padding, streaming_ctrl_t *stream_ctrl) {
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
398 unsigned char pre_header[8];
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
399 char data[BUF_SIZE];
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
400
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
401 if (!get_data (s, pre_header, 8)) {
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
402 mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_MMST_PreHeaderReadFailed);
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
403 return 0;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
404 }
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
405
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
406 // for (i=0; i<8; i++)
15626
941b1a71351f printf converted to mp_msg; made static many unnecessarily global symbols
nicodvb
parents: 15181
diff changeset
407 // mp_msg(MSGT_NETWORK,MSGL_INFO,"pre_header[%d] = %02x (%d)\n",
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
408 // i, pre_header[i], pre_header[i]);
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
409
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
410 if (pre_header[4] == 0x04) {
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
411
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
412 int packet_len;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
413
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
414 packet_len = (pre_header[7] << 8 | pre_header[6]) - 8;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
415
15626
941b1a71351f printf converted to mp_msg; made static many unnecessarily global symbols
nicodvb
parents: 15181
diff changeset
416 // mp_msg(MSGT_NETWORK,MSGL_INFO,"asf media packet detected, len=%d\n", packet_len);
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
417
14163
dd835e8f3698 fix a problem pointed out by iDEFENSE and several similar ones.
reimar
parents: 13600
diff changeset
418 if (packet_len < 0 || packet_len > BUF_SIZE) {
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
419 mp_msg(MSGT_NETWORK, MSGL_FATAL, MSGTR_MPDEMUX_MMST_InvalidRTSPPacketSize);
14163
dd835e8f3698 fix a problem pointed out by iDEFENSE and several similar ones.
reimar
parents: 13600
diff changeset
420 return 0;
dd835e8f3698 fix a problem pointed out by iDEFENSE and several similar ones.
reimar
parents: 13600
diff changeset
421 }
dd835e8f3698 fix a problem pointed out by iDEFENSE and several similar ones.
reimar
parents: 13600
diff changeset
422
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
423 if (!get_data (s, data, packet_len)) {
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
424 mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_MMST_MediaDataReadFailed);
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
425 return 0;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
426 }
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
427
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
428 streaming_bufferize(stream_ctrl, data, padding);
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
429
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
430 } else {
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
431
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
432 int32_t packet_len;
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
433 int command;
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
434
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
435 if (!get_data (s, (char*)&packet_len, 4)) {
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
436 mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_MMST_packet_lenReadFailed);
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
437 return 0;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
438 }
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
439
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
440 packet_len = get_32 ((unsigned char*)&packet_len, 0) + 4;
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
441
14163
dd835e8f3698 fix a problem pointed out by iDEFENSE and several similar ones.
reimar
parents: 13600
diff changeset
442 if (packet_len < 0 || packet_len > BUF_SIZE) {
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
443 mp_msg(MSGT_NETWORK,MSGL_FATAL,MSGTR_MPDEMUX_MMST_InvalidRTSPPacketSize);
14163
dd835e8f3698 fix a problem pointed out by iDEFENSE and several similar ones.
reimar
parents: 13600
diff changeset
444 return 0;
dd835e8f3698 fix a problem pointed out by iDEFENSE and several similar ones.
reimar
parents: 13600
diff changeset
445 }
dd835e8f3698 fix a problem pointed out by iDEFENSE and several similar ones.
reimar
parents: 13600
diff changeset
446
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
447 if (!get_data (s, data, packet_len)) {
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
448 mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_MMST_CmdDataReadFailed);
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
449 return 0;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
450 }
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
451
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
452 if ( (pre_header[7] != 0xb0) || (pre_header[6] != 0x0b)
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
453 || (pre_header[5] != 0xfa) || (pre_header[4] != 0xce) ) {
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
454
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
455 mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_MMST_MissingSignature);
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
456 return -1;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
457 }
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
458
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
459 command = get_32 (data, 24) & 0xFFFF;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
460
15626
941b1a71351f printf converted to mp_msg; made static many unnecessarily global symbols
nicodvb
parents: 15181
diff changeset
461 // mp_msg(MSGT_NETWORK,MSGL_INFO,"\ncommand packet detected, len=%d cmd=0x%X\n", packet_len, command);
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
462
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
463 if (command == 0x1b)
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
464 send_command (s, 0x1b, 0, 0, 0, data);
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
465 else if (command == 0x1e) {
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
466 mp_msg(MSGT_NETWORK,MSGL_INFO,MSGTR_MPDEMUX_MMST_PatentedTechnologyJoke);
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
467 return 0;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
468 }
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
469 else if (command == 0x21 ) {
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
470 // Looks like it's new in WMS9
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
471 // Unknown command, but ignoring it seems to work.
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
472 return 0;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
473 }
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
474 else if (command != 0x05) {
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
475 mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_MMST_UnknownCmd,command);
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
476 return -1;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
477 }
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
478 }
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
479
15626
941b1a71351f printf converted to mp_msg; made static many unnecessarily global symbols
nicodvb
parents: 15181
diff changeset
480 // mp_msg(MSGT_NETWORK,MSGL_INFO,"get media packet succ\n");
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
481
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
482 return 1;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
483 }
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
484
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
485
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
486 static int packet_length1;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
487
15626
941b1a71351f printf converted to mp_msg; made static many unnecessarily global symbols
nicodvb
parents: 15181
diff changeset
488 static int asf_mmst_streaming_read( int fd, char *buffer, int size, streaming_ctrl_t *stream_ctrl )
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
489 {
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
490 int len;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
491
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
492 while( stream_ctrl->buffer_size==0 ) {
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
493 // buffer is empty - fill it!
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
494 int ret = get_media_packet( fd, packet_length1, stream_ctrl);
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
495 if( ret<0 ) {
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
496 mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_MMST_GetMediaPacketErr,strerror(errno));
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
497 return -1;
12077
e200b0e11e9c Fix hanging at end of mms:// streams.
rtognimp
parents: 11412
diff changeset
498 } else if (ret==0) //EOF?
e200b0e11e9c Fix hanging at end of mms:// streams.
rtognimp
parents: 11412
diff changeset
499 return ret;
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
500 }
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
501
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
502 len = stream_ctrl->buffer_size-stream_ctrl->buffer_pos;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
503 if(len>size) len=size;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
504 memcpy( buffer, (stream_ctrl->buffer)+(stream_ctrl->buffer_pos), len );
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
505 stream_ctrl->buffer_pos += len;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
506 if( stream_ctrl->buffer_pos>=stream_ctrl->buffer_size ) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
507 free( stream_ctrl->buffer );
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
508 stream_ctrl->buffer = NULL;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
509 stream_ctrl->buffer_size = 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
510 stream_ctrl->buffer_pos = 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
511 }
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
512 return len;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
513
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
514 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
515
15626
941b1a71351f printf converted to mp_msg; made static many unnecessarily global symbols
nicodvb
parents: 15181
diff changeset
516 static int asf_mmst_streaming_seek( int fd, off_t pos, streaming_ctrl_t *streaming_ctrl )
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
517 {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
518 return -1;
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
519 // Shut up gcc warning
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
520 fd++;
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
521 pos++;
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
522 streaming_ctrl=NULL;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
523 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
524
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
525 int asf_mmst_streaming_start(stream_t *stream)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
526 {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
527 char str[1024];
10183
2ffb9a8b0428 10l found by yepyep
alex
parents: 7977
diff changeset
528 char data[BUF_SIZE];
14163
dd835e8f3698 fix a problem pointed out by iDEFENSE and several similar ones.
reimar
parents: 13600
diff changeset
529 uint8_t asf_header[HDR_BUF_SIZE];
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
530 int asf_header_len;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
531 int len, i, packet_length;
12751
cf145882979c WMP doesn't encode urls with mmst protocol
rtognimp
parents: 12675
diff changeset
532 char *path, *unescpath;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
533 URL_t *url1 = stream->streaming_ctrl->url;
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
534 int s = stream->fd;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
535
7250
27a1315d6af4 Checked if the connection succeeded before writing in the socket.
bertrand
parents: 6092
diff changeset
536 if( s>0 ) {
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
537 closesocket( stream->fd );
7250
27a1315d6af4 Checked if the connection succeeded before writing in the socket.
bertrand
parents: 6092
diff changeset
538 stream->fd = -1;
27a1315d6af4 Checked if the connection succeeded before writing in the socket.
bertrand
parents: 6092
diff changeset
539 }
27a1315d6af4 Checked if the connection succeeded before writing in the socket.
bertrand
parents: 6092
diff changeset
540
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
541 /* parse url */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
542 path = strchr(url1->file,'/') + 1;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
543
12751
cf145882979c WMP doesn't encode urls with mmst protocol
rtognimp
parents: 12675
diff changeset
544 /* mmst filename are not url_escaped by MS MediaPlayer and are expected as
cf145882979c WMP doesn't encode urls with mmst protocol
rtognimp
parents: 12675
diff changeset
545 * "plain text" by the server, so need to decode it here
cf145882979c WMP doesn't encode urls with mmst protocol
rtognimp
parents: 12675
diff changeset
546 */
cf145882979c WMP doesn't encode urls with mmst protocol
rtognimp
parents: 12675
diff changeset
547 unescpath=malloc(strlen(path)+1);
cf145882979c WMP doesn't encode urls with mmst protocol
rtognimp
parents: 12675
diff changeset
548 if (!unescpath) {
16906
75ccba4bd84b Changed MSGTR_MPDEMUX_MMST_MallocFailed to MSGTR_MemAllocFailed (msg defined two times inhelp_mp-en.h)
ptt
parents: 16882
diff changeset
549 mp_msg(MSGT_NETWORK,MSGL_FATAL,MSGTR_MemAllocFailed);
12751
cf145882979c WMP doesn't encode urls with mmst protocol
rtognimp
parents: 12675
diff changeset
550 return -1;
cf145882979c WMP doesn't encode urls with mmst protocol
rtognimp
parents: 12675
diff changeset
551 }
cf145882979c WMP doesn't encode urls with mmst protocol
rtognimp
parents: 12675
diff changeset
552 url_unescape_string(unescpath,path);
cf145882979c WMP doesn't encode urls with mmst protocol
rtognimp
parents: 12675
diff changeset
553 path=unescpath;
cf145882979c WMP doesn't encode urls with mmst protocol
rtognimp
parents: 12675
diff changeset
554
cf145882979c WMP doesn't encode urls with mmst protocol
rtognimp
parents: 12675
diff changeset
555
12968
55e13005ac30 Use port number embedded in url for mms streams
rtognimp
parents: 12751
diff changeset
556 if( url1->port==0 ) {
55e13005ac30 Use port number embedded in url for mms streams
rtognimp
parents: 12751
diff changeset
557 url1->port=1755;
55e13005ac30 Use port number embedded in url for mms streams
rtognimp
parents: 12751
diff changeset
558 }
10625
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10281
diff changeset
559 s = connect2Server( url1->hostname, url1->port, 1);
7250
27a1315d6af4 Checked if the connection succeeded before writing in the socket.
bertrand
parents: 6092
diff changeset
560 if( s<0 ) {
12751
cf145882979c WMP doesn't encode urls with mmst protocol
rtognimp
parents: 12675
diff changeset
561 free(path);
7250
27a1315d6af4 Checked if the connection succeeded before writing in the socket.
bertrand
parents: 6092
diff changeset
562 return s;
27a1315d6af4 Checked if the connection succeeded before writing in the socket.
bertrand
parents: 6092
diff changeset
563 }
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
564 mp_msg(MSGT_NETWORK,MSGL_INFO,MSGTR_MPDEMUX_MMST_Connected);
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
565
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
566 seq_num=0;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
567
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
568 /*
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
569 * Send the initial connect info including player version no. Client GUID (random) and the host address being connected to.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
570 * This command is sent at the very start of protocol initiation. It sends local information to the serve
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
571 * cmd 1 0x01
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
572 * */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
573
11350
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
574 /* prepare for the url encoding conversion */
11403
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
575 #ifdef USE_ICONV
12674
0392f36045f4 user nl_langinfo if langinfo support present for proper chinese support, feature requested by Shixin Zheng <shixinzheng@sjtu.edu.cn>
alex
parents: 12545
diff changeset
576 #ifdef USE_LANGINFO
0392f36045f4 user nl_langinfo if langinfo support present for proper chinese support, feature requested by Shixin Zheng <shixinzheng@sjtu.edu.cn>
alex
parents: 12545
diff changeset
577 url_conv = iconv_open("UTF-16LE",nl_langinfo(CODESET));
0392f36045f4 user nl_langinfo if langinfo support present for proper chinese support, feature requested by Shixin Zheng <shixinzheng@sjtu.edu.cn>
alex
parents: 12545
diff changeset
578 #else
14542
4a6b79a1ad52 remove all setlocale calls, they break the behaviour of sscanf and
reimar
parents: 14163
diff changeset
579 url_conv = iconv_open("UTF-16LE", NULL);
11403
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
580 #endif
12674
0392f36045f4 user nl_langinfo if langinfo support present for proper chinese support, feature requested by Shixin Zheng <shixinzheng@sjtu.edu.cn>
alex
parents: 12545
diff changeset
581 #endif
11350
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
582
10183
2ffb9a8b0428 10l found by yepyep
alex
parents: 7977
diff changeset
583 snprintf (str, 1023, "\034\003NSPlayer/7.0.0.1956; {33715801-BAB3-9D85-24E9-03B90328270A}; Host: %s", url1->hostname);
11225
48bb1fd37d2a Fixing tons of 10ls. Patch by rgselk <rgselknospam@yahoo.com>
alex
parents: 10625
diff changeset
584 string_utf16 (data, str, strlen(str));
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
585 // send_command(s, commandno ....)
11225
48bb1fd37d2a Fixing tons of 10ls. Patch by rgselk <rgselknospam@yahoo.com>
alex
parents: 10625
diff changeset
586 send_command (s, 1, 0, 0x0004000b, strlen(str)*2+2, data);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
587
10206
35e306346e59 Using recv/send instead read/write for proper MinGW support (it's a 4.2BSD standard). Patch by FloDt <flodt8@yahoo.de>
alex
parents: 10183
diff changeset
588 len = recv (s, data, BUF_SIZE, 0) ;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
589
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
590 /*This sends details of the local machine IP address to a Funnel system at the server.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
591 * Also, the TCP or UDP transport selection is sent.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
592 *
11225
48bb1fd37d2a Fixing tons of 10ls. Patch by rgselk <rgselknospam@yahoo.com>
alex
parents: 10625
diff changeset
593 * here 192.168.0.1 is local ip address TCP/UDP states the tronsport we r using
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
594 * and 1037 is the local TCP or UDP socket number
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
595 * cmd 2 0x02
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
596 * */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
597
11225
48bb1fd37d2a Fixing tons of 10ls. Patch by rgselk <rgselknospam@yahoo.com>
alex
parents: 10625
diff changeset
598 string_utf16 (&data[8], "\002\000\\\\192.168.0.1\\TCP\\1037", 24);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
599 memset (data, 0, 8);
11225
48bb1fd37d2a Fixing tons of 10ls. Patch by rgselk <rgselknospam@yahoo.com>
alex
parents: 10625
diff changeset
600 send_command (s, 2, 0, 0, 24*2+10, data);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
601
10206
35e306346e59 Using recv/send instead read/write for proper MinGW support (it's a 4.2BSD standard). Patch by FloDt <flodt8@yahoo.de>
alex
parents: 10183
diff changeset
602 len = recv (s, data, BUF_SIZE, 0) ;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
603
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
604 /* This command sends file path (at server) and file name request to the server.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
605 * 0x5 */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
606
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
607 string_utf16 (&data[8], path, strlen(path));
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
608 memset (data, 0, 8);
11225
48bb1fd37d2a Fixing tons of 10ls. Patch by rgselk <rgselknospam@yahoo.com>
alex
parents: 10625
diff changeset
609 send_command (s, 5, 0, 0, strlen(path)*2+10, data);
12751
cf145882979c WMP doesn't encode urls with mmst protocol
rtognimp
parents: 12675
diff changeset
610 free(path);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
611
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
612 get_answer (s);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
613
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
614 /* The ASF header chunk request. Includes ?session' variable for pre header value.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
615 * After this command is sent,
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
616 * the server replies with 0x11 command and then the header chunk with header data follows.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
617 * 0x15 */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
618
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
619 memset (data, 0, 40);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
620 data[32] = 2;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
621
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
622 send_command (s, 0x15, 1, 0, 40, data);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
623
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
624 num_stream_ids = 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
625 /* get_headers(s, asf_header); */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
626
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
627 asf_header_len = get_header (s, asf_header, stream->streaming_ctrl);
15626
941b1a71351f printf converted to mp_msg; made static many unnecessarily global symbols
nicodvb
parents: 15181
diff changeset
628 // mp_msg(MSGT_NETWORK,MSGL_INFO,"---------------------------------- asf_header %d\n",asf_header);
21536
4d1ba1f391f3 Forgotten closesocket on error, patch by
reimar
parents: 19882
diff changeset
629 if (asf_header_len==0) { //error reading header
4d1ba1f391f3 Forgotten closesocket on error, patch by
reimar
parents: 19882
diff changeset
630 closesocket(s);
4d1ba1f391f3 Forgotten closesocket on error, patch by
reimar
parents: 19882
diff changeset
631 return -1;
4d1ba1f391f3 Forgotten closesocket on error, patch by
reimar
parents: 19882
diff changeset
632 }
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
633 packet_length = interp_header (asf_header, asf_header_len);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
634
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
635
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
636 /*
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
637 * This command is the media stream MBR selector. Switches are always 6 bytes in length.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
638 * After all switch elements, data ends with bytes [00 00] 00 20 ac 40 [02].
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
639 * Where:
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
640 * [00 00] shows 0x61 0x00 (on the first 33 sent) or 0xff 0xff for ASF files, and with no ending data for WMV files.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
641 * It is not yet understood what all this means.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
642 * And the last [02] byte is probably the header ?session' value.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
643 *
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
644 * 0x33 */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
645
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
646 memset (data, 0, 40);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
647
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
648 for (i=1; i<num_stream_ids; i++) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
649 data [ (i-1) * 6 + 2 ] = 0xFF;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
650 data [ (i-1) * 6 + 3 ] = 0xFF;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
651 data [ (i-1) * 6 + 4 ] = stream_ids[i];
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
652 data [ (i-1) * 6 + 5 ] = 0x00;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
653 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
654
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
655 send_command (s, 0x33, num_stream_ids, 0xFFFF | stream_ids[0] << 16, (num_stream_ids-1)*6+2 , data);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
656
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
657 get_answer (s);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
658
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
659 /* Start sending file from packet xx.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
660 * This command is also used for resume downloads or requesting a lost packet.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
661 * Also used for seeking by sending a play point value which seeks to the media time point.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
662 * Includes ?session' value in pre header and the maximum media stream time.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
663 * 0x07 */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
664
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
665 memset (data, 0, 40);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
666
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
667 for (i=8; i<16; i++)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
668 data[i] = 0xFF;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
669
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
670 data[20] = 0x04;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
671
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
672 send_command (s, 0x07, 1, 0xFFFF | stream_ids[0] << 16, 24, data);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
673
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
674 stream->fd = s;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
675 stream->streaming_ctrl->streaming_read = asf_mmst_streaming_read;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
676 stream->streaming_ctrl->streaming_seek = asf_mmst_streaming_seek;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
677 stream->streaming_ctrl->buffering = 1;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
678 stream->streaming_ctrl->status = streaming_playing_e;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
679
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
680 packet_length1 = packet_length;
16930
41aeb5e0cb4b Fix bugs/crash introduced by translation patch
reimar
parents: 16906
diff changeset
681 mp_msg(MSGT_NETWORK,MSGL_INFO,"mmst packet_length = %d\n", packet_length);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
682
11403
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
683 #ifdef USE_ICONV
11412
ec3dac7d17a0 Warning fixes (approved by A'rpi).
rathann
parents: 11403
diff changeset
684 if (url_conv != (iconv_t)(-1))
11403
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
685 iconv_close(url_conv);
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
686 #endif
11350
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
687
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
688 return 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
689 }