Mercurial > libavformat.hg
annotate http.c @ 6442:852b5a321ef5 libavformat
move null muxer to its own file
author | aurel |
---|---|
date | Sun, 29 Aug 2010 22:15:50 +0000 |
parents | 27242bd0812c |
children | fed4be333771 |
rev | line source |
---|---|
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
1 /* |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
2 * HTTP protocol for ffmpeg client |
4251
77e0c7511d41
cosmetics: Remove pointless period after copyright statement non-sentences.
diego
parents:
3973
diff
changeset
|
3 * Copyright (c) 2000, 2001 Fabrice Bellard |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
4 * |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
5 * This file is part of FFmpeg. |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
6 * |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
7 * FFmpeg is free software; you can redistribute it and/or |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
8 * modify it under the terms of the GNU Lesser General Public |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
9 * License as published by the Free Software Foundation; either |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
10 * version 2.1 of the License, or (at your option) any later version. |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
11 * |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
12 * FFmpeg is distributed in the hope that it will be useful, |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
15 * Lesser General Public License for more details. |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
16 * |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
17 * You should have received a copy of the GNU Lesser General Public |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
18 * License along with FFmpeg; if not, write to the Free Software |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
20 */ |
3286 | 21 |
22 #include "libavutil/avstring.h" | |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
23 #include "avformat.h" |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
24 #include <unistd.h> |
5059
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
25 #include <strings.h> |
5837
d605f589f0be
move ff_url_split() and ff_url_join() declarations to internal.h
aurel
parents:
5776
diff
changeset
|
26 #include "internal.h" |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
27 #include "network.h" |
6104 | 28 #include "http.h" |
2774
477419a721a3
os_support.h is also needed for usleep and lseek on MinGW.
ramiro
parents:
2274
diff
changeset
|
29 #include "os_support.h" |
5879
61062082488b
Split out http authentication handling into a separate file
mstorsjo
parents:
5837
diff
changeset
|
30 #include "httpauth.h" |
6163 | 31 #include "libavcodec/opt.h" |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
32 |
1986 | 33 /* XXX: POST protocol is not completely implemented because ffmpeg uses |
34 only a subset of it. */ | |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
35 |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
36 /* used for protocol handling */ |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
37 #define BUFFER_SIZE 1024 |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
38 #define MAX_REDIRECTS 8 |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
39 |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
40 typedef struct { |
6163 | 41 const AVClass *class; |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
42 URLContext *hd; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
43 unsigned char buffer[BUFFER_SIZE], *buf_ptr, *buf_end; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
44 int line_count; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
45 int http_code; |
5059
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
46 int64_t chunksize; /**< Used if "Transfer-Encoding: chunked" otherwise -1. */ |
3973
549a09cf23fe
Remove offset_t typedef and use int64_t directly instead.
diego
parents:
3286
diff
changeset
|
47 int64_t off, filesize; |
6390
27242bd0812c
Move the definition of the maximum url size for static buffers to internal.h
mstorsjo
parents:
6352
diff
changeset
|
48 char location[MAX_URL_SIZE]; |
5879
61062082488b
Split out http authentication handling into a separate file
mstorsjo
parents:
5837
diff
changeset
|
49 HTTPAuthState auth_state; |
6104 | 50 unsigned char headers[BUFFER_SIZE]; |
6352
3472338a5e13
http: Return EOF at the end of the content even if the connection isn't closed
mstorsjo
parents:
6263
diff
changeset
|
51 int willclose; /**< Set if the server correctly handles Connection: close and will close the connection after feeding us the content. */ |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
52 } HTTPContext; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
53 |
6163 | 54 #define OFFSET(x) offsetof(HTTPContext, x) |
55 static const AVOption options[] = { | |
56 {"chunksize", "use chunked transfer-encoding for posts, -1 disables it, 0 enables it", OFFSET(chunksize), FF_OPT_TYPE_INT64, 0, -1, 0 }, /* Default to 0, for chunked POSTs */ | |
57 {NULL} | |
58 }; | |
59 static const AVClass httpcontext_class = { | |
60 "HTTP", av_default_item_name, options, LIBAVUTIL_VERSION_INT | |
61 }; | |
62 | |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
63 static int http_connect(URLContext *h, const char *path, const char *hoststr, |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
64 const char *auth, int *new_location); |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
65 |
6104 | 66 void ff_http_set_headers(URLContext *h, const char *headers) |
67 { | |
68 HTTPContext *s = h->priv_data; | |
69 int len = strlen(headers); | |
70 | |
71 if (len && strcmp("\r\n", headers + len - 2)) | |
72 av_log(NULL, AV_LOG_ERROR, "No trailing CRLF found in HTTP header.\n"); | |
73 | |
74 av_strlcpy(s->headers, headers, sizeof(s->headers)); | |
75 } | |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
76 |
6108
117b1826ce8e
Add support for disabling chunked transfer encoding for the http protocol
mstorsjo
parents:
6107
diff
changeset
|
77 void ff_http_set_chunked_transfer_encoding(URLContext *h, int is_chunked) |
117b1826ce8e
Add support for disabling chunked transfer encoding for the http protocol
mstorsjo
parents:
6107
diff
changeset
|
78 { |
6153
2e07dcbab954
HTTP: Get rid of the is_chunked variable, use the chunksize variable instead
mstorsjo
parents:
6152
diff
changeset
|
79 ((HTTPContext*)h->priv_data)->chunksize = is_chunked ? 0 : -1; |
6108
117b1826ce8e
Add support for disabling chunked transfer encoding for the http protocol
mstorsjo
parents:
6107
diff
changeset
|
80 } |
117b1826ce8e
Add support for disabling chunked transfer encoding for the http protocol
mstorsjo
parents:
6107
diff
changeset
|
81 |
6156
85710c0ef275
HTTP: Add a method for initializing the authentication state from another connection
mstorsjo
parents:
6155
diff
changeset
|
82 void ff_http_init_auth_state(URLContext *dest, const URLContext *src) |
85710c0ef275
HTTP: Add a method for initializing the authentication state from another connection
mstorsjo
parents:
6155
diff
changeset
|
83 { |
85710c0ef275
HTTP: Add a method for initializing the authentication state from another connection
mstorsjo
parents:
6155
diff
changeset
|
84 memcpy(&((HTTPContext*)dest->priv_data)->auth_state, |
85710c0ef275
HTTP: Add a method for initializing the authentication state from another connection
mstorsjo
parents:
6155
diff
changeset
|
85 &((HTTPContext*)src->priv_data)->auth_state, sizeof(HTTPAuthState)); |
85710c0ef275
HTTP: Add a method for initializing the authentication state from another connection
mstorsjo
parents:
6155
diff
changeset
|
86 } |
85710c0ef275
HTTP: Add a method for initializing the authentication state from another connection
mstorsjo
parents:
6155
diff
changeset
|
87 |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
88 /* return non zero if error */ |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
89 static int http_open_cnx(URLContext *h) |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
90 { |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
91 const char *path, *proxy_path; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
92 char hostname[1024], hoststr[1024]; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
93 char auth[1024]; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
94 char path1[1024]; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
95 char buf[1024]; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
96 int port, use_proxy, err, location_changed = 0, redirects = 0; |
5879
61062082488b
Split out http authentication handling into a separate file
mstorsjo
parents:
5837
diff
changeset
|
97 HTTPAuthType cur_auth_type; |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
98 HTTPContext *s = h->priv_data; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
99 URLContext *hd = NULL; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
100 |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
101 proxy_path = getenv("http_proxy"); |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
102 use_proxy = (proxy_path != NULL) && !getenv("no_proxy") && |
2193
5ce5fad0dfac
replace the uses of old string functions that Reimar missed
mru
parents:
2189
diff
changeset
|
103 av_strstart(proxy_path, "http://", NULL); |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
104 |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
105 /* fill the dest addr */ |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
106 redo: |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
107 /* needed in any case to build the host string */ |
6182 | 108 av_url_split(NULL, 0, auth, sizeof(auth), hostname, sizeof(hostname), &port, |
5776 | 109 path1, sizeof(path1), s->location); |
5756
7c7fe75728dd
Use ff_url_join for assembling URLs, instead of snprintf
mstorsjo
parents:
5544
diff
changeset
|
110 ff_url_join(hoststr, sizeof(hoststr), NULL, NULL, hostname, port, NULL); |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
111 |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
112 if (use_proxy) { |
6182 | 113 av_url_split(NULL, 0, auth, sizeof(auth), hostname, sizeof(hostname), &port, |
5776 | 114 NULL, 0, proxy_path); |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
115 path = s->location; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
116 } else { |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
117 if (path1[0] == '\0') |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
118 path = "/"; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
119 else |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
120 path = path1; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
121 } |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
122 if (port < 0) |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
123 port = 80; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
124 |
5756
7c7fe75728dd
Use ff_url_join for assembling URLs, instead of snprintf
mstorsjo
parents:
5544
diff
changeset
|
125 ff_url_join(buf, sizeof(buf), "tcp", NULL, hostname, port, NULL); |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
126 err = url_open(&hd, buf, URL_RDWR); |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
127 if (err < 0) |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
128 goto fail; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
129 |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
130 s->hd = hd; |
5879
61062082488b
Split out http authentication handling into a separate file
mstorsjo
parents:
5837
diff
changeset
|
131 cur_auth_type = s->auth_state.auth_type; |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
132 if (http_connect(h, path, hoststr, auth, &location_changed) < 0) |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
133 goto fail; |
5879
61062082488b
Split out http authentication handling into a separate file
mstorsjo
parents:
5837
diff
changeset
|
134 if (s->http_code == 401) { |
61062082488b
Split out http authentication handling into a separate file
mstorsjo
parents:
5837
diff
changeset
|
135 if (cur_auth_type == HTTP_AUTH_NONE && s->auth_state.auth_type != HTTP_AUTH_NONE) { |
61062082488b
Split out http authentication handling into a separate file
mstorsjo
parents:
5837
diff
changeset
|
136 url_close(hd); |
61062082488b
Split out http authentication handling into a separate file
mstorsjo
parents:
5837
diff
changeset
|
137 goto redo; |
61062082488b
Split out http authentication handling into a separate file
mstorsjo
parents:
5837
diff
changeset
|
138 } else |
61062082488b
Split out http authentication handling into a separate file
mstorsjo
parents:
5837
diff
changeset
|
139 goto fail; |
61062082488b
Split out http authentication handling into a separate file
mstorsjo
parents:
5837
diff
changeset
|
140 } |
1852
467a411b5d26
make HTTP MOVED messages also work in ffmpeg (302 is essentially the same as 303).
gpoirier
parents:
1822
diff
changeset
|
141 if ((s->http_code == 302 || s->http_code == 303) && location_changed == 1) { |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
142 /* url moved, get next */ |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
143 url_close(hd); |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
144 if (redirects++ >= MAX_REDIRECTS) |
2274
b21c2af60bc9
Replace all occurrences of AVERROR_IO with AVERROR(EIO).
takis
parents:
2193
diff
changeset
|
145 return AVERROR(EIO); |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
146 location_changed = 0; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
147 goto redo; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
148 } |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
149 return 0; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
150 fail: |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
151 if (hd) |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
152 url_close(hd); |
6107 | 153 s->hd = NULL; |
2274
b21c2af60bc9
Replace all occurrences of AVERROR_IO with AVERROR(EIO).
takis
parents:
2193
diff
changeset
|
154 return AVERROR(EIO); |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
155 } |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
156 |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
157 static int http_open(URLContext *h, const char *uri, int flags) |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
158 { |
6162
4c0017a87855
Allocate the HTTPContext through URLProtocol.priv_data_size
mstorsjo
parents:
6156
diff
changeset
|
159 HTTPContext *s = h->priv_data; |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
160 |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
161 h->is_streamed = 1; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
162 |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
163 s->filesize = -1; |
6390
27242bd0812c
Move the definition of the maximum url size for static buffers to internal.h
mstorsjo
parents:
6352
diff
changeset
|
164 av_strlcpy(s->location, uri, sizeof(s->location)); |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
165 |
6164
72ea866c62fd
Make the http protocol open the connection immediately in http_open again
mstorsjo
parents:
6163
diff
changeset
|
166 return http_open_cnx(h); |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
167 } |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
168 static int http_getc(HTTPContext *s) |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
169 { |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
170 int len; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
171 if (s->buf_ptr >= s->buf_end) { |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
172 len = url_read(s->hd, s->buffer, BUFFER_SIZE); |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
173 if (len < 0) { |
2274
b21c2af60bc9
Replace all occurrences of AVERROR_IO with AVERROR(EIO).
takis
parents:
2193
diff
changeset
|
174 return AVERROR(EIO); |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
175 } else if (len == 0) { |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
176 return -1; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
177 } else { |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
178 s->buf_ptr = s->buffer; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
179 s->buf_end = s->buffer + len; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
180 } |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
181 } |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
182 return *s->buf_ptr++; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
183 } |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
184 |
5007
1d5f8836c8a8
Introduce http_get_line and modify http_connect to use http_get_line.
jai_menon
parents:
4640
diff
changeset
|
185 static int http_get_line(HTTPContext *s, char *line, int line_size) |
1d5f8836c8a8
Introduce http_get_line and modify http_connect to use http_get_line.
jai_menon
parents:
4640
diff
changeset
|
186 { |
1d5f8836c8a8
Introduce http_get_line and modify http_connect to use http_get_line.
jai_menon
parents:
4640
diff
changeset
|
187 int ch; |
1d5f8836c8a8
Introduce http_get_line and modify http_connect to use http_get_line.
jai_menon
parents:
4640
diff
changeset
|
188 char *q; |
1d5f8836c8a8
Introduce http_get_line and modify http_connect to use http_get_line.
jai_menon
parents:
4640
diff
changeset
|
189 |
1d5f8836c8a8
Introduce http_get_line and modify http_connect to use http_get_line.
jai_menon
parents:
4640
diff
changeset
|
190 q = line; |
1d5f8836c8a8
Introduce http_get_line and modify http_connect to use http_get_line.
jai_menon
parents:
4640
diff
changeset
|
191 for(;;) { |
1d5f8836c8a8
Introduce http_get_line and modify http_connect to use http_get_line.
jai_menon
parents:
4640
diff
changeset
|
192 ch = http_getc(s); |
1d5f8836c8a8
Introduce http_get_line and modify http_connect to use http_get_line.
jai_menon
parents:
4640
diff
changeset
|
193 if (ch < 0) |
1d5f8836c8a8
Introduce http_get_line and modify http_connect to use http_get_line.
jai_menon
parents:
4640
diff
changeset
|
194 return AVERROR(EIO); |
1d5f8836c8a8
Introduce http_get_line and modify http_connect to use http_get_line.
jai_menon
parents:
4640
diff
changeset
|
195 if (ch == '\n') { |
1d5f8836c8a8
Introduce http_get_line and modify http_connect to use http_get_line.
jai_menon
parents:
4640
diff
changeset
|
196 /* process line */ |
1d5f8836c8a8
Introduce http_get_line and modify http_connect to use http_get_line.
jai_menon
parents:
4640
diff
changeset
|
197 if (q > line && q[-1] == '\r') |
1d5f8836c8a8
Introduce http_get_line and modify http_connect to use http_get_line.
jai_menon
parents:
4640
diff
changeset
|
198 q--; |
1d5f8836c8a8
Introduce http_get_line and modify http_connect to use http_get_line.
jai_menon
parents:
4640
diff
changeset
|
199 *q = '\0'; |
1d5f8836c8a8
Introduce http_get_line and modify http_connect to use http_get_line.
jai_menon
parents:
4640
diff
changeset
|
200 |
1d5f8836c8a8
Introduce http_get_line and modify http_connect to use http_get_line.
jai_menon
parents:
4640
diff
changeset
|
201 return 0; |
1d5f8836c8a8
Introduce http_get_line and modify http_connect to use http_get_line.
jai_menon
parents:
4640
diff
changeset
|
202 } else { |
1d5f8836c8a8
Introduce http_get_line and modify http_connect to use http_get_line.
jai_menon
parents:
4640
diff
changeset
|
203 if ((q - line) < line_size - 1) |
1d5f8836c8a8
Introduce http_get_line and modify http_connect to use http_get_line.
jai_menon
parents:
4640
diff
changeset
|
204 *q++ = ch; |
1d5f8836c8a8
Introduce http_get_line and modify http_connect to use http_get_line.
jai_menon
parents:
4640
diff
changeset
|
205 } |
1d5f8836c8a8
Introduce http_get_line and modify http_connect to use http_get_line.
jai_menon
parents:
4640
diff
changeset
|
206 } |
1d5f8836c8a8
Introduce http_get_line and modify http_connect to use http_get_line.
jai_menon
parents:
4640
diff
changeset
|
207 } |
1d5f8836c8a8
Introduce http_get_line and modify http_connect to use http_get_line.
jai_menon
parents:
4640
diff
changeset
|
208 |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
209 static int process_line(URLContext *h, char *line, int line_count, |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
210 int *new_location) |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
211 { |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
212 HTTPContext *s = h->priv_data; |
6263 | 213 char *tag, *p, *end; |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
214 |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
215 /* end of header */ |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
216 if (line[0] == '\0') |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
217 return 0; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
218 |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
219 p = line; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
220 if (line_count == 0) { |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
221 while (!isspace(*p) && *p != '\0') |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
222 p++; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
223 while (isspace(*p)) |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
224 p++; |
6263 | 225 s->http_code = strtol(p, &end, 10); |
5009 | 226 |
227 dprintf(NULL, "http_code=%d\n", s->http_code); | |
228 | |
5879
61062082488b
Split out http authentication handling into a separate file
mstorsjo
parents:
5837
diff
changeset
|
229 /* error codes are 4xx and 5xx, but regard 401 as a success, so we |
61062082488b
Split out http authentication handling into a separate file
mstorsjo
parents:
5837
diff
changeset
|
230 * don't abort until all headers have been parsed. */ |
6263 | 231 if (s->http_code >= 400 && s->http_code < 600 && s->http_code != 401) { |
232 end += strspn(end, SPACE_CHARS); | |
233 av_log(NULL, AV_LOG_WARNING, "HTTP error %d %s\n", | |
234 s->http_code, end); | |
1881 | 235 return -1; |
6263 | 236 } |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
237 } else { |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
238 while (*p != '\0' && *p != ':') |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
239 p++; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
240 if (*p != ':') |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
241 return 1; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
242 |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
243 *p = '\0'; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
244 tag = line; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
245 p++; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
246 while (isspace(*p)) |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
247 p++; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
248 if (!strcmp(tag, "Location")) { |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
249 strcpy(s->location, p); |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
250 *new_location = 1; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
251 } else if (!strcmp (tag, "Content-Length") && s->filesize == -1) { |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
252 s->filesize = atoll(p); |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
253 } else if (!strcmp (tag, "Content-Range")) { |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
254 /* "bytes $from-$to/$document_size" */ |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
255 const char *slash; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
256 if (!strncmp (p, "bytes ", 6)) { |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
257 p += 6; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
258 s->off = atoll(p); |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
259 if ((slash = strchr(p, '/')) && strlen(slash) > 0) |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
260 s->filesize = atoll(slash+1); |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
261 } |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
262 h->is_streamed = 0; /* we _can_ in fact seek */ |
5059
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
263 } else if (!strcmp (tag, "Transfer-Encoding") && !strncasecmp(p, "chunked", 7)) { |
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
264 s->filesize = -1; |
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
265 s->chunksize = 0; |
5879
61062082488b
Split out http authentication handling into a separate file
mstorsjo
parents:
5837
diff
changeset
|
266 } else if (!strcmp (tag, "WWW-Authenticate")) { |
61062082488b
Split out http authentication handling into a separate file
mstorsjo
parents:
5837
diff
changeset
|
267 ff_http_auth_handle_header(&s->auth_state, tag, p); |
61062082488b
Split out http authentication handling into a separate file
mstorsjo
parents:
5837
diff
changeset
|
268 } else if (!strcmp (tag, "Authentication-Info")) { |
61062082488b
Split out http authentication handling into a separate file
mstorsjo
parents:
5837
diff
changeset
|
269 ff_http_auth_handle_header(&s->auth_state, tag, p); |
6352
3472338a5e13
http: Return EOF at the end of the content even if the connection isn't closed
mstorsjo
parents:
6263
diff
changeset
|
270 } else if (!strcmp (tag, "Connection")) { |
3472338a5e13
http: Return EOF at the end of the content even if the connection isn't closed
mstorsjo
parents:
6263
diff
changeset
|
271 if (!strcmp(p, "close")) |
3472338a5e13
http: Return EOF at the end of the content even if the connection isn't closed
mstorsjo
parents:
6263
diff
changeset
|
272 s->willclose = 1; |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
273 } |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
274 } |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
275 return 1; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
276 } |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
277 |
6104 | 278 static inline int has_header(const char *str, const char *header) |
279 { | |
280 /* header + 2 to skip over CRLF prefix. (make sure you have one!) */ | |
281 return av_stristart(str, header + 2, NULL) || av_stristr(str, header); | |
282 } | |
283 | |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
284 static int http_connect(URLContext *h, const char *path, const char *hoststr, |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
285 const char *auth, int *new_location) |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
286 { |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
287 HTTPContext *s = h->priv_data; |
5007
1d5f8836c8a8
Introduce http_get_line and modify http_connect to use http_get_line.
jai_menon
parents:
4640
diff
changeset
|
288 int post, err; |
1d5f8836c8a8
Introduce http_get_line and modify http_connect to use http_get_line.
jai_menon
parents:
4640
diff
changeset
|
289 char line[1024]; |
6106 | 290 char headers[1024] = ""; |
5879
61062082488b
Split out http authentication handling into a separate file
mstorsjo
parents:
5837
diff
changeset
|
291 char *authstr = NULL; |
3973
549a09cf23fe
Remove offset_t typedef and use int64_t directly instead.
diego
parents:
3286
diff
changeset
|
292 int64_t off = s->off; |
6104 | 293 int len = 0; |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
294 |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
295 |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
296 /* send http header */ |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
297 post = h->flags & URL_WRONLY; |
5879
61062082488b
Split out http authentication handling into a separate file
mstorsjo
parents:
5837
diff
changeset
|
298 authstr = ff_http_auth_create_response(&s->auth_state, auth, path, |
61062082488b
Split out http authentication handling into a separate file
mstorsjo
parents:
5837
diff
changeset
|
299 post ? "POST" : "GET"); |
6104 | 300 |
301 /* set default headers if needed */ | |
302 if (!has_header(s->headers, "\r\nUser-Agent: ")) | |
303 len += av_strlcatf(headers + len, sizeof(headers) - len, | |
304 "User-Agent: %s\r\n", LIBAVFORMAT_IDENT); | |
305 if (!has_header(s->headers, "\r\nAccept: ")) | |
306 len += av_strlcpy(headers + len, "Accept: */*\r\n", | |
307 sizeof(headers) - len); | |
308 if (!has_header(s->headers, "\r\nRange: ")) | |
309 len += av_strlcatf(headers + len, sizeof(headers) - len, | |
6106 | 310 "Range: bytes=%"PRId64"-\r\n", s->off); |
6104 | 311 if (!has_header(s->headers, "\r\nConnection: ")) |
312 len += av_strlcpy(headers + len, "Connection: close\r\n", | |
313 sizeof(headers)-len); | |
314 if (!has_header(s->headers, "\r\nHost: ")) | |
315 len += av_strlcatf(headers + len, sizeof(headers) - len, | |
316 "Host: %s\r\n", hoststr); | |
317 | |
318 /* now add in custom headers */ | |
319 av_strlcpy(headers+len, s->headers, sizeof(headers)-len); | |
320 | |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
321 snprintf(s->buffer, sizeof(s->buffer), |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
322 "%s %s HTTP/1.1\r\n" |
5879
61062082488b
Split out http authentication handling into a separate file
mstorsjo
parents:
5837
diff
changeset
|
323 "%s" |
6104 | 324 "%s" |
5526
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H¸«£rdin
rbultje
parents:
5059
diff
changeset
|
325 "%s" |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
326 "\r\n", |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
327 post ? "POST" : "GET", |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
328 path, |
6153
2e07dcbab954
HTTP: Get rid of the is_chunked variable, use the chunksize variable instead
mstorsjo
parents:
6152
diff
changeset
|
329 post && s->chunksize >= 0 ? "Transfer-Encoding: chunked\r\n" : "", |
6104 | 330 headers, |
331 authstr ? authstr : ""); | |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
332 |
5879
61062082488b
Split out http authentication handling into a separate file
mstorsjo
parents:
5837
diff
changeset
|
333 av_freep(&authstr); |
6150
6b770ef6cbea
Use url_write(), not http_write(), for sending the HTTP headers. This prevents
rbultje
parents:
6117
diff
changeset
|
334 if (url_write(s->hd, s->buffer, strlen(s->buffer)) < 0) |
2274
b21c2af60bc9
Replace all occurrences of AVERROR_IO with AVERROR(EIO).
takis
parents:
2193
diff
changeset
|
335 return AVERROR(EIO); |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
336 |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
337 /* init input buffer */ |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
338 s->buf_ptr = s->buffer; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
339 s->buf_end = s->buffer; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
340 s->line_count = 0; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
341 s->off = 0; |
1909
663139d56669
Properly initialize filesize during input buffer initialization.
diego
parents:
1881
diff
changeset
|
342 s->filesize = -1; |
6352
3472338a5e13
http: Return EOF at the end of the content even if the connection isn't closed
mstorsjo
parents:
6263
diff
changeset
|
343 s->willclose = 0; |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
344 if (post) { |
6080 | 345 /* Pretend that it did work. We didn't read any header yet, since |
346 * we've still to send the POST data, but the code calling this | |
347 * function will check http_code after we return. */ | |
348 s->http_code = 200; | |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
349 return 0; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
350 } |
6153
2e07dcbab954
HTTP: Get rid of the is_chunked variable, use the chunksize variable instead
mstorsjo
parents:
6152
diff
changeset
|
351 s->chunksize = -1; |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
352 |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
353 /* wait for header */ |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
354 for(;;) { |
5007
1d5f8836c8a8
Introduce http_get_line and modify http_connect to use http_get_line.
jai_menon
parents:
4640
diff
changeset
|
355 if (http_get_line(s, line, sizeof(line)) < 0) |
2274
b21c2af60bc9
Replace all occurrences of AVERROR_IO with AVERROR(EIO).
takis
parents:
2193
diff
changeset
|
356 return AVERROR(EIO); |
5009 | 357 |
358 dprintf(NULL, "header='%s'\n", line); | |
359 | |
5008 | 360 err = process_line(h, line, s->line_count, new_location); |
361 if (err < 0) | |
362 return err; | |
363 if (err == 0) | |
364 break; | |
365 s->line_count++; | |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
366 } |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
367 |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
368 return (off == s->off) ? 0 : -1; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
369 } |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
370 |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
371 |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
372 static int http_read(URLContext *h, uint8_t *buf, int size) |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
373 { |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
374 HTTPContext *s = h->priv_data; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
375 int len; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
376 |
5059
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
377 if (s->chunksize >= 0) { |
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
378 if (!s->chunksize) { |
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
379 char line[32]; |
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
380 |
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
381 for(;;) { |
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
382 do { |
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
383 if (http_get_line(s, line, sizeof(line)) < 0) |
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
384 return AVERROR(EIO); |
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
385 } while (!*line); /* skip CR LF from last chunk */ |
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
386 |
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
387 s->chunksize = strtoll(line, NULL, 16); |
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
388 |
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
389 dprintf(NULL, "Chunked encoding data size: %"PRId64"'\n", s->chunksize); |
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
390 |
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
391 if (!s->chunksize) |
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
392 return 0; |
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
393 break; |
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
394 } |
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
395 } |
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
396 size = FFMIN(size, s->chunksize); |
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
397 } |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
398 /* read bytes from input buffer first */ |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
399 len = s->buf_end - s->buf_ptr; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
400 if (len > 0) { |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
401 if (len > size) |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
402 len = size; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
403 memcpy(buf, s->buf_ptr, len); |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
404 s->buf_ptr += len; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
405 } else { |
6352
3472338a5e13
http: Return EOF at the end of the content even if the connection isn't closed
mstorsjo
parents:
6263
diff
changeset
|
406 if (!s->willclose && s->filesize >= 0 && s->off >= s->filesize) |
3472338a5e13
http: Return EOF at the end of the content even if the connection isn't closed
mstorsjo
parents:
6263
diff
changeset
|
407 return AVERROR_EOF; |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
408 len = url_read(s->hd, buf, size); |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
409 } |
5059
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
410 if (len > 0) { |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
411 s->off += len; |
5059
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
412 if (s->chunksize > 0) |
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
413 s->chunksize -= len; |
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
414 } |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
415 return len; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
416 } |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
417 |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
418 /* used only when posting data */ |
6068 | 419 static int http_write(URLContext *h, const uint8_t *buf, int size) |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
420 { |
6108
117b1826ce8e
Add support for disabling chunked transfer encoding for the http protocol
mstorsjo
parents:
6107
diff
changeset
|
421 char temp[11] = ""; /* 32-bit hex + CRLF + nul */ |
5526
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H¸«£rdin
rbultje
parents:
5059
diff
changeset
|
422 int ret; |
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H¸«£rdin
rbultje
parents:
5059
diff
changeset
|
423 char crlf[] = "\r\n"; |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
424 HTTPContext *s = h->priv_data; |
5526
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H¸«£rdin
rbultje
parents:
5059
diff
changeset
|
425 |
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H¸«£rdin
rbultje
parents:
5059
diff
changeset
|
426 if (s->chunksize == -1) { |
6152 | 427 /* non-chunked data is sent without any special encoding */ |
5527 | 428 return url_write(s->hd, buf, size); |
5526
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H¸«£rdin
rbultje
parents:
5059
diff
changeset
|
429 } |
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H¸«£rdin
rbultje
parents:
5059
diff
changeset
|
430 |
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H¸«£rdin
rbultje
parents:
5059
diff
changeset
|
431 /* silently ignore zero-size data since chunk encoding that would |
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H¸«£rdin
rbultje
parents:
5059
diff
changeset
|
432 * signal EOF */ |
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H¸«£rdin
rbultje
parents:
5059
diff
changeset
|
433 if (size > 0) { |
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H¸«£rdin
rbultje
parents:
5059
diff
changeset
|
434 /* upload data using chunked encoding */ |
6155 | 435 snprintf(temp, sizeof(temp), "%x\r\n", size); |
5526
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H¸«£rdin
rbultje
parents:
5059
diff
changeset
|
436 |
6154
78f96a0ef08c
HTTP: Compact the code for writing chunked post data
mstorsjo
parents:
6153
diff
changeset
|
437 if ((ret = url_write(s->hd, temp, strlen(temp))) < 0 || |
78f96a0ef08c
HTTP: Compact the code for writing chunked post data
mstorsjo
parents:
6153
diff
changeset
|
438 (ret = url_write(s->hd, buf, size)) < 0 || |
78f96a0ef08c
HTTP: Compact the code for writing chunked post data
mstorsjo
parents:
6153
diff
changeset
|
439 (ret = url_write(s->hd, crlf, sizeof(crlf) - 1)) < 0) |
5526
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H¸«£rdin
rbultje
parents:
5059
diff
changeset
|
440 return ret; |
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H¸«£rdin
rbultje
parents:
5059
diff
changeset
|
441 } |
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H¸«£rdin
rbultje
parents:
5059
diff
changeset
|
442 return size; |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
443 } |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
444 |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
445 static int http_close(URLContext *h) |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
446 { |
5526
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H¸«£rdin
rbultje
parents:
5059
diff
changeset
|
447 int ret = 0; |
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H¸«£rdin
rbultje
parents:
5059
diff
changeset
|
448 char footer[] = "0\r\n\r\n"; |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
449 HTTPContext *s = h->priv_data; |
5526
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H¸«£rdin
rbultje
parents:
5059
diff
changeset
|
450 |
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H¸«£rdin
rbultje
parents:
5059
diff
changeset
|
451 /* signal end of chunked encoding if used */ |
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H¸«£rdin
rbultje
parents:
5059
diff
changeset
|
452 if ((h->flags & URL_WRONLY) && s->chunksize != -1) { |
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H¸«£rdin
rbultje
parents:
5059
diff
changeset
|
453 ret = url_write(s->hd, footer, sizeof(footer) - 1); |
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H¸«£rdin
rbultje
parents:
5059
diff
changeset
|
454 ret = ret > 0 ? 0 : ret; |
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H¸«£rdin
rbultje
parents:
5059
diff
changeset
|
455 } |
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H¸«£rdin
rbultje
parents:
5059
diff
changeset
|
456 |
6107 | 457 if (s->hd) |
458 url_close(s->hd); | |
5526
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H¸«£rdin
rbultje
parents:
5059
diff
changeset
|
459 return ret; |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
460 } |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
461 |
3973
549a09cf23fe
Remove offset_t typedef and use int64_t directly instead.
diego
parents:
3286
diff
changeset
|
462 static int64_t http_seek(URLContext *h, int64_t off, int whence) |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
463 { |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
464 HTTPContext *s = h->priv_data; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
465 URLContext *old_hd = s->hd; |
3973
549a09cf23fe
Remove offset_t typedef and use int64_t directly instead.
diego
parents:
3286
diff
changeset
|
466 int64_t old_off = s->off; |
5544
fc48f8bfbf2e
restore old buffer content when seek failed in http protocol, fix issue #1631
bcoudurier
parents:
5527
diff
changeset
|
467 uint8_t old_buf[BUFFER_SIZE]; |
fc48f8bfbf2e
restore old buffer content when seek failed in http protocol, fix issue #1631
bcoudurier
parents:
5527
diff
changeset
|
468 int old_buf_size; |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
469 |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
470 if (whence == AVSEEK_SIZE) |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
471 return s->filesize; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
472 else if ((s->filesize == -1 && whence == SEEK_END) || h->is_streamed) |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
473 return -1; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
474 |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
475 /* we save the old context in case the seek fails */ |
5544
fc48f8bfbf2e
restore old buffer content when seek failed in http protocol, fix issue #1631
bcoudurier
parents:
5527
diff
changeset
|
476 old_buf_size = s->buf_end - s->buf_ptr; |
fc48f8bfbf2e
restore old buffer content when seek failed in http protocol, fix issue #1631
bcoudurier
parents:
5527
diff
changeset
|
477 memcpy(old_buf, s->buf_ptr, old_buf_size); |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
478 s->hd = NULL; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
479 if (whence == SEEK_CUR) |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
480 off += s->off; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
481 else if (whence == SEEK_END) |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
482 off += s->filesize; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
483 s->off = off; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
484 |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
485 /* if it fails, continue on old connection */ |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
486 if (http_open_cnx(h) < 0) { |
5544
fc48f8bfbf2e
restore old buffer content when seek failed in http protocol, fix issue #1631
bcoudurier
parents:
5527
diff
changeset
|
487 memcpy(s->buffer, old_buf, old_buf_size); |
fc48f8bfbf2e
restore old buffer content when seek failed in http protocol, fix issue #1631
bcoudurier
parents:
5527
diff
changeset
|
488 s->buf_ptr = s->buffer; |
fc48f8bfbf2e
restore old buffer content when seek failed in http protocol, fix issue #1631
bcoudurier
parents:
5527
diff
changeset
|
489 s->buf_end = s->buffer + old_buf_size; |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
490 s->hd = old_hd; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
491 s->off = old_off; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
492 return -1; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
493 } |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
494 url_close(old_hd); |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
495 return off; |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
496 } |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
497 |
4640
b34d9614b887
Add url_get_file_handle(), which is used to get the file descriptor
rbultje
parents:
4630
diff
changeset
|
498 static int |
b34d9614b887
Add url_get_file_handle(), which is used to get the file descriptor
rbultje
parents:
4630
diff
changeset
|
499 http_get_file_handle(URLContext *h) |
b34d9614b887
Add url_get_file_handle(), which is used to get the file descriptor
rbultje
parents:
4630
diff
changeset
|
500 { |
b34d9614b887
Add url_get_file_handle(), which is used to get the file descriptor
rbultje
parents:
4630
diff
changeset
|
501 HTTPContext *s = h->priv_data; |
b34d9614b887
Add url_get_file_handle(), which is used to get the file descriptor
rbultje
parents:
4630
diff
changeset
|
502 return url_get_file_handle(s->hd); |
b34d9614b887
Add url_get_file_handle(), which is used to get the file descriptor
rbultje
parents:
4630
diff
changeset
|
503 } |
b34d9614b887
Add url_get_file_handle(), which is used to get the file descriptor
rbultje
parents:
4630
diff
changeset
|
504 |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
505 URLProtocol http_protocol = { |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
506 "http", |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
507 http_open, |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
508 http_read, |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
509 http_write, |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
510 http_seek, |
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
511 http_close, |
4640
b34d9614b887
Add url_get_file_handle(), which is used to get the file descriptor
rbultje
parents:
4630
diff
changeset
|
512 .url_get_file_handle = http_get_file_handle, |
6162
4c0017a87855
Allocate the HTTPContext through URLProtocol.priv_data_size
mstorsjo
parents:
6156
diff
changeset
|
513 .priv_data_size = sizeof(HTTPContext), |
6163 | 514 .priv_data_class = &httpcontext_class, |
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
515 }; |