mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-26 19:01:44 +02:00
http: Return EOF at the end of the content even if the connection isn't closed
We do request Connection: close, but some servers ignore it. Originally committed as revision 24746 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
46a76dec93
commit
f240ed18ef
@ -49,6 +49,7 @@ typedef struct {
|
||||
char location[URL_SIZE];
|
||||
HTTPAuthState auth_state;
|
||||
unsigned char headers[BUFFER_SIZE];
|
||||
int willclose; /**< Set if the server correctly handles Connection: close and will close the connection after feeding us the content. */
|
||||
} HTTPContext;
|
||||
|
||||
#define OFFSET(x) offsetof(HTTPContext, x)
|
||||
@ -267,6 +268,9 @@ static int process_line(URLContext *h, char *line, int line_count,
|
||||
ff_http_auth_handle_header(&s->auth_state, tag, p);
|
||||
} else if (!strcmp (tag, "Authentication-Info")) {
|
||||
ff_http_auth_handle_header(&s->auth_state, tag, p);
|
||||
} else if (!strcmp (tag, "Connection")) {
|
||||
if (!strcmp(p, "close"))
|
||||
s->willclose = 1;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
@ -337,6 +341,7 @@ static int http_connect(URLContext *h, const char *path, const char *hoststr,
|
||||
s->line_count = 0;
|
||||
s->off = 0;
|
||||
s->filesize = -1;
|
||||
s->willclose = 0;
|
||||
if (post) {
|
||||
/* Pretend that it did work. We didn't read any header yet, since
|
||||
* we've still to send the POST data, but the code calling this
|
||||
@ -399,6 +404,8 @@ static int http_read(URLContext *h, uint8_t *buf, int size)
|
||||
memcpy(buf, s->buf_ptr, len);
|
||||
s->buf_ptr += len;
|
||||
} else {
|
||||
if (!s->willclose && s->filesize >= 0 && s->off >= s->filesize)
|
||||
return AVERROR_EOF;
|
||||
len = url_read(s->hd, buf, size);
|
||||
}
|
||||
if (len > 0) {
|
||||
|
Loading…
Reference in New Issue
Block a user