annotate libmpdemux/network.c @ 13283:858b7e04718c

This patch moves the directory creation code to a separate function. I have tried to re-use as much code as possible, to reduce the size of the patch. All duplicate code is removed, resulting in my first patch that actually decreases the size of the binary by about 700 bytes :-)
author ivo
date Wed, 08 Sep 2004 01:11:16 +0000
parents 1591792d4054
children 009337ffcfc4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
1 /*
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
2 * Network layer for MPlayer
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
3 * by Bertrand BAUDET <bertrand_baudet@yahoo.com>
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
4 * (C) 2001, MPlayer team.
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
5 */
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
6
1028
a710b2a06564 Commented the default output to file.
bertrand
parents: 999
diff changeset
7 //#define DUMP2FILE
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
8
1430
1728d249c783 missing unistd.h (requires for off_t under freebsd)
arpi
parents: 1028
diff changeset
9 #include <stdio.h>
1728d249c783 missing unistd.h (requires for off_t under freebsd)
arpi
parents: 1028
diff changeset
10 #include <stdlib.h>
1728d249c783 missing unistd.h (requires for off_t under freebsd)
arpi
parents: 1028
diff changeset
11 #include <string.h>
833
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
12 #include <unistd.h>
1430
1728d249c783 missing unistd.h (requires for off_t under freebsd)
arpi
parents: 1028
diff changeset
13
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
14 #include <errno.h>
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
15 #include <ctype.h>
833
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
16
2555
66837325b929 config.h cleanup, few things added to steram/demuxer headers
arpi
parents: 2489
diff changeset
17 #include "config.h"
66837325b929 config.h cleanup, few things added to steram/demuxer headers
arpi
parents: 2489
diff changeset
18
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
19 #ifndef HAVE_WINSOCK2
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
20 #define closesocket close
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
21 #else
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
22 #include <winsock2.h>
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
23 #include <ws2tcpip.h>
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
24 #endif
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
25
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
26 #include "stream.h"
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
27 #include "demuxer.h"
9749
58e5880f4788 Use new config headers
albeu
parents: 9691
diff changeset
28 #include "../m_config.h"
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
29
841
c906b7600fc6 Included "netdb.h" file needed.
bertrand
parents: 833
diff changeset
30 #include "network.h"
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
31 #include "http.h"
11583
2af52902e7dc Send HTTP Cookies (reading from mozilla/netscape files) support by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>. Disabled by default.
alex
parents: 11505
diff changeset
32 #include "cookies.h"
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
33 #include "url.h"
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
34 #include "asf.h"
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
35 #include "rtp.h"
8570
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
36 #include "pnm.h"
9922
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
37 #include "realrtsp/rtsp_session.h"
841
c906b7600fc6 Included "netdb.h" file needed.
bertrand
parents: 833
diff changeset
38
6466
ebffa928a5d4 Added mplayer version in the user-agent field.
bertrand
parents: 6454
diff changeset
39 #include "../version.h"
ebffa928a5d4 Added mplayer version in the user-agent field.
bertrand
parents: 6454
diff changeset
40
4121
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
41 extern int verbose;
7867
3dc0b71630ff cleanup config option handling in libmpdemux.
arpi
parents: 7862
diff changeset
42 extern int stream_cache_size;
4121
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
43
7862
013c255225d8 mpdemux.c|h moved to libinput, mpdemux_check_interrupt() -> mp_input_check_interrupt()
arpi
parents: 7513
diff changeset
44 extern int mp_input_check_interrupt(int time);
013c255225d8 mpdemux.c|h moved to libinput, mpdemux_check_interrupt() -> mp_input_check_interrupt()
arpi
parents: 7513
diff changeset
45
9749
58e5880f4788 Use new config headers
albeu
parents: 9691
diff changeset
46 int asf_streaming_start( stream_t *stream, int *demuxer_type );
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7881
diff changeset
47 int rtsp_streaming_start( stream_t *stream );
60624e692b95 GCC warning fixes
bertrand
parents: 7881
diff changeset
48
11583
2af52902e7dc Send HTTP Cookies (reading from mozilla/netscape files) support by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>. Disabled by default.
alex
parents: 11505
diff changeset
49 /* Variables for the command line option -user, -passwd, -bandwidth,
2af52902e7dc Send HTTP Cookies (reading from mozilla/netscape files) support by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>. Disabled by default.
alex
parents: 11505
diff changeset
50 -user-agent and -nocookies */
2af52902e7dc Send HTTP Cookies (reading from mozilla/netscape files) support by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>. Disabled by default.
alex
parents: 11505
diff changeset
51
7867
3dc0b71630ff cleanup config option handling in libmpdemux.
arpi
parents: 7862
diff changeset
52 char *network_username=NULL;
3dc0b71630ff cleanup config option handling in libmpdemux.
arpi
parents: 7862
diff changeset
53 char *network_password=NULL;
3dc0b71630ff cleanup config option handling in libmpdemux.
arpi
parents: 7862
diff changeset
54 int network_bandwidth=0;
11583
2af52902e7dc Send HTTP Cookies (reading from mozilla/netscape files) support by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>. Disabled by default.
alex
parents: 11505
diff changeset
55 int network_cookies_enabled = 0;
11228
f25d54466044 User settable http user-agent. Patch by Per Wigren
alex
parents: 11227
diff changeset
56 char *network_useragent=NULL;
6558
b379b061ce50 Read username/password from the -user -pass command line options.
bertrand
parents: 6555
diff changeset
57
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
58 /* IPv6 options */
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
59 int network_prefer_ipv4 = 0;
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
60 int network_ipv4_only_proxy = 0;
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
61
6558
b379b061ce50 Read username/password from the -user -pass command line options.
bertrand
parents: 6555
diff changeset
62
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
63 static struct {
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
64 char *mime_type;
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
65 int demuxer_type;
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
66 } mime_type_table[] = {
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
67 // MP3 streaming, some MP3 streaming server answer with audio/mpeg
4729
f51bd827ed1c fixed MP3 ICY detection, return detected file format for open_stream
alex
parents: 4652
diff changeset
68 { "audio/mpeg", DEMUXER_TYPE_AUDIO },
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
69 // MPEG streaming
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
70 { "video/mpeg", DEMUXER_TYPE_MPEG_PS },
6032
4577bda5806a added some new types
alex
parents: 5916
diff changeset
71 { "video/x-mpeg", DEMUXER_TYPE_MPEG_PS },
4577bda5806a added some new types
alex
parents: 5916
diff changeset
72 { "video/x-mpeg2", DEMUXER_TYPE_MPEG_PS },
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
73 // AVI ??? => video/x-msvideo
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
74 { "video/x-msvideo", DEMUXER_TYPE_AVI },
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
75 // MOV => video/quicktime
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
76 { "video/quicktime", DEMUXER_TYPE_MOV },
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
77 // ASF
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
78 { "audio/x-ms-wax", DEMUXER_TYPE_ASF },
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
79 { "audio/x-ms-wma", DEMUXER_TYPE_ASF },
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
80 { "video/x-ms-asf", DEMUXER_TYPE_ASF },
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
81 { "video/x-ms-afs", DEMUXER_TYPE_ASF },
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
82 { "video/x-ms-wvx", DEMUXER_TYPE_ASF },
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
83 { "video/x-ms-wmv", DEMUXER_TYPE_ASF },
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
84 { "video/x-ms-wma", DEMUXER_TYPE_ASF },
4783
17f29765ea77 Support for retriving mp3 playlist from the network
albeu
parents: 4730
diff changeset
85 // Playlists
7393
52b29760fe95 Added a new ASX playlist mime-type
bertrand
parents: 7251
diff changeset
86 { "video/x-ms-wmx", DEMUXER_TYPE_PLAYLIST },
4783
17f29765ea77 Support for retriving mp3 playlist from the network
albeu
parents: 4730
diff changeset
87 { "audio/x-scpls", DEMUXER_TYPE_PLAYLIST },
17f29765ea77 Support for retriving mp3 playlist from the network
albeu
parents: 4730
diff changeset
88 { "audio/x-mpegurl", DEMUXER_TYPE_PLAYLIST },
6032
4577bda5806a added some new types
alex
parents: 5916
diff changeset
89 { "audio/x-pls", DEMUXER_TYPE_PLAYLIST },
4577bda5806a added some new types
alex
parents: 5916
diff changeset
90 // Real Media
8114
ba66375adb6f Added OGG streaming support, patch from Balatoni Denes <pnis@coder.hu>
bertrand
parents: 8027
diff changeset
91 { "audio/x-pn-realaudio", DEMUXER_TYPE_REAL },
ba66375adb6f Added OGG streaming support, patch from Balatoni Denes <pnis@coder.hu>
bertrand
parents: 8027
diff changeset
92 // OGG Streaming
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents: 12018
diff changeset
93 { "application/x-ogg", DEMUXER_TYPE_OGG },
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents: 12018
diff changeset
94 // NullSoft Streaming Video
12477
1550ef7117c4 Add detection of nsa streamed by aol ultravox server
rtognimp
parents: 12390
diff changeset
95 { "video/nsv", DEMUXER_TYPE_NSV},
1550ef7117c4 Add detection of nsa streamed by aol ultravox server
rtognimp
parents: 12390
diff changeset
96 { "misc/ultravox", DEMUXER_TYPE_NSV}
8114
ba66375adb6f Added OGG streaming support, patch from Balatoni Denes <pnis@coder.hu>
bertrand
parents: 8027
diff changeset
97
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
98 };
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
99
8890
c9cbfb9d720c Finally commented out the code for autodetection based on the extension.
bertrand
parents: 8824
diff changeset
100 /*
c9cbfb9d720c Finally commented out the code for autodetection based on the extension.
bertrand
parents: 8824
diff changeset
101 * An autodetection based on the extension is not a good idea.
c9cbfb9d720c Finally commented out the code for autodetection based on the extension.
bertrand
parents: 8824
diff changeset
102 *
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
103 static struct {
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
104 char *extension;
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
105 int demuxer_type;
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
106 } extensions_table[] = {
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
107 { "mpeg", DEMUXER_TYPE_MPEG_PS },
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
108 { "mpg", DEMUXER_TYPE_MPEG_PS },
3072
8dbc1954e49b added some new types
alex
parents: 3042
diff changeset
109 { "mpe", DEMUXER_TYPE_MPEG_ES },
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
110 { "avi", DEMUXER_TYPE_AVI },
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
111 { "mov", DEMUXER_TYPE_MOV },
3072
8dbc1954e49b added some new types
alex
parents: 3042
diff changeset
112 { "qt", DEMUXER_TYPE_MOV },
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
113 { "asx", DEMUXER_TYPE_ASF },
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
114 { "asf", DEMUXER_TYPE_ASF },
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
115 { "wmv", DEMUXER_TYPE_ASF },
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
116 { "wma", DEMUXER_TYPE_ASF },
3072
8dbc1954e49b added some new types
alex
parents: 3042
diff changeset
117 { "viv", DEMUXER_TYPE_VIVO },
4236
0c809c541aa1 added .rm (real) and .y4m (yuv4mpeg)
alex
parents: 4146
diff changeset
118 { "rm", DEMUXER_TYPE_REAL },
6032
4577bda5806a added some new types
alex
parents: 5916
diff changeset
119 { "ra", DEMUXER_TYPE_REAL },
4236
0c809c541aa1 added .rm (real) and .y4m (yuv4mpeg)
alex
parents: 4146
diff changeset
120 { "y4m", DEMUXER_TYPE_Y4M },
4729
f51bd827ed1c fixed MP3 ICY detection, return detected file format for open_stream
alex
parents: 4652
diff changeset
121 { "mp3", DEMUXER_TYPE_AUDIO },
8114
ba66375adb6f Added OGG streaming support, patch from Balatoni Denes <pnis@coder.hu>
bertrand
parents: 8027
diff changeset
122 { "ogg", DEMUXER_TYPE_OGG },
4729
f51bd827ed1c fixed MP3 ICY detection, return detected file format for open_stream
alex
parents: 4652
diff changeset
123 { "wav", DEMUXER_TYPE_AUDIO },
4783
17f29765ea77 Support for retriving mp3 playlist from the network
albeu
parents: 4730
diff changeset
124 { "pls", DEMUXER_TYPE_PLAYLIST },
17f29765ea77 Support for retriving mp3 playlist from the network
albeu
parents: 4730
diff changeset
125 { "m3u", DEMUXER_TYPE_PLAYLIST }
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
126 };
8890
c9cbfb9d720c Finally commented out the code for autodetection based on the extension.
bertrand
parents: 8824
diff changeset
127 */
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
128
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
129 streaming_ctrl_t *
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
130 streaming_ctrl_new( ) {
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
131 streaming_ctrl_t *streaming_ctrl;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
132 streaming_ctrl = (streaming_ctrl_t*)malloc(sizeof(streaming_ctrl_t));
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
133 if( streaming_ctrl==NULL ) {
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
134 mp_msg(MSGT_NETWORK,MSGL_FATAL,"Failed to allocate memory\n");
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
135 return NULL;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
136 }
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
137 memset( streaming_ctrl, 0, sizeof(streaming_ctrl_t) );
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
138 return streaming_ctrl;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
139 }
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
140
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
141 void
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
142 streaming_ctrl_free( streaming_ctrl_t *streaming_ctrl ) {
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
143 if( streaming_ctrl==NULL ) return;
4251
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
144 if( streaming_ctrl->url ) url_free( streaming_ctrl->url );
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
145 if( streaming_ctrl->buffer ) free( streaming_ctrl->buffer );
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
146 if( streaming_ctrl->data ) free( streaming_ctrl->data );
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
147 free( streaming_ctrl );
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
148 }
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
149
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
150 int
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
151 read_rtp_from_server(int fd, char *buffer, int length) {
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
152 struct rtpheader rh;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
153 char *data;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
154 int len;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
155 static int got_first = 0;
4553
bab3aac84143 ehh. i forgot to commit this patch: fix RTP streaming. patch by Dave Chapman <dave@dchapman.com>
arpi
parents: 4302
diff changeset
156 static unsigned short sequence;
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
157
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
158 if( buffer==NULL || length<0 ) return -1;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
159
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
160 getrtp2(fd, &rh, &data, &len);
4553
bab3aac84143 ehh. i forgot to commit this patch: fix RTP streaming. patch by Dave Chapman <dave@dchapman.com>
arpi
parents: 4302
diff changeset
161 if( got_first && rh.b.sequence != (unsigned short)(sequence+1) )
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
162 mp_msg(MSGT_NETWORK,MSGL_ERR,"RTP packet sequence error! Expected: %d, received: %d\n",
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
163 sequence+1, rh.b.sequence);
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
164 got_first = 1;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
165 sequence = rh.b.sequence;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
166 memcpy(buffer, data, len);
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
167 return(len);
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
168 }
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
169
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
170
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
171 // Converts an address family constant to a string
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
172
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
173 char *af2String(int af) {
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
174 switch (af) {
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
175 case AF_INET: return "AF_INET";
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
176
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
177 #ifdef HAVE_AF_INET6
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
178 case AF_INET6: return "AF_INET6";
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
179 #endif
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
180 default: return "Unknown address family!";
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
181 }
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
182 }
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
183
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
184
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
185
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
186 // Connect to a server using a TCP connection, with specified address family
7251
cc83ad6af513 Return -2 for fatal error while connecting to a server.
bertrand
parents: 7007
diff changeset
187 // return -2 for fatal error, like unable to resolve name, connection timeout...
cc83ad6af513 Return -2 for fatal error while connecting to a server.
bertrand
parents: 7007
diff changeset
188 // return -1 is unable to connect to a particular port
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
189
833
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
190 int
10625
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10317
diff changeset
191 connect2Server_with_af(char *host, int port, int af,int verb) {
833
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
192 int socket_server_fd;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
193 int err, err_len;
4825
41d2da3bd082 Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents: 4817
diff changeset
194 int ret,count = 0;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
195 fd_set set;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
196 struct timeval tv;
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
197 union {
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
198 struct sockaddr_in four;
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
199 #ifdef HAVE_AF_INET6
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
200 struct sockaddr_in6 six;
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
201 #endif
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
202 } server_address;
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
203 size_t server_address_size;
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
204 void *our_s_addr; // Pointer to sin_addr or sin6_addr
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7881
diff changeset
205 struct hostent *hp=NULL;
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
206 char buf[255];
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
207
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
208 #ifdef HAVE_WINSOCK2
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
209 u_long val;
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
210 #endif
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
211
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
212 socket_server_fd = socket(af, SOCK_STREAM, 0);
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
213
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
214
833
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
215 if( socket_server_fd==-1 ) {
11227
a7cbee9f21f7 disable a silly errormessage
alex
parents: 10625
diff changeset
216 // mp_msg(MSGT_NETWORK,MSGL_ERR,"Failed to create %s socket:\n", af2String(af));
7251
cc83ad6af513 Return -2 for fatal error while connecting to a server.
bertrand
parents: 7007
diff changeset
217 return -2;
833
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
218 }
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
219
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
220 switch (af) {
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
221 case AF_INET: our_s_addr = (void *) &server_address.four.sin_addr; break;
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
222 #ifdef HAVE_AF_INET6
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
223 case AF_INET6: our_s_addr = (void *) &server_address.six.sin6_addr; break;
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
224 #endif
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
225 default:
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
226 mp_msg(MSGT_NETWORK,MSGL_ERR, "Unknown address family %d:\n", af);
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
227 return -2;
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
228 }
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
229
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
230
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
231 bzero(&server_address, sizeof(server_address));
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
232
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
233 #ifndef HAVE_WINSOCK2
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
234 #ifdef USE_ATON
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
235 if (inet_aton(host, our_s_addr)!=1)
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
236 #else
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
237 if (inet_pton(af, host, our_s_addr)!=1)
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
238 #endif
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
239 #else
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
240 if ( inet_addr(host)==INADDR_NONE )
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
241 #endif
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
242 {
10625
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10317
diff changeset
243 if(verb) mp_msg(MSGT_NETWORK,MSGL_STATUS,"Resolving %s for %s...\n", host, af2String(af));
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
244
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
245 #ifdef HAVE_GETHOSTBYNAME2
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
246 hp=(struct hostent*)gethostbyname2( host, af );
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
247 #else
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
248 hp=(struct hostent*)gethostbyname( host );
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
249 #endif
841
c906b7600fc6 Included "netdb.h" file needed.
bertrand
parents: 833
diff changeset
250 if( hp==NULL ) {
10625
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10317
diff changeset
251 if(verb) mp_msg(MSGT_NETWORK,MSGL_ERR,"Couldn't resolve name for %s: %s\n", af2String(af), host);
7251
cc83ad6af513 Return -2 for fatal error while connecting to a server.
bertrand
parents: 7007
diff changeset
252 return -2;
833
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
253 }
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
254
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
255 memcpy( our_s_addr, (void*)hp->h_addr, hp->h_length );
833
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
256 }
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
257 #ifdef HAVE_WINSOCK2
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
258 else {
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
259 unsigned long addr = inet_addr(host);
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
260 memcpy( our_s_addr, (void*)&addr, sizeof(addr) );
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
261 }
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
262 #endif
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
263
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
264 switch (af) {
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
265 case AF_INET:
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
266 server_address.four.sin_family=af;
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
267 server_address.four.sin_port=htons(port);
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
268 server_address_size = sizeof(server_address.four);
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
269 break;
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
270 #ifdef HAVE_AF_INET6
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
271 case AF_INET6:
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
272 server_address.six.sin6_family=af;
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
273 server_address.six.sin6_port=htons(port);
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
274 server_address_size = sizeof(server_address.six);
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
275 break;
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
276 #endif
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
277 default:
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
278 mp_msg(MSGT_NETWORK,MSGL_ERR, "Unknown address family %d:\n", af);
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
279 return -2;
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
280 }
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
281
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
282 #if defined(USE_ATON) || defined(HAVE_WINSOCK2)
9900
f36b9dda3082 Use inet_ntoa where inet_ntop is not available.
bertrand
parents: 9890
diff changeset
283 strncpy( buf, inet_ntoa( *((struct in_addr*)our_s_addr) ), 255);
f36b9dda3082 Use inet_ntoa where inet_ntop is not available.
bertrand
parents: 9890
diff changeset
284 #else
f36b9dda3082 Use inet_ntoa where inet_ntop is not available.
bertrand
parents: 9890
diff changeset
285 inet_ntop(af, our_s_addr, buf, 255);
f36b9dda3082 Use inet_ntoa where inet_ntop is not available.
bertrand
parents: 9890
diff changeset
286 #endif
10625
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10317
diff changeset
287 if(verb) mp_msg(MSGT_NETWORK,MSGL_STATUS,"Connecting to server %s[%s]:%d ...\n", host, buf , port );
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
288
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
289 // Turn the socket as non blocking so we can timeout on the connection
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
290 #ifndef HAVE_WINSOCK2
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
291 fcntl( socket_server_fd, F_SETFL, fcntl(socket_server_fd, F_GETFL) | O_NONBLOCK );
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
292 #else
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
293 val = 1;
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
294 ioctlsocket( socket_server_fd, FIONBIO, &val );
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
295 #endif
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
296 if( connect( socket_server_fd, (struct sockaddr*)&server_address, server_address_size )==-1 ) {
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
297 #ifndef HAVE_WINSOCK2
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
298 if( errno!=EINPROGRESS ) {
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
299 #else
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
300 if( (WSAGetLastError() != WSAEINPROGRESS) && (WSAGetLastError() != WSAEWOULDBLOCK) ) {
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
301 #endif
10625
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10317
diff changeset
302 if(verb) mp_msg(MSGT_NETWORK,MSGL_ERR,"Failed to connect to server with %s\n", af2String(af));
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
303 closesocket(socket_server_fd);
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
304 return -1;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
305 }
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
306 }
6477
08712c93b643 Here I go again, another fix for the timeout.
bertrand
parents: 6476
diff changeset
307 tv.tv_sec = 0;
08712c93b643 Here I go again, another fix for the timeout.
bertrand
parents: 6476
diff changeset
308 tv.tv_usec = 500000;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
309 FD_ZERO( &set );
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
310 FD_SET( socket_server_fd, &set );
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
311 // When the connection will be made, we will have a writable fd
4825
41d2da3bd082 Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents: 4817
diff changeset
312 while((ret = select(socket_server_fd+1, NULL, &set, NULL, &tv)) == 0) {
6454
87612a287882 Added some missing carriage returns.
bertrand
parents: 6032
diff changeset
313 if( ret<0 ) mp_msg(MSGT_NETWORK,MSGL_ERR,"select failed\n");
4825
41d2da3bd082 Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents: 4817
diff changeset
314 else if(ret > 0) break;
7862
013c255225d8 mpdemux.c|h moved to libinput, mpdemux_check_interrupt() -> mp_input_check_interrupt()
arpi
parents: 7513
diff changeset
315 else if(count > 30 || mp_input_check_interrupt(500)) {
6477
08712c93b643 Here I go again, another fix for the timeout.
bertrand
parents: 6476
diff changeset
316 if(count > 30)
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
317 mp_msg(MSGT_NETWORK,MSGL_ERR,"Connection timeout\n");
4825
41d2da3bd082 Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents: 4817
diff changeset
318 else
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
319 mp_msg(MSGT_NETWORK,MSGL_V,"Connection interuppted by user\n");
8824
87e37d8cfb25 Return another error code for timeout.
bertrand
parents: 8766
diff changeset
320 return -3;
4825
41d2da3bd082 Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents: 4817
diff changeset
321 }
41d2da3bd082 Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents: 4817
diff changeset
322 count++;
41d2da3bd082 Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents: 4817
diff changeset
323 FD_ZERO( &set );
41d2da3bd082 Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents: 4817
diff changeset
324 FD_SET( socket_server_fd, &set );
6477
08712c93b643 Here I go again, another fix for the timeout.
bertrand
parents: 6476
diff changeset
325 tv.tv_sec = 0;
08712c93b643 Here I go again, another fix for the timeout.
bertrand
parents: 6476
diff changeset
326 tv.tv_usec = 500000;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
327 }
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
328
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
329 // Turn back the socket as blocking
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
330 #ifndef HAVE_WINSOCK2
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
331 fcntl( socket_server_fd, F_SETFL, fcntl(socket_server_fd, F_GETFL) & ~O_NONBLOCK );
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
332 #else
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
333 val = 0;
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
334 ioctlsocket( socket_server_fd, FIONBIO, &val );
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
335 #endif
3494
fb9de639ed30 Applied the patch from Alban Bedel <albeu@free.fr>.
bertrand
parents: 3453
diff changeset
336 // Check if there were any error
fb9de639ed30 Applied the patch from Alban Bedel <albeu@free.fr>.
bertrand
parents: 3453
diff changeset
337 err_len = sizeof(int);
fb9de639ed30 Applied the patch from Alban Bedel <albeu@free.fr>.
bertrand
parents: 3453
diff changeset
338 ret = getsockopt(socket_server_fd,SOL_SOCKET,SO_ERROR,&err,&err_len);
fb9de639ed30 Applied the patch from Alban Bedel <albeu@free.fr>.
bertrand
parents: 3453
diff changeset
339 if(ret < 0) {
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
340 mp_msg(MSGT_NETWORK,MSGL_ERR,"getsockopt failed : %s\n",strerror(errno));
7251
cc83ad6af513 Return -2 for fatal error while connecting to a server.
bertrand
parents: 7007
diff changeset
341 return -2;
3494
fb9de639ed30 Applied the patch from Alban Bedel <albeu@free.fr>.
bertrand
parents: 3453
diff changeset
342 }
fb9de639ed30 Applied the patch from Alban Bedel <albeu@free.fr>.
bertrand
parents: 3453
diff changeset
343 if(err > 0) {
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
344 mp_msg(MSGT_NETWORK,MSGL_ERR,"Connect error : %s\n",strerror(err));
3494
fb9de639ed30 Applied the patch from Alban Bedel <albeu@free.fr>.
bertrand
parents: 3453
diff changeset
345 return -1;
fb9de639ed30 Applied the patch from Alban Bedel <albeu@free.fr>.
bertrand
parents: 3453
diff changeset
346 }
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
347
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
348 return socket_server_fd;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
349 }
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
350
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
351 // Connect to a server using a TCP connection
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
352 // return -2 for fatal error, like unable to resolve name, connection timeout...
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
353 // return -1 is unable to connect to a particular port
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
354
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
355
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
356 int
10625
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10317
diff changeset
357 connect2Server(char *host, int port, int verb) {
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
358 #ifdef HAVE_AF_INET6
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
359 int r;
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
360 int s = -2;
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
361
10625
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10317
diff changeset
362 r = connect2Server_with_af(host, port, network_prefer_ipv4 ? AF_INET:AF_INET6,verb);
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
363 if (r > -1) return r;
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
364
10625
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10317
diff changeset
365 s = connect2Server_with_af(host, port, network_prefer_ipv4 ? AF_INET6:AF_INET,verb);
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
366 if (s == -2) return r;
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
367 return s;
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
368 #else
10625
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10317
diff changeset
369 return connect2Server_with_af(host, port, AF_INET,verb);
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
370 #endif
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
371
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
372
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
373 }
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
374
4146
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
375 URL_t*
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
376 check4proxies( URL_t *url ) {
4652
17cf55182029 Cleaned up the way proxies checking was done.
bertrand
parents: 4553
diff changeset
377 URL_t *url_out = NULL;
4251
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
378 if( url==NULL ) return NULL;
4652
17cf55182029 Cleaned up the way proxies checking was done.
bertrand
parents: 4553
diff changeset
379 url_out = url_new( url->url );
4146
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
380 if( !strcasecmp(url->protocol, "http_proxy") ) {
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
381 mp_msg(MSGT_NETWORK,MSGL_V,"Using HTTP proxy: http://%s:%d\n", url->hostname, url->port );
4652
17cf55182029 Cleaned up the way proxies checking was done.
bertrand
parents: 4553
diff changeset
382 return url_out;
4146
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
383 }
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
384 // Check if the http_proxy environment variable is set.
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
385 if( !strcasecmp(url->protocol, "http") ) {
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
386 char *proxy;
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
387 proxy = getenv("http_proxy");
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
388 if( proxy!=NULL ) {
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
389 // We got a proxy, build the URL to use it
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
390 int len;
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
391 char *new_url;
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
392 URL_t *tmp_url;
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
393 URL_t *proxy_url = url_new( proxy );
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
394
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
395 if( proxy_url==NULL ) {
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
396 mp_msg(MSGT_NETWORK,MSGL_WARN,"Invalid proxy setting...Trying without proxy.\n");
4652
17cf55182029 Cleaned up the way proxies checking was done.
bertrand
parents: 4553
diff changeset
397 return url_out;
4146
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
398 }
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
399
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
400 #ifdef HAVE_AF_INET6
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
401 if (network_ipv4_only_proxy && (gethostbyname(url->hostname)==NULL)) {
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
402 mp_msg(MSGT_NETWORK,MSGL_WARN,
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
403 "Could not find resolve remote hostname for AF_INET. Trying without proxy.\n");
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
404 return url_out;
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
405 }
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
406 #endif
4146
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
407
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
408 mp_msg(MSGT_NETWORK,MSGL_V,"Using HTTP proxy: %s\n", proxy_url->url );
4146
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
409 len = strlen( proxy_url->hostname ) + strlen( url->url ) + 20; // 20 = http_proxy:// + port
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
410 new_url = malloc( len+1 );
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
411 if( new_url==NULL ) {
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
412 mp_msg(MSGT_NETWORK,MSGL_FATAL,"Memory allocation failed\n");
4652
17cf55182029 Cleaned up the way proxies checking was done.
bertrand
parents: 4553
diff changeset
413 return url_out;
4146
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
414 }
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
415 sprintf(new_url, "http_proxy://%s:%d/%s", proxy_url->hostname, proxy_url->port, url->url );
4146
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
416 tmp_url = url_new( new_url );
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
417 if( tmp_url==NULL ) {
4652
17cf55182029 Cleaned up the way proxies checking was done.
bertrand
parents: 4553
diff changeset
418 return url_out;
4146
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
419 }
4652
17cf55182029 Cleaned up the way proxies checking was done.
bertrand
parents: 4553
diff changeset
420 url_free( url_out );
17cf55182029 Cleaned up the way proxies checking was done.
bertrand
parents: 4553
diff changeset
421 url_out = tmp_url;
4146
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
422 free( new_url );
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
423 url_free( proxy_url );
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
424 }
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
425 }
4652
17cf55182029 Cleaned up the way proxies checking was done.
bertrand
parents: 4553
diff changeset
426 return url_out;
4146
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
427 }
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
428
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
429 int
11965
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
430 http_send_request( URL_t *url, off_t pos ) {
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
431 HTTP_header_t *http_hdr;
4121
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
432 URL_t *server_url;
11228
f25d54466044 User settable http user-agent. Patch by Per Wigren
alex
parents: 11227
diff changeset
433 char str[256];
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
434 int fd;
4121
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
435 int ret;
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
436 int proxy = 0; // Boolean
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
437
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
438 http_hdr = http_new_header();
4121
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
439
4145
c66fddd8867c Changed the proxy protocol to http_proxy.
bertrand
parents: 4121
diff changeset
440 if( !strcasecmp(url->protocol, "http_proxy") ) {
4121
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
441 proxy = 1;
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
442 server_url = url_new( (url->file)+1 );
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
443 http_set_uri( http_hdr, server_url->url );
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
444 } else {
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
445 server_url = url;
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
446 http_set_uri( http_hdr, server_url->file );
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
447 }
12638
2ebd553876c8 RFC compliance patch by Eric Lammerts <eric@lammerts.org>
alex
parents: 12610
diff changeset
448 if (server_url->port && server_url->port != 80)
2ebd553876c8 RFC compliance patch by Eric Lammerts <eric@lammerts.org>
alex
parents: 12610
diff changeset
449 snprintf(str, 256, "Host: %s:%d", server_url->hostname, server_url->port );
2ebd553876c8 RFC compliance patch by Eric Lammerts <eric@lammerts.org>
alex
parents: 12610
diff changeset
450 else
2ebd553876c8 RFC compliance patch by Eric Lammerts <eric@lammerts.org>
alex
parents: 12610
diff changeset
451 snprintf(str, 256, "Host: %s", server_url->hostname );
3585
cb985ea11ed5 Added the Host field in the HTTP request.
bertrand
parents: 3494
diff changeset
452 http_set_field( http_hdr, str);
11228
f25d54466044 User settable http user-agent. Patch by Per Wigren
alex
parents: 11227
diff changeset
453 if (network_useragent)
f25d54466044 User settable http user-agent. Patch by Per Wigren
alex
parents: 11227
diff changeset
454 {
f25d54466044 User settable http user-agent. Patch by Per Wigren
alex
parents: 11227
diff changeset
455 snprintf(str, 256, "User-Agent: %s", network_useragent);
f25d54466044 User settable http user-agent. Patch by Per Wigren
alex
parents: 11227
diff changeset
456 http_set_field(http_hdr, str);
f25d54466044 User settable http user-agent. Patch by Per Wigren
alex
parents: 11227
diff changeset
457 }
f25d54466044 User settable http user-agent. Patch by Per Wigren
alex
parents: 11227
diff changeset
458 else
f25d54466044 User settable http user-agent. Patch by Per Wigren
alex
parents: 11227
diff changeset
459 http_set_field( http_hdr, "User-Agent: MPlayer/"VERSION);
11965
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
460
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
461 if(pos>0) {
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
462 // Extend http_send_request with possibility to do partial content retrieval
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
463 snprintf(str, 256, "Range: bytes=%d-", pos);
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
464 http_set_field(http_hdr, str);
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
465 }
11583
2af52902e7dc Send HTTP Cookies (reading from mozilla/netscape files) support by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>. Disabled by default.
alex
parents: 11505
diff changeset
466
2af52902e7dc Send HTTP Cookies (reading from mozilla/netscape files) support by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>. Disabled by default.
alex
parents: 11505
diff changeset
467 if (network_cookies_enabled) cookies_set( http_hdr, server_url->hostname, server_url->url );
2af52902e7dc Send HTTP Cookies (reading from mozilla/netscape files) support by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>. Disabled by default.
alex
parents: 11505
diff changeset
468
12352
2e0a4b32e139 Should be Connection: close, and not closed.
bertrand
parents: 12274
diff changeset
469 http_set_field( http_hdr, "Connection: close");
6515
138ff0a71119 Added HTTP basic authentication support
bertrand
parents: 6477
diff changeset
470 http_add_basic_authentication( http_hdr, url->username, url->password );
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
471 if( http_build_request( http_hdr )==NULL ) {
841
c906b7600fc6 Included "netdb.h" file needed.
bertrand
parents: 833
diff changeset
472 return -1;
833
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
473 }
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
474
4121
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
475 if( proxy ) {
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
476 if( url->port==0 ) url->port = 8080; // Default port for the proxy server
10625
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10317
diff changeset
477 fd = connect2Server( url->hostname, url->port,1 );
4121
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
478 url_free( server_url );
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
479 } else {
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
480 if( server_url->port==0 ) server_url->port = 80; // Default port for the web server
10625
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10317
diff changeset
481 fd = connect2Server( server_url->hostname, server_url->port,1 );
4121
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
482 }
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
483 if( fd<0 ) {
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
484 return -1;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
485 }
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
486 mp_msg(MSGT_NETWORK,MSGL_DBG2,"Request: [%s]\n", http_hdr->buffer );
4121
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
487
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: 10199
diff changeset
488 ret = send( fd, http_hdr->buffer, http_hdr->buffer_size, 0 );
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7881
diff changeset
489 if( ret!=(int)http_hdr->buffer_size ) {
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
490 mp_msg(MSGT_NETWORK,MSGL_ERR,"Error while sending HTTP request: didn't sent all the request\n");
4121
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
491 return -1;
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
492 }
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
493
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
494 http_free( http_hdr );
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
495
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
496 return fd;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
497 }
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
498
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
499 HTTP_header_t *
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
500 http_read_response( int fd ) {
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
501 HTTP_header_t *http_hdr;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
502 char response[BUFFER_SIZE];
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
503 int i;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
504
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
505 http_hdr = http_new_header();
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
506 if( http_hdr==NULL ) {
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
507 return NULL;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
508 }
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
509
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
510 do {
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: 10199
diff changeset
511 i = recv( fd, response, BUFFER_SIZE, 0 );
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
512 if( i<0 ) {
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
513 mp_msg(MSGT_NETWORK,MSGL_ERR,"Read failed\n");
3365
eb1c24557dad Checked the return values on read.
bertrand
parents: 3072
diff changeset
514 http_free( http_hdr );
eb1c24557dad Checked the return values on read.
bertrand
parents: 3072
diff changeset
515 return NULL;
eb1c24557dad Checked the return values on read.
bertrand
parents: 3072
diff changeset
516 }
eb1c24557dad Checked the return values on read.
bertrand
parents: 3072
diff changeset
517 if( i==0 ) {
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
518 mp_msg(MSGT_NETWORK,MSGL_ERR,"http_read_response read 0 -ie- EOF\n");
3365
eb1c24557dad Checked the return values on read.
bertrand
parents: 3072
diff changeset
519 http_free( http_hdr );
eb1c24557dad Checked the return values on read.
bertrand
parents: 3072
diff changeset
520 return NULL;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
521 }
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
522 http_response_append( http_hdr, response, i );
2489
0ecc1b4f7cf8 Added ASF http server streaming (Not mms streaming).
bertrand
parents: 2310
diff changeset
523 } while( !http_is_header_entire( http_hdr ) );
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
524 http_response_parse( http_hdr );
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
525 return http_hdr;
833
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
526 }
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
527
6555
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
528 int
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
529 http_authenticate(HTTP_header_t *http_hdr, URL_t *url, int *auth_retry) {
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
530 char *aut;
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7881
diff changeset
531
6558
b379b061ce50 Read username/password from the -user -pass command line options.
bertrand
parents: 6555
diff changeset
532 if( *auth_retry==1 ) {
6555
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
533 mp_msg(MSGT_NETWORK,MSGL_ERR,"Authentication failed\n");
6570
52ecfeddf864 Changed the -pass option to -passwd to avoid clash with mencoder option.
bertrand
parents: 6558
diff changeset
534 mp_msg(MSGT_NETWORK,MSGL_ERR,"Please use the option -user and -passwd to provide your username/password for a list of URLs,\n");
6558
b379b061ce50 Read username/password from the -user -pass command line options.
bertrand
parents: 6555
diff changeset
535 mp_msg(MSGT_NETWORK,MSGL_ERR,"or form an URL like: http://username:password@hostname/file\n");
6555
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
536 return -1;
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
537 }
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
538 if( *auth_retry>0 ) {
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
539 if( url->username ) {
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
540 free( url->username );
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
541 url->username = NULL;
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
542 }
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
543 if( url->password ) {
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
544 free( url->password );
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
545 url->password = NULL;
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
546 }
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
547 }
6558
b379b061ce50 Read username/password from the -user -pass command line options.
bertrand
parents: 6555
diff changeset
548
6555
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
549 aut = http_get_field(http_hdr, "WWW-Authenticate");
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
550 if( aut!=NULL ) {
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
551 char *aut_space;
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
552 aut_space = strstr(aut, "realm=");
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
553 if( aut_space!=NULL ) aut_space += 6;
6558
b379b061ce50 Read username/password from the -user -pass command line options.
bertrand
parents: 6555
diff changeset
554 mp_msg(MSGT_NETWORK,MSGL_INFO,"Authentication required for %s\n", aut_space);
6555
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
555 } else {
6558
b379b061ce50 Read username/password from the -user -pass command line options.
bertrand
parents: 6555
diff changeset
556 mp_msg(MSGT_NETWORK,MSGL_INFO,"Authentication required\n");
6555
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
557 }
7867
3dc0b71630ff cleanup config option handling in libmpdemux.
arpi
parents: 7862
diff changeset
558 if( network_username ) {
3dc0b71630ff cleanup config option handling in libmpdemux.
arpi
parents: 7862
diff changeset
559 url->username = strdup(network_username);
6555
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
560 if( url->username==NULL ) {
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
561 mp_msg(MSGT_NETWORK,MSGL_FATAL,"Memory allocation failed\n");
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
562 return -1;
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
563 }
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
564 } else {
6558
b379b061ce50 Read username/password from the -user -pass command line options.
bertrand
parents: 6555
diff changeset
565 mp_msg(MSGT_NETWORK,MSGL_ERR,"Unable to read the username\n");
6570
52ecfeddf864 Changed the -pass option to -passwd to avoid clash with mencoder option.
bertrand
parents: 6558
diff changeset
566 mp_msg(MSGT_NETWORK,MSGL_ERR,"Please use the option -user and -passwd to provide your username/password for a list of URLs,\n");
6558
b379b061ce50 Read username/password from the -user -pass command line options.
bertrand
parents: 6555
diff changeset
567 mp_msg(MSGT_NETWORK,MSGL_ERR,"or form an URL like: http://username:password@hostname/file\n");
6555
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
568 return -1;
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
569 }
7867
3dc0b71630ff cleanup config option handling in libmpdemux.
arpi
parents: 7862
diff changeset
570 if( network_password ) {
3dc0b71630ff cleanup config option handling in libmpdemux.
arpi
parents: 7862
diff changeset
571 url->password = strdup(network_password);
6558
b379b061ce50 Read username/password from the -user -pass command line options.
bertrand
parents: 6555
diff changeset
572 if( url->password==NULL ) {
b379b061ce50 Read username/password from the -user -pass command line options.
bertrand
parents: 6555
diff changeset
573 mp_msg(MSGT_NETWORK,MSGL_FATAL,"Memory allocation failed\n");
b379b061ce50 Read username/password from the -user -pass command line options.
bertrand
parents: 6555
diff changeset
574 return -1;
b379b061ce50 Read username/password from the -user -pass command line options.
bertrand
parents: 6555
diff changeset
575 }
b379b061ce50 Read username/password from the -user -pass command line options.
bertrand
parents: 6555
diff changeset
576 } else {
b379b061ce50 Read username/password from the -user -pass command line options.
bertrand
parents: 6555
diff changeset
577 mp_msg(MSGT_NETWORK,MSGL_INFO,"No password provided, trying blank password\n");
b379b061ce50 Read username/password from the -user -pass command line options.
bertrand
parents: 6555
diff changeset
578 }
6555
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
579 (*auth_retry)++;
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
580 return 0;
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
581 }
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
582
11965
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
583 int
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
584 http_seek( stream_t *stream, off_t pos ) {
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
585 HTTP_header_t *http_hdr = NULL;
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
586 int fd;
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
587 if( stream==NULL ) return 0;
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
588
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
589 if( stream->fd>0 ) closesocket(stream->fd); // need to reconnect to seek in http-stream
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
590 fd = http_send_request( stream->streaming_ctrl->url, pos );
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
591 if( fd<0 ) return 0;
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
592
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
593 http_hdr = http_read_response( fd );
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
594
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
595 if( http_hdr==NULL ) return 0;
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
596
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
597 switch( http_hdr->status_code ) {
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
598 case 200:
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
599 case 206: // OK
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
600 mp_msg(MSGT_NETWORK,MSGL_V,"Content-Type: [%s]\n", http_get_field(http_hdr, "Content-Type") );
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
601 mp_msg(MSGT_NETWORK,MSGL_V,"Content-Length: [%s]\n", http_get_field(http_hdr, "Content-Length") );
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
602 if( http_hdr->body_size>0 ) {
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
603 if( streaming_bufferize( stream->streaming_ctrl, http_hdr->body, http_hdr->body_size )<0 ) {
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
604 http_free( http_hdr );
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
605 return -1;
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
606 }
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
607 }
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
608 break;
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
609 default:
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
610 mp_msg(MSGT_NETWORK,MSGL_ERR,"Server return %d: %s\n", http_hdr->status_code, http_hdr->reason_phrase );
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
611 close( fd );
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
612 fd = -1;
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
613 }
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
614 stream->fd = fd;
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
615
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
616 if( http_hdr ) {
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
617 http_free( http_hdr );
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
618 stream->streaming_ctrl->data = NULL;
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
619 }
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
620
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
621 stream->pos=pos;
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
622
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
623 return 1;
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
624 }
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
625
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
626
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
627 // By using the protocol, the extension of the file or the content-type
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
628 // we might be able to guess the streaming type.
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
629 int
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
630 autodetectProtocol(streaming_ctrl_t *streaming_ctrl, int *fd_out, int *file_format) {
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
631 HTTP_header_t *http_hdr;
11505
8de9dba0ffaa Add detection of Real rtsp when there are queries in url.
rtognimp
parents: 11228
diff changeset
632 unsigned int i;
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
633 int fd=-1;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
634 int redirect;
6516
351790e49eff Improved the authentication interaction. Still need to replace scanf.
bertrand
parents: 6515
diff changeset
635 int auth_retry=0;
11965
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
636 int seekable=0;
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
637 char *extension;
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
638 char *content_type;
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
639 char *next_url;
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
640
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
641 URL_t *url = streaming_ctrl->url;
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
642 *file_format = DEMUXER_TYPE_UNKNOWN;
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
643
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
644 do {
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
645 *fd_out = -1;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
646 next_url = NULL;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
647 extension = NULL;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
648 content_type = NULL;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
649 redirect = 0;
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
650
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
651 if( url==NULL ) {
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
652 return -1;
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
653 }
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
654
8570
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
655 // Checking for PNM://
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
656 if( !strcasecmp(url->protocol, "pnm") ) {
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
657 *file_format = DEMUXER_TYPE_REAL;
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
658 return 0;
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
659 }
8890
c9cbfb9d720c Finally commented out the code for autodetection based on the extension.
bertrand
parents: 8824
diff changeset
660
c9cbfb9d720c Finally commented out the code for autodetection based on the extension.
bertrand
parents: 8824
diff changeset
661 /*
c9cbfb9d720c Finally commented out the code for autodetection based on the extension.
bertrand
parents: 8824
diff changeset
662 * An autodetection based on the extension is not a good idea.
c9cbfb9d720c Finally commented out the code for autodetection based on the extension.
bertrand
parents: 8824
diff changeset
663 *
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
664 // Get the extension of the file if present
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
665 if( url->file!=NULL ) {
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
666 for( i=strlen(url->file) ; i>0 ; i-- ) {
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
667 if( url->file[i]=='.' ) {
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
668 extension=(url->file)+i+1;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
669 break;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
670 }
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
671 }
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
672 }
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
673 extension=NULL;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
674 if( extension!=NULL ) {
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
675 mp_msg(MSGT_NETWORK,MSGL_DBG2,"Extension: %s\n", extension );
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
676 // Look for the extension in the extensions table
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
677 for( i=0 ; i<(sizeof(extensions_table)/sizeof(extensions_table[0])) ; i++ ) {
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
678 if( !strcasecmp(extension, extensions_table[i].extension) ) {
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
679 *file_format = extensions_table[i].demuxer_type;
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
680 return 0;
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
681 }
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
682 }
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
683 }
8890
c9cbfb9d720c Finally commented out the code for autodetection based on the extension.
bertrand
parents: 8824
diff changeset
684 */
c9cbfb9d720c Finally commented out the code for autodetection based on the extension.
bertrand
parents: 8824
diff changeset
685
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
686 // Checking for RTSP
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
687 if( !strcasecmp(url->protocol, "rtsp") ) {
12206
d572c605f665 Try Real rtsp, then live.com on every rtsp stream (remove extension
rtognimp
parents: 12175
diff changeset
688 // Try Real rtsp:// first (it's always built in)
d572c605f665 Try Real rtsp, then live.com on every rtsp stream (remove extension
rtognimp
parents: 12175
diff changeset
689 // If it fails, try live.com (if compiled in)
d572c605f665 Try Real rtsp, then live.com on every rtsp stream (remove extension
rtognimp
parents: 12175
diff changeset
690 *file_format = DEMUXER_TYPE_REAL;
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6642
diff changeset
691 return 0;
10055
2e6d63e564f2 We now check for "sip:" URLs - which are handled using the same LIVE.COM
rsf
parents: 9932
diff changeset
692 // Checking for SIP
2e6d63e564f2 We now check for "sip:" URLs - which are handled using the same LIVE.COM
rsf
parents: 9932
diff changeset
693 } else if( !strcasecmp(url->protocol, "sip") ) {
2e6d63e564f2 We now check for "sip:" URLs - which are handled using the same LIVE.COM
rsf
parents: 9932
diff changeset
694 #ifdef STREAMING_LIVE_DOT_COM
2e6d63e564f2 We now check for "sip:" URLs - which are handled using the same LIVE.COM
rsf
parents: 9932
diff changeset
695 *file_format = DEMUXER_TYPE_RTP;
2e6d63e564f2 We now check for "sip:" URLs - which are handled using the same LIVE.COM
rsf
parents: 9932
diff changeset
696 return 0;
2e6d63e564f2 We now check for "sip:" URLs - which are handled using the same LIVE.COM
rsf
parents: 9932
diff changeset
697 #else
2e6d63e564f2 We now check for "sip:" URLs - which are handled using the same LIVE.COM
rsf
parents: 9932
diff changeset
698 mp_msg(MSGT_NETWORK,MSGL_ERR,"SIP support requires the \"LIVE.COM Streaming Media\" libraries!\n");
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
699 return -1;
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6642
diff changeset
700 #endif
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
701 }
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
702
12799
befb79b0232e Make rtp:// cohexist with LIVE.COM
rtognimp
parents: 12679
diff changeset
703 // Old, hacked RTP support, which works for MPEG Streams
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6642
diff changeset
704 // RTP streams only:
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
705 // Checking for RTP
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
706 if( !strcasecmp(url->protocol, "rtp") ) {
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
707 if( url->port==0 ) {
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
708 mp_msg(MSGT_NETWORK,MSGL_ERR,"You must enter a port number for RTP streams!\n");
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
709 return -1;
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
710 }
4553
bab3aac84143 ehh. i forgot to commit this patch: fix RTP streaming. patch by Dave Chapman <dave@dchapman.com>
arpi
parents: 4302
diff changeset
711 return 0;
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
712 }
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
713
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
714 // Checking for ASF
3453
10577da4a7b1 Added a data field in the streaming_ctrl_t struct, to store any
bertrand
parents: 3424
diff changeset
715 if( !strncasecmp(url->protocol, "mms", 3) ) {
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
716 *file_format = DEMUXER_TYPE_ASF;
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
717 return 0;
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
718 }
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
719
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
720 // HTTP based protocol
4145
c66fddd8867c Changed the proxy protocol to http_proxy.
bertrand
parents: 4121
diff changeset
721 if( !strcasecmp(url->protocol, "http") || !strcasecmp(url->protocol, "http_proxy") ) {
11965
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
722 fd = http_send_request( url, 0 );
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
723 if( fd<0 ) {
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
724 return -1;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
725 }
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
726
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
727 http_hdr = http_read_response( fd );
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
728 if( http_hdr==NULL ) {
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
729 closesocket( fd );
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
730 http_free( http_hdr );
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
731 return -1;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
732 }
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
733
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
734 *fd_out=fd;
8027
b9da278e4c92 verbose can be negative
arpi
parents: 7953
diff changeset
735 if( verbose>0 ) {
4121
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
736 http_debug_hdr( http_hdr );
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
737 }
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
738
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
739 streaming_ctrl->data = (void*)http_hdr;
11965
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
740
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
741 // Check if we can make partial content requests and thus seek in http-streams
12018
2c2fb4457982 Seek in HTTP streams and stdin seek fixes
rtognimp
parents: 11965
diff changeset
742 if( http_hdr!=NULL && http_hdr->status_code==200 ) {
2c2fb4457982 Seek in HTTP streams and stdin seek fixes
rtognimp
parents: 11965
diff changeset
743 char *accept_ranges;
2c2fb4457982 Seek in HTTP streams and stdin seek fixes
rtognimp
parents: 11965
diff changeset
744 if( (accept_ranges = http_get_field(http_hdr,"Accept-Ranges")) != NULL )
2c2fb4457982 Seek in HTTP streams and stdin seek fixes
rtognimp
parents: 11965
diff changeset
745 seekable = strncmp(accept_ranges,"bytes",5)==0;
2c2fb4457982 Seek in HTTP streams and stdin seek fixes
rtognimp
parents: 11965
diff changeset
746 }
11965
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
747
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
748 // Check if the response is an ICY status_code reason_phrase
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
749 if( !strcasecmp(http_hdr->protocol, "ICY") ) {
5868
ad8124c9d462 Add some info prints to ICY code and handle return codes ICY specific, also avoid printing
atmos4
parents: 5867
diff changeset
750 switch( http_hdr->status_code ) {
ad8124c9d462 Add some info prints to ICY code and handle return codes ICY specific, also avoid printing
atmos4
parents: 5867
diff changeset
751 case 200: { // OK
ad8124c9d462 Add some info prints to ICY code and handle return codes ICY specific, also avoid printing
atmos4
parents: 5867
diff changeset
752 char *field_data = NULL;
ad8124c9d462 Add some info prints to ICY code and handle return codes ICY specific, also avoid printing
atmos4
parents: 5867
diff changeset
753 // note: I skip icy-notice1 and 2, as they contain html <BR>
ad8124c9d462 Add some info prints to ICY code and handle return codes ICY specific, also avoid printing
atmos4
parents: 5867
diff changeset
754 // and are IMHO useless info ::atmos
ad8124c9d462 Add some info prints to ICY code and handle return codes ICY specific, also avoid printing
atmos4
parents: 5867
diff changeset
755 if( (field_data = http_get_field(http_hdr, "icy-name")) != NULL )
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
756 mp_msg(MSGT_NETWORK,MSGL_INFO,"Name : %s\n", field_data); field_data = NULL;
5868
ad8124c9d462 Add some info prints to ICY code and handle return codes ICY specific, also avoid printing
atmos4
parents: 5867
diff changeset
757 if( (field_data = http_get_field(http_hdr, "icy-genre")) != NULL )
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
758 mp_msg(MSGT_NETWORK,MSGL_INFO,"Genre : %s\n", field_data); field_data = NULL;
5868
ad8124c9d462 Add some info prints to ICY code and handle return codes ICY specific, also avoid printing
atmos4
parents: 5867
diff changeset
759 if( (field_data = http_get_field(http_hdr, "icy-url")) != NULL )
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
760 mp_msg(MSGT_NETWORK,MSGL_INFO,"Website: %s\n", field_data); field_data = NULL;
5868
ad8124c9d462 Add some info prints to ICY code and handle return codes ICY specific, also avoid printing
atmos4
parents: 5867
diff changeset
761 // XXX: does this really mean public server? ::atmos
ad8124c9d462 Add some info prints to ICY code and handle return codes ICY specific, also avoid printing
atmos4
parents: 5867
diff changeset
762 if( (field_data = http_get_field(http_hdr, "icy-pub")) != NULL )
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
763 mp_msg(MSGT_NETWORK,MSGL_INFO,"Public : %s\n", atoi(field_data)?"yes":"no"); field_data = NULL;
5868
ad8124c9d462 Add some info prints to ICY code and handle return codes ICY specific, also avoid printing
atmos4
parents: 5867
diff changeset
764 if( (field_data = http_get_field(http_hdr, "icy-br")) != NULL )
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
765 mp_msg(MSGT_NETWORK,MSGL_INFO,"Bitrate: %skbit/s\n", field_data); field_data = NULL;
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents: 12018
diff changeset
766
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents: 12018
diff changeset
767 // If content-type == video/nsv we most likely have a winamp video stream
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents: 12018
diff changeset
768 // otherwise it should be mp3. if there are more types consider adding mime type
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents: 12018
diff changeset
769 // handling like later
12477
1550ef7117c4 Add detection of nsa streamed by aol ultravox server
rtognimp
parents: 12390
diff changeset
770 if ( (field_data = http_get_field(http_hdr, "content-type")) != NULL && (!strcmp(field_data, "video/nsv") || !strcmp(field_data, "misc/ultravox")))
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents: 12018
diff changeset
771 *file_format = DEMUXER_TYPE_NSV;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents: 12018
diff changeset
772 else
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents: 12018
diff changeset
773 *file_format = DEMUXER_TYPE_AUDIO;
5868
ad8124c9d462 Add some info prints to ICY code and handle return codes ICY specific, also avoid printing
atmos4
parents: 5867
diff changeset
774 return 0;
ad8124c9d462 Add some info prints to ICY code and handle return codes ICY specific, also avoid printing
atmos4
parents: 5867
diff changeset
775 }
5916
568a56e40a3f Added ICY error 400: Server full.
bertrand
parents: 5915
diff changeset
776 case 400: // Server Full
568a56e40a3f Added ICY error 400: Server full.
bertrand
parents: 5915
diff changeset
777 mp_msg(MSGT_NETWORK,MSGL_ERR,"Error: ICY-Server is full, skipping!\n");
568a56e40a3f Added ICY error 400: Server full.
bertrand
parents: 5915
diff changeset
778 return -1;
5892
2e71feda5e0f Added ICY error 401: Service unavailable.
bertrand
parents: 5868
diff changeset
779 case 401: // Service Unavailable
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
780 mp_msg(MSGT_NETWORK,MSGL_ERR,"Error: ICY-Server return service unavailable, skipping!\n");
5892
2e71feda5e0f Added ICY error 401: Service unavailable.
bertrand
parents: 5868
diff changeset
781 return -1;
8766
50ffffd0bc18 Added the ICY 403 "Service Forbiden" error message.
bertrand
parents: 8570
diff changeset
782 case 403: // Service Forbidden
50ffffd0bc18 Added the ICY 403 "Service Forbiden" error message.
bertrand
parents: 8570
diff changeset
783 mp_msg(MSGT_NETWORK,MSGL_ERR,"Error: ICY-Server return 'Service Forbidden'\n");
50ffffd0bc18 Added the ICY 403 "Service Forbiden" error message.
bertrand
parents: 8570
diff changeset
784 return -1;
5868
ad8124c9d462 Add some info prints to ICY code and handle return codes ICY specific, also avoid printing
atmos4
parents: 5867
diff changeset
785 case 404: // Resource Not Found
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
786 mp_msg(MSGT_NETWORK,MSGL_ERR,"Error: ICY-Server couldn't find requested stream, skipping!\n");
5868
ad8124c9d462 Add some info prints to ICY code and handle return codes ICY specific, also avoid printing
atmos4
parents: 5867
diff changeset
787 return -1;
ad8124c9d462 Add some info prints to ICY code and handle return codes ICY specific, also avoid printing
atmos4
parents: 5867
diff changeset
788 default:
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
789 mp_msg(MSGT_NETWORK,MSGL_ERR,"Error: unhandled ICY-Errorcode, contact MPlayer developers!\n");
5868
ad8124c9d462 Add some info prints to ICY code and handle return codes ICY specific, also avoid printing
atmos4
parents: 5867
diff changeset
790 return -1;
ad8124c9d462 Add some info prints to ICY code and handle return codes ICY specific, also avoid printing
atmos4
parents: 5867
diff changeset
791 }
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
792 }
5868
ad8124c9d462 Add some info prints to ICY code and handle return codes ICY specific, also avoid printing
atmos4
parents: 5867
diff changeset
793
ad8124c9d462 Add some info prints to ICY code and handle return codes ICY specific, also avoid printing
atmos4
parents: 5867
diff changeset
794 // Assume standard http if not ICY
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
795 switch( http_hdr->status_code ) {
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
796 case 200: // OK
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
797 // Look if we can use the Content-Type
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
798 content_type = http_get_field( http_hdr, "Content-Type" );
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
799 if( content_type!=NULL ) {
5868
ad8124c9d462 Add some info prints to ICY code and handle return codes ICY specific, also avoid printing
atmos4
parents: 5867
diff changeset
800 char *content_length = NULL;
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
801 mp_msg(MSGT_NETWORK,MSGL_V,"Content-Type: [%s]\n", content_type );
5868
ad8124c9d462 Add some info prints to ICY code and handle return codes ICY specific, also avoid printing
atmos4
parents: 5867
diff changeset
802 if( (content_length = http_get_field(http_hdr, "Content-Length")) != NULL)
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
803 mp_msg(MSGT_NETWORK,MSGL_V,"Content-Length: [%s]\n", http_get_field(http_hdr, "Content-Length"));
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
804 // Check in the mime type table for a demuxer type
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
805 for( i=0 ; i<(sizeof(mime_type_table)/sizeof(mime_type_table[0])) ; i++ ) {
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
806 if( !strcasecmp( content_type, mime_type_table[i].mime_type ) ) {
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
807 *file_format = mime_type_table[i].demuxer_type;
11965
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
808 return seekable; // for streaming_start
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
809 }
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
810 }
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
811 }
4817
1e46f40dcd0e Handle HTTP OK response that doesn't contain a mime-type.
bertrand
parents: 4802
diff changeset
812 // Not found in the mime type table, don't fail,
1e46f40dcd0e Handle HTTP OK response that doesn't contain a mime-type.
bertrand
parents: 4802
diff changeset
813 // we should try raw HTTP
11965
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
814 return seekable; // for streaming_start
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
815 // Redirect
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
816 case 301: // Permanently
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
817 case 302: // Temporarily
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
818 // TODO: RFC 2616, recommand to detect infinite redirection loops
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
819 next_url = http_get_field( http_hdr, "Location" );
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
820 if( next_url!=NULL ) {
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
821 closesocket( fd );
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
822 url_free( url );
4802
9c06b312ced6 Finnaly figured out this little long living bug
albeu
parents: 4783
diff changeset
823 streaming_ctrl->url = url = url_new( next_url );
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
824 http_free( http_hdr );
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
825 redirect = 1;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
826 }
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
827 break;
6558
b379b061ce50 Read username/password from the -user -pass command line options.
bertrand
parents: 6555
diff changeset
828 case 401: // Authentication required
6555
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
829 if( http_authenticate(http_hdr, url, &auth_retry)<0 ) return -1;
6515
138ff0a71119 Added HTTP basic authentication support
bertrand
parents: 6477
diff changeset
830 redirect = 1;
138ff0a71119 Added HTTP basic authentication support
bertrand
parents: 6477
diff changeset
831 break;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
832 default:
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
833 mp_msg(MSGT_NETWORK,MSGL_ERR,"Server returned %d: %s\n", http_hdr->status_code, http_hdr->reason_phrase );
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
834 return -1;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
835 }
3453
10577da4a7b1 Added a data field in the streaming_ctrl_t struct, to store any
bertrand
parents: 3424
diff changeset
836 } else {
10625
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10317
diff changeset
837 mp_msg(MSGT_NETWORK,MSGL_V,"Unknown protocol '%s'\n", url->protocol );
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
838 return -1;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
839 }
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
840 } while( redirect );
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
841
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
842 return -1;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
843 }
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
844
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
845 int
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
846 streaming_bufferize( streaming_ctrl_t *streaming_ctrl, char *buffer, int size) {
4251
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
847 //printf("streaming_bufferize\n");
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
848 streaming_ctrl->buffer = (char*)malloc(size);
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
849 if( streaming_ctrl->buffer==NULL ) {
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
850 mp_msg(MSGT_NETWORK,MSGL_FATAL,"Memory allocation failed\n");
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
851 return -1;
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
852 }
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
853 memcpy( streaming_ctrl->buffer, buffer, size );
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
854 streaming_ctrl->buffer_size = size;
3599
2141db140d84 nop_steraming fixed
arpi
parents: 3585
diff changeset
855 return size;
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
856 }
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
857
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
858 int
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
859 nop_streaming_read( int fd, char *buffer, int size, streaming_ctrl_t *stream_ctrl ) {
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
860 int len=0;
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
861 //printf("nop_streaming_read\n");
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
862 if( stream_ctrl->buffer_size!=0 ) {
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
863 int buffer_len = stream_ctrl->buffer_size-stream_ctrl->buffer_pos;
4251
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
864 //printf("%d bytes in buffer\n", stream_ctrl->buffer_size);
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
865 len = (size<buffer_len)?size:buffer_len;
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
866 memcpy( buffer, (stream_ctrl->buffer)+(stream_ctrl->buffer_pos), len );
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
867 stream_ctrl->buffer_pos += len;
4251
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
868 //printf("buffer_pos = %d\n", stream_ctrl->buffer_pos );
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
869 if( stream_ctrl->buffer_pos>=stream_ctrl->buffer_size ) {
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
870 free( stream_ctrl->buffer );
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
871 stream_ctrl->buffer = NULL;
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
872 stream_ctrl->buffer_size = 0;
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
873 stream_ctrl->buffer_pos = 0;
4251
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
874 //printf("buffer cleaned\n");
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
875 }
4251
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
876 //printf("read %d bytes from buffer\n", len );
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
877 }
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
878
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
879 if( len<size ) {
3365
eb1c24557dad Checked the return values on read.
bertrand
parents: 3072
diff changeset
880 int ret;
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: 10199
diff changeset
881 ret = recv( fd, buffer+len, size-len, 0 );
3494
fb9de639ed30 Applied the patch from Alban Bedel <albeu@free.fr>.
bertrand
parents: 3453
diff changeset
882 if( ret<0 ) {
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
883 mp_msg(MSGT_NETWORK,MSGL_ERR,"nop_streaming_read error : %s\n",strerror(errno));
3365
eb1c24557dad Checked the return values on read.
bertrand
parents: 3072
diff changeset
884 }
eb1c24557dad Checked the return values on read.
bertrand
parents: 3072
diff changeset
885 len += ret;
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
886 //printf("read %d bytes from network\n", len );
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
887 }
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
888
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
889 return len;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
890 }
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
891
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
892 int
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
893 nop_streaming_seek( int fd, off_t pos, streaming_ctrl_t *stream_ctrl ) {
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
894 return -1;
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7881
diff changeset
895 // To shut up gcc warning
60624e692b95 GCC warning fixes
bertrand
parents: 7881
diff changeset
896 fd++;
60624e692b95 GCC warning fixes
bertrand
parents: 7881
diff changeset
897 pos++;
60624e692b95 GCC warning fixes
bertrand
parents: 7881
diff changeset
898 stream_ctrl=NULL;
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
899 }
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
900
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
901 int
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
902 nop_streaming_start( stream_t *stream ) {
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
903 HTTP_header_t *http_hdr = NULL;
12268
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
904 char *next_url=NULL;
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
905 URL_t *rd_url=NULL;
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
906 int fd,ret;
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
907 if( stream==NULL ) return -1;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
908
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
909 fd = stream->fd;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
910 if( fd<0 ) {
11965
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
911 fd = http_send_request( stream->streaming_ctrl->url, 0 );
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
912 if( fd<0 ) return -1;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
913 http_hdr = http_read_response( fd );
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
914 if( http_hdr==NULL ) return -1;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
915
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
916 switch( http_hdr->status_code ) {
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
917 case 200: // OK
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
918 mp_msg(MSGT_NETWORK,MSGL_V,"Content-Type: [%s]\n", http_get_field(http_hdr, "Content-Type") );
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
919 mp_msg(MSGT_NETWORK,MSGL_V,"Content-Length: [%s]\n", http_get_field(http_hdr, "Content-Length") );
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
920 if( http_hdr->body_size>0 ) {
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
921 if( streaming_bufferize( stream->streaming_ctrl, http_hdr->body, http_hdr->body_size )<0 ) {
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
922 http_free( http_hdr );
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
923 return -1;
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
924 }
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
925 }
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
926 break;
12268
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
927 // Redirect
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
928 case 301: // Permanently
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
929 case 302: // Temporarily
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
930 ret=-1;
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
931 next_url = http_get_field( http_hdr, "Location" );
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
932
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
933 if (next_url != NULL)
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
934 rd_url=url_new(next_url);
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
935
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
936 if (next_url != NULL && rd_url != NULL) {
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
937 mp_msg(MSGT_NETWORK,MSGL_STATUS,"Redirected: Using this url instead %s\n",next_url);
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
938 stream->streaming_ctrl->url=check4proxies(rd_url);
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
939 ret=nop_streaming_start(stream); //recursively get streaming started
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
940 } else {
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
941 mp_msg(MSGT_NETWORK,MSGL_ERR,"Redirection failed\n");
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
942 closesocket( fd );
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
943 fd = -1;
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
944 }
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
945 return ret;
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
946 break;
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
947 case 401: //Authorization required
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
948 case 403: //Forbidden
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
949 case 404: //Not found
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
950 case 500: //Server Error
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
951 default:
12268
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
952 mp_msg(MSGT_NETWORK,MSGL_ERR,"Server returned code %d: %s\n", http_hdr->status_code, http_hdr->reason_phrase );
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
953 closesocket( fd );
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
954 fd = -1;
12268
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
955 return -1;
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
956 break;
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
957 }
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
958 stream->fd = fd;
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
959 } else {
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
960 http_hdr = (HTTP_header_t*)stream->streaming_ctrl->data;
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
961 if( http_hdr->body_size>0 ) {
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
962 if( streaming_bufferize( stream->streaming_ctrl, http_hdr->body, http_hdr->body_size )<0 ) {
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
963 http_free( http_hdr );
4251
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
964 stream->streaming_ctrl->data = NULL;
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
965 return -1;
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
966 }
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
967 }
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
968 }
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
969
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
970 if( http_hdr ) {
3732
837ed2f1ed5e possible uninit pointer free()'d
pl
parents: 3686
diff changeset
971 http_free( http_hdr );
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
972 stream->streaming_ctrl->data = NULL;
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
973 }
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
974
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
975 stream->streaming_ctrl->streaming_read = nop_streaming_read;
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
976 stream->streaming_ctrl->streaming_seek = nop_streaming_seek;
8939
aaca5f177b99 better cache size defaults
arpi
parents: 8890
diff changeset
977 stream->streaming_ctrl->prebuffer_size = 64*1024; // 64 KBytes
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
978 stream->streaming_ctrl->buffering = 1;
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
979 stream->streaming_ctrl->status = streaming_playing_e;
4072
eac2948c00d4 Applied RTP patch from Brian Kuschak <bkuschak@yahoo.com>
bertrand
parents: 4046
diff changeset
980 return 0;
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
981 }
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
982
8570
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
983 int
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
984 pnm_streaming_read( int fd, char *buffer, int size, streaming_ctrl_t *stream_ctrl ) {
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
985 return pnm_read(stream_ctrl->data, buffer, size);
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
986 }
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
987
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
988
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
989 int
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
990 pnm_streaming_start( stream_t *stream ) {
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
991 int fd;
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
992 pnm_t *pnm;
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
993 if( stream==NULL ) return -1;
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
994
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
995 fd = connect2Server( stream->streaming_ctrl->url->hostname,
10625
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10317
diff changeset
996 stream->streaming_ctrl->url->port ? stream->streaming_ctrl->url->port : 7070,1 );
8570
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
997 printf("PNM:// fd=%d\n",fd);
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
998 if(fd<0) return -1;
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
999
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1000 pnm = pnm_connect(fd,stream->streaming_ctrl->url->file);
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1001 if(!pnm) return -1;
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1002
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1003 stream->fd=fd;
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1004 stream->streaming_ctrl->data=pnm;
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1005
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1006 stream->streaming_ctrl->streaming_read = pnm_streaming_read;
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1007 // stream->streaming_ctrl->streaming_seek = nop_streaming_seek;
8939
aaca5f177b99 better cache size defaults
arpi
parents: 8890
diff changeset
1008 stream->streaming_ctrl->prebuffer_size = 8*1024; // 8 KBytes
8570
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1009 stream->streaming_ctrl->buffering = 1;
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1010 stream->streaming_ctrl->status = streaming_playing_e;
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1011 return 0;
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1012 }
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1013
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1014
9922
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1015 int
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1016 realrtsp_streaming_read( int fd, char *buffer, int size, streaming_ctrl_t *stream_ctrl ) {
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1017 return rtsp_session_read(stream_ctrl->data, buffer, size);
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1018 }
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1019
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1020
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1021 int
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1022 realrtsp_streaming_start( stream_t *stream ) {
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1023 int fd;
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1024 rtsp_session_t *rtsp;
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1025 char *mrl;
12894
1591792d4054 Fix segfault caused by changing a pointer that will be freed later
rtognimp
parents: 12799
diff changeset
1026 char *file;
9922
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1027 int port;
10199
0c72c1d0d6a4 Fix redirection in real rtsp connections.
rtognimp
parents: 10171
diff changeset
1028 int redirected, temp;
9922
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1029 if( stream==NULL ) return -1;
10199
0c72c1d0d6a4 Fix redirection in real rtsp connections.
rtognimp
parents: 10171
diff changeset
1030
0c72c1d0d6a4 Fix redirection in real rtsp connections.
rtognimp
parents: 10171
diff changeset
1031 temp = 5; // counter so we don't get caught in infinite redirections (you never know)
0c72c1d0d6a4 Fix redirection in real rtsp connections.
rtognimp
parents: 10171
diff changeset
1032
0c72c1d0d6a4 Fix redirection in real rtsp connections.
rtognimp
parents: 10171
diff changeset
1033 do {
0c72c1d0d6a4 Fix redirection in real rtsp connections.
rtognimp
parents: 10171
diff changeset
1034
10317
e4f5cdf9d9b0 Patch from Andreas Hess <jaska@gmx.net>:
bertrand
parents: 10281
diff changeset
1035 redirected = 0;
9922
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1036
10317
e4f5cdf9d9b0 Patch from Andreas Hess <jaska@gmx.net>:
bertrand
parents: 10281
diff changeset
1037 fd = connect2Server( stream->streaming_ctrl->url->hostname,
10625
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10317
diff changeset
1038 port = (stream->streaming_ctrl->url->port ? stream->streaming_ctrl->url->port : 554),1 );
10317
e4f5cdf9d9b0 Patch from Andreas Hess <jaska@gmx.net>:
bertrand
parents: 10281
diff changeset
1039 if(fd<0) return -1;
e4f5cdf9d9b0 Patch from Andreas Hess <jaska@gmx.net>:
bertrand
parents: 10281
diff changeset
1040
12894
1591792d4054 Fix segfault caused by changing a pointer that will be freed later
rtognimp
parents: 12799
diff changeset
1041 file = stream->streaming_ctrl->url->file;
1591792d4054 Fix segfault caused by changing a pointer that will be freed later
rtognimp
parents: 12799
diff changeset
1042 if (file[0] == '/')
1591792d4054 Fix segfault caused by changing a pointer that will be freed later
rtognimp
parents: 12799
diff changeset
1043 file++;
1591792d4054 Fix segfault caused by changing a pointer that will be freed later
rtognimp
parents: 12799
diff changeset
1044 mrl = malloc(sizeof(char)*(strlen(stream->streaming_ctrl->url->hostname)+strlen(file)+16));
1591792d4054 Fix segfault caused by changing a pointer that will be freed later
rtognimp
parents: 12799
diff changeset
1045 sprintf(mrl,"rtsp://%s:%i/%s",stream->streaming_ctrl->url->hostname,port,file);
1591792d4054 Fix segfault caused by changing a pointer that will be freed later
rtognimp
parents: 12799
diff changeset
1046 rtsp = rtsp_session_start(fd,&mrl, file,
10317
e4f5cdf9d9b0 Patch from Andreas Hess <jaska@gmx.net>:
bertrand
parents: 10281
diff changeset
1047 stream->streaming_ctrl->url->hostname, port, &redirected);
10199
0c72c1d0d6a4 Fix redirection in real rtsp connections.
rtognimp
parents: 10171
diff changeset
1048
10317
e4f5cdf9d9b0 Patch from Andreas Hess <jaska@gmx.net>:
bertrand
parents: 10281
diff changeset
1049 if ( redirected == 1 ) {
e4f5cdf9d9b0 Patch from Andreas Hess <jaska@gmx.net>:
bertrand
parents: 10281
diff changeset
1050 url_free(stream->streaming_ctrl->url);
e4f5cdf9d9b0 Patch from Andreas Hess <jaska@gmx.net>:
bertrand
parents: 10281
diff changeset
1051 stream->streaming_ctrl->url = url_new(mrl);
e4f5cdf9d9b0 Patch from Andreas Hess <jaska@gmx.net>:
bertrand
parents: 10281
diff changeset
1052 closesocket(fd);
e4f5cdf9d9b0 Patch from Andreas Hess <jaska@gmx.net>:
bertrand
parents: 10281
diff changeset
1053 }
10199
0c72c1d0d6a4 Fix redirection in real rtsp connections.
rtognimp
parents: 10171
diff changeset
1054
10317
e4f5cdf9d9b0 Patch from Andreas Hess <jaska@gmx.net>:
bertrand
parents: 10281
diff changeset
1055 free(mrl);
e4f5cdf9d9b0 Patch from Andreas Hess <jaska@gmx.net>:
bertrand
parents: 10281
diff changeset
1056 temp--;
10199
0c72c1d0d6a4 Fix redirection in real rtsp connections.
rtognimp
parents: 10171
diff changeset
1057
0c72c1d0d6a4 Fix redirection in real rtsp connections.
rtognimp
parents: 10171
diff changeset
1058 } while( (redirected != 0) && (temp > 0) );
0c72c1d0d6a4 Fix redirection in real rtsp connections.
rtognimp
parents: 10171
diff changeset
1059
9922
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1060 if(!rtsp) return -1;
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1061
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1062 stream->fd=fd;
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1063 stream->streaming_ctrl->data=rtsp;
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1064
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1065 stream->streaming_ctrl->streaming_read = realrtsp_streaming_read;
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1066 // stream->streaming_ctrl->streaming_seek = nop_streaming_seek;
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1067 stream->streaming_ctrl->prebuffer_size = 128*1024; // 8 KBytes
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1068 stream->streaming_ctrl->buffering = 1;
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1069 stream->streaming_ctrl->status = streaming_playing_e;
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1070 return 0;
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1071 }
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1072
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1073
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1074 // Start listening on a UDP port. If multicast, join the group.
12799
befb79b0232e Make rtp:// cohexist with LIVE.COM
rtognimp
parents: 12679
diff changeset
1075 static int
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1076 rtp_open_socket( URL_t *url ) {
4072
eac2948c00d4 Applied RTP patch from Brian Kuschak <bkuschak@yahoo.com>
bertrand
parents: 4046
diff changeset
1077 int socket_server_fd, rxsockbufsz;
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1078 int err, err_len;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1079 fd_set set;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1080 struct sockaddr_in server_address;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1081 struct ip_mreq mcast;
4553
bab3aac84143 ehh. i forgot to commit this patch: fix RTP streaming. patch by Dave Chapman <dave@dchapman.com>
arpi
parents: 4302
diff changeset
1082 struct timeval tv;
12610
7992cd49a698 calling bind with multicast addresses doesn't work on windows, patch by Martin Decky <deckm1am at ss1000.ms.mff.cuni.cz>
faust3
parents: 12477
diff changeset
1083 struct hostent *hp;
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1084
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
1085 mp_msg(MSGT_NETWORK,MSGL_V,"Listening for traffic on %s:%d ...\n", url->hostname, url->port );
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1086
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1087 socket_server_fd = socket(AF_INET, SOCK_DGRAM, 0);
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1088 // fcntl( socket_server_fd, F_SETFL, fcntl(socket_server_fd, F_GETFL) | O_NONBLOCK );
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1089 if( socket_server_fd==-1 ) {
6454
87612a287882 Added some missing carriage returns.
bertrand
parents: 6032
diff changeset
1090 mp_msg(MSGT_NETWORK,MSGL_ERR,"Failed to create socket\n");
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1091 return -1;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1092 }
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1093
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1094 if( isalpha(url->hostname[0]) ) {
12610
7992cd49a698 calling bind with multicast addresses doesn't work on windows, patch by Martin Decky <deckm1am at ss1000.ms.mff.cuni.cz>
faust3
parents: 12477
diff changeset
1095 #ifndef HAVE_WINSOCK2
7992cd49a698 calling bind with multicast addresses doesn't work on windows, patch by Martin Decky <deckm1am at ss1000.ms.mff.cuni.cz>
faust3
parents: 12477
diff changeset
1096 hp =(struct hostent*)gethostbyname( url->hostname );
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1097 if( hp==NULL ) {
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
1098 mp_msg(MSGT_NETWORK,MSGL_ERR,"Counldn't resolve name: %s\n", url->hostname);
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1099 return -1;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1100 }
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1101 memcpy( (void*)&server_address.sin_addr.s_addr, (void*)hp->h_addr, hp->h_length );
12610
7992cd49a698 calling bind with multicast addresses doesn't work on windows, patch by Martin Decky <deckm1am at ss1000.ms.mff.cuni.cz>
faust3
parents: 12477
diff changeset
1102 #else
7992cd49a698 calling bind with multicast addresses doesn't work on windows, patch by Martin Decky <deckm1am at ss1000.ms.mff.cuni.cz>
faust3
parents: 12477
diff changeset
1103 server_address.sin_addr.s_addr = htonl(INADDR_ANY);
7992cd49a698 calling bind with multicast addresses doesn't work on windows, patch by Martin Decky <deckm1am at ss1000.ms.mff.cuni.cz>
faust3
parents: 12477
diff changeset
1104 #endif
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1105 } else {
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
1106 #ifndef HAVE_WINSOCK2
9890
237fcb766110 removed some wrappers, now the configure checks for inet_pton. patch by Joey Parrish <joey@nicewarrior.org>
alex
parents: 9749
diff changeset
1107 #ifdef USE_ATON
237fcb766110 removed some wrappers, now the configure checks for inet_pton. patch by Joey Parrish <joey@nicewarrior.org>
alex
parents: 9749
diff changeset
1108 inet_aton(url->hostname, &server_address.sin_addr);
237fcb766110 removed some wrappers, now the configure checks for inet_pton. patch by Joey Parrish <joey@nicewarrior.org>
alex
parents: 9749
diff changeset
1109 #else
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1110 inet_pton(AF_INET, url->hostname, &server_address.sin_addr);
9890
237fcb766110 removed some wrappers, now the configure checks for inet_pton. patch by Joey Parrish <joey@nicewarrior.org>
alex
parents: 9749
diff changeset
1111 #endif
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
1112 #else
12610
7992cd49a698 calling bind with multicast addresses doesn't work on windows, patch by Martin Decky <deckm1am at ss1000.ms.mff.cuni.cz>
faust3
parents: 12477
diff changeset
1113 server_address.sin_addr.s_addr = htonl(INADDR_ANY);
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
1114 #endif
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1115 }
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1116 server_address.sin_family=AF_INET;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1117 server_address.sin_port=htons(url->port);
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1118
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1119 if( bind( socket_server_fd, (struct sockaddr*)&server_address, sizeof(server_address) )==-1 ) {
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
1120 #ifndef HAVE_WINSOCK2
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1121 if( errno!=EINPROGRESS ) {
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
1122 #else
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
1123 if( WSAGetLastError() != WSAEINPROGRESS ) {
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
1124 #endif
6454
87612a287882 Added some missing carriage returns.
bertrand
parents: 6032
diff changeset
1125 mp_msg(MSGT_NETWORK,MSGL_ERR,"Failed to connect to server\n");
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
1126 closesocket(socket_server_fd);
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1127 return -1;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1128 }
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1129 }
12610
7992cd49a698 calling bind with multicast addresses doesn't work on windows, patch by Martin Decky <deckm1am at ss1000.ms.mff.cuni.cz>
faust3
parents: 12477
diff changeset
1130
7992cd49a698 calling bind with multicast addresses doesn't work on windows, patch by Martin Decky <deckm1am at ss1000.ms.mff.cuni.cz>
faust3
parents: 12477
diff changeset
1131 #ifdef HAVE_WINSOCK2
7992cd49a698 calling bind with multicast addresses doesn't work on windows, patch by Martin Decky <deckm1am at ss1000.ms.mff.cuni.cz>
faust3
parents: 12477
diff changeset
1132 if (isalpha(url->hostname[0])) {
7992cd49a698 calling bind with multicast addresses doesn't work on windows, patch by Martin Decky <deckm1am at ss1000.ms.mff.cuni.cz>
faust3
parents: 12477
diff changeset
1133 hp =(struct hostent*)gethostbyname( url->hostname );
7992cd49a698 calling bind with multicast addresses doesn't work on windows, patch by Martin Decky <deckm1am at ss1000.ms.mff.cuni.cz>
faust3
parents: 12477
diff changeset
1134 if( hp==NULL ) {
7992cd49a698 calling bind with multicast addresses doesn't work on windows, patch by Martin Decky <deckm1am at ss1000.ms.mff.cuni.cz>
faust3
parents: 12477
diff changeset
1135 mp_msg(MSGT_NETWORK,MSGL_ERR,"Counldn't resolve name: %s\n", url->hostname);
7992cd49a698 calling bind with multicast addresses doesn't work on windows, patch by Martin Decky <deckm1am at ss1000.ms.mff.cuni.cz>
faust3
parents: 12477
diff changeset
1136 return -1;
7992cd49a698 calling bind with multicast addresses doesn't work on windows, patch by Martin Decky <deckm1am at ss1000.ms.mff.cuni.cz>
faust3
parents: 12477
diff changeset
1137 }
7992cd49a698 calling bind with multicast addresses doesn't work on windows, patch by Martin Decky <deckm1am at ss1000.ms.mff.cuni.cz>
faust3
parents: 12477
diff changeset
1138 memcpy( (void*)&server_address.sin_addr.s_addr, (void*)hp->h_addr, hp->h_length );
7992cd49a698 calling bind with multicast addresses doesn't work on windows, patch by Martin Decky <deckm1am at ss1000.ms.mff.cuni.cz>
faust3
parents: 12477
diff changeset
1139 } else {
7992cd49a698 calling bind with multicast addresses doesn't work on windows, patch by Martin Decky <deckm1am at ss1000.ms.mff.cuni.cz>
faust3
parents: 12477
diff changeset
1140 unsigned int addr = inet_addr(url->hostname);
7992cd49a698 calling bind with multicast addresses doesn't work on windows, patch by Martin Decky <deckm1am at ss1000.ms.mff.cuni.cz>
faust3
parents: 12477
diff changeset
1141 memcpy( (void*)&server_address.sin_addr, (void*)&addr, sizeof(addr) );
7992cd49a698 calling bind with multicast addresses doesn't work on windows, patch by Martin Decky <deckm1am at ss1000.ms.mff.cuni.cz>
faust3
parents: 12477
diff changeset
1142 }
7992cd49a698 calling bind with multicast addresses doesn't work on windows, patch by Martin Decky <deckm1am at ss1000.ms.mff.cuni.cz>
faust3
parents: 12477
diff changeset
1143 #endif
4072
eac2948c00d4 Applied RTP patch from Brian Kuschak <bkuschak@yahoo.com>
bertrand
parents: 4046
diff changeset
1144
eac2948c00d4 Applied RTP patch from Brian Kuschak <bkuschak@yahoo.com>
bertrand
parents: 4046
diff changeset
1145 // Increase the socket rx buffer size to maximum -- this is UDP
eac2948c00d4 Applied RTP patch from Brian Kuschak <bkuschak@yahoo.com>
bertrand
parents: 4046
diff changeset
1146 rxsockbufsz = 240 * 1024;
eac2948c00d4 Applied RTP patch from Brian Kuschak <bkuschak@yahoo.com>
bertrand
parents: 4046
diff changeset
1147 if( setsockopt( socket_server_fd, SOL_SOCKET, SO_RCVBUF, &rxsockbufsz, sizeof(rxsockbufsz))) {
6454
87612a287882 Added some missing carriage returns.
bertrand
parents: 6032
diff changeset
1148 mp_msg(MSGT_NETWORK,MSGL_ERR,"Couldn't set receive socket buffer size\n");
4072
eac2948c00d4 Applied RTP patch from Brian Kuschak <bkuschak@yahoo.com>
bertrand
parents: 4046
diff changeset
1149 }
eac2948c00d4 Applied RTP patch from Brian Kuschak <bkuschak@yahoo.com>
bertrand
parents: 4046
diff changeset
1150
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1151 if((ntohl(server_address.sin_addr.s_addr) >> 28) == 0xe) {
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1152 mcast.imr_multiaddr.s_addr = server_address.sin_addr.s_addr;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1153 //mcast.imr_interface.s_addr = inet_addr("10.1.1.2");
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1154 mcast.imr_interface.s_addr = 0;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1155 if( setsockopt( socket_server_fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mcast, sizeof(mcast))) {
6454
87612a287882 Added some missing carriage returns.
bertrand
parents: 6032
diff changeset
1156 mp_msg(MSGT_NETWORK,MSGL_ERR,"IP_ADD_MEMBERSHIP failed (do you have multicasting enabled in your kernel?)\n");
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1157 return -1;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1158 }
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1159 }
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1160
4553
bab3aac84143 ehh. i forgot to commit this patch: fix RTP streaming. patch by Dave Chapman <dave@dchapman.com>
arpi
parents: 4302
diff changeset
1161 tv.tv_sec = 0;
bab3aac84143 ehh. i forgot to commit this patch: fix RTP streaming. patch by Dave Chapman <dave@dchapman.com>
arpi
parents: 4302
diff changeset
1162 tv.tv_usec = (1 * 1000000); // 1 second timeout
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1163 FD_ZERO( &set );
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1164 FD_SET( socket_server_fd, &set );
4553
bab3aac84143 ehh. i forgot to commit this patch: fix RTP streaming. patch by Dave Chapman <dave@dchapman.com>
arpi
parents: 4302
diff changeset
1165 if( select(socket_server_fd+1, &set, NULL, NULL, &tv)>0 ) {
bab3aac84143 ehh. i forgot to commit this patch: fix RTP streaming. patch by Dave Chapman <dave@dchapman.com>
arpi
parents: 4302
diff changeset
1166 //if( select(socket_server_fd+1, &set, NULL, NULL, NULL)>0 ) {
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1167 err_len = sizeof( err );
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1168 getsockopt( socket_server_fd, SOL_SOCKET, SO_ERROR, &err, &err_len );
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1169 if( err ) {
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
1170 mp_msg(MSGT_NETWORK,MSGL_ERR,"Timeout! No data from host %s\n", url->hostname );
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
1171 mp_msg(MSGT_NETWORK,MSGL_DBG2,"Socket error: %d\n", err );
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
1172 closesocket(socket_server_fd);
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1173 return -1;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1174 }
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1175 }
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1176 return socket_server_fd;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1177 }
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1178
12799
befb79b0232e Make rtp:// cohexist with LIVE.COM
rtognimp
parents: 12679
diff changeset
1179 static int
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1180 rtp_streaming_read( int fd, char *buffer, int size, streaming_ctrl_t *streaming_ctrl ) {
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1181 return read_rtp_from_server( fd, buffer, size );
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1182 }
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1183
12799
befb79b0232e Make rtp:// cohexist with LIVE.COM
rtognimp
parents: 12679
diff changeset
1184 static int
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1185 rtp_streaming_start( stream_t *stream ) {
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1186 streaming_ctrl_t *streaming_ctrl;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1187 int fd;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1188
3732
837ed2f1ed5e possible uninit pointer free()'d
pl
parents: 3686
diff changeset
1189 if( stream==NULL ) return -1;
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1190 streaming_ctrl = stream->streaming_ctrl;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1191 fd = stream->fd;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1192
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1193 if( fd<0 ) {
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1194 fd = rtp_open_socket( (streaming_ctrl->url) );
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1195 if( fd<0 ) return -1;
4072
eac2948c00d4 Applied RTP patch from Brian Kuschak <bkuschak@yahoo.com>
bertrand
parents: 4046
diff changeset
1196 stream->fd = fd;
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1197 }
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1198
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1199 streaming_ctrl->streaming_read = rtp_streaming_read;
4072
eac2948c00d4 Applied RTP patch from Brian Kuschak <bkuschak@yahoo.com>
bertrand
parents: 4046
diff changeset
1200 streaming_ctrl->streaming_seek = nop_streaming_seek;
8939
aaca5f177b99 better cache size defaults
arpi
parents: 8890
diff changeset
1201 streaming_ctrl->prebuffer_size = 64*1024; // 64 KBytes
4289
973c6912c586 Set the cache value if the network layer was able to compute it.
bertrand
parents: 4251
diff changeset
1202 streaming_ctrl->buffering = 0;
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1203 streaming_ctrl->status = streaming_playing_e;
4072
eac2948c00d4 Applied RTP patch from Brian Kuschak <bkuschak@yahoo.com>
bertrand
parents: 4046
diff changeset
1204 return 0;
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1205 }
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1206
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
1207 int
4729
f51bd827ed1c fixed MP3 ICY detection, return detected file format for open_stream
alex
parents: 4652
diff changeset
1208 streaming_start(stream_t *stream, int *demuxer_type, URL_t *url) {
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7881
diff changeset
1209 int ret;
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
1210 if( stream==NULL ) return -1;
4251
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
1211
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
1212 stream->streaming_ctrl = streaming_ctrl_new();
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
1213 if( stream->streaming_ctrl==NULL ) {
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
1214 return -1;
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
1215 }
4652
17cf55182029 Cleaned up the way proxies checking was done.
bertrand
parents: 4553
diff changeset
1216 stream->streaming_ctrl->url = check4proxies( url );
12223
e7c8200ffdc5 Respect -playlist for asx streams
rtognimp
parents: 12206
diff changeset
1217
e7c8200ffdc5 Respect -playlist for asx streams
rtognimp
parents: 12206
diff changeset
1218 if (*demuxer_type != DEMUXER_TYPE_PLAYLIST){
4729
f51bd827ed1c fixed MP3 ICY detection, return detected file format for open_stream
alex
parents: 4652
diff changeset
1219 ret = autodetectProtocol( stream->streaming_ctrl, &stream->fd, demuxer_type );
12223
e7c8200ffdc5 Respect -playlist for asx streams
rtognimp
parents: 12206
diff changeset
1220 } else {
e7c8200ffdc5 Respect -playlist for asx streams
rtognimp
parents: 12206
diff changeset
1221 ret=0;
e7c8200ffdc5 Respect -playlist for asx streams
rtognimp
parents: 12206
diff changeset
1222 }
e7c8200ffdc5 Respect -playlist for asx streams
rtognimp
parents: 12206
diff changeset
1223
4251
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
1224 if( ret<0 ) {
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
1225 return -1;
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
1226 }
11965
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
1227 if( ret==1 ) {
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
1228 stream->flags |= STREAM_SEEK;
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
1229 stream->seek = http_seek;
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
1230 }
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
1231
4251
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
1232 ret = -1;
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
1233
6642
e47d54a2cfff Retreive the bandwidth option from the command line.
bertrand
parents: 6570
diff changeset
1234 // Get the bandwidth available
7867
3dc0b71630ff cleanup config option handling in libmpdemux.
arpi
parents: 7862
diff changeset
1235 stream->streaming_ctrl->bandwidth = network_bandwidth;
6642
e47d54a2cfff Retreive the bandwidth option from the command line.
bertrand
parents: 6570
diff changeset
1236
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1237 // For RTP streams, we usually don't know the stream type until we open it.
4121
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
1238 if( !strcasecmp( stream->streaming_ctrl->url->protocol, "rtp")) {
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
1239 if(stream->fd >= 0) {
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
1240 if(closesocket(stream->fd) < 0)
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
1241 mp_msg(MSGT_NETWORK,MSGL_ERR,"streaming_start : Closing socket %d failed %s\n",stream->fd,strerror(errno));
4041
879a668ee540 various small streaming fixes by Alban Bedel <albeu@free.fr>
arpi
parents: 3732
diff changeset
1242 }
879a668ee540 various small streaming fixes by Alban Bedel <albeu@free.fr>
arpi
parents: 3732
diff changeset
1243 stream->fd = -1;
4072
eac2948c00d4 Applied RTP patch from Brian Kuschak <bkuschak@yahoo.com>
bertrand
parents: 4046
diff changeset
1244 ret = rtp_streaming_start( stream );
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
1245 } else
8570
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1246
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1247 if( !strcasecmp( stream->streaming_ctrl->url->protocol, "pnm")) {
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1248 stream->fd = -1;
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1249 ret = pnm_streaming_start( stream );
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1250 } else
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1251
9922
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1252 if( (!strcasecmp( stream->streaming_ctrl->url->protocol, "rtsp")) &&
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1253 (*demuxer_type == DEMUXER_TYPE_REAL)) {
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1254 stream->fd = -1;
12206
d572c605f665 Try Real rtsp, then live.com on every rtsp stream (remove extension
rtognimp
parents: 12175
diff changeset
1255 if ((ret = realrtsp_streaming_start( stream )) < 0) {
d572c605f665 Try Real rtsp, then live.com on every rtsp stream (remove extension
rtognimp
parents: 12175
diff changeset
1256 mp_msg(MSGT_NETWORK,MSGL_INFO,"Not a Realmedia rtsp url. Trying standard rtsp protocol.\n");
d572c605f665 Try Real rtsp, then live.com on every rtsp stream (remove extension
rtognimp
parents: 12175
diff changeset
1257 #ifdef STREAMING_LIVE_DOT_COM
d572c605f665 Try Real rtsp, then live.com on every rtsp stream (remove extension
rtognimp
parents: 12175
diff changeset
1258 *demuxer_type = DEMUXER_TYPE_RTP;
d572c605f665 Try Real rtsp, then live.com on every rtsp stream (remove extension
rtognimp
parents: 12175
diff changeset
1259 goto try_livedotcom;
d572c605f665 Try Real rtsp, then live.com on every rtsp stream (remove extension
rtognimp
parents: 12175
diff changeset
1260 #else
d572c605f665 Try Real rtsp, then live.com on every rtsp stream (remove extension
rtognimp
parents: 12175
diff changeset
1261 mp_msg(MSGT_NETWORK,MSGL_ERR,"RTSP support requires the \"LIVE.COM Streaming Media\" libraries!\n");
d572c605f665 Try Real rtsp, then live.com on every rtsp stream (remove extension
rtognimp
parents: 12175
diff changeset
1262 return -1;
d572c605f665 Try Real rtsp, then live.com on every rtsp stream (remove extension
rtognimp
parents: 12175
diff changeset
1263 #endif
d572c605f665 Try Real rtsp, then live.com on every rtsp stream (remove extension
rtognimp
parents: 12175
diff changeset
1264 }
9922
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1265 } else
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1266
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1267 // For connection-oriented streams, we can usually determine the streaming type.
12206
d572c605f665 Try Real rtsp, then live.com on every rtsp stream (remove extension
rtognimp
parents: 12175
diff changeset
1268 try_livedotcom:
4729
f51bd827ed1c fixed MP3 ICY detection, return detected file format for open_stream
alex
parents: 4652
diff changeset
1269 switch( *demuxer_type ) {
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
1270 case DEMUXER_TYPE_ASF:
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
1271 // Send the appropriate HTTP request
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
1272 // Need to filter the network stream.
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
1273 // ASF raw stream is encapsulated.
9749
58e5880f4788 Use new config headers
albeu
parents: 9691
diff changeset
1274 // It can also be a playlist (redirector)
58e5880f4788 Use new config headers
albeu
parents: 9691
diff changeset
1275 // so we need to pass demuxer_type too
58e5880f4788 Use new config headers
albeu
parents: 9691
diff changeset
1276 ret = asf_streaming_start( stream, demuxer_type );
3604
6bd312199a75 If the demuxer type is unknown it will start an http streaming.
bertrand
parents: 3599
diff changeset
1277 if( ret<0 ) {
12390
338e9d30be5e Try to get an asf file with normal http protocol if http streaming
rtognimp
parents: 12352
diff changeset
1278 //sometimes a file is just on a webserver and it is not streamed.
338e9d30be5e Try to get an asf file with normal http protocol if http streaming
rtognimp
parents: 12352
diff changeset
1279 //try loading them default method as last resort for http protocol
338e9d30be5e Try to get an asf file with normal http protocol if http streaming
rtognimp
parents: 12352
diff changeset
1280 if ( !strcasecmp(stream->streaming_ctrl->url->protocol, "http") ) {
338e9d30be5e Try to get an asf file with normal http protocol if http streaming
rtognimp
parents: 12352
diff changeset
1281 mp_msg(MSGT_NETWORK,MSGL_STATUS,"Trying default streaming for http protocol\n ");
338e9d30be5e Try to get an asf file with normal http protocol if http streaming
rtognimp
parents: 12352
diff changeset
1282 //reset stream
338e9d30be5e Try to get an asf file with normal http protocol if http streaming
rtognimp
parents: 12352
diff changeset
1283 close(stream->fd);
338e9d30be5e Try to get an asf file with normal http protocol if http streaming
rtognimp
parents: 12352
diff changeset
1284 stream->fd=-1;
338e9d30be5e Try to get an asf file with normal http protocol if http streaming
rtognimp
parents: 12352
diff changeset
1285 ret=nop_streaming_start(stream);
338e9d30be5e Try to get an asf file with normal http protocol if http streaming
rtognimp
parents: 12352
diff changeset
1286 }
338e9d30be5e Try to get an asf file with normal http protocol if http streaming
rtognimp
parents: 12352
diff changeset
1287
338e9d30be5e Try to get an asf file with normal http protocol if http streaming
rtognimp
parents: 12352
diff changeset
1288 if (ret<0) {
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
1289 mp_msg(MSGT_NETWORK,MSGL_ERR,"asf_streaming_start failed\n");
12274
6fbd0aa81550 Suggest -playlist if asf_stream_start fails
rtognimp
parents: 12268
diff changeset
1290 mp_msg(MSGT_NETWORK,MSGL_STATUS,"Check if this is a playlist which requires -playlist option\nExample: mplayer -playlist <url>\n");
12390
338e9d30be5e Try to get an asf file with normal http protocol if http streaming
rtognimp
parents: 12352
diff changeset
1291 }
3604
6bd312199a75 If the demuxer type is unknown it will start an http streaming.
bertrand
parents: 3599
diff changeset
1292 }
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
1293 break;
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6642
diff changeset
1294 #ifdef STREAMING_LIVE_DOT_COM
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6642
diff changeset
1295 case DEMUXER_TYPE_RTP:
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6642
diff changeset
1296 // RTSP/RTP streaming is handled separately:
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6642
diff changeset
1297 ret = rtsp_streaming_start( stream );
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6642
diff changeset
1298 if( ret<0 ) {
7007
3639db1fb8d3 typo fixes by Ross Finlayson <finlayson@live.com>
arpi
parents: 6910
diff changeset
1299 mp_msg(MSGT_NETWORK,MSGL_ERR,"rtsp_streaming_start failed\n");
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6642
diff changeset
1300 }
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6642
diff changeset
1301 break;
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6642
diff changeset
1302 #endif
4729
f51bd827ed1c fixed MP3 ICY detection, return detected file format for open_stream
alex
parents: 4652
diff changeset
1303 case DEMUXER_TYPE_MPEG_ES:
f51bd827ed1c fixed MP3 ICY detection, return detected file format for open_stream
alex
parents: 4652
diff changeset
1304 case DEMUXER_TYPE_MPEG_PS:
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
1305 case DEMUXER_TYPE_AVI:
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
1306 case DEMUXER_TYPE_MOV:
4729
f51bd827ed1c fixed MP3 ICY detection, return detected file format for open_stream
alex
parents: 4652
diff changeset
1307 case DEMUXER_TYPE_VIVO:
f51bd827ed1c fixed MP3 ICY detection, return detected file format for open_stream
alex
parents: 4652
diff changeset
1308 case DEMUXER_TYPE_FLI:
f51bd827ed1c fixed MP3 ICY detection, return detected file format for open_stream
alex
parents: 4652
diff changeset
1309 case DEMUXER_TYPE_REAL:
f51bd827ed1c fixed MP3 ICY detection, return detected file format for open_stream
alex
parents: 4652
diff changeset
1310 case DEMUXER_TYPE_Y4M:
f51bd827ed1c fixed MP3 ICY detection, return detected file format for open_stream
alex
parents: 4652
diff changeset
1311 case DEMUXER_TYPE_FILM:
f51bd827ed1c fixed MP3 ICY detection, return detected file format for open_stream
alex
parents: 4652
diff changeset
1312 case DEMUXER_TYPE_ROQ:
f51bd827ed1c fixed MP3 ICY detection, return detected file format for open_stream
alex
parents: 4652
diff changeset
1313 case DEMUXER_TYPE_AUDIO:
8114
ba66375adb6f Added OGG streaming support, patch from Balatoni Denes <pnis@coder.hu>
bertrand
parents: 8027
diff changeset
1314 case DEMUXER_TYPE_OGG:
4783
17f29765ea77 Support for retriving mp3 playlist from the network
albeu
parents: 4730
diff changeset
1315 case DEMUXER_TYPE_PLAYLIST:
3604
6bd312199a75 If the demuxer type is unknown it will start an http streaming.
bertrand
parents: 3599
diff changeset
1316 case DEMUXER_TYPE_UNKNOWN:
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents: 12018
diff changeset
1317 case DEMUXER_TYPE_NSV:
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
1318 // Generic start, doesn't need to filter
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
1319 // the network stream, it's a raw stream
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
1320 ret = nop_streaming_start( stream );
3604
6bd312199a75 If the demuxer type is unknown it will start an http streaming.
bertrand
parents: 3599
diff changeset
1321 if( ret<0 ) {
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
1322 mp_msg(MSGT_NETWORK,MSGL_ERR,"nop_streaming_start failed\n");
3604
6bd312199a75 If the demuxer type is unknown it will start an http streaming.
bertrand
parents: 3599
diff changeset
1323 }
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
1324 break;
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
1325 default:
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
1326 mp_msg(MSGT_NETWORK,MSGL_ERR,"Unable to detect the streaming type\n");
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
1327 ret = -1;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
1328 }
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
1329
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
1330 if( ret<0 ) {
4251
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
1331 streaming_ctrl_free( stream->streaming_ctrl );
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
1332 stream->streaming_ctrl = NULL;
4652
17cf55182029 Cleaned up the way proxies checking was done.
bertrand
parents: 4553
diff changeset
1333 } else if( stream->streaming_ctrl->buffering ) {
7881
aba9301ed3c4 allow cache to be disabled (-nocache should override cachesize autodetection
arpi
parents: 7867
diff changeset
1334 if(stream_cache_size<0) {
6555
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
1335 // cache option not set, will use our computed value.
4302
9f12fd5f47d0 Modified the cache option value setting/reading, so we can report
bertrand
parents: 4293
diff changeset
1336 // buffer in KBytes, *5 because the prefill is 20% of the buffer.
7867
3dc0b71630ff cleanup config option handling in libmpdemux.
arpi
parents: 7862
diff changeset
1337 stream_cache_size = (stream->streaming_ctrl->prebuffer_size/1024)*5;
8939
aaca5f177b99 better cache size defaults
arpi
parents: 8890
diff changeset
1338 if( stream_cache_size<64 ) stream_cache_size = 64; // 16KBytes min buffer
4302
9f12fd5f47d0 Modified the cache option value setting/reading, so we can report
bertrand
parents: 4293
diff changeset
1339 }
7867
3dc0b71630ff cleanup config option handling in libmpdemux.
arpi
parents: 7862
diff changeset
1340 mp_msg(MSGT_NETWORK,MSGL_INFO,"Cache size set to %d KBytes\n", stream_cache_size);
4289
973c6912c586 Set the cache value if the network layer was able to compute it.
bertrand
parents: 4251
diff changeset
1341 }
6032
4577bda5806a added some new types
alex
parents: 5916
diff changeset
1342
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
1343 return ret;
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
1344 }
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
1345
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
1346 int
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
1347 streaming_stop( stream_t *stream ) {
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
1348 stream->streaming_ctrl->status = streaming_stopped_e;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
1349 return 0;
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
1350 }