annotate libmpdemux/network.c @ 12334:eeddcef4fb08

"hard" frame duplication for mencoder. this finally makes it possible to generate valid mpeg output from avi's that have duplicate frames in them, or when using inverse telecine filters. to use it, put the "harddup" filter at the end of your filter chain.
author rfelker
date Wed, 28 Apr 2004 04:02:46 +0000
parents 6fbd0aa81550
children 2e0a4b32e139
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"
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6642
diff changeset
35 #ifndef STREAMING_LIVE_DOT_COM
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
36 #include "rtp.h"
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6642
diff changeset
37 #endif
8570
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
38 #include "pnm.h"
9922
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
39 #include "realrtsp/rtsp_session.h"
841
c906b7600fc6 Included "netdb.h" file needed.
bertrand
parents: 833
diff changeset
40
6466
ebffa928a5d4 Added mplayer version in the user-agent field.
bertrand
parents: 6454
diff changeset
41 #include "../version.h"
ebffa928a5d4 Added mplayer version in the user-agent field.
bertrand
parents: 6454
diff changeset
42
4121
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
43 extern int verbose;
7867
3dc0b71630ff cleanup config option handling in libmpdemux.
arpi
parents: 7862
diff changeset
44 extern int stream_cache_size;
4121
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
45
7862
013c255225d8 mpdemux.c|h moved to libinput, mpdemux_check_interrupt() -> mp_input_check_interrupt()
arpi
parents: 7513
diff changeset
46 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
47
9749
58e5880f4788 Use new config headers
albeu
parents: 9691
diff changeset
48 int asf_streaming_start( stream_t *stream, int *demuxer_type );
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7881
diff changeset
49 int rtsp_streaming_start( stream_t *stream );
60624e692b95 GCC warning fixes
bertrand
parents: 7881
diff changeset
50
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
51 /* 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
52 -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
53
7867
3dc0b71630ff cleanup config option handling in libmpdemux.
arpi
parents: 7862
diff changeset
54 char *network_username=NULL;
3dc0b71630ff cleanup config option handling in libmpdemux.
arpi
parents: 7862
diff changeset
55 char *network_password=NULL;
3dc0b71630ff cleanup config option handling in libmpdemux.
arpi
parents: 7862
diff changeset
56 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
57 int network_cookies_enabled = 0;
11228
f25d54466044 User settable http user-agent. Patch by Per Wigren
alex
parents: 11227
diff changeset
58 char *network_useragent=NULL;
6558
b379b061ce50 Read username/password from the -user -pass command line options.
bertrand
parents: 6555
diff changeset
59
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
60 /* IPv6 options */
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
61 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
62 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
63
6558
b379b061ce50 Read username/password from the -user -pass command line options.
bertrand
parents: 6555
diff changeset
64
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
65 static struct {
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
66 char *mime_type;
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
67 int demuxer_type;
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
68 } mime_type_table[] = {
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
69 // 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
70 { "audio/mpeg", DEMUXER_TYPE_AUDIO },
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
71 // MPEG streaming
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
72 { "video/mpeg", DEMUXER_TYPE_MPEG_PS },
6032
4577bda5806a added some new types
alex
parents: 5916
diff changeset
73 { "video/x-mpeg", DEMUXER_TYPE_MPEG_PS },
4577bda5806a added some new types
alex
parents: 5916
diff changeset
74 { "video/x-mpeg2", DEMUXER_TYPE_MPEG_PS },
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
75 // AVI ??? => video/x-msvideo
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
76 { "video/x-msvideo", DEMUXER_TYPE_AVI },
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
77 // MOV => video/quicktime
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
78 { "video/quicktime", DEMUXER_TYPE_MOV },
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
79 // ASF
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
80 { "audio/x-ms-wax", DEMUXER_TYPE_ASF },
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
81 { "audio/x-ms-wma", DEMUXER_TYPE_ASF },
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
82 { "video/x-ms-asf", DEMUXER_TYPE_ASF },
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
83 { "video/x-ms-afs", DEMUXER_TYPE_ASF },
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
84 { "video/x-ms-wvx", DEMUXER_TYPE_ASF },
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
85 { "video/x-ms-wmv", DEMUXER_TYPE_ASF },
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
86 { "video/x-ms-wma", DEMUXER_TYPE_ASF },
4783
17f29765ea77 Support for retriving mp3 playlist from the network
albeu
parents: 4730
diff changeset
87 // Playlists
7393
52b29760fe95 Added a new ASX playlist mime-type
bertrand
parents: 7251
diff changeset
88 { "video/x-ms-wmx", DEMUXER_TYPE_PLAYLIST },
4783
17f29765ea77 Support for retriving mp3 playlist from the network
albeu
parents: 4730
diff changeset
89 { "audio/x-scpls", DEMUXER_TYPE_PLAYLIST },
17f29765ea77 Support for retriving mp3 playlist from the network
albeu
parents: 4730
diff changeset
90 { "audio/x-mpegurl", DEMUXER_TYPE_PLAYLIST },
6032
4577bda5806a added some new types
alex
parents: 5916
diff changeset
91 { "audio/x-pls", DEMUXER_TYPE_PLAYLIST },
4577bda5806a added some new types
alex
parents: 5916
diff changeset
92 // Real Media
8114
ba66375adb6f Added OGG streaming support, patch from Balatoni Denes <pnis@coder.hu>
bertrand
parents: 8027
diff changeset
93 { "audio/x-pn-realaudio", DEMUXER_TYPE_REAL },
ba66375adb6f Added OGG streaming support, patch from Balatoni Denes <pnis@coder.hu>
bertrand
parents: 8027
diff changeset
94 // OGG Streaming
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents: 12018
diff changeset
95 { "application/x-ogg", DEMUXER_TYPE_OGG },
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents: 12018
diff changeset
96 // NullSoft Streaming Video
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents: 12018
diff changeset
97 { "video/nsv", DEMUXER_TYPE_NSV}
8114
ba66375adb6f Added OGG streaming support, patch from Balatoni Denes <pnis@coder.hu>
bertrand
parents: 8027
diff changeset
98
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
99 };
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
100
8890
c9cbfb9d720c Finally commented out the code for autodetection based on the extension.
bertrand
parents: 8824
diff changeset
101 /*
c9cbfb9d720c Finally commented out the code for autodetection based on the extension.
bertrand
parents: 8824
diff changeset
102 * 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
103 *
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
104 static struct {
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
105 char *extension;
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
106 int demuxer_type;
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
107 } extensions_table[] = {
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
108 { "mpeg", DEMUXER_TYPE_MPEG_PS },
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
109 { "mpg", DEMUXER_TYPE_MPEG_PS },
3072
8dbc1954e49b added some new types
alex
parents: 3042
diff changeset
110 { "mpe", DEMUXER_TYPE_MPEG_ES },
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
111 { "avi", DEMUXER_TYPE_AVI },
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
112 { "mov", DEMUXER_TYPE_MOV },
3072
8dbc1954e49b added some new types
alex
parents: 3042
diff changeset
113 { "qt", DEMUXER_TYPE_MOV },
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
114 { "asx", DEMUXER_TYPE_ASF },
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
115 { "asf", DEMUXER_TYPE_ASF },
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
116 { "wmv", DEMUXER_TYPE_ASF },
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
117 { "wma", DEMUXER_TYPE_ASF },
3072
8dbc1954e49b added some new types
alex
parents: 3042
diff changeset
118 { "viv", DEMUXER_TYPE_VIVO },
4236
0c809c541aa1 added .rm (real) and .y4m (yuv4mpeg)
alex
parents: 4146
diff changeset
119 { "rm", DEMUXER_TYPE_REAL },
6032
4577bda5806a added some new types
alex
parents: 5916
diff changeset
120 { "ra", DEMUXER_TYPE_REAL },
4236
0c809c541aa1 added .rm (real) and .y4m (yuv4mpeg)
alex
parents: 4146
diff changeset
121 { "y4m", DEMUXER_TYPE_Y4M },
4729
f51bd827ed1c fixed MP3 ICY detection, return detected file format for open_stream
alex
parents: 4652
diff changeset
122 { "mp3", DEMUXER_TYPE_AUDIO },
8114
ba66375adb6f Added OGG streaming support, patch from Balatoni Denes <pnis@coder.hu>
bertrand
parents: 8027
diff changeset
123 { "ogg", DEMUXER_TYPE_OGG },
4729
f51bd827ed1c fixed MP3 ICY detection, return detected file format for open_stream
alex
parents: 4652
diff changeset
124 { "wav", DEMUXER_TYPE_AUDIO },
4783
17f29765ea77 Support for retriving mp3 playlist from the network
albeu
parents: 4730
diff changeset
125 { "pls", DEMUXER_TYPE_PLAYLIST },
17f29765ea77 Support for retriving mp3 playlist from the network
albeu
parents: 4730
diff changeset
126 { "m3u", DEMUXER_TYPE_PLAYLIST }
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
127 };
8890
c9cbfb9d720c Finally commented out the code for autodetection based on the extension.
bertrand
parents: 8824
diff changeset
128 */
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
129
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
130 streaming_ctrl_t *
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
131 streaming_ctrl_new( ) {
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
132 streaming_ctrl_t *streaming_ctrl;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
133 streaming_ctrl = (streaming_ctrl_t*)malloc(sizeof(streaming_ctrl_t));
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
134 if( streaming_ctrl==NULL ) {
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
135 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
136 return NULL;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
137 }
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
138 memset( streaming_ctrl, 0, sizeof(streaming_ctrl_t) );
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
139 return streaming_ctrl;
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
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
142 void
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
143 streaming_ctrl_free( streaming_ctrl_t *streaming_ctrl ) {
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
144 if( streaming_ctrl==NULL ) return;
4251
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
145 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
146 if( streaming_ctrl->buffer ) free( streaming_ctrl->buffer );
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
147 if( streaming_ctrl->data ) free( streaming_ctrl->data );
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
148 free( streaming_ctrl );
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
149 }
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
150
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6642
diff changeset
151 #ifndef STREAMING_LIVE_DOT_COM
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
152 int
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
153 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
154 struct rtpheader rh;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
155 char *data;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
156 int len;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
157 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
158 static unsigned short sequence;
3686
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 if( buffer==NULL || length<0 ) return -1;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
161
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
162 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
163 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
164 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
165 sequence+1, rh.b.sequence);
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
166 got_first = 1;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
167 sequence = rh.b.sequence;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
168 memcpy(buffer, data, len);
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
169 return(len);
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
170 }
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6642
diff changeset
171 #endif
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
172
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
173
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
174 // 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
175
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
176 char *af2String(int af) {
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
177 switch (af) {
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
178 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
179
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
180 #ifdef HAVE_AF_INET6
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
181 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
182 #endif
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
183 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
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
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
187
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
188
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
189 // 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
190 // 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
191 // 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
192
833
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
193 int
10625
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10317
diff changeset
194 connect2Server_with_af(char *host, int port, int af,int verb) {
833
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
195 int socket_server_fd;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
196 int err, err_len;
4825
41d2da3bd082 Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents: 4817
diff changeset
197 int ret,count = 0;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
198 fd_set set;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
199 struct timeval tv;
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
200 union {
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
201 struct sockaddr_in four;
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
202 #ifdef HAVE_AF_INET6
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
203 struct sockaddr_in6 six;
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
204 #endif
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
205 } server_address;
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
206 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
207 void *our_s_addr; // Pointer to sin_addr or sin6_addr
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7881
diff changeset
208 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
209 char buf[255];
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
210
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
211 #ifdef HAVE_WINSOCK2
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
212 u_long val;
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
213 #endif
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
214
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
215 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
216
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
217
833
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
218 if( socket_server_fd==-1 ) {
11227
a7cbee9f21f7 disable a silly errormessage
alex
parents: 10625
diff changeset
219 // 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
220 return -2;
833
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
221 }
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
222
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
223 switch (af) {
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
224 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
225 #ifdef HAVE_AF_INET6
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
226 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
227 #endif
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
228 default:
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
229 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
230 return -2;
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
231 }
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
232
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
233
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
234 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
235
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
236 #ifndef HAVE_WINSOCK2
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
237 #ifdef USE_ATON
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
238 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
239 #else
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
240 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
241 #endif
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
242 #else
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
243 if ( inet_addr(host)==INADDR_NONE )
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
244 #endif
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
245 {
10625
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10317
diff changeset
246 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
247
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
248 #ifdef HAVE_GETHOSTBYNAME2
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
249 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
250 #else
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
251 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
252 #endif
841
c906b7600fc6 Included "netdb.h" file needed.
bertrand
parents: 833
diff changeset
253 if( hp==NULL ) {
10625
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10317
diff changeset
254 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
255 return -2;
833
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
256 }
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
257
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
258 memcpy( our_s_addr, (void*)hp->h_addr, hp->h_length );
833
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
259 }
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
260 #ifdef HAVE_WINSOCK2
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
261 else {
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
262 unsigned long addr = inet_addr(host);
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
263 memcpy( our_s_addr, (void*)&addr, sizeof(addr) );
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
264 }
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
265 #endif
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
266
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
267 switch (af) {
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
268 case AF_INET:
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
269 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
270 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
271 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
272 break;
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
273 #ifdef HAVE_AF_INET6
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
274 case AF_INET6:
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
275 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
276 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
277 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
278 break;
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
279 #endif
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
280 default:
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
281 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
282 return -2;
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
283 }
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
284
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
285 #if defined(USE_ATON) || defined(HAVE_WINSOCK2)
9900
f36b9dda3082 Use inet_ntoa where inet_ntop is not available.
bertrand
parents: 9890
diff changeset
286 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
287 #else
f36b9dda3082 Use inet_ntoa where inet_ntop is not available.
bertrand
parents: 9890
diff changeset
288 inet_ntop(af, our_s_addr, buf, 255);
f36b9dda3082 Use inet_ntoa where inet_ntop is not available.
bertrand
parents: 9890
diff changeset
289 #endif
10625
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10317
diff changeset
290 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
291
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
292 // Turn the socket as non blocking so we can timeout on the connection
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
293 #ifndef HAVE_WINSOCK2
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
294 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
295 #else
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
296 val = 1;
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
297 ioctlsocket( socket_server_fd, FIONBIO, &val );
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
298 #endif
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
299 if( connect( socket_server_fd, (struct sockaddr*)&server_address, server_address_size )==-1 ) {
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
300 #ifndef HAVE_WINSOCK2
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
301 if( errno!=EINPROGRESS ) {
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
302 #else
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
303 if( (WSAGetLastError() != WSAEINPROGRESS) && (WSAGetLastError() != WSAEWOULDBLOCK) ) {
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
304 #endif
10625
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10317
diff changeset
305 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
306 closesocket(socket_server_fd);
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
307 return -1;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
308 }
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
309 }
6477
08712c93b643 Here I go again, another fix for the timeout.
bertrand
parents: 6476
diff changeset
310 tv.tv_sec = 0;
08712c93b643 Here I go again, another fix for the timeout.
bertrand
parents: 6476
diff changeset
311 tv.tv_usec = 500000;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
312 FD_ZERO( &set );
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
313 FD_SET( socket_server_fd, &set );
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
314 // 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
315 while((ret = select(socket_server_fd+1, NULL, &set, NULL, &tv)) == 0) {
6454
87612a287882 Added some missing carriage returns.
bertrand
parents: 6032
diff changeset
316 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
317 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
318 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
319 if(count > 30)
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
320 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
321 else
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
322 mp_msg(MSGT_NETWORK,MSGL_V,"Connection interuppted by user\n");
8824
87e37d8cfb25 Return another error code for timeout.
bertrand
parents: 8766
diff changeset
323 return -3;
4825
41d2da3bd082 Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents: 4817
diff changeset
324 }
41d2da3bd082 Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents: 4817
diff changeset
325 count++;
41d2da3bd082 Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents: 4817
diff changeset
326 FD_ZERO( &set );
41d2da3bd082 Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents: 4817
diff changeset
327 FD_SET( socket_server_fd, &set );
6477
08712c93b643 Here I go again, another fix for the timeout.
bertrand
parents: 6476
diff changeset
328 tv.tv_sec = 0;
08712c93b643 Here I go again, another fix for the timeout.
bertrand
parents: 6476
diff changeset
329 tv.tv_usec = 500000;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
330 }
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
331
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
332 // Turn back the socket as blocking
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
333 #ifndef HAVE_WINSOCK2
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
334 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
335 #else
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
336 val = 0;
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
337 ioctlsocket( socket_server_fd, FIONBIO, &val );
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
338 #endif
3494
fb9de639ed30 Applied the patch from Alban Bedel <albeu@free.fr>.
bertrand
parents: 3453
diff changeset
339 // Check if there were any error
fb9de639ed30 Applied the patch from Alban Bedel <albeu@free.fr>.
bertrand
parents: 3453
diff changeset
340 err_len = sizeof(int);
fb9de639ed30 Applied the patch from Alban Bedel <albeu@free.fr>.
bertrand
parents: 3453
diff changeset
341 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
342 if(ret < 0) {
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
343 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
344 return -2;
3494
fb9de639ed30 Applied the patch from Alban Bedel <albeu@free.fr>.
bertrand
parents: 3453
diff changeset
345 }
fb9de639ed30 Applied the patch from Alban Bedel <albeu@free.fr>.
bertrand
parents: 3453
diff changeset
346 if(err > 0) {
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
347 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
348 return -1;
fb9de639ed30 Applied the patch from Alban Bedel <albeu@free.fr>.
bertrand
parents: 3453
diff changeset
349 }
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
350
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
351 return socket_server_fd;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
352 }
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
353
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
354 // 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
355 // 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
356 // 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
357
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
358
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
359 int
10625
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10317
diff changeset
360 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
361 #ifdef HAVE_AF_INET6
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
362 int r;
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
363 int s = -2;
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 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
366 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
367
10625
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10317
diff changeset
368 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
369 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
370 return s;
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
371 #else
10625
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10317
diff changeset
372 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
373 #endif
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
374
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
375
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
376 }
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
377
4146
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
378 URL_t*
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
379 check4proxies( URL_t *url ) {
4652
17cf55182029 Cleaned up the way proxies checking was done.
bertrand
parents: 4553
diff changeset
380 URL_t *url_out = NULL;
4251
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
381 if( url==NULL ) return NULL;
4652
17cf55182029 Cleaned up the way proxies checking was done.
bertrand
parents: 4553
diff changeset
382 url_out = url_new( url->url );
4146
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
383 if( !strcasecmp(url->protocol, "http_proxy") ) {
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
384 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
385 return url_out;
4146
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
386 }
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
387 // Check if the http_proxy environment variable is set.
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
388 if( !strcasecmp(url->protocol, "http") ) {
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
389 char *proxy;
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
390 proxy = getenv("http_proxy");
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
391 if( proxy!=NULL ) {
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
392 // We got a proxy, build the URL to use it
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
393 int len;
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
394 char *new_url;
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
395 URL_t *tmp_url;
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
396 URL_t *proxy_url = url_new( proxy );
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
397
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
398 if( proxy_url==NULL ) {
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
399 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
400 return url_out;
4146
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
401 }
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
402
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
403 #ifdef HAVE_AF_INET6
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
404 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
405 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
406 "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
407 return url_out;
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
408 }
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
409 #endif
4146
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
410
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
411 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
412 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
413 new_url = malloc( len+1 );
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
414 if( new_url==NULL ) {
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
415 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
416 return url_out;
4146
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
417 }
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
418 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
419 tmp_url = url_new( new_url );
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
420 if( tmp_url==NULL ) {
4652
17cf55182029 Cleaned up the way proxies checking was done.
bertrand
parents: 4553
diff changeset
421 return url_out;
4146
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
422 }
4652
17cf55182029 Cleaned up the way proxies checking was done.
bertrand
parents: 4553
diff changeset
423 url_free( url_out );
17cf55182029 Cleaned up the way proxies checking was done.
bertrand
parents: 4553
diff changeset
424 url_out = tmp_url;
4146
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
425 free( new_url );
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
426 url_free( proxy_url );
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 }
4652
17cf55182029 Cleaned up the way proxies checking was done.
bertrand
parents: 4553
diff changeset
429 return url_out;
4146
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
430 }
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
431
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
432 int
11965
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
433 http_send_request( URL_t *url, off_t pos ) {
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
434 HTTP_header_t *http_hdr;
4121
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
435 URL_t *server_url;
11228
f25d54466044 User settable http user-agent. Patch by Per Wigren
alex
parents: 11227
diff changeset
436 char str[256];
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
437 int fd;
4121
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
438 int ret;
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
439 int proxy = 0; // Boolean
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
440
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
441 http_hdr = http_new_header();
4121
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
442
4145
c66fddd8867c Changed the proxy protocol to http_proxy.
bertrand
parents: 4121
diff changeset
443 if( !strcasecmp(url->protocol, "http_proxy") ) {
4121
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
444 proxy = 1;
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
445 server_url = url_new( (url->file)+1 );
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
446 http_set_uri( http_hdr, server_url->url );
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
447 } else {
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
448 server_url = url;
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
449 http_set_uri( http_hdr, server_url->file );
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
450 }
11228
f25d54466044 User settable http user-agent. Patch by Per Wigren
alex
parents: 11227
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
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
469 http_set_field( http_hdr, "Connection: closed");
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
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6642
diff changeset
703 #ifndef 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
704 // Old, hacked RTP support, which works for MPEG Program Streams
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6642
diff changeset
705 // RTP streams only:
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
706 // Checking for RTP
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
707 if( !strcasecmp(url->protocol, "rtp") ) {
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
708 if( url->port==0 ) {
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
709 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
710 return -1;
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
711 }
4553
bab3aac84143 ehh. i forgot to commit this patch: fix RTP streaming. patch by Dave Chapman <dave@dchapman.com>
arpi
parents: 4302
diff changeset
712 return 0;
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
713 }
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6642
diff changeset
714 #endif
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
715
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
716 // Checking for ASF
3453
10577da4a7b1 Added a data field in the streaming_ctrl_t struct, to store any
bertrand
parents: 3424
diff changeset
717 if( !strncasecmp(url->protocol, "mms", 3) ) {
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
718 *file_format = DEMUXER_TYPE_ASF;
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
719 return 0;
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
720 }
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
721
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
722 // HTTP based protocol
4145
c66fddd8867c Changed the proxy protocol to http_proxy.
bertrand
parents: 4121
diff changeset
723 if( !strcasecmp(url->protocol, "http") || !strcasecmp(url->protocol, "http_proxy") ) {
11965
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
724 fd = http_send_request( url, 0 );
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
725 if( fd<0 ) {
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
726 return -1;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
727 }
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
728
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
729 http_hdr = http_read_response( fd );
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
730 if( http_hdr==NULL ) {
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
731 closesocket( fd );
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
732 http_free( http_hdr );
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
733 return -1;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
734 }
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
735
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
736 *fd_out=fd;
8027
b9da278e4c92 verbose can be negative
arpi
parents: 7953
diff changeset
737 if( verbose>0 ) {
4121
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
738 http_debug_hdr( http_hdr );
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
739 }
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
740
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
741 streaming_ctrl->data = (void*)http_hdr;
11965
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
742
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
743 // 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
744 if( http_hdr!=NULL && http_hdr->status_code==200 ) {
2c2fb4457982 Seek in HTTP streams and stdin seek fixes
rtognimp
parents: 11965
diff changeset
745 char *accept_ranges;
2c2fb4457982 Seek in HTTP streams and stdin seek fixes
rtognimp
parents: 11965
diff changeset
746 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
747 seekable = strncmp(accept_ranges,"bytes",5)==0;
2c2fb4457982 Seek in HTTP streams and stdin seek fixes
rtognimp
parents: 11965
diff changeset
748 }
11965
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
749
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
750 // Check if the response is an ICY status_code reason_phrase
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
751 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
752 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
753 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
754 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
755 // 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
756 // 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
757 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
758 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
759 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
760 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
761 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
762 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
763 // 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
764 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
765 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
766 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
767 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
768
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents: 12018
diff changeset
769 // If content-type == video/nsv we most likely have a winamp video stream
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents: 12018
diff changeset
770 // 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
771 // handling like later
12236
c3904b8da3e8 10l: don't run strcmp if arg is NULL
rtognimp
parents: 12223
diff changeset
772 if ( (field_data = http_get_field(http_hdr, "content-type")) != NULL && !strcmp(field_data, "video/nsv"))
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents: 12018
diff changeset
773 *file_format = DEMUXER_TYPE_NSV;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents: 12018
diff changeset
774 else
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents: 12018
diff changeset
775 *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
776 return 0;
ad8124c9d462 Add some info prints to ICY code and handle return codes ICY specific, also avoid printing
atmos4
parents: 5867
diff changeset
777 }
5916
568a56e40a3f Added ICY error 400: Server full.
bertrand
parents: 5915
diff changeset
778 case 400: // Server Full
568a56e40a3f Added ICY error 400: Server full.
bertrand
parents: 5915
diff changeset
779 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
780 return -1;
5892
2e71feda5e0f Added ICY error 401: Service unavailable.
bertrand
parents: 5868
diff changeset
781 case 401: // Service Unavailable
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
782 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
783 return -1;
8766
50ffffd0bc18 Added the ICY 403 "Service Forbiden" error message.
bertrand
parents: 8570
diff changeset
784 case 403: // Service Forbidden
50ffffd0bc18 Added the ICY 403 "Service Forbiden" error message.
bertrand
parents: 8570
diff changeset
785 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
786 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
787 case 404: // Resource Not Found
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
788 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
789 return -1;
ad8124c9d462 Add some info prints to ICY code and handle return codes ICY specific, also avoid printing
atmos4
parents: 5867
diff changeset
790 default:
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
791 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
792 return -1;
ad8124c9d462 Add some info prints to ICY code and handle return codes ICY specific, also avoid printing
atmos4
parents: 5867
diff changeset
793 }
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
794 }
5868
ad8124c9d462 Add some info prints to ICY code and handle return codes ICY specific, also avoid printing
atmos4
parents: 5867
diff changeset
795
ad8124c9d462 Add some info prints to ICY code and handle return codes ICY specific, also avoid printing
atmos4
parents: 5867
diff changeset
796 // Assume standard http if not ICY
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
797 switch( http_hdr->status_code ) {
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
798 case 200: // OK
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
799 // Look if we can use the Content-Type
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
800 content_type = http_get_field( http_hdr, "Content-Type" );
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
801 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
802 char *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-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
804 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
805 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
806 // Check in the mime type table for a demuxer type
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
807 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
808 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
809 *file_format = mime_type_table[i].demuxer_type;
11965
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
810 return seekable; // for streaming_start
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
811 }
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
812 }
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
813 }
4817
1e46f40dcd0e Handle HTTP OK response that doesn't contain a mime-type.
bertrand
parents: 4802
diff changeset
814 // 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
815 // we should try raw HTTP
11965
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
816 return seekable; // for streaming_start
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
817 // Redirect
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
818 case 301: // Permanently
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
819 case 302: // Temporarily
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
820 // TODO: RFC 2616, recommand to detect infinite redirection loops
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
821 next_url = http_get_field( http_hdr, "Location" );
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
822 if( next_url!=NULL ) {
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
823 closesocket( fd );
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
824 url_free( url );
4802
9c06b312ced6 Finnaly figured out this little long living bug
albeu
parents: 4783
diff changeset
825 streaming_ctrl->url = url = url_new( next_url );
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
826 http_free( http_hdr );
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
827 redirect = 1;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
828 }
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
829 break;
6558
b379b061ce50 Read username/password from the -user -pass command line options.
bertrand
parents: 6555
diff changeset
830 case 401: // Authentication required
6555
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
831 if( http_authenticate(http_hdr, url, &auth_retry)<0 ) return -1;
6515
138ff0a71119 Added HTTP basic authentication support
bertrand
parents: 6477
diff changeset
832 redirect = 1;
138ff0a71119 Added HTTP basic authentication support
bertrand
parents: 6477
diff changeset
833 break;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
834 default:
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
835 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
836 return -1;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
837 }
3453
10577da4a7b1 Added a data field in the streaming_ctrl_t struct, to store any
bertrand
parents: 3424
diff changeset
838 } else {
10625
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10317
diff changeset
839 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
840 return -1;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
841 }
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
842 } while( redirect );
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
843
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
844 return -1;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
845 }
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
846
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
847 int
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
848 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
849 //printf("streaming_bufferize\n");
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
850 streaming_ctrl->buffer = (char*)malloc(size);
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
851 if( streaming_ctrl->buffer==NULL ) {
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
852 mp_msg(MSGT_NETWORK,MSGL_FATAL,"Memory allocation failed\n");
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
853 return -1;
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
854 }
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
855 memcpy( streaming_ctrl->buffer, buffer, size );
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
856 streaming_ctrl->buffer_size = size;
3599
2141db140d84 nop_steraming fixed
arpi
parents: 3585
diff changeset
857 return size;
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
858 }
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
859
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
860 int
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
861 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
862 int len=0;
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
863 //printf("nop_streaming_read\n");
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
864 if( stream_ctrl->buffer_size!=0 ) {
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
865 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
866 //printf("%d bytes in buffer\n", stream_ctrl->buffer_size);
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
867 len = (size<buffer_len)?size:buffer_len;
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
868 memcpy( buffer, (stream_ctrl->buffer)+(stream_ctrl->buffer_pos), len );
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
869 stream_ctrl->buffer_pos += len;
4251
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
870 //printf("buffer_pos = %d\n", stream_ctrl->buffer_pos );
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
871 if( stream_ctrl->buffer_pos>=stream_ctrl->buffer_size ) {
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
872 free( stream_ctrl->buffer );
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
873 stream_ctrl->buffer = NULL;
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
874 stream_ctrl->buffer_size = 0;
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
875 stream_ctrl->buffer_pos = 0;
4251
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
876 //printf("buffer cleaned\n");
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
877 }
4251
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
878 //printf("read %d bytes from buffer\n", len );
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
879 }
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
880
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
881 if( len<size ) {
3365
eb1c24557dad Checked the return values on read.
bertrand
parents: 3072
diff changeset
882 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
883 ret = recv( fd, buffer+len, size-len, 0 );
3494
fb9de639ed30 Applied the patch from Alban Bedel <albeu@free.fr>.
bertrand
parents: 3453
diff changeset
884 if( ret<0 ) {
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
885 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
886 }
eb1c24557dad Checked the return values on read.
bertrand
parents: 3072
diff changeset
887 len += ret;
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
888 //printf("read %d bytes from network\n", len );
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
889 }
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
890
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
891 return len;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
892 }
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
893
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
894 int
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
895 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
896 return -1;
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7881
diff changeset
897 // To shut up gcc warning
60624e692b95 GCC warning fixes
bertrand
parents: 7881
diff changeset
898 fd++;
60624e692b95 GCC warning fixes
bertrand
parents: 7881
diff changeset
899 pos++;
60624e692b95 GCC warning fixes
bertrand
parents: 7881
diff changeset
900 stream_ctrl=NULL;
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
901 }
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
902
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
903 int
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
904 nop_streaming_start( stream_t *stream ) {
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
905 HTTP_header_t *http_hdr = NULL;
12268
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
906 char *next_url=NULL;
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
907 URL_t *rd_url=NULL;
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
908 int fd,ret;
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
909 if( stream==NULL ) return -1;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
910
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
911 fd = stream->fd;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
912 if( fd<0 ) {
11965
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
913 fd = http_send_request( stream->streaming_ctrl->url, 0 );
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
914 if( fd<0 ) return -1;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
915 http_hdr = http_read_response( fd );
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
916 if( http_hdr==NULL ) return -1;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
917
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
918 switch( http_hdr->status_code ) {
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
919 case 200: // OK
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
920 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
921 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
922 if( http_hdr->body_size>0 ) {
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
923 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
924 http_free( http_hdr );
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
925 return -1;
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
926 }
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
927 }
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
928 break;
12268
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
929 // Redirect
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
930 case 301: // Permanently
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
931 case 302: // Temporarily
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
932 ret=-1;
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
933 next_url = http_get_field( http_hdr, "Location" );
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
934
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
935 if (next_url != NULL)
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
936 rd_url=url_new(next_url);
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
937
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
938 if (next_url != NULL && rd_url != NULL) {
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
939 mp_msg(MSGT_NETWORK,MSGL_STATUS,"Redirected: Using this url instead %s\n",next_url);
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
940 stream->streaming_ctrl->url=check4proxies(rd_url);
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
941 ret=nop_streaming_start(stream); //recursively get streaming started
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
942 } else {
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
943 mp_msg(MSGT_NETWORK,MSGL_ERR,"Redirection failed\n");
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
944 closesocket( fd );
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
945 fd = -1;
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
946 }
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
947 return ret;
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
948 break;
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
949 case 401: //Authorization required
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
950 case 403: //Forbidden
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
951 case 404: //Not found
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
952 case 500: //Server Error
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
953 default:
12268
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
954 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
955 closesocket( fd );
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
956 fd = -1;
12268
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
957 return -1;
4ab5c05ef3eb Handle url redirection
rtognimp
parents: 12236
diff changeset
958 break;
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
959 }
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
960 stream->fd = fd;
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
961 } else {
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
962 http_hdr = (HTTP_header_t*)stream->streaming_ctrl->data;
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
963 if( http_hdr->body_size>0 ) {
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
964 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
965 http_free( http_hdr );
4251
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
966 stream->streaming_ctrl->data = NULL;
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
967 return -1;
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 }
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
971
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
972 if( http_hdr ) {
3732
837ed2f1ed5e possible uninit pointer free()'d
pl
parents: 3686
diff changeset
973 http_free( http_hdr );
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
974 stream->streaming_ctrl->data = NULL;
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
975 }
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
976
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
977 stream->streaming_ctrl->streaming_read = nop_streaming_read;
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
978 stream->streaming_ctrl->streaming_seek = nop_streaming_seek;
8939
aaca5f177b99 better cache size defaults
arpi
parents: 8890
diff changeset
979 stream->streaming_ctrl->prebuffer_size = 64*1024; // 64 KBytes
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
980 stream->streaming_ctrl->buffering = 1;
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
981 stream->streaming_ctrl->status = streaming_playing_e;
4072
eac2948c00d4 Applied RTP patch from Brian Kuschak <bkuschak@yahoo.com>
bertrand
parents: 4046
diff changeset
982 return 0;
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
983 }
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
984
8570
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
985 int
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
986 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
987 return pnm_read(stream_ctrl->data, buffer, size);
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
988 }
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
989
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
990
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
991 int
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
992 pnm_streaming_start( stream_t *stream ) {
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
993 int fd;
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
994 pnm_t *pnm;
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
995 if( stream==NULL ) return -1;
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
996
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
997 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
998 stream->streaming_ctrl->url->port ? stream->streaming_ctrl->url->port : 7070,1 );
8570
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
999 printf("PNM:// fd=%d\n",fd);
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1000 if(fd<0) return -1;
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1001
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1002 pnm = pnm_connect(fd,stream->streaming_ctrl->url->file);
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1003 if(!pnm) return -1;
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1004
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1005 stream->fd=fd;
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1006 stream->streaming_ctrl->data=pnm;
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1007
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1008 stream->streaming_ctrl->streaming_read = pnm_streaming_read;
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1009 // stream->streaming_ctrl->streaming_seek = nop_streaming_seek;
8939
aaca5f177b99 better cache size defaults
arpi
parents: 8890
diff changeset
1010 stream->streaming_ctrl->prebuffer_size = 8*1024; // 8 KBytes
8570
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1011 stream->streaming_ctrl->buffering = 1;
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1012 stream->streaming_ctrl->status = streaming_playing_e;
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1013 return 0;
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1014 }
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1015
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1016
9922
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1017 int
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1018 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
1019 return rtsp_session_read(stream_ctrl->data, buffer, size);
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
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1022
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1023 int
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1024 realrtsp_streaming_start( stream_t *stream ) {
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1025 int fd;
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1026 rtsp_session_t *rtsp;
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1027 char *mrl;
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1028 int port;
10199
0c72c1d0d6a4 Fix redirection in real rtsp connections.
rtognimp
parents: 10171
diff changeset
1029 int redirected, temp;
9922
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1030 if( stream==NULL ) return -1;
10199
0c72c1d0d6a4 Fix redirection in real rtsp connections.
rtognimp
parents: 10171
diff changeset
1031
0c72c1d0d6a4 Fix redirection in real rtsp connections.
rtognimp
parents: 10171
diff changeset
1032 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
1033
0c72c1d0d6a4 Fix redirection in real rtsp connections.
rtognimp
parents: 10171
diff changeset
1034 do {
0c72c1d0d6a4 Fix redirection in real rtsp connections.
rtognimp
parents: 10171
diff changeset
1035
10317
e4f5cdf9d9b0 Patch from Andreas Hess <jaska@gmx.net>:
bertrand
parents: 10281
diff changeset
1036 redirected = 0;
9922
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1037
10317
e4f5cdf9d9b0 Patch from Andreas Hess <jaska@gmx.net>:
bertrand
parents: 10281
diff changeset
1038 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
1039 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
1040 if(fd<0) return -1;
e4f5cdf9d9b0 Patch from Andreas Hess <jaska@gmx.net>:
bertrand
parents: 10281
diff changeset
1041
e4f5cdf9d9b0 Patch from Andreas Hess <jaska@gmx.net>:
bertrand
parents: 10281
diff changeset
1042 mrl = malloc(sizeof(char)*(strlen(stream->streaming_ctrl->url->hostname)+strlen(stream->streaming_ctrl->url->file)+16));
e4f5cdf9d9b0 Patch from Andreas Hess <jaska@gmx.net>:
bertrand
parents: 10281
diff changeset
1043 sprintf(mrl,"rtsp://%s:%i/%s",stream->streaming_ctrl->url->hostname,port,stream->streaming_ctrl->url->file);
e4f5cdf9d9b0 Patch from Andreas Hess <jaska@gmx.net>:
bertrand
parents: 10281
diff changeset
1044 rtsp = rtsp_session_start(fd,&mrl, stream->streaming_ctrl->url->file,
e4f5cdf9d9b0 Patch from Andreas Hess <jaska@gmx.net>:
bertrand
parents: 10281
diff changeset
1045 stream->streaming_ctrl->url->hostname, port, &redirected);
10199
0c72c1d0d6a4 Fix redirection in real rtsp connections.
rtognimp
parents: 10171
diff changeset
1046
10317
e4f5cdf9d9b0 Patch from Andreas Hess <jaska@gmx.net>:
bertrand
parents: 10281
diff changeset
1047 if ( redirected == 1 ) {
e4f5cdf9d9b0 Patch from Andreas Hess <jaska@gmx.net>:
bertrand
parents: 10281
diff changeset
1048 url_free(stream->streaming_ctrl->url);
e4f5cdf9d9b0 Patch from Andreas Hess <jaska@gmx.net>:
bertrand
parents: 10281
diff changeset
1049 stream->streaming_ctrl->url = url_new(mrl);
e4f5cdf9d9b0 Patch from Andreas Hess <jaska@gmx.net>:
bertrand
parents: 10281
diff changeset
1050 closesocket(fd);
e4f5cdf9d9b0 Patch from Andreas Hess <jaska@gmx.net>:
bertrand
parents: 10281
diff changeset
1051 }
10199
0c72c1d0d6a4 Fix redirection in real rtsp connections.
rtognimp
parents: 10171
diff changeset
1052
10317
e4f5cdf9d9b0 Patch from Andreas Hess <jaska@gmx.net>:
bertrand
parents: 10281
diff changeset
1053 free(mrl);
e4f5cdf9d9b0 Patch from Andreas Hess <jaska@gmx.net>:
bertrand
parents: 10281
diff changeset
1054 temp--;
10199
0c72c1d0d6a4 Fix redirection in real rtsp connections.
rtognimp
parents: 10171
diff changeset
1055
0c72c1d0d6a4 Fix redirection in real rtsp connections.
rtognimp
parents: 10171
diff changeset
1056 } while( (redirected != 0) && (temp > 0) );
0c72c1d0d6a4 Fix redirection in real rtsp connections.
rtognimp
parents: 10171
diff changeset
1057
9922
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1058 if(!rtsp) return -1;
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1059
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1060 stream->fd=fd;
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1061 stream->streaming_ctrl->data=rtsp;
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1062
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1063 stream->streaming_ctrl->streaming_read = realrtsp_streaming_read;
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1064 // stream->streaming_ctrl->streaming_seek = nop_streaming_seek;
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1065 stream->streaming_ctrl->prebuffer_size = 128*1024; // 8 KBytes
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1066 stream->streaming_ctrl->buffering = 1;
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1067 stream->streaming_ctrl->status = streaming_playing_e;
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1068 return 0;
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1069 }
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1070
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1071
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6642
diff changeset
1072 #ifndef STREAMING_LIVE_DOT_COM
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1073 // Start listening on a UDP port. If multicast, join the group.
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1074 int
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1075 rtp_open_socket( URL_t *url ) {
4072
eac2948c00d4 Applied RTP patch from Brian Kuschak <bkuschak@yahoo.com>
bertrand
parents: 4046
diff changeset
1076 int socket_server_fd, rxsockbufsz;
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1077 int err, err_len;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1078 fd_set set;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1079 struct sockaddr_in server_address;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1080 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
1081 struct timeval tv;
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1082
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
1083 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
1084
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1085 socket_server_fd = socket(AF_INET, SOCK_DGRAM, 0);
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1086 // 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
1087 if( socket_server_fd==-1 ) {
6454
87612a287882 Added some missing carriage returns.
bertrand
parents: 6032
diff changeset
1088 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
1089 return -1;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1090 }
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1091
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1092 if( isalpha(url->hostname[0]) ) {
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1093 struct hostent *hp =(struct hostent*)gethostbyname( url->hostname );
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1094 if( hp==NULL ) {
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
1095 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
1096 return -1;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1097 }
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1098 memcpy( (void*)&server_address.sin_addr.s_addr, (void*)hp->h_addr, hp->h_length );
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1099 } else {
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
1100 #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
1101 #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
1102 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
1103 #else
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1104 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
1105 #endif
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
1106 #else
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
1107 unsigned int addr = inet_addr(url->hostname);
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
1108 memcpy( (void*)&server_address.sin_addr, (void*)&addr, sizeof(addr) );
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
1109 #endif
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1110 }
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1111 server_address.sin_family=AF_INET;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1112 server_address.sin_port=htons(url->port);
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1113
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1114 if( bind( socket_server_fd, (struct sockaddr*)&server_address, sizeof(server_address) )==-1 ) {
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
1115 #ifndef HAVE_WINSOCK2
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1116 if( errno!=EINPROGRESS ) {
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
1117 #else
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
1118 if( WSAGetLastError() != WSAEINPROGRESS ) {
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
1119 #endif
6454
87612a287882 Added some missing carriage returns.
bertrand
parents: 6032
diff changeset
1120 mp_msg(MSGT_NETWORK,MSGL_ERR,"Failed to connect to server\n");
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
1121 closesocket(socket_server_fd);
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1122 return -1;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1123 }
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1124 }
4072
eac2948c00d4 Applied RTP patch from Brian Kuschak <bkuschak@yahoo.com>
bertrand
parents: 4046
diff changeset
1125
eac2948c00d4 Applied RTP patch from Brian Kuschak <bkuschak@yahoo.com>
bertrand
parents: 4046
diff changeset
1126 // 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
1127 rxsockbufsz = 240 * 1024;
eac2948c00d4 Applied RTP patch from Brian Kuschak <bkuschak@yahoo.com>
bertrand
parents: 4046
diff changeset
1128 if( setsockopt( socket_server_fd, SOL_SOCKET, SO_RCVBUF, &rxsockbufsz, sizeof(rxsockbufsz))) {
6454
87612a287882 Added some missing carriage returns.
bertrand
parents: 6032
diff changeset
1129 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
1130 }
eac2948c00d4 Applied RTP patch from Brian Kuschak <bkuschak@yahoo.com>
bertrand
parents: 4046
diff changeset
1131
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1132 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
1133 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
1134 //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
1135 mcast.imr_interface.s_addr = 0;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1136 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
1137 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
1138 return -1;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1139 }
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1140 }
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1141
4553
bab3aac84143 ehh. i forgot to commit this patch: fix RTP streaming. patch by Dave Chapman <dave@dchapman.com>
arpi
parents: 4302
diff changeset
1142 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
1143 tv.tv_usec = (1 * 1000000); // 1 second timeout
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1144 FD_ZERO( &set );
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1145 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
1146 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
1147 //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
1148 err_len = sizeof( err );
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1149 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
1150 if( err ) {
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
1151 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
1152 mp_msg(MSGT_NETWORK,MSGL_DBG2,"Socket error: %d\n", err );
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
1153 closesocket(socket_server_fd);
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1154 return -1;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1155 }
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1156 }
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1157 return socket_server_fd;
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 int
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1161 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
1162 return read_rtp_from_server( fd, buffer, size );
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1163 }
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1164
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1165 int
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1166 rtp_streaming_start( stream_t *stream ) {
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1167 streaming_ctrl_t *streaming_ctrl;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1168 int fd;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1169
3732
837ed2f1ed5e possible uninit pointer free()'d
pl
parents: 3686
diff changeset
1170 if( stream==NULL ) return -1;
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1171 streaming_ctrl = stream->streaming_ctrl;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1172 fd = stream->fd;
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1173
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1174 if( fd<0 ) {
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1175 fd = rtp_open_socket( (streaming_ctrl->url) );
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1176 if( fd<0 ) return -1;
4072
eac2948c00d4 Applied RTP patch from Brian Kuschak <bkuschak@yahoo.com>
bertrand
parents: 4046
diff changeset
1177 stream->fd = fd;
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1178 }
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1179
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1180 streaming_ctrl->streaming_read = rtp_streaming_read;
4072
eac2948c00d4 Applied RTP patch from Brian Kuschak <bkuschak@yahoo.com>
bertrand
parents: 4046
diff changeset
1181 streaming_ctrl->streaming_seek = nop_streaming_seek;
8939
aaca5f177b99 better cache size defaults
arpi
parents: 8890
diff changeset
1182 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
1183 streaming_ctrl->buffering = 0;
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1184 streaming_ctrl->status = streaming_playing_e;
4072
eac2948c00d4 Applied RTP patch from Brian Kuschak <bkuschak@yahoo.com>
bertrand
parents: 4046
diff changeset
1185 return 0;
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1186 }
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6642
diff changeset
1187 #endif
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1188
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
1189 int
4729
f51bd827ed1c fixed MP3 ICY detection, return detected file format for open_stream
alex
parents: 4652
diff changeset
1190 streaming_start(stream_t *stream, int *demuxer_type, URL_t *url) {
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7881
diff changeset
1191 int ret;
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
1192 if( stream==NULL ) return -1;
4251
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
1193
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
1194 stream->streaming_ctrl = streaming_ctrl_new();
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
1195 if( stream->streaming_ctrl==NULL ) {
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
1196 return -1;
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
1197 }
4652
17cf55182029 Cleaned up the way proxies checking was done.
bertrand
parents: 4553
diff changeset
1198 stream->streaming_ctrl->url = check4proxies( url );
12223
e7c8200ffdc5 Respect -playlist for asx streams
rtognimp
parents: 12206
diff changeset
1199
e7c8200ffdc5 Respect -playlist for asx streams
rtognimp
parents: 12206
diff changeset
1200 if (*demuxer_type != DEMUXER_TYPE_PLAYLIST){
4729
f51bd827ed1c fixed MP3 ICY detection, return detected file format for open_stream
alex
parents: 4652
diff changeset
1201 ret = autodetectProtocol( stream->streaming_ctrl, &stream->fd, demuxer_type );
12223
e7c8200ffdc5 Respect -playlist for asx streams
rtognimp
parents: 12206
diff changeset
1202 } else {
e7c8200ffdc5 Respect -playlist for asx streams
rtognimp
parents: 12206
diff changeset
1203 ret=0;
e7c8200ffdc5 Respect -playlist for asx streams
rtognimp
parents: 12206
diff changeset
1204 }
e7c8200ffdc5 Respect -playlist for asx streams
rtognimp
parents: 12206
diff changeset
1205
4251
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
1206 if( ret<0 ) {
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
1207 return -1;
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
1208 }
11965
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
1209 if( ret==1 ) {
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
1210 stream->flags |= STREAM_SEEK;
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
1211 stream->seek = http_seek;
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
1212 }
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
1213
4251
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
1214 ret = -1;
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
1215
6642
e47d54a2cfff Retreive the bandwidth option from the command line.
bertrand
parents: 6570
diff changeset
1216 // Get the bandwidth available
7867
3dc0b71630ff cleanup config option handling in libmpdemux.
arpi
parents: 7862
diff changeset
1217 stream->streaming_ctrl->bandwidth = network_bandwidth;
6642
e47d54a2cfff Retreive the bandwidth option from the command line.
bertrand
parents: 6570
diff changeset
1218
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6642
diff changeset
1219 #ifndef STREAMING_LIVE_DOT_COM
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1220 // 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
1221 if( !strcasecmp( stream->streaming_ctrl->url->protocol, "rtp")) {
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
1222 if(stream->fd >= 0) {
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
1223 if(closesocket(stream->fd) < 0)
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
1224 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
1225 }
879a668ee540 various small streaming fixes by Alban Bedel <albeu@free.fr>
arpi
parents: 3732
diff changeset
1226 stream->fd = -1;
4072
eac2948c00d4 Applied RTP patch from Brian Kuschak <bkuschak@yahoo.com>
bertrand
parents: 4046
diff changeset
1227 ret = rtp_streaming_start( stream );
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 4041
diff changeset
1228 } else
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6642
diff changeset
1229 #endif
8570
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1230
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1231 if( !strcasecmp( stream->streaming_ctrl->url->protocol, "pnm")) {
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1232 stream->fd = -1;
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1233 ret = pnm_streaming_start( stream );
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1234 } else
16af93c01dbf pnm:// support (ported from xine)
arpi
parents: 8114
diff changeset
1235
9922
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1236 if( (!strcasecmp( stream->streaming_ctrl->url->protocol, "rtsp")) &&
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1237 (*demuxer_type == DEMUXER_TYPE_REAL)) {
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1238 stream->fd = -1;
12206
d572c605f665 Try Real rtsp, then live.com on every rtsp stream (remove extension
rtognimp
parents: 12175
diff changeset
1239 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
1240 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
1241 #ifdef STREAMING_LIVE_DOT_COM
d572c605f665 Try Real rtsp, then live.com on every rtsp stream (remove extension
rtognimp
parents: 12175
diff changeset
1242 *demuxer_type = DEMUXER_TYPE_RTP;
d572c605f665 Try Real rtsp, then live.com on every rtsp stream (remove extension
rtognimp
parents: 12175
diff changeset
1243 goto try_livedotcom;
d572c605f665 Try Real rtsp, then live.com on every rtsp stream (remove extension
rtognimp
parents: 12175
diff changeset
1244 #else
d572c605f665 Try Real rtsp, then live.com on every rtsp stream (remove extension
rtognimp
parents: 12175
diff changeset
1245 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
1246 return -1;
d572c605f665 Try Real rtsp, then live.com on every rtsp stream (remove extension
rtognimp
parents: 12175
diff changeset
1247 #endif
d572c605f665 Try Real rtsp, then live.com on every rtsp stream (remove extension
rtognimp
parents: 12175
diff changeset
1248 }
9922
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1249 } else
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
1250
3686
bed6226ffb46 RTP support patch by Brian Kuschak <bkuschak@yahoo.com>
arpi
parents: 3604
diff changeset
1251 // 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
1252 try_livedotcom:
4729
f51bd827ed1c fixed MP3 ICY detection, return detected file format for open_stream
alex
parents: 4652
diff changeset
1253 switch( *demuxer_type ) {
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
1254 case DEMUXER_TYPE_ASF:
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
1255 // Send the appropriate HTTP request
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
1256 // Need to filter the network stream.
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
1257 // ASF raw stream is encapsulated.
9749
58e5880f4788 Use new config headers
albeu
parents: 9691
diff changeset
1258 // It can also be a playlist (redirector)
58e5880f4788 Use new config headers
albeu
parents: 9691
diff changeset
1259 // so we need to pass demuxer_type too
58e5880f4788 Use new config headers
albeu
parents: 9691
diff changeset
1260 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
1261 if( ret<0 ) {
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
1262 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
1263 mp_msg(MSGT_NETWORK,MSGL_STATUS,"Check if this is a playlist which requires -playlist option\nExample: mplayer -playlist <url>\n");
3604
6bd312199a75 If the demuxer type is unknown it will start an http streaming.
bertrand
parents: 3599
diff changeset
1264 }
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
1265 break;
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6642
diff changeset
1266 #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
1267 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
1268 // 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
1269 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
1270 if( ret<0 ) {
7007
3639db1fb8d3 typo fixes by Ross Finlayson <finlayson@live.com>
arpi
parents: 6910
diff changeset
1271 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
1272 }
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6642
diff changeset
1273 break;
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6642
diff changeset
1274 #endif
4729
f51bd827ed1c fixed MP3 ICY detection, return detected file format for open_stream
alex
parents: 4652
diff changeset
1275 case DEMUXER_TYPE_MPEG_ES:
f51bd827ed1c fixed MP3 ICY detection, return detected file format for open_stream
alex
parents: 4652
diff changeset
1276 case DEMUXER_TYPE_MPEG_PS:
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
1277 case DEMUXER_TYPE_AVI:
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
1278 case DEMUXER_TYPE_MOV:
4729
f51bd827ed1c fixed MP3 ICY detection, return detected file format for open_stream
alex
parents: 4652
diff changeset
1279 case DEMUXER_TYPE_VIVO:
f51bd827ed1c fixed MP3 ICY detection, return detected file format for open_stream
alex
parents: 4652
diff changeset
1280 case DEMUXER_TYPE_FLI:
f51bd827ed1c fixed MP3 ICY detection, return detected file format for open_stream
alex
parents: 4652
diff changeset
1281 case DEMUXER_TYPE_REAL:
f51bd827ed1c fixed MP3 ICY detection, return detected file format for open_stream
alex
parents: 4652
diff changeset
1282 case DEMUXER_TYPE_Y4M:
f51bd827ed1c fixed MP3 ICY detection, return detected file format for open_stream
alex
parents: 4652
diff changeset
1283 case DEMUXER_TYPE_FILM:
f51bd827ed1c fixed MP3 ICY detection, return detected file format for open_stream
alex
parents: 4652
diff changeset
1284 case DEMUXER_TYPE_ROQ:
f51bd827ed1c fixed MP3 ICY detection, return detected file format for open_stream
alex
parents: 4652
diff changeset
1285 case DEMUXER_TYPE_AUDIO:
8114
ba66375adb6f Added OGG streaming support, patch from Balatoni Denes <pnis@coder.hu>
bertrand
parents: 8027
diff changeset
1286 case DEMUXER_TYPE_OGG:
4783
17f29765ea77 Support for retriving mp3 playlist from the network
albeu
parents: 4730
diff changeset
1287 case DEMUXER_TYPE_PLAYLIST:
3604
6bd312199a75 If the demuxer type is unknown it will start an http streaming.
bertrand
parents: 3599
diff changeset
1288 case DEMUXER_TYPE_UNKNOWN:
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents: 12018
diff changeset
1289 case DEMUXER_TYPE_NSV:
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
1290 // Generic start, doesn't need to filter
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
1291 // the network stream, it's a raw stream
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
1292 ret = nop_streaming_start( stream );
3604
6bd312199a75 If the demuxer type is unknown it will start an http streaming.
bertrand
parents: 3599
diff changeset
1293 if( ret<0 ) {
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
1294 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
1295 }
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
1296 break;
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
1297 default:
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
1298 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
1299 ret = -1;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
1300 }
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
1301
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
1302 if( ret<0 ) {
4251
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
1303 streaming_ctrl_free( stream->streaming_ctrl );
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
1304 stream->streaming_ctrl = NULL;
4652
17cf55182029 Cleaned up the way proxies checking was done.
bertrand
parents: 4553
diff changeset
1305 } else if( stream->streaming_ctrl->buffering ) {
7881
aba9301ed3c4 allow cache to be disabled (-nocache should override cachesize autodetection
arpi
parents: 7867
diff changeset
1306 if(stream_cache_size<0) {
6555
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
1307 // 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
1308 // 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
1309 stream_cache_size = (stream->streaming_ctrl->prebuffer_size/1024)*5;
8939
aaca5f177b99 better cache size defaults
arpi
parents: 8890
diff changeset
1310 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
1311 }
7867
3dc0b71630ff cleanup config option handling in libmpdemux.
arpi
parents: 7862
diff changeset
1312 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
1313 }
6032
4577bda5806a added some new types
alex
parents: 5916
diff changeset
1314
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
1315 return ret;
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
1316 }
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
1317
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
1318 int
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
1319 streaming_stop( stream_t *stream ) {
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
1320 stream->streaming_ctrl->status = streaming_stopped_e;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
1321 return 0;
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
1322 }