input/curl: moved code to fill_buffer()
This commit is contained in:
parent
d6d4de1123
commit
016558093b
@ -282,6 +282,42 @@ input_curl_select(struct input_curl *c)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
fill_buffer(struct input_stream *is)
|
||||||
|
{
|
||||||
|
struct input_curl *c = is->data;
|
||||||
|
CURLMcode mcode = CURLM_CALL_MULTI_PERFORM;
|
||||||
|
|
||||||
|
while (!c->eof && g_queue_is_empty(c->buffers)) {
|
||||||
|
int running_handles;
|
||||||
|
bool bret;
|
||||||
|
|
||||||
|
if (mcode != CURLM_CALL_MULTI_PERFORM) {
|
||||||
|
/* if we're still here, there is no input yet
|
||||||
|
- wait for input */
|
||||||
|
int ret = input_curl_select(c);
|
||||||
|
if (ret <= 0)
|
||||||
|
/* no data yet or error */
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
mcode = curl_multi_perform(c->multi, &running_handles);
|
||||||
|
if (mcode != CURLM_OK && mcode != CURLM_CALL_MULTI_PERFORM) {
|
||||||
|
g_warning("curl_multi_perform() failed: %s\n",
|
||||||
|
curl_multi_strerror(mcode));
|
||||||
|
c->eof = true;
|
||||||
|
is->ready = true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bret = input_curl_multi_info_read(is);
|
||||||
|
if (!bret)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mark a part of the buffer object as consumed.
|
* Mark a part of the buffer object as consumed.
|
||||||
*/
|
*/
|
||||||
@ -381,7 +417,7 @@ static size_t
|
|||||||
input_curl_read(struct input_stream *is, void *ptr, size_t size)
|
input_curl_read(struct input_stream *is, void *ptr, size_t size)
|
||||||
{
|
{
|
||||||
struct input_curl *c = is->data;
|
struct input_curl *c = is->data;
|
||||||
CURLMcode mcode = CURLM_CALL_MULTI_PERFORM;
|
bool success;
|
||||||
GQueue *rewind_buffers;
|
GQueue *rewind_buffers;
|
||||||
size_t nbytes = 0;
|
size_t nbytes = 0;
|
||||||
char *dest = ptr;
|
char *dest = ptr;
|
||||||
@ -409,32 +445,9 @@ input_curl_read(struct input_stream *is, void *ptr, size_t size)
|
|||||||
|
|
||||||
/* fill the buffer */
|
/* fill the buffer */
|
||||||
|
|
||||||
while (!c->eof && g_queue_is_empty(c->buffers)) {
|
success = fill_buffer(is);
|
||||||
int running_handles;
|
if (!success)
|
||||||
bool bret;
|
return 0;
|
||||||
|
|
||||||
if (mcode != CURLM_CALL_MULTI_PERFORM) {
|
|
||||||
/* if we're still here, there is no input yet
|
|
||||||
- wait for input */
|
|
||||||
int ret = input_curl_select(c);
|
|
||||||
if (ret <= 0)
|
|
||||||
/* no data yet or error */
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
mcode = curl_multi_perform(c->multi, &running_handles);
|
|
||||||
if (mcode != CURLM_OK && mcode != CURLM_CALL_MULTI_PERFORM) {
|
|
||||||
g_warning("curl_multi_perform() failed: %s\n",
|
|
||||||
curl_multi_strerror(mcode));
|
|
||||||
c->eof = true;
|
|
||||||
is->ready = true;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
bret = input_curl_multi_info_read(is);
|
|
||||||
if (!bret)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* send buffer contents */
|
/* send buffer contents */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user