#include "libavutil/avstring.h"
#include "avformat.h"
-#include <unistd.h>
#include "internal.h"
#include "network.h"
#include "http.h"
int multiple_requests; /**< A flag which indicates if we use persistent connections. */
uint8_t *post_data;
int post_datalen;
+ int is_akamai;
} HTTPContext;
#define OFFSET(x) offsetof(HTTPContext, x)
strcpy(s->location, p);
*new_location = 1;
} else if (!av_strcasecmp (tag, "Content-Length") && s->filesize == -1) {
- s->filesize = atoll(p);
+ s->filesize = strtoll(p, NULL, 10);
} else if (!av_strcasecmp (tag, "Content-Range")) {
/* "bytes $from-$to/$document_size" */
const char *slash;
if (!strncmp (p, "bytes ", 6)) {
p += 6;
- s->off = atoll(p);
+ s->off = strtoll(p, NULL, 10);
if ((slash = strchr(p, '/')) && strlen(slash) > 0)
- s->filesize = atoll(slash+1);
+ s->filesize = strtoll(slash+1, NULL, 10);
}
- h->is_streamed = 0; /* we _can_ in fact seek */
+ if (!s->is_akamai || s->filesize != 2147483647)
+ h->is_streamed = 0; /* we _can_ in fact seek */
} else if (!av_strcasecmp(tag, "Accept-Ranges") && !strncmp(p, "bytes", 5)) {
h->is_streamed = 0;
} else if (!av_strcasecmp (tag, "Transfer-Encoding") && !av_strncasecmp(p, "chunked", 7)) {
} else if (!av_strcasecmp (tag, "Connection")) {
if (!strcmp(p, "close"))
s->willclose = 1;
+ } else if (!av_strcasecmp (tag, "Server") && !av_strcasecmp (p, "AkamaiGHost")) {
+ s->is_akamai = 1;
}
}
return 1;
char line[1024];
int err = 0;
+ s->chunksize = -1;
+
for (;;) {
if ((err = http_get_line(s, line, sizeof(line))) < 0)
return err;
s->http_code = 200;
return 0;
}
- s->chunksize = -1;
/* wait for header */
err = http_read_header(h, new_location);
HTTPContext *s = h->priv_data;
int err, new_location;
- if (s->end_chunked_post) {
- if (!s->end_header) {
- err = http_read_header(h, &new_location);
- if (err < 0)
- return err;
- }
+ if (!s->hd)
+ return AVERROR_EOF;
- return http_buf_read(h, buf, size);
+ if (s->end_chunked_post && !s->end_header) {
+ err = http_read_header(h, &new_location);
+ if (err < 0)
+ return err;
}
if (s->chunksize >= 0) {