[FFmpeg-cvslog] r24746 - trunk/libavformat/http.c
mstorsjo
subversion
Mon Aug 9 10:14:48 CEST 2010
Author: mstorsjo
Date: Mon Aug 9 10:14:48 2010
New Revision: 24746
Log:
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.
Modified:
trunk/libavformat/http.c
Modified: trunk/libavformat/http.c
==============================================================================
--- trunk/libavformat/http.c Mon Aug 9 09:17:01 2010 (r24745)
+++ trunk/libavformat/http.c Mon Aug 9 10:14:48 2010 (r24746)
@@ -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, c
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, c
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, uint
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) {
More information about the ffmpeg-cvslog
mailing list