mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-03-02 18:48:27 +00:00
Introduce http_get_line and modify http_connect to use http_get_line.
Patch by Peter Holik <$firstname @ $lastname . at> Originally committed as revision 19124 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
3bbc46102b
commit
682d49f4ea
@ -151,6 +151,30 @@ static int http_getc(HTTPContext *s)
|
|||||||
return *s->buf_ptr++;
|
return *s->buf_ptr++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int http_get_line(HTTPContext *s, char *line, int line_size)
|
||||||
|
{
|
||||||
|
int ch;
|
||||||
|
char *q;
|
||||||
|
|
||||||
|
q = line;
|
||||||
|
for(;;) {
|
||||||
|
ch = http_getc(s);
|
||||||
|
if (ch < 0)
|
||||||
|
return AVERROR(EIO);
|
||||||
|
if (ch == '\n') {
|
||||||
|
/* process line */
|
||||||
|
if (q > line && q[-1] == '\r')
|
||||||
|
q--;
|
||||||
|
*q = '\0';
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
if ((q - line) < line_size - 1)
|
||||||
|
*q++ = ch;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int process_line(URLContext *h, char *line, int line_count,
|
static int process_line(URLContext *h, char *line, int line_count,
|
||||||
int *new_location)
|
int *new_location)
|
||||||
{
|
{
|
||||||
@ -209,8 +233,8 @@ static int http_connect(URLContext *h, const char *path, const char *hoststr,
|
|||||||
const char *auth, int *new_location)
|
const char *auth, int *new_location)
|
||||||
{
|
{
|
||||||
HTTPContext *s = h->priv_data;
|
HTTPContext *s = h->priv_data;
|
||||||
int post, err, ch;
|
int post, err;
|
||||||
char line[1024], *q;
|
char line[1024];
|
||||||
char *auth_b64;
|
char *auth_b64;
|
||||||
int auth_b64_len = (strlen(auth) + 2) / 3 * 4 + 1;
|
int auth_b64_len = (strlen(auth) + 2) / 3 * 4 + 1;
|
||||||
int64_t off = s->off;
|
int64_t off = s->off;
|
||||||
@ -251,16 +275,9 @@ static int http_connect(URLContext *h, const char *path, const char *hoststr,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* wait for header */
|
/* wait for header */
|
||||||
q = line;
|
|
||||||
for(;;) {
|
for(;;) {
|
||||||
ch = http_getc(s);
|
if (http_get_line(s, line, sizeof(line)) < 0)
|
||||||
if (ch < 0)
|
|
||||||
return AVERROR(EIO);
|
return AVERROR(EIO);
|
||||||
if (ch == '\n') {
|
|
||||||
/* process line */
|
|
||||||
if (q > line && q[-1] == '\r')
|
|
||||||
q--;
|
|
||||||
*q = '\0';
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
printf("header='%s'\n", line);
|
printf("header='%s'\n", line);
|
||||||
#endif
|
#endif
|
||||||
@ -270,11 +287,6 @@ static int http_connect(URLContext *h, const char *path, const char *hoststr,
|
|||||||
if (err == 0)
|
if (err == 0)
|
||||||
break;
|
break;
|
||||||
s->line_count++;
|
s->line_count++;
|
||||||
q = line;
|
|
||||||
} else {
|
|
||||||
if ((q - line) < sizeof(line) - 1)
|
|
||||||
*q++ = ch;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return (off == s->off) ? 0 : -1;
|
return (off == s->off) ? 0 : -1;
|
||||||
|
Loading…
Reference in New Issue
Block a user