annotate stream/network.c @ 21789:b266f27109a6

set dp->stream_pts only when feeding the video stream to workaround strange interleaving patterns in some samples (that show with wild alternations of the OSD timer going back and forth)
author nicodvb
date Mon, 01 Jan 2007 22:47:14 +0000
parents 853c5dbaa91e
children 84f95595f31f
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
17153
c0b147bdf49d Harcoded eng strings on libmpdemux/network.c to help_mp
reynaldo
parents: 17012
diff changeset
19 #include "mp_msg.h"
c0b147bdf49d Harcoded eng strings on libmpdemux/network.c to help_mp
reynaldo
parents: 17012
diff changeset
20 #include "help_mp.h"
c0b147bdf49d Harcoded eng strings on libmpdemux/network.c to help_mp
reynaldo
parents: 17012
diff changeset
21
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
22 #ifndef HAVE_WINSOCK2
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
23 #define closesocket close
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
24 #else
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
25 #include <winsock2.h>
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
26 #include <ws2tcpip.h>
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
27 #endif
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
28
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
29 #include "stream.h"
19312
ab8d6b6deb63 proper inclusion of demuxer.h (including libmpdemux in Makefile only was to make previous split easier)
ben
parents: 19271
diff changeset
30 #include "libmpdemux/demuxer.h"
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16750
diff changeset
31 #include "m_config.h"
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
32
841
c906b7600fc6 Included "netdb.h" file needed.
bertrand
parents: 833
diff changeset
33 #include "network.h"
19335
2a9d669e5ff6 isolated tcp socket code from network.c to a dedicated file
ben
parents: 19331
diff changeset
34 #include "tcp.h"
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
35 #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
36 #include "cookies.h"
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
37 #include "url.h"
841
c906b7600fc6 Included "netdb.h" file needed.
bertrand
parents: 833
diff changeset
38
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16750
diff changeset
39 #include "version.h"
6466
ebffa928a5d4 Added mplayer version in the user-agent field.
bertrand
parents: 6454
diff changeset
40
7867
3dc0b71630ff cleanup config option handling in libmpdemux.
arpi
parents: 7862
diff changeset
41 extern int stream_cache_size;
4121
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
42
7862
013c255225d8 mpdemux.c|h moved to libinput, mpdemux_check_interrupt() -> mp_input_check_interrupt()
arpi
parents: 7513
diff changeset
43 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
44
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
45 /* 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
46 -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
47
7867
3dc0b71630ff cleanup config option handling in libmpdemux.
arpi
parents: 7862
diff changeset
48 char *network_username=NULL;
3dc0b71630ff cleanup config option handling in libmpdemux.
arpi
parents: 7862
diff changeset
49 char *network_password=NULL;
3dc0b71630ff cleanup config option handling in libmpdemux.
arpi
parents: 7862
diff changeset
50 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
51 int network_cookies_enabled = 0;
11228
f25d54466044 User settable http user-agent. Patch by Per Wigren
alex
parents: 11227
diff changeset
52 char *network_useragent=NULL;
6558
b379b061ce50 Read username/password from the -user -pass command line options.
bertrand
parents: 6555
diff changeset
53
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
54 /* IPv6 options */
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
55 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
56
6558
b379b061ce50 Read username/password from the -user -pass command line options.
bertrand
parents: 6555
diff changeset
57
15585
281d155fb37f ported all network streams to the new API
nicodvb
parents: 15209
diff changeset
58 mime_struct_t mime_type_table[] = {
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
59 // 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
60 { "audio/mpeg", DEMUXER_TYPE_AUDIO },
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
61 // MPEG streaming
14002
009337ffcfc4 forced autodetection of file format when content-type is video-x-mpeg to give mpeg-ts a chance
nicodvb
parents: 12894
diff changeset
62 { "video/mpeg", DEMUXER_TYPE_UNKNOWN },
009337ffcfc4 forced autodetection of file format when content-type is video-x-mpeg to give mpeg-ts a chance
nicodvb
parents: 12894
diff changeset
63 { "video/x-mpeg", DEMUXER_TYPE_UNKNOWN },
009337ffcfc4 forced autodetection of file format when content-type is video-x-mpeg to give mpeg-ts a chance
nicodvb
parents: 12894
diff changeset
64 { "video/x-mpeg2", DEMUXER_TYPE_UNKNOWN },
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
65 // AVI ??? => video/x-msvideo
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
66 { "video/x-msvideo", DEMUXER_TYPE_AVI },
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
67 // MOV => video/quicktime
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
68 { "video/quicktime", DEMUXER_TYPE_MOV },
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
69 // ASF
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
70 { "audio/x-ms-wax", DEMUXER_TYPE_ASF },
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
71 { "audio/x-ms-wma", DEMUXER_TYPE_ASF },
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
72 { "video/x-ms-asf", DEMUXER_TYPE_ASF },
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
73 { "video/x-ms-afs", DEMUXER_TYPE_ASF },
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
74 { "video/x-ms-wvx", DEMUXER_TYPE_ASF },
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
75 { "video/x-ms-wmv", DEMUXER_TYPE_ASF },
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
76 { "video/x-ms-wma", DEMUXER_TYPE_ASF },
17235
fbac61e449d5 Add "application/x-mms-framed" for ASF
rtognimp
parents: 17153
diff changeset
77 { "application/x-mms-framed", DEMUXER_TYPE_ASF },
17657
f5f4200785fc More complete ASF MIME detection, closing bug# 248,
gpoirier
parents: 17566
diff changeset
78 { "application/vnd.ms.wms-hdr.asfv1", DEMUXER_TYPE_ASF },
19841
e7f56cc4505e Change demuxer for "application/octet-stream" http streams from
eugeni
parents: 19335
diff changeset
79 { "application/octet-stream", DEMUXER_TYPE_UNKNOWN },
4783
17f29765ea77 Support for retriving mp3 playlist from the network
albeu
parents: 4730
diff changeset
80 // Playlists
7393
52b29760fe95 Added a new ASX playlist mime-type
bertrand
parents: 7251
diff changeset
81 { "video/x-ms-wmx", DEMUXER_TYPE_PLAYLIST },
4783
17f29765ea77 Support for retriving mp3 playlist from the network
albeu
parents: 4730
diff changeset
82 { "audio/x-scpls", DEMUXER_TYPE_PLAYLIST },
17f29765ea77 Support for retriving mp3 playlist from the network
albeu
parents: 4730
diff changeset
83 { "audio/x-mpegurl", DEMUXER_TYPE_PLAYLIST },
6032
4577bda5806a added some new types
alex
parents: 5916
diff changeset
84 { "audio/x-pls", DEMUXER_TYPE_PLAYLIST },
4577bda5806a added some new types
alex
parents: 5916
diff changeset
85 // Real Media
15209
b9c199dd123f Do not force real demuxer on x-pn-realaudio mimetype
rtognimp
parents: 14720
diff changeset
86 // { "audio/x-pn-realaudio", DEMUXER_TYPE_REAL },
8114
ba66375adb6f Added OGG streaming support, patch from Balatoni Denes <pnis@coder.hu>
bertrand
parents: 8027
diff changeset
87 // OGG Streaming
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents: 12018
diff changeset
88 { "application/x-ogg", DEMUXER_TYPE_OGG },
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents: 12018
diff changeset
89 // NullSoft Streaming Video
12477
1550ef7117c4 Add detection of nsa streamed by aol ultravox server
rtognimp
parents: 12390
diff changeset
90 { "video/nsv", DEMUXER_TYPE_NSV},
15585
281d155fb37f ported all network streams to the new API
nicodvb
parents: 15209
diff changeset
91 { "misc/ultravox", DEMUXER_TYPE_NSV},
21612
853c5dbaa91e Force lavf on flv streams. Closes bugzilla #354
rtogni
parents: 21535
diff changeset
92 #ifdef USE_LIBAVFORMAT
853c5dbaa91e Force lavf on flv streams. Closes bugzilla #354
rtogni
parents: 21535
diff changeset
93 // Flash Video
853c5dbaa91e Force lavf on flv streams. Closes bugzilla #354
rtogni
parents: 21535
diff changeset
94 { "video/x-flv", DEMUXER_TYPE_LAVF},
853c5dbaa91e Force lavf on flv streams. Closes bugzilla #354
rtogni
parents: 21535
diff changeset
95 #endif
15585
281d155fb37f ported all network streams to the new API
nicodvb
parents: 15209
diff changeset
96 { NULL, DEMUXER_TYPE_UNKNOWN},
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
97 };
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
98
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
99
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
100 streaming_ctrl_t *
17566
f580a7755ac5 Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents: 17235
diff changeset
101 streaming_ctrl_new(void) {
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
102 streaming_ctrl_t *streaming_ctrl;
19062
83c3afeab35d drops casts from void * on malloc/calloc from libmpdemux code
reynaldo
parents: 18466
diff changeset
103 streaming_ctrl = malloc(sizeof(streaming_ctrl_t));
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
104 if( streaming_ctrl==NULL ) {
17153
c0b147bdf49d Harcoded eng strings on libmpdemux/network.c to help_mp
reynaldo
parents: 17012
diff changeset
105 mp_msg(MSGT_NETWORK,MSGL_FATAL,MSGTR_MemAllocFailed);
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
106 return NULL;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
107 }
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
108 memset( streaming_ctrl, 0, sizeof(streaming_ctrl_t) );
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
109 return streaming_ctrl;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
110 }
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
111
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
112 void
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
113 streaming_ctrl_free( streaming_ctrl_t *streaming_ctrl ) {
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
114 if( streaming_ctrl==NULL ) return;
4251
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
115 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
116 if( streaming_ctrl->buffer ) free( streaming_ctrl->buffer );
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
117 if( streaming_ctrl->data ) free( streaming_ctrl->data );
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
118 free( streaming_ctrl );
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
119 }
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
120
4146
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
121 URL_t*
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
122 check4proxies( URL_t *url ) {
4652
17cf55182029 Cleaned up the way proxies checking was done.
bertrand
parents: 4553
diff changeset
123 URL_t *url_out = NULL;
4251
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
124 if( url==NULL ) return NULL;
4652
17cf55182029 Cleaned up the way proxies checking was done.
bertrand
parents: 4553
diff changeset
125 url_out = url_new( url->url );
4146
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
126 if( !strcasecmp(url->protocol, "http_proxy") ) {
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
127 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
128 return url_out;
4146
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
129 }
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
130 // Check if the http_proxy environment variable is set.
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
131 if( !strcasecmp(url->protocol, "http") ) {
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
132 char *proxy;
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
133 proxy = getenv("http_proxy");
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
134 if( proxy!=NULL ) {
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
135 // We got a proxy, build the URL to use it
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
136 int len;
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
137 char *new_url;
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
138 URL_t *tmp_url;
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
139 URL_t *proxy_url = url_new( proxy );
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
140
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
141 if( proxy_url==NULL ) {
17153
c0b147bdf49d Harcoded eng strings on libmpdemux/network.c to help_mp
reynaldo
parents: 17012
diff changeset
142 mp_msg(MSGT_NETWORK,MSGL_WARN,
c0b147bdf49d Harcoded eng strings on libmpdemux/network.c to help_mp
reynaldo
parents: 17012
diff changeset
143 MSGTR_MPDEMUX_NW_InvalidProxySettingTryingWithout);
4652
17cf55182029 Cleaned up the way proxies checking was done.
bertrand
parents: 4553
diff changeset
144 return url_out;
4146
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
145 }
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
146
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
147 #ifdef HAVE_AF_INET6
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
148 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
149 mp_msg(MSGT_NETWORK,MSGL_WARN,
17153
c0b147bdf49d Harcoded eng strings on libmpdemux/network.c to help_mp
reynaldo
parents: 17012
diff changeset
150 MSGTR_MPDEMUX_NW_CantResolvTryingWithoutProxy);
16419
0d860b6d64e6 memleak fixes when using an http proxy
reimar
parents: 16417
diff changeset
151 url_free(proxy_url);
9691
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
152 return url_out;
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
153 }
ed72c158215d Added IPv6 support, patch by Dave Lambley <mplayer-dev-eng@dlambley.freeserve.co.uk>
bertrand
parents: 8939
diff changeset
154 #endif
4146
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
155
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
156 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
157 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
158 new_url = malloc( len+1 );
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
159 if( new_url==NULL ) {
17153
c0b147bdf49d Harcoded eng strings on libmpdemux/network.c to help_mp
reynaldo
parents: 17012
diff changeset
160 mp_msg(MSGT_NETWORK,MSGL_FATAL,MSGTR_MemAllocFailed);
16419
0d860b6d64e6 memleak fixes when using an http proxy
reimar
parents: 16417
diff changeset
161 url_free(proxy_url);
4652
17cf55182029 Cleaned up the way proxies checking was done.
bertrand
parents: 4553
diff changeset
162 return url_out;
4146
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
163 }
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
164 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
165 tmp_url = url_new( new_url );
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
166 if( tmp_url==NULL ) {
16419
0d860b6d64e6 memleak fixes when using an http proxy
reimar
parents: 16417
diff changeset
167 free( new_url );
0d860b6d64e6 memleak fixes when using an http proxy
reimar
parents: 16417
diff changeset
168 url_free( proxy_url );
4652
17cf55182029 Cleaned up the way proxies checking was done.
bertrand
parents: 4553
diff changeset
169 return url_out;
4146
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
170 }
4652
17cf55182029 Cleaned up the way proxies checking was done.
bertrand
parents: 4553
diff changeset
171 url_free( url_out );
17cf55182029 Cleaned up the way proxies checking was done.
bertrand
parents: 4553
diff changeset
172 url_out = tmp_url;
4146
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
173 free( new_url );
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
174 url_free( proxy_url );
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
175 }
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
176 }
4652
17cf55182029 Cleaned up the way proxies checking was done.
bertrand
parents: 4553
diff changeset
177 return url_out;
4146
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
178 }
925046ea34ec Added support for the environment variable http_proxy.
bertrand
parents: 4145
diff changeset
179
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
180 int
11965
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
181 http_send_request( URL_t *url, off_t pos ) {
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
182 HTTP_header_t *http_hdr;
4121
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
183 URL_t *server_url;
11228
f25d54466044 User settable http user-agent. Patch by Per Wigren
alex
parents: 11227
diff changeset
184 char str[256];
21535
94ac700b2898 Close fd on error.
reimar
parents: 19841
diff changeset
185 int fd = -1;
4121
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
186 int ret;
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
187 int proxy = 0; // Boolean
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
188
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
189 http_hdr = http_new_header();
4121
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
190
4145
c66fddd8867c Changed the proxy protocol to http_proxy.
bertrand
parents: 4121
diff changeset
191 if( !strcasecmp(url->protocol, "http_proxy") ) {
4121
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
192 proxy = 1;
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
193 server_url = url_new( (url->file)+1 );
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
194 http_set_uri( http_hdr, server_url->url );
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
195 } else {
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
196 server_url = url;
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
197 http_set_uri( http_hdr, server_url->file );
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
198 }
12638
2ebd553876c8 RFC compliance patch by Eric Lammerts <eric@lammerts.org>
alex
parents: 12610
diff changeset
199 if (server_url->port && server_url->port != 80)
2ebd553876c8 RFC compliance patch by Eric Lammerts <eric@lammerts.org>
alex
parents: 12610
diff changeset
200 snprintf(str, 256, "Host: %s:%d", server_url->hostname, server_url->port );
2ebd553876c8 RFC compliance patch by Eric Lammerts <eric@lammerts.org>
alex
parents: 12610
diff changeset
201 else
2ebd553876c8 RFC compliance patch by Eric Lammerts <eric@lammerts.org>
alex
parents: 12610
diff changeset
202 snprintf(str, 256, "Host: %s", server_url->hostname );
3585
cb985ea11ed5 Added the Host field in the HTTP request.
bertrand
parents: 3494
diff changeset
203 http_set_field( http_hdr, str);
11228
f25d54466044 User settable http user-agent. Patch by Per Wigren
alex
parents: 11227
diff changeset
204 if (network_useragent)
f25d54466044 User settable http user-agent. Patch by Per Wigren
alex
parents: 11227
diff changeset
205 {
f25d54466044 User settable http user-agent. Patch by Per Wigren
alex
parents: 11227
diff changeset
206 snprintf(str, 256, "User-Agent: %s", network_useragent);
f25d54466044 User settable http user-agent. Patch by Per Wigren
alex
parents: 11227
diff changeset
207 http_set_field(http_hdr, str);
f25d54466044 User settable http user-agent. Patch by Per Wigren
alex
parents: 11227
diff changeset
208 }
f25d54466044 User settable http user-agent. Patch by Per Wigren
alex
parents: 11227
diff changeset
209 else
f25d54466044 User settable http user-agent. Patch by Per Wigren
alex
parents: 11227
diff changeset
210 http_set_field( http_hdr, "User-Agent: MPlayer/"VERSION);
11965
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
211
16013
4ee24ec6ac16 SHOUTcast and ultravox support
reimar
parents: 15954
diff changeset
212 http_set_field(http_hdr, "Icy-MetaData: 1");
4ee24ec6ac16 SHOUTcast and ultravox support
reimar
parents: 15954
diff changeset
213
11965
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
214 if(pos>0) {
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
215 // Extend http_send_request with possibility to do partial content retrieval
16750
0a31740dd5e6 Use PRI?64 defines as format strings for 64 bit variables.
reimar
parents: 16419
diff changeset
216 snprintf(str, 256, "Range: bytes=%"PRId64"-", (int64_t)pos);
11965
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
217 http_set_field(http_hdr, str);
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
218 }
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
219
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
220 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
221
12352
2e0a4b32e139 Should be Connection: close, and not closed.
bertrand
parents: 12274
diff changeset
222 http_set_field( http_hdr, "Connection: close");
6515
138ff0a71119 Added HTTP basic authentication support
bertrand
parents: 6477
diff changeset
223 http_add_basic_authentication( http_hdr, url->username, url->password );
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
224 if( http_build_request( http_hdr )==NULL ) {
16417
be6bbd50ec20 memleak fixes when invalid http url specified.
reimar
parents: 16013
diff changeset
225 goto err_out;
833
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
226 }
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
227
4121
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
228 if( proxy ) {
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
229 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
230 fd = connect2Server( url->hostname, url->port,1 );
4121
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
231 url_free( server_url );
17777
13b2332c5154 missing url_free when using proxy and connect fails
reimar
parents: 17657
diff changeset
232 server_url = NULL;
4121
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
233 } else {
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
234 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
235 fd = connect2Server( server_url->hostname, server_url->port,1 );
4121
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
236 }
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
237 if( fd<0 ) {
16417
be6bbd50ec20 memleak fixes when invalid http url specified.
reimar
parents: 16013
diff changeset
238 goto err_out;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
239 }
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
240 mp_msg(MSGT_NETWORK,MSGL_DBG2,"Request: [%s]\n", http_hdr->buffer );
4121
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
241
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
242 ret = send( fd, http_hdr->buffer, http_hdr->buffer_size, 0 );
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7881
diff changeset
243 if( ret!=(int)http_hdr->buffer_size ) {
17153
c0b147bdf49d Harcoded eng strings on libmpdemux/network.c to help_mp
reynaldo
parents: 17012
diff changeset
244 mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_NW_ErrSendingHTTPRequest);
16417
be6bbd50ec20 memleak fixes when invalid http url specified.
reimar
parents: 16013
diff changeset
245 goto err_out;
4121
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
246 }
a71d4ffc6c97 Added proxy support.
bertrand
parents: 4072
diff changeset
247
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
248 http_free( http_hdr );
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
249
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
250 return fd;
16417
be6bbd50ec20 memleak fixes when invalid http url specified.
reimar
parents: 16013
diff changeset
251 err_out:
21535
94ac700b2898 Close fd on error.
reimar
parents: 19841
diff changeset
252 if (fd > 0) closesocket(fd);
16417
be6bbd50ec20 memleak fixes when invalid http url specified.
reimar
parents: 16013
diff changeset
253 http_free(http_hdr);
17777
13b2332c5154 missing url_free when using proxy and connect fails
reimar
parents: 17657
diff changeset
254 if (proxy && server_url)
13b2332c5154 missing url_free when using proxy and connect fails
reimar
parents: 17657
diff changeset
255 url_free(server_url);
16417
be6bbd50ec20 memleak fixes when invalid http url specified.
reimar
parents: 16013
diff changeset
256 return -1;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
257 }
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
258
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
259 HTTP_header_t *
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
260 http_read_response( int fd ) {
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
261 HTTP_header_t *http_hdr;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
262 char response[BUFFER_SIZE];
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
263 int i;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
264
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
265 http_hdr = http_new_header();
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
266 if( http_hdr==NULL ) {
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
267 return NULL;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
268 }
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
269
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
270 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
271 i = recv( fd, response, BUFFER_SIZE, 0 );
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
272 if( i<0 ) {
17153
c0b147bdf49d Harcoded eng strings on libmpdemux/network.c to help_mp
reynaldo
parents: 17012
diff changeset
273 mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_NW_ReadFailed);
3365
eb1c24557dad Checked the return values on read.
bertrand
parents: 3072
diff changeset
274 http_free( http_hdr );
eb1c24557dad Checked the return values on read.
bertrand
parents: 3072
diff changeset
275 return NULL;
eb1c24557dad Checked the return values on read.
bertrand
parents: 3072
diff changeset
276 }
eb1c24557dad Checked the return values on read.
bertrand
parents: 3072
diff changeset
277 if( i==0 ) {
17153
c0b147bdf49d Harcoded eng strings on libmpdemux/network.c to help_mp
reynaldo
parents: 17012
diff changeset
278 mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_NW_Read0CouldBeEOF);
3365
eb1c24557dad Checked the return values on read.
bertrand
parents: 3072
diff changeset
279 http_free( http_hdr );
eb1c24557dad Checked the return values on read.
bertrand
parents: 3072
diff changeset
280 return NULL;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
281 }
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
282 http_response_append( http_hdr, response, i );
2489
0ecc1b4f7cf8 Added ASF http server streaming (Not mms streaming).
bertrand
parents: 2310
diff changeset
283 } while( !http_is_header_entire( http_hdr ) );
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
284 http_response_parse( http_hdr );
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
285 return http_hdr;
833
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
286 }
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
287
6555
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
288 int
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
289 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
290 char *aut;
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7881
diff changeset
291
6558
b379b061ce50 Read username/password from the -user -pass command line options.
bertrand
parents: 6555
diff changeset
292 if( *auth_retry==1 ) {
17153
c0b147bdf49d Harcoded eng strings on libmpdemux/network.c to help_mp
reynaldo
parents: 17012
diff changeset
293 mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_NW_AuthFailed);
6555
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
294 return -1;
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
295 }
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
296 if( *auth_retry>0 ) {
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
297 if( url->username ) {
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
298 free( url->username );
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
299 url->username = NULL;
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
300 }
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
301 if( url->password ) {
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
302 free( url->password );
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
303 url->password = NULL;
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
304 }
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
305 }
6558
b379b061ce50 Read username/password from the -user -pass command line options.
bertrand
parents: 6555
diff changeset
306
6555
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
307 aut = http_get_field(http_hdr, "WWW-Authenticate");
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
308 if( aut!=NULL ) {
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
309 char *aut_space;
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
310 aut_space = strstr(aut, "realm=");
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
311 if( aut_space!=NULL ) aut_space += 6;
17153
c0b147bdf49d Harcoded eng strings on libmpdemux/network.c to help_mp
reynaldo
parents: 17012
diff changeset
312 mp_msg(MSGT_NETWORK,MSGL_INFO,MSGTR_MPDEMUX_NW_AuthRequiredFor, aut_space);
6555
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
313 } else {
17153
c0b147bdf49d Harcoded eng strings on libmpdemux/network.c to help_mp
reynaldo
parents: 17012
diff changeset
314 mp_msg(MSGT_NETWORK,MSGL_INFO,MSGTR_MPDEMUX_NW_AuthRequired);
6555
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
315 }
7867
3dc0b71630ff cleanup config option handling in libmpdemux.
arpi
parents: 7862
diff changeset
316 if( network_username ) {
3dc0b71630ff cleanup config option handling in libmpdemux.
arpi
parents: 7862
diff changeset
317 url->username = strdup(network_username);
6555
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
318 if( url->username==NULL ) {
17153
c0b147bdf49d Harcoded eng strings on libmpdemux/network.c to help_mp
reynaldo
parents: 17012
diff changeset
319 mp_msg(MSGT_NETWORK,MSGL_FATAL,MSGTR_MemAllocFailed);
6555
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
320 return -1;
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
321 }
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
322 } else {
17153
c0b147bdf49d Harcoded eng strings on libmpdemux/network.c to help_mp
reynaldo
parents: 17012
diff changeset
323 mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_NW_AuthFailed);
6555
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
324 return -1;
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
325 }
7867
3dc0b71630ff cleanup config option handling in libmpdemux.
arpi
parents: 7862
diff changeset
326 if( network_password ) {
3dc0b71630ff cleanup config option handling in libmpdemux.
arpi
parents: 7862
diff changeset
327 url->password = strdup(network_password);
6558
b379b061ce50 Read username/password from the -user -pass command line options.
bertrand
parents: 6555
diff changeset
328 if( url->password==NULL ) {
17153
c0b147bdf49d Harcoded eng strings on libmpdemux/network.c to help_mp
reynaldo
parents: 17012
diff changeset
329 mp_msg(MSGT_NETWORK,MSGL_FATAL,MSGTR_MemAllocFailed);
6558
b379b061ce50 Read username/password from the -user -pass command line options.
bertrand
parents: 6555
diff changeset
330 return -1;
b379b061ce50 Read username/password from the -user -pass command line options.
bertrand
parents: 6555
diff changeset
331 }
b379b061ce50 Read username/password from the -user -pass command line options.
bertrand
parents: 6555
diff changeset
332 } else {
17153
c0b147bdf49d Harcoded eng strings on libmpdemux/network.c to help_mp
reynaldo
parents: 17012
diff changeset
333 mp_msg(MSGT_NETWORK,MSGL_INFO,MSGTR_MPDEMUX_NW_NoPasswdProvidedTryingBlank);
6558
b379b061ce50 Read username/password from the -user -pass command line options.
bertrand
parents: 6555
diff changeset
334 }
6555
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
335 (*auth_retry)++;
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
336 return 0;
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
337 }
f54b5148885d Moved authentication code into its own function.
bertrand
parents: 6516
diff changeset
338
11965
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
339 int
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
340 http_seek( stream_t *stream, off_t pos ) {
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
341 HTTP_header_t *http_hdr = NULL;
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
342 int fd;
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
343 if( stream==NULL ) return 0;
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
344
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
345 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
346 fd = http_send_request( stream->streaming_ctrl->url, pos );
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
347 if( fd<0 ) return 0;
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
348
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
349 http_hdr = http_read_response( fd );
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
350
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
351 if( http_hdr==NULL ) return 0;
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
352
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
353 switch( http_hdr->status_code ) {
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
354 case 200:
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
355 case 206: // OK
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
356 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
357 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
358 if( http_hdr->body_size>0 ) {
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
359 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
360 http_free( http_hdr );
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
361 return -1;
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
362 }
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
363 }
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
364 break;
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
365 default:
17153
c0b147bdf49d Harcoded eng strings on libmpdemux/network.c to help_mp
reynaldo
parents: 17012
diff changeset
366 mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_NW_ErrServerReturned, http_hdr->status_code, http_hdr->reason_phrase );
11965
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
367 close( fd );
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
368 fd = -1;
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
369 }
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
370 stream->fd = fd;
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
371
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
372 if( http_hdr ) {
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
373 http_free( http_hdr );
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
374 stream->streaming_ctrl->data = NULL;
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
375 }
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
376
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
377 stream->pos=pos;
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
378
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
379 return 1;
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
380 }
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
381
3d75bcc28231 enable seeking in http streams
attila
parents: 11583
diff changeset
382
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
383 int
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
384 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
385 //printf("streaming_bufferize\n");
19062
83c3afeab35d drops casts from void * on malloc/calloc from libmpdemux code
reynaldo
parents: 18466
diff changeset
386 streaming_ctrl->buffer = malloc(size);
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
387 if( streaming_ctrl->buffer==NULL ) {
17153
c0b147bdf49d Harcoded eng strings on libmpdemux/network.c to help_mp
reynaldo
parents: 17012
diff changeset
388 mp_msg(MSGT_NETWORK,MSGL_FATAL,MSGTR_MemAllocFailed);
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
389 return -1;
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
390 }
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
391 memcpy( streaming_ctrl->buffer, buffer, size );
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
392 streaming_ctrl->buffer_size = size;
3599
2141db140d84 nop_steraming fixed
arpi
parents: 3585
diff changeset
393 return size;
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
394 }
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
395
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
396 int
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
397 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
398 int len=0;
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
399 //printf("nop_streaming_read\n");
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
400 if( stream_ctrl->buffer_size!=0 ) {
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
401 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
402 //printf("%d bytes in buffer\n", stream_ctrl->buffer_size);
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
403 len = (size<buffer_len)?size:buffer_len;
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
404 memcpy( buffer, (stream_ctrl->buffer)+(stream_ctrl->buffer_pos), len );
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
405 stream_ctrl->buffer_pos += len;
4251
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
406 //printf("buffer_pos = %d\n", stream_ctrl->buffer_pos );
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
407 if( stream_ctrl->buffer_pos>=stream_ctrl->buffer_size ) {
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
408 free( stream_ctrl->buffer );
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
409 stream_ctrl->buffer = NULL;
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
410 stream_ctrl->buffer_size = 0;
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
411 stream_ctrl->buffer_pos = 0;
4251
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
412 //printf("buffer cleaned\n");
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
413 }
4251
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4236
diff changeset
414 //printf("read %d bytes from buffer\n", len );
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
415 }
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
416
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
417 if( len<size ) {
3365
eb1c24557dad Checked the return values on read.
bertrand
parents: 3072
diff changeset
418 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
419 ret = recv( fd, buffer+len, size-len, 0 );
3494
fb9de639ed30 Applied the patch from Alban Bedel <albeu@free.fr>.
bertrand
parents: 3453
diff changeset
420 if( ret<0 ) {
5915
f716aa9e2df2 Convert printf to mp_msg in the network layer
albeu
parents: 5892
diff changeset
421 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
422 }
eb1c24557dad Checked the return values on read.
bertrand
parents: 3072
diff changeset
423 len += ret;
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
424 //printf("read %d bytes from network\n", len );
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
425 }
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
426
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
427 return len;
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
428 }
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
429
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
430 int
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
431 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
432 return -1;
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7881
diff changeset
433 // To shut up gcc warning
60624e692b95 GCC warning fixes
bertrand
parents: 7881
diff changeset
434 fd++;
60624e692b95 GCC warning fixes
bertrand
parents: 7881
diff changeset
435 pos++;
60624e692b95 GCC warning fixes
bertrand
parents: 7881
diff changeset
436 stream_ctrl=NULL;
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
437 }
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
438
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
439
15954
341bfd887e36 small warning fix:
rathann
parents: 15812
diff changeset
440 void fixup_network_stream_cache(stream_t *stream) {
15585
281d155fb37f ported all network streams to the new API
nicodvb
parents: 15209
diff changeset
441 if(stream->streaming_ctrl->buffering) {
281d155fb37f ported all network streams to the new API
nicodvb
parents: 15209
diff changeset
442 if(stream_cache_size<0) {
281d155fb37f ported all network streams to the new API
nicodvb
parents: 15209
diff changeset
443 // cache option not set, will use our computed value.
281d155fb37f ported all network streams to the new API
nicodvb
parents: 15209
diff changeset
444 // buffer in KBytes, *5 because the prefill is 20% of the buffer.
281d155fb37f ported all network streams to the new API
nicodvb
parents: 15209
diff changeset
445 stream_cache_size = (stream->streaming_ctrl->prebuffer_size/1024)*5;
281d155fb37f ported all network streams to the new API
nicodvb
parents: 15209
diff changeset
446 if( stream_cache_size<64 ) stream_cache_size = 64; // 16KBytes min buffer
281d155fb37f ported all network streams to the new API
nicodvb
parents: 15209
diff changeset
447 }
17153
c0b147bdf49d Harcoded eng strings on libmpdemux/network.c to help_mp
reynaldo
parents: 17012
diff changeset
448 mp_msg(MSGT_NETWORK,MSGL_INFO,MSGTR_MPDEMUX_NW_CacheSizeSetTo, stream_cache_size);
15585
281d155fb37f ported all network streams to the new API
nicodvb
parents: 15209
diff changeset
449 }
9922
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
450 }
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
451
6cb7a295ab0e Real rstp:// streaming support, ported from xine
rtognimp
parents: 9900
diff changeset
452
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
453 int
3042
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
454 streaming_stop( stream_t *stream ) {
6b6fa2be9b97 Removed my buffer hack to use cache2.
bertrand
parents: 2555
diff changeset
455 stream->streaming_ctrl->status = streaming_stopped_e;
999
92833c9472e8 Continue implementation of the network streaming part.
bertrand
parents: 903
diff changeset
456 return 0;
903
7f6641b1b0df Added autodetection of potential stream type.
bertrand
parents: 841
diff changeset
457 }