Mercurial > libavformat.hg
annotate http.c @ 6260:5c17c20dd67a libavformat
In ogg muxer, use dyn buffer to compute crc of the page, fix muxing with pipe
when page buffer is bigger than default buffer size. Max page is 65k.
| author | bcoudurier |
|---|---|
| date | Wed, 14 Jul 2010 23:21:18 +0000 |
| parents | 4fc5e0e4e1cd |
| children | 89adb1f9ff50 |
| 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 URL_SIZE 4096 |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
39 #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
|
40 |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
41 typedef struct { |
| 6163 | 42 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
|
43 URLContext *hd; |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
44 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
|
45 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
|
46 int http_code; |
|
5059
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
47 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
|
48 int64_t off, filesize; |
|
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
49 char location[URL_SIZE]; |
|
5879
61062082488b
Split out http authentication handling into a separate file
mstorsjo
parents:
5837
diff
changeset
|
50 HTTPAuthState auth_state; |
| 6104 | 51 unsigned char headers[BUFFER_SIZE]; |
|
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; |
|
2193
5ce5fad0dfac
replace the uses of old string functions that Reimar missed
mru
parents:
2189
diff
changeset
|
164 av_strlcpy(s->location, uri, URL_SIZE); |
|
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; |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
213 char *tag, *p; |
|
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++; |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
225 s->http_code = strtol(p, NULL, 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. */ |
|
61062082488b
Split out http authentication handling into a separate file
mstorsjo
parents:
5837
diff
changeset
|
231 if (s->http_code >= 400 && s->http_code < 600 && s->http_code != 401) |
| 1881 | 232 return -1; |
|
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
233 } else { |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
234 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
|
235 p++; |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
236 if (*p != ':') |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
237 return 1; |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
238 |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
239 *p = '\0'; |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
240 tag = line; |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
241 p++; |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
242 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
|
243 p++; |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
244 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
|
245 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
|
246 *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
|
247 } 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
|
248 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
|
249 } 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
|
250 /* "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
|
251 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
|
252 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
|
253 p += 6; |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
254 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
|
255 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
|
256 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
|
257 } |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
258 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
|
259 } 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
|
260 s->filesize = -1; |
|
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
261 s->chunksize = 0; |
|
5879
61062082488b
Split out http authentication handling into a separate file
mstorsjo
parents:
5837
diff
changeset
|
262 } else if (!strcmp (tag, "WWW-Authenticate")) { |
|
61062082488b
Split out http authentication handling into a separate file
mstorsjo
parents:
5837
diff
changeset
|
263 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
|
264 } else if (!strcmp (tag, "Authentication-Info")) { |
|
61062082488b
Split out http authentication handling into a separate file
mstorsjo
parents:
5837
diff
changeset
|
265 ff_http_auth_handle_header(&s->auth_state, tag, p); |
|
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
266 } |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
267 } |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
268 return 1; |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
269 } |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
270 |
| 6104 | 271 static inline int has_header(const char *str, const char *header) |
| 272 { | |
| 273 /* header + 2 to skip over CRLF prefix. (make sure you have one!) */ | |
| 274 return av_stristart(str, header + 2, NULL) || av_stristr(str, header); | |
| 275 } | |
| 276 | |
|
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
277 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
|
278 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
|
279 { |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
280 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
|
281 int post, err; |
|
1d5f8836c8a8
Introduce http_get_line and modify http_connect to use http_get_line.
jai_menon
parents:
4640
diff
changeset
|
282 char line[1024]; |
| 6106 | 283 char headers[1024] = ""; |
|
5879
61062082488b
Split out http authentication handling into a separate file
mstorsjo
parents:
5837
diff
changeset
|
284 char *authstr = NULL; |
|
3973
549a09cf23fe
Remove offset_t typedef and use int64_t directly instead.
diego
parents:
3286
diff
changeset
|
285 int64_t off = s->off; |
| 6104 | 286 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
|
287 |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
288 |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
289 /* 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
|
290 post = h->flags & URL_WRONLY; |
|
5879
61062082488b
Split out http authentication handling into a separate file
mstorsjo
parents:
5837
diff
changeset
|
291 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
|
292 post ? "POST" : "GET"); |
| 6104 | 293 |
| 294 /* set default headers if needed */ | |
| 295 if (!has_header(s->headers, "\r\nUser-Agent: ")) | |
| 296 len += av_strlcatf(headers + len, sizeof(headers) - len, | |
| 297 "User-Agent: %s\r\n", LIBAVFORMAT_IDENT); | |
| 298 if (!has_header(s->headers, "\r\nAccept: ")) | |
| 299 len += av_strlcpy(headers + len, "Accept: */*\r\n", | |
| 300 sizeof(headers) - len); | |
| 301 if (!has_header(s->headers, "\r\nRange: ")) | |
| 302 len += av_strlcatf(headers + len, sizeof(headers) - len, | |
| 6106 | 303 "Range: bytes=%"PRId64"-\r\n", s->off); |
| 6104 | 304 if (!has_header(s->headers, "\r\nConnection: ")) |
| 305 len += av_strlcpy(headers + len, "Connection: close\r\n", | |
| 306 sizeof(headers)-len); | |
| 307 if (!has_header(s->headers, "\r\nHost: ")) | |
| 308 len += av_strlcatf(headers + len, sizeof(headers) - len, | |
| 309 "Host: %s\r\n", hoststr); | |
| 310 | |
| 311 /* now add in custom headers */ | |
| 312 av_strlcpy(headers+len, s->headers, sizeof(headers)-len); | |
| 313 | |
|
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
314 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
|
315 "%s %s HTTP/1.1\r\n" |
|
5879
61062082488b
Split out http authentication handling into a separate file
mstorsjo
parents:
5837
diff
changeset
|
316 "%s" |
| 6104 | 317 "%s" |
|
5526
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H?rdin
rbultje
parents:
5059
diff
changeset
|
318 "%s" |
|
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
319 "\r\n", |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
320 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
|
321 path, |
|
6153
2e07dcbab954
HTTP: Get rid of the is_chunked variable, use the chunksize variable instead
mstorsjo
parents:
6152
diff
changeset
|
322 post && s->chunksize >= 0 ? "Transfer-Encoding: chunked\r\n" : "", |
| 6104 | 323 headers, |
| 324 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
|
325 |
|
5879
61062082488b
Split out http authentication handling into a separate file
mstorsjo
parents:
5837
diff
changeset
|
326 av_freep(&authstr); |
|
6150
6b770ef6cbea
Use url_write(), not http_write(), for sending the HTTP headers. This prevents
rbultje
parents:
6117
diff
changeset
|
327 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
|
328 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
|
329 |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
330 /* 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
|
331 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
|
332 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
|
333 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
|
334 s->off = 0; |
|
1909
663139d56669
Properly initialize filesize during input buffer initialization.
diego
parents:
1881
diff
changeset
|
335 s->filesize = -1; |
|
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
336 if (post) { |
| 6080 | 337 /* Pretend that it did work. We didn't read any header yet, since |
| 338 * we've still to send the POST data, but the code calling this | |
| 339 * function will check http_code after we return. */ | |
| 340 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
|
341 return 0; |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
342 } |
|
6153
2e07dcbab954
HTTP: Get rid of the is_chunked variable, use the chunksize variable instead
mstorsjo
parents:
6152
diff
changeset
|
343 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
|
344 |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
345 /* 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
|
346 for(;;) { |
|
5007
1d5f8836c8a8
Introduce http_get_line and modify http_connect to use http_get_line.
jai_menon
parents:
4640
diff
changeset
|
347 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
|
348 return AVERROR(EIO); |
| 5009 | 349 |
| 350 dprintf(NULL, "header='%s'\n", line); | |
| 351 | |
| 5008 | 352 err = process_line(h, line, s->line_count, new_location); |
| 353 if (err < 0) | |
| 354 return err; | |
| 355 if (err == 0) | |
| 356 break; | |
| 357 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
|
358 } |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
359 |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
360 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
|
361 } |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
362 |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
363 |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
364 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
|
365 { |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
366 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
|
367 int len; |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
368 |
|
5059
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
369 if (s->chunksize >= 0) { |
|
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
370 if (!s->chunksize) { |
|
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
371 char line[32]; |
|
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
372 |
|
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
373 for(;;) { |
|
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
374 do { |
|
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
375 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
|
376 return AVERROR(EIO); |
|
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
377 } 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
|
378 |
|
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
379 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
|
380 |
|
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
381 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
|
382 |
|
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
383 if (!s->chunksize) |
|
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
384 return 0; |
|
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
385 break; |
|
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 } |
|
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
388 size = FFMIN(size, s->chunksize); |
|
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
389 } |
|
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
390 /* 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
|
391 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
|
392 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
|
393 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
|
394 len = size; |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
395 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
|
396 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
|
397 } else { |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
398 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
|
399 } |
|
5059
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
400 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
|
401 s->off += len; |
|
5059
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
402 if (s->chunksize > 0) |
|
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
403 s->chunksize -= len; |
|
a5b8b8cce2dd
Add support for "chunked" data blocks. Patch by Peter Holik (peter holik at).
rbultje
parents:
5009
diff
changeset
|
404 } |
|
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
405 return len; |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
406 } |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
407 |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
408 /* used only when posting data */ |
| 6068 | 409 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
|
410 { |
|
6108
117b1826ce8e
Add support for disabling chunked transfer encoding for the http protocol
mstorsjo
parents:
6107
diff
changeset
|
411 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
|
412 int ret; |
|
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H?rdin
rbultje
parents:
5059
diff
changeset
|
413 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
|
414 HTTPContext *s = h->priv_data; |
|
5526
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H?rdin
rbultje
parents:
5059
diff
changeset
|
415 |
|
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H?rdin
rbultje
parents:
5059
diff
changeset
|
416 if (s->chunksize == -1) { |
| 6152 | 417 /* non-chunked data is sent without any special encoding */ |
| 5527 | 418 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
|
419 } |
|
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H?rdin
rbultje
parents:
5059
diff
changeset
|
420 |
|
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H?rdin
rbultje
parents:
5059
diff
changeset
|
421 /* 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
|
422 * signal EOF */ |
|
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H?rdin
rbultje
parents:
5059
diff
changeset
|
423 if (size > 0) { |
|
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H?rdin
rbultje
parents:
5059
diff
changeset
|
424 /* upload data using chunked encoding */ |
| 6155 | 425 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
|
426 |
|
6154
78f96a0ef08c
HTTP: Compact the code for writing chunked post data
mstorsjo
parents:
6153
diff
changeset
|
427 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
|
428 (ret = url_write(s->hd, buf, size)) < 0 || |
|
78f96a0ef08c
HTTP: Compact the code for writing chunked post data
mstorsjo
parents:
6153
diff
changeset
|
429 (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
|
430 return ret; |
|
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H?rdin
rbultje
parents:
5059
diff
changeset
|
431 } |
|
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H?rdin
rbultje
parents:
5059
diff
changeset
|
432 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
|
433 } |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
434 |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
435 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
|
436 { |
|
5526
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H?rdin
rbultje
parents:
5059
diff
changeset
|
437 int ret = 0; |
|
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H?rdin
rbultje
parents:
5059
diff
changeset
|
438 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
|
439 HTTPContext *s = h->priv_data; |
|
5526
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H?rdin
rbultje
parents:
5059
diff
changeset
|
440 |
|
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H?rdin
rbultje
parents:
5059
diff
changeset
|
441 /* signal end of chunked encoding if used */ |
|
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H?rdin
rbultje
parents:
5059
diff
changeset
|
442 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
|
443 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
|
444 ret = ret > 0 ? 0 : ret; |
|
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H?rdin
rbultje
parents:
5059
diff
changeset
|
445 } |
|
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H?rdin
rbultje
parents:
5059
diff
changeset
|
446 |
| 6107 | 447 if (s->hd) |
| 448 url_close(s->hd); | |
|
5526
f09594ca5f77
Use chunked encoding for HTTP uploads. Patch by Tomas H?rdin
rbultje
parents:
5059
diff
changeset
|
449 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
|
450 } |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
451 |
|
3973
549a09cf23fe
Remove offset_t typedef and use int64_t directly instead.
diego
parents:
3286
diff
changeset
|
452 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
|
453 { |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
454 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
|
455 URLContext *old_hd = s->hd; |
|
3973
549a09cf23fe
Remove offset_t typedef and use int64_t directly instead.
diego
parents:
3286
diff
changeset
|
456 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
|
457 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
|
458 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
|
459 |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
460 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
|
461 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
|
462 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
|
463 return -1; |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
464 |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
465 /* 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
|
466 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
|
467 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
|
468 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
|
469 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
|
470 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
|
471 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
|
472 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
|
473 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
|
474 |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
475 /* 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
|
476 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
|
477 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
|
478 s->buf_ptr = s->buffer; |
|
fc48f8bfbf2e
restore old buffer content when seek failed in http protocol, fix issue #1631
bcoudurier
parents:
5527
diff
changeset
|
479 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
|
480 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
|
481 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
|
482 return -1; |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
483 } |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
484 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
|
485 return off; |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
486 } |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
487 |
|
4640
b34d9614b887
Add url_get_file_handle(), which is used to get the file descriptor
rbultje
parents:
4630
diff
changeset
|
488 static int |
|
b34d9614b887
Add url_get_file_handle(), which is used to get the file descriptor
rbultje
parents:
4630
diff
changeset
|
489 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
|
490 { |
|
b34d9614b887
Add url_get_file_handle(), which is used to get the file descriptor
rbultje
parents:
4630
diff
changeset
|
491 HTTPContext *s = h->priv_data; |
|
b34d9614b887
Add url_get_file_handle(), which is used to get the file descriptor
rbultje
parents:
4630
diff
changeset
|
492 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
|
493 } |
|
b34d9614b887
Add url_get_file_handle(), which is used to get the file descriptor
rbultje
parents:
4630
diff
changeset
|
494 |
|
1822
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
495 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
|
496 "http", |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
497 http_open, |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
498 http_read, |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
499 http_write, |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
500 http_seek, |
|
2526fc1e568b
Reverting stray commit part II, r8156 had the base64 export patch mixed with the nutdec patch
lu_zero
parents:
diff
changeset
|
501 http_close, |
|
4640
b34d9614b887
Add url_get_file_handle(), which is used to get the file descriptor
rbultje
parents:
4630
diff
changeset
|
502 .url_get_file_handle = http_get_file_handle, |
|
6162
4c0017a87855
Allocate the HTTPContext through URLProtocol.priv_data_size
mstorsjo
parents:
6156
diff
changeset
|
503 .priv_data_size = sizeof(HTTPContext), |
| 6163 | 504 .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
|
505 }; |
