annotate stream/asf_mmst_streaming.c @ 27473:ae5da477539e

Move '#define closesocket close' preprocessor directive to a common place and put it under the proper '#ifndef HAVE_CLOSESOCKET' condition.
author diego
date Mon, 01 Sep 2008 07:31:57 +0000
parents c0b233cd30ca
children c884d17bd005
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 *
26737
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 22159
diff changeset
24 * You should have received a copy of the GNU General Public License along
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 22159
diff changeset
25 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 22159
diff changeset
26 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19882
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
27473
ae5da477539e Move '#define closesocket close' preprocessor directive to a common place
diego
parents: 27472
diff changeset
42 #ifdef HAVE_WINSOCK2_H
27472
c0b233cd30ca Revert moving closesocket definition and network headers to network.h.
diego
parents: 27464
diff changeset
43 #include <winsock2.h>
c0b233cd30ca Revert moving closesocket definition and network headers to network.h.
diego
parents: 27464
diff changeset
44 #endif
c0b233cd30ca Revert moving closesocket definition and network headers to network.h.
diego
parents: 27464
diff changeset
45
27341
e7c989f7a7c9 Start unifying names of internal preprocessor directives.
diego
parents: 26756
diff changeset
46 #ifndef CONFIG_SETLOCALE
27393
4876c89bafdd Rename font-related preprocessor directives.
diego
parents: 27359
diff changeset
47 #undef CONFIG_ICONV
12675
7c5dee73a7dc disable iconv in case setlocale is disabled - compile fix
alex
parents: 12674
diff changeset
48 #endif
7c5dee73a7dc disable iconv in case setlocale is disabled - compile fix
alex
parents: 12674
diff changeset
49
27393
4876c89bafdd Rename font-related preprocessor directives.
diego
parents: 27359
diff changeset
50 #ifdef CONFIG_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
51 #include <iconv.h>
27359
d788e177a35e Rename some preprocessor directives from CONFIG_* to HAVE_* where appropriate;
diego
parents: 27341
diff changeset
52 #ifdef HAVE_LANGINFO
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 <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
54 #endif
11350
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
55 #endif
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
56
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
57 #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
58 #include "libmpdemux/asf.h"
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
59
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
60 #include "stream.h"
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 "network.h"
19335
2a9d669e5ff6 isolated tcp socket code from network.c to a dedicated file
ben
parents: 19312
diff changeset
63 #include "tcp.h"
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
64
22159
6d8f2be532d4 Quick hack mostly for documentation purposes to make -aid work with mms://
reimar
parents: 21536
diff changeset
65 extern int audio_id;
6d8f2be532d4 Quick hack mostly for documentation purposes to make -aid work with mms://
reimar
parents: 21536
diff changeset
66 extern int video_id;
6d8f2be532d4 Quick hack mostly for documentation purposes to make -aid work with mms://
reimar
parents: 21536
diff changeset
67
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
68 #define BUF_SIZE 102400
14163
dd835e8f3698 fix a problem pointed out by iDEFENSE and several similar ones.
reimar
parents: 13600
diff changeset
69 #define HDR_BUF_SIZE 8192
15181
ed74657f25b1 Use define instead of hardcodec value for max streams number
rtognimp
parents: 15173
diff changeset
70 #define MAX_STREAMS 20
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
71
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
72 typedef struct
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
73 {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
74 uint8_t buf[BUF_SIZE];
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
75 int num_bytes;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
76
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
77 } command_t;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
78
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
79 static int seq_num;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
80 static int num_stream_ids;
15181
ed74657f25b1 Use define instead of hardcodec value for max streams number
rtognimp
parents: 15173
diff changeset
81 static int stream_ids[MAX_STREAMS];
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
82
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
83 static int get_data (int s, char *buf, size_t count);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
84
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
85 static void put_32 (command_t *cmd, uint32_t value)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
86 {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
87 cmd->buf[cmd->num_bytes ] = value % 256;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
88 value = value >> 8;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
89 cmd->buf[cmd->num_bytes+1] = value % 256 ;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
90 value = value >> 8;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
91 cmd->buf[cmd->num_bytes+2] = value % 256 ;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
92 value = value >> 8;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
93 cmd->buf[cmd->num_bytes+3] = value % 256 ;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
94
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
95 cmd->num_bytes += 4;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
96 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
97
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
98 static uint32_t get_32 (unsigned char *cmd, int offset)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
99 {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
100 uint32_t ret;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
101
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
102 ret = cmd[offset] ;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
103 ret |= cmd[offset+1]<<8 ;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
104 ret |= cmd[offset+2]<<16 ;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
105 ret |= cmd[offset+3]<<24 ;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
106
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
107 return ret;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
108 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
109
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
110 static void send_command (int s, int command, uint32_t switches,
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
111 uint32_t extra, int length,
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
112 char *data)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
113 {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
114 command_t cmd;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
115 int len8;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
116
11225
48bb1fd37d2a Fixing tons of 10ls. Patch by rgselk <rgselknospam@yahoo.com>
alex
parents: 10625
diff changeset
117 len8 = (length + 7) / 8;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
118
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
119 cmd.num_bytes = 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
120
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
121 put_32 (&cmd, 0x00000001); /* start sequence */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
122 put_32 (&cmd, 0xB00BFACE); /* #-)) */
11225
48bb1fd37d2a Fixing tons of 10ls. Patch by rgselk <rgselknospam@yahoo.com>
alex
parents: 10625
diff changeset
123 put_32 (&cmd, len8*8 + 32);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
124 put_32 (&cmd, 0x20534d4d); /* protocol type "MMS " */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
125 put_32 (&cmd, len8 + 4);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
126 put_32 (&cmd, seq_num);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
127 seq_num++;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
128 put_32 (&cmd, 0x0); /* unknown */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
129 put_32 (&cmd, 0x0);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
130 put_32 (&cmd, len8+2);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
131 put_32 (&cmd, 0x00030000 | command); /* dir | command */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
132 put_32 (&cmd, switches);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
133 put_32 (&cmd, extra);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
134
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
135 memcpy (&cmd.buf[48], data, length);
11225
48bb1fd37d2a Fixing tons of 10ls. Patch by rgselk <rgselknospam@yahoo.com>
alex
parents: 10625
diff changeset
136 if (length & 7)
48bb1fd37d2a Fixing tons of 10ls. Patch by rgselk <rgselknospam@yahoo.com>
alex
parents: 10625
diff changeset
137 memset(&cmd.buf[48 + length], 0, 8 - (length & 7));
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
138
11225
48bb1fd37d2a Fixing tons of 10ls. Patch by rgselk <rgselknospam@yahoo.com>
alex
parents: 10625
diff changeset
139 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
140 mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_MMST_WriteError);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
141 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
142 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
143
27393
4876c89bafdd Rename font-related preprocessor directives.
diego
parents: 27359
diff changeset
144 #ifdef CONFIG_ICONV
11350
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
145 static iconv_t url_conv;
11403
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
146 #endif
11350
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
147
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
148 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
149 int i;
27393
4876c89bafdd Rename font-related preprocessor directives.
diego
parents: 27359
diff changeset
150 #ifdef CONFIG_ICONV
11350
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
151 size_t len1, len2;
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
152 char *ip, *op;
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
153
11412
ec3dac7d17a0 Warning fixes (approved by A'rpi).
rathann
parents: 11403
diff changeset
154 if (url_conv != (iconv_t)(-1))
11403
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
155 {
11350
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
156 memset(dest, 0, 1000);
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
157 len1 = len; len2 = 1000;
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
158 ip = src; op = dest;
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
159
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
160 iconv(url_conv, &ip, &len1, &op, &len2);
11403
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
161 }
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
162 else
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
163 {
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
164 #endif
15150
38ec64821910 Make string_utf16 code behave almost the same with or without iconv
rtognimp
parents: 14542
diff changeset
165 if (len > 499) len = 499;
11403
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
166 for (i=0; i<len; i++) {
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
167 dest[i*2] = src[i];
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
168 dest[i*2+1] = 0;
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
169 }
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
170 /* trailing zeroes */
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
171 dest[i*2] = 0;
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
172 dest[i*2+1] = 0;
27393
4876c89bafdd Rename font-related preprocessor directives.
diego
parents: 27359
diff changeset
173 #ifdef CONFIG_ICONV
11403
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
174 }
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
175 #endif
11350
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
176 }
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
177
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
178 static void get_answer (int s)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
179 {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
180 char data[BUF_SIZE];
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
181 int command = 0x1b;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
182
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
183 while (command == 0x1b) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
184 int len;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
185
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
186 len = recv (s, data, BUF_SIZE, 0) ;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
187 if (!len) {
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
188 mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_MMST_EOFAlert);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
189 return;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
190 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
191
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
192 command = get_32 (data, 36) & 0xFFFF;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
193
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
194 if (command == 0x1b)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
195 send_command (s, 0x1b, 0, 0, 0, data);
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
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
199 static int get_data (int s, char *buf, size_t count)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
200 {
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
201 ssize_t len;
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
202 size_t total = 0;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
203
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
204 while (total < count) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
205
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
206 len = recv (s, &buf[total], count-total, 0);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
207
12545
868376f81c30 Fix hang on broken mmst streams
rtognimp
parents: 12121
diff changeset
208 if (len<=0) {
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
209 perror ("read error:");
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
210 return 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
211 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
212
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
213 total += len;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
214
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
215 if (len != 0) {
15626
941b1a71351f printf converted to mp_msg; made static many unnecessarily global symbols
nicodvb
parents: 15181
diff changeset
216 // mp_msg(MSGT_NETWORK,MSGL_INFO,"[%d/%d]", total, count);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
217 fflush (stdout);
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
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
222 return 1;
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
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
226 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
227 {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
228 unsigned char pre_header[8];
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
229 int header_len;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
230
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
231 header_len = 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
232
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
233 while (1) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
234 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
235 mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_MMST_PreHeaderReadFailed);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
236 return 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
237 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
238 if (pre_header[4] == 0x02) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
239
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
240 int packet_len;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
241
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
242 packet_len = (pre_header[7] << 8 | pre_header[6]) - 8;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
243
15626
941b1a71351f printf converted to mp_msg; made static many unnecessarily global symbols
nicodvb
parents: 15181
diff changeset
244 // 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
245
14163
dd835e8f3698 fix a problem pointed out by iDEFENSE and several similar ones.
reimar
parents: 13600
diff changeset
246 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
247 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
248 return 0;
dd835e8f3698 fix a problem pointed out by iDEFENSE and several similar ones.
reimar
parents: 13600
diff changeset
249 }
dd835e8f3698 fix a problem pointed out by iDEFENSE and several similar ones.
reimar
parents: 13600
diff changeset
250
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
251 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
252 mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_MMST_HeaderDataReadFailed);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
253 return 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
254 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
255
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
256 header_len += packet_len;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
257
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
258 if ( (header[header_len-1] == 1) && (header[header_len-2]==1)) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
259
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
260
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
261 if( streaming_bufferize( streaming_ctrl, header, header_len )<0 ) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
262 return -1;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
263 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
264
15626
941b1a71351f printf converted to mp_msg; made static many unnecessarily global symbols
nicodvb
parents: 15181
diff changeset
265 // mp_msg(MSGT_NETWORK,MSGL_INFO,"get header packet finished\n");
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
266
26756
c43ce7268677 cosmetics: Remove useless parentheses from return statements.
diego
parents: 26737
diff changeset
267 return header_len;
6092
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
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
271 } else {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
272
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
273 int32_t packet_len;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
274 int command;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
275 char data[BUF_SIZE];
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
276
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
277 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
278 mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_MMST_packet_lenReadFailed);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
279 return 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
280 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
281
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
282 packet_len = get_32 ((unsigned char*)&packet_len, 0) + 4;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
283
15626
941b1a71351f printf converted to mp_msg; made static many unnecessarily global symbols
nicodvb
parents: 15181
diff changeset
284 // 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
285
dd835e8f3698 fix a problem pointed out by iDEFENSE and several similar ones.
reimar
parents: 13600
diff changeset
286 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
287 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
288 MSGTR_MPDEMUX_MMST_InvalidRTSPPacketSize);
14163
dd835e8f3698 fix a problem pointed out by iDEFENSE and several similar ones.
reimar
parents: 13600
diff changeset
289 return 0;
dd835e8f3698 fix a problem pointed out by iDEFENSE and several similar ones.
reimar
parents: 13600
diff changeset
290 }
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
291
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
292 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
293 mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_MMST_CmdDataReadFailed);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
294 return 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
295 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
296
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
297 command = get_32 (data, 24) & 0xFFFF;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
298
15626
941b1a71351f printf converted to mp_msg; made static many unnecessarily global symbols
nicodvb
parents: 15181
diff changeset
299 // mp_msg(MSGT_NETWORK,MSGL_INFO,"command: %02x\n", command);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
300
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
301 if (command == 0x1b)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
302 send_command (s, 0x1b, 0, 0, 0, data);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
303
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
304 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
305
15626
941b1a71351f printf converted to mp_msg; made static many unnecessarily global symbols
nicodvb
parents: 15181
diff changeset
306 // mp_msg(MSGT_NETWORK,MSGL_INFO,"get header packet succ\n");
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
307 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
308 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
309
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
310 static int interp_header (uint8_t *header, int header_len)
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
311 {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
312 int i;
7472
c4434bdf6e51 tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
arpi
parents: 7309
diff changeset
313 int packet_length=-1;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
314
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
315 /*
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
316 * parse header
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
317 */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
318
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
319 i = 30;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
320 while (i<header_len) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
321
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
322 uint64_t guid_1, guid_2, length;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
323
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
324 guid_2 = (uint64_t)header[i] | ((uint64_t)header[i+1]<<8)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
325 | ((uint64_t)header[i+2]<<16) | ((uint64_t)header[i+3]<<24)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
326 | ((uint64_t)header[i+4]<<32) | ((uint64_t)header[i+5]<<40)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
327 | ((uint64_t)header[i+6]<<48) | ((uint64_t)header[i+7]<<56);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
328 i += 8;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
329
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
330 guid_1 = (uint64_t)header[i] | ((uint64_t)header[i+1]<<8)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
331 | ((uint64_t)header[i+2]<<16) | ((uint64_t)header[i+3]<<24)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
332 | ((uint64_t)header[i+4]<<32) | ((uint64_t)header[i+5]<<40)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
333 | ((uint64_t)header[i+6]<<48) | ((uint64_t)header[i+7]<<56);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
334 i += 8;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
335
15626
941b1a71351f printf converted to mp_msg; made static many unnecessarily global symbols
nicodvb
parents: 15181
diff changeset
336 // 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
337
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
338 length = (uint64_t)header[i] | ((uint64_t)header[i+1]<<8)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
339 | ((uint64_t)header[i+2]<<16) | ((uint64_t)header[i+3]<<24)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
340 | ((uint64_t)header[i+4]<<32) | ((uint64_t)header[i+5]<<40)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
341 | ((uint64_t)header[i+6]<<48) | ((uint64_t)header[i+7]<<56);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
342
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
343 i += 8;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
344
12121
6d4212840048 make gcc eating this under hurd
alex
parents: 12077
diff changeset
345 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
346 mp_msg(MSGT_NETWORK,MSGL_INFO,MSGTR_MPDEMUX_MMST_HeaderObject);
12121
6d4212840048 make gcc eating this under hurd
alex
parents: 12077
diff changeset
347 } 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
348 mp_msg(MSGT_NETWORK,MSGL_INFO,MSGTR_MPDEMUX_MMST_DataObject);
12121
6d4212840048 make gcc eating this under hurd
alex
parents: 12077
diff changeset
349 } else if ((guid_1 == 0x6553200cc000e48eULL) && (guid_2 == 0x11cfa9478cabdca1ULL)) {
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
350
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
351 packet_length = get_32(header, i+92-24);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
352
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
353 mp_msg(MSGT_NETWORK,MSGL_INFO,MSGTR_MPDEMUX_MMST_FileObjectPacketLen,
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
354 packet_length, get_32(header, i+96-24));
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
355
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
356
12121
6d4212840048 make gcc eating this under hurd
alex
parents: 12077
diff changeset
357 } else if ((guid_1 == 0x6553200cc000e68eULL) && (guid_2 == 0x11cfa9b7b7dc0791ULL)) {
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
358
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
359 int stream_id = header[i+48] | header[i+49] << 8;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
360
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
361 mp_msg(MSGT_NETWORK,MSGL_INFO,MSGTR_MPDEMUX_MMST_StreamObjectStreamID, stream_id);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
362
15181
ed74657f25b1 Use define instead of hardcodec value for max streams number
rtognimp
parents: 15173
diff changeset
363 if (num_stream_ids < MAX_STREAMS) {
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
364 stream_ids[num_stream_ids] = stream_id;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
365 num_stream_ids++;
15173
424386614ad5 Fix potential buffer overflow for urls with more than 20 streams
rtognimp
parents: 15150
diff changeset
366 } else {
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
367 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
368 }
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
369
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
370 } else {
15628
f0dc4a6c9063 some debugging code
alex
parents: 15626
diff changeset
371 #if 0
f0dc4a6c9063 some debugging code
alex
parents: 15626
diff changeset
372 int b = i;
f0dc4a6c9063 some debugging code
alex
parents: 15626
diff changeset
373 printf ("unknown object (guid: %016llx, %016llx, len: %lld)\n", guid_1, guid_2, length);
f0dc4a6c9063 some debugging code
alex
parents: 15626
diff changeset
374 for (; b < length; b++)
f0dc4a6c9063 some debugging code
alex
parents: 15626
diff changeset
375 {
f0dc4a6c9063 some debugging code
alex
parents: 15626
diff changeset
376 if (isascii(header[b]) || isalpha(header[b]))
f0dc4a6c9063 some debugging code
alex
parents: 15626
diff changeset
377 printf("%c ", header[b]);
f0dc4a6c9063 some debugging code
alex
parents: 15626
diff changeset
378 else
f0dc4a6c9063 some debugging code
alex
parents: 15626
diff changeset
379 printf("%x ", header[b]);
f0dc4a6c9063 some debugging code
alex
parents: 15626
diff changeset
380 }
f0dc4a6c9063 some debugging code
alex
parents: 15626
diff changeset
381 printf("\n");
f0dc4a6c9063 some debugging code
alex
parents: 15626
diff changeset
382 #else
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
383 mp_msg(MSGT_NETWORK,MSGL_WARN,MSGTR_MPDEMUX_MMST_UnknownObject);
15628
f0dc4a6c9063 some debugging code
alex
parents: 15626
diff changeset
384 #endif
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
385 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
386
15626
941b1a71351f printf converted to mp_msg; made static many unnecessarily global symbols
nicodvb
parents: 15181
diff changeset
387 // mp_msg(MSGT_NETWORK,MSGL_INFO,"length : %lld\n", length);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
388
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
389 i += length-24;
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
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
393 return packet_length;
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
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
397
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
398 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
399 unsigned char pre_header[8];
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
400 char data[BUF_SIZE];
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
401
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
402 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
403 mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_MMST_PreHeaderReadFailed);
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
404 return 0;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
405 }
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
406
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
407 // for (i=0; i<8; i++)
15626
941b1a71351f printf converted to mp_msg; made static many unnecessarily global symbols
nicodvb
parents: 15181
diff changeset
408 // mp_msg(MSGT_NETWORK,MSGL_INFO,"pre_header[%d] = %02x (%d)\n",
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
409 // i, pre_header[i], pre_header[i]);
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
410
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
411 if (pre_header[4] == 0x04) {
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
412
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
413 int packet_len;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
414
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
415 packet_len = (pre_header[7] << 8 | pre_header[6]) - 8;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
416
15626
941b1a71351f printf converted to mp_msg; made static many unnecessarily global symbols
nicodvb
parents: 15181
diff changeset
417 // 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
418
14163
dd835e8f3698 fix a problem pointed out by iDEFENSE and several similar ones.
reimar
parents: 13600
diff changeset
419 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
420 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
421 return 0;
dd835e8f3698 fix a problem pointed out by iDEFENSE and several similar ones.
reimar
parents: 13600
diff changeset
422 }
dd835e8f3698 fix a problem pointed out by iDEFENSE and several similar ones.
reimar
parents: 13600
diff changeset
423
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
424 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
425 mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_MMST_MediaDataReadFailed);
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
426 return 0;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
427 }
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
428
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
429 streaming_bufferize(stream_ctrl, data, padding);
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
430
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
431 } else {
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
432
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
433 int32_t packet_len;
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
434 int command;
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
435
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
436 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
437 mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_MMST_packet_lenReadFailed);
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
438 return 0;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
439 }
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
440
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
441 packet_len = get_32 ((unsigned char*)&packet_len, 0) + 4;
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
442
14163
dd835e8f3698 fix a problem pointed out by iDEFENSE and several similar ones.
reimar
parents: 13600
diff changeset
443 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
444 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
445 return 0;
dd835e8f3698 fix a problem pointed out by iDEFENSE and several similar ones.
reimar
parents: 13600
diff changeset
446 }
dd835e8f3698 fix a problem pointed out by iDEFENSE and several similar ones.
reimar
parents: 13600
diff changeset
447
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
448 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
449 mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_MMST_CmdDataReadFailed);
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
450 return 0;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
451 }
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
452
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
453 if ( (pre_header[7] != 0xb0) || (pre_header[6] != 0x0b)
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
454 || (pre_header[5] != 0xfa) || (pre_header[4] != 0xce) ) {
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
455
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
456 mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_MMST_MissingSignature);
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
457 return -1;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
458 }
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
459
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
460 command = get_32 (data, 24) & 0xFFFF;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
461
15626
941b1a71351f printf converted to mp_msg; made static many unnecessarily global symbols
nicodvb
parents: 15181
diff changeset
462 // 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
463
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
464 if (command == 0x1b)
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
465 send_command (s, 0x1b, 0, 0, 0, data);
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
466 else if (command == 0x1e) {
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
467 mp_msg(MSGT_NETWORK,MSGL_INFO,MSGTR_MPDEMUX_MMST_PatentedTechnologyJoke);
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
468 return 0;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
469 }
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
470 else if (command == 0x21 ) {
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
471 // Looks like it's new in WMS9
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
472 // Unknown command, but ignoring it seems to work.
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
473 return 0;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
474 }
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
475 else if (command != 0x05) {
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
476 mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_MMST_UnknownCmd,command);
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
477 return -1;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
478 }
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
479 }
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
480
15626
941b1a71351f printf converted to mp_msg; made static many unnecessarily global symbols
nicodvb
parents: 15181
diff changeset
481 // mp_msg(MSGT_NETWORK,MSGL_INFO,"get media packet succ\n");
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
482
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
483 return 1;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
484 }
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
485
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
486
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
487 static int packet_length1;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
488
15626
941b1a71351f printf converted to mp_msg; made static many unnecessarily global symbols
nicodvb
parents: 15181
diff changeset
489 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
490 {
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
491 int len;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
492
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
493 while( stream_ctrl->buffer_size==0 ) {
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
494 // buffer is empty - fill it!
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
495 int ret = get_media_packet( fd, packet_length1, stream_ctrl);
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
496 if( ret<0 ) {
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
497 mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_MMST_GetMediaPacketErr,strerror(errno));
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
498 return -1;
12077
e200b0e11e9c Fix hanging at end of mms:// streams.
rtognimp
parents: 11412
diff changeset
499 } else if (ret==0) //EOF?
e200b0e11e9c Fix hanging at end of mms:// streams.
rtognimp
parents: 11412
diff changeset
500 return ret;
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
501 }
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
502
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
503 len = stream_ctrl->buffer_size-stream_ctrl->buffer_pos;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
504 if(len>size) len=size;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
505 memcpy( buffer, (stream_ctrl->buffer)+(stream_ctrl->buffer_pos), len );
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
506 stream_ctrl->buffer_pos += len;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
507 if( stream_ctrl->buffer_pos>=stream_ctrl->buffer_size ) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
508 free( stream_ctrl->buffer );
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
509 stream_ctrl->buffer = NULL;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
510 stream_ctrl->buffer_size = 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
511 stream_ctrl->buffer_pos = 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
512 }
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
513 return len;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
514
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
515 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
516
15626
941b1a71351f printf converted to mp_msg; made static many unnecessarily global symbols
nicodvb
parents: 15181
diff changeset
517 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
518 {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
519 return -1;
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
520 // Shut up gcc warning
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
521 fd++;
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
522 pos++;
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
523 streaming_ctrl=NULL;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
524 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
525
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
526 int asf_mmst_streaming_start(stream_t *stream)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
527 {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
528 char str[1024];
10183
2ffb9a8b0428 10l found by yepyep
alex
parents: 7977
diff changeset
529 char data[BUF_SIZE];
14163
dd835e8f3698 fix a problem pointed out by iDEFENSE and several similar ones.
reimar
parents: 13600
diff changeset
530 uint8_t asf_header[HDR_BUF_SIZE];
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
531 int asf_header_len;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
532 int len, i, packet_length;
12751
cf145882979c WMP doesn't encode urls with mmst protocol
rtognimp
parents: 12675
diff changeset
533 char *path, *unescpath;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
534 URL_t *url1 = stream->streaming_ctrl->url;
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
535 int s = stream->fd;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
536
7250
27a1315d6af4 Checked if the connection succeeded before writing in the socket.
bertrand
parents: 6092
diff changeset
537 if( s>0 ) {
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
538 closesocket( stream->fd );
7250
27a1315d6af4 Checked if the connection succeeded before writing in the socket.
bertrand
parents: 6092
diff changeset
539 stream->fd = -1;
27a1315d6af4 Checked if the connection succeeded before writing in the socket.
bertrand
parents: 6092
diff changeset
540 }
27a1315d6af4 Checked if the connection succeeded before writing in the socket.
bertrand
parents: 6092
diff changeset
541
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
542 /* parse url */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
543 path = strchr(url1->file,'/') + 1;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
544
12751
cf145882979c WMP doesn't encode urls with mmst protocol
rtognimp
parents: 12675
diff changeset
545 /* 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
546 * "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
547 */
cf145882979c WMP doesn't encode urls with mmst protocol
rtognimp
parents: 12675
diff changeset
548 unescpath=malloc(strlen(path)+1);
cf145882979c WMP doesn't encode urls with mmst protocol
rtognimp
parents: 12675
diff changeset
549 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
550 mp_msg(MSGT_NETWORK,MSGL_FATAL,MSGTR_MemAllocFailed);
12751
cf145882979c WMP doesn't encode urls with mmst protocol
rtognimp
parents: 12675
diff changeset
551 return -1;
cf145882979c WMP doesn't encode urls with mmst protocol
rtognimp
parents: 12675
diff changeset
552 }
cf145882979c WMP doesn't encode urls with mmst protocol
rtognimp
parents: 12675
diff changeset
553 url_unescape_string(unescpath,path);
cf145882979c WMP doesn't encode urls with mmst protocol
rtognimp
parents: 12675
diff changeset
554 path=unescpath;
cf145882979c WMP doesn't encode urls with mmst protocol
rtognimp
parents: 12675
diff changeset
555
cf145882979c WMP doesn't encode urls with mmst protocol
rtognimp
parents: 12675
diff changeset
556
12968
55e13005ac30 Use port number embedded in url for mms streams
rtognimp
parents: 12751
diff changeset
557 if( url1->port==0 ) {
55e13005ac30 Use port number embedded in url for mms streams
rtognimp
parents: 12751
diff changeset
558 url1->port=1755;
55e13005ac30 Use port number embedded in url for mms streams
rtognimp
parents: 12751
diff changeset
559 }
10625
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10281
diff changeset
560 s = connect2Server( url1->hostname, url1->port, 1);
7250
27a1315d6af4 Checked if the connection succeeded before writing in the socket.
bertrand
parents: 6092
diff changeset
561 if( s<0 ) {
12751
cf145882979c WMP doesn't encode urls with mmst protocol
rtognimp
parents: 12675
diff changeset
562 free(path);
7250
27a1315d6af4 Checked if the connection succeeded before writing in the socket.
bertrand
parents: 6092
diff changeset
563 return s;
27a1315d6af4 Checked if the connection succeeded before writing in the socket.
bertrand
parents: 6092
diff changeset
564 }
16882
dfbe8cd0e081 libmpdemux translatables to help_mp part 1 / mp_msg calls / try 2
reynaldo
parents: 16330
diff changeset
565 mp_msg(MSGT_NETWORK,MSGL_INFO,MSGTR_MPDEMUX_MMST_Connected);
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
566
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
567 seq_num=0;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
568
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
569 /*
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
570 * 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
571 * 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
572 * cmd 1 0x01
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
573 * */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
574
11350
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
575 /* prepare for the url encoding conversion */
27393
4876c89bafdd Rename font-related preprocessor directives.
diego
parents: 27359
diff changeset
576 #ifdef CONFIG_ICONV
27359
d788e177a35e Rename some preprocessor directives from CONFIG_* to HAVE_* where appropriate;
diego
parents: 27341
diff changeset
577 #ifdef HAVE_LANGINFO
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
578 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
579 #else
14542
4a6b79a1ad52 remove all setlocale calls, they break the behaviour of sscanf and
reimar
parents: 14163
diff changeset
580 url_conv = iconv_open("UTF-16LE", NULL);
11403
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
581 #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
582 #endif
11350
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
583
10183
2ffb9a8b0428 10l found by yepyep
alex
parents: 7977
diff changeset
584 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
585 string_utf16 (data, str, strlen(str));
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
586 // send_command(s, commandno ....)
11225
48bb1fd37d2a Fixing tons of 10ls. Patch by rgselk <rgselknospam@yahoo.com>
alex
parents: 10625
diff changeset
587 send_command (s, 1, 0, 0x0004000b, strlen(str)*2+2, data);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
588
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
589 len = recv (s, data, BUF_SIZE, 0) ;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
590
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
591 /*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
592 * Also, the TCP or UDP transport selection is sent.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
593 *
11225
48bb1fd37d2a Fixing tons of 10ls. Patch by rgselk <rgselknospam@yahoo.com>
alex
parents: 10625
diff changeset
594 * 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
595 * and 1037 is the local TCP or UDP socket number
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
596 * cmd 2 0x02
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
597 * */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
598
11225
48bb1fd37d2a Fixing tons of 10ls. Patch by rgselk <rgselknospam@yahoo.com>
alex
parents: 10625
diff changeset
599 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
600 memset (data, 0, 8);
11225
48bb1fd37d2a Fixing tons of 10ls. Patch by rgselk <rgselknospam@yahoo.com>
alex
parents: 10625
diff changeset
601 send_command (s, 2, 0, 0, 24*2+10, data);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
602
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
603 len = recv (s, data, BUF_SIZE, 0) ;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
604
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
605 /* 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
606 * 0x5 */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
607
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
608 string_utf16 (&data[8], path, strlen(path));
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
609 memset (data, 0, 8);
11225
48bb1fd37d2a Fixing tons of 10ls. Patch by rgselk <rgselknospam@yahoo.com>
alex
parents: 10625
diff changeset
610 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
611 free(path);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
612
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
613 get_answer (s);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
614
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
615 /* The ASF header chunk request. Includes ?session' variable for pre header value.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
616 * After this command is sent,
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
617 * 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
618 * 0x15 */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
619
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
620 memset (data, 0, 40);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
621 data[32] = 2;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
622
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
623 send_command (s, 0x15, 1, 0, 40, data);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
624
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
625 num_stream_ids = 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
626 /* get_headers(s, asf_header); */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
627
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
628 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
629 // 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
630 if (asf_header_len==0) { //error reading header
4d1ba1f391f3 Forgotten closesocket on error, patch by
reimar
parents: 19882
diff changeset
631 closesocket(s);
4d1ba1f391f3 Forgotten closesocket on error, patch by
reimar
parents: 19882
diff changeset
632 return -1;
4d1ba1f391f3 Forgotten closesocket on error, patch by
reimar
parents: 19882
diff changeset
633 }
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
634 packet_length = interp_header (asf_header, asf_header_len);
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 /*
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
638 * 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
639 * 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
640 * Where:
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
641 * [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
642 * It is not yet understood what all this means.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
643 * And the last [02] byte is probably the header ?session' value.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
644 *
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
645 * 0x33 */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
646
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
647 memset (data, 0, 40);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
648
22159
6d8f2be532d4 Quick hack mostly for documentation purposes to make -aid work with mms://
reimar
parents: 21536
diff changeset
649 if (audio_id > 0) {
6d8f2be532d4 Quick hack mostly for documentation purposes to make -aid work with mms://
reimar
parents: 21536
diff changeset
650 data[2] = 0xFF;
6d8f2be532d4 Quick hack mostly for documentation purposes to make -aid work with mms://
reimar
parents: 21536
diff changeset
651 data[3] = 0xFF;
6d8f2be532d4 Quick hack mostly for documentation purposes to make -aid work with mms://
reimar
parents: 21536
diff changeset
652 data[4] = audio_id;
6d8f2be532d4 Quick hack mostly for documentation purposes to make -aid work with mms://
reimar
parents: 21536
diff changeset
653 send_command(s, 0x33, num_stream_ids, 0xFFFF | audio_id << 16, 8, data);
6d8f2be532d4 Quick hack mostly for documentation purposes to make -aid work with mms://
reimar
parents: 21536
diff changeset
654 } else {
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
655 for (i=1; i<num_stream_ids; i++) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
656 data [ (i-1) * 6 + 2 ] = 0xFF;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
657 data [ (i-1) * 6 + 3 ] = 0xFF;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
658 data [ (i-1) * 6 + 4 ] = stream_ids[i];
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
659 data [ (i-1) * 6 + 5 ] = 0x00;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
660 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
661
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
662 send_command (s, 0x33, num_stream_ids, 0xFFFF | stream_ids[0] << 16, (num_stream_ids-1)*6+2 , data);
22159
6d8f2be532d4 Quick hack mostly for documentation purposes to make -aid work with mms://
reimar
parents: 21536
diff changeset
663 }
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
664
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
665 get_answer (s);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
666
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
667 /* Start sending file from packet xx.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
668 * This command is also used for resume downloads or requesting a lost packet.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
669 * 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
670 * Includes ?session' value in pre header and the maximum media stream time.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
671 * 0x07 */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
672
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
673 memset (data, 0, 40);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
674
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
675 for (i=8; i<16; i++)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
676 data[i] = 0xFF;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
677
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
678 data[20] = 0x04;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
679
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
680 send_command (s, 0x07, 1, 0xFFFF | stream_ids[0] << 16, 24, data);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
681
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
682 stream->fd = s;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
683 stream->streaming_ctrl->streaming_read = asf_mmst_streaming_read;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
684 stream->streaming_ctrl->streaming_seek = asf_mmst_streaming_seek;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
685 stream->streaming_ctrl->buffering = 1;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
686 stream->streaming_ctrl->status = streaming_playing_e;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
687
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
688 packet_length1 = packet_length;
16930
41aeb5e0cb4b Fix bugs/crash introduced by translation patch
reimar
parents: 16906
diff changeset
689 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
690
27393
4876c89bafdd Rename font-related preprocessor directives.
diego
parents: 27359
diff changeset
691 #ifdef CONFIG_ICONV
11412
ec3dac7d17a0 Warning fixes (approved by A'rpi).
rathann
parents: 11403
diff changeset
692 if (url_conv != (iconv_t)(-1))
11403
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
693 iconv_close(url_conv);
86ab7e0b2a65 fallback to non-iconv dummy utf16 conversion if iconv failed
alex
parents: 11402
diff changeset
694 #endif
11350
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
695
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
696 return 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
697 }