http_recv: set the eof flag on buffer overruns.
[paraslash.git] / http_recv.c
index b4d3860..264ae2c 100644 (file)
@@ -110,6 +110,11 @@ static void http_recv_post_select(struct sched *s, struct task *t)
        struct receiver_node *rn = t->private_data;
        struct private_http_recv_data *phd = rn->private_data;
 
+       t->ret = -E_HTTP_RECV_EOF;
+       if (rn->output_eof && *rn->output_eof) {
+               rn->eof = 1;
+               return;
+       }
        t->ret = 1;
        if (!s->select_ret) /* we're not interested in timeouts */
                return;
@@ -137,8 +142,10 @@ static void http_recv_post_select(struct sched *s, struct task *t)
        }
        t->ret = -E_OVERRUN;
        /* already streaming */
-       if (rn->loaded >= BUFSIZE)
+       if (rn->loaded >= BUFSIZE) {
+               rn->eof = 1;
                return;
+       }
        t->ret = recv_bin_buffer(phd->fd, rn->buf + rn->loaded,
                BUFSIZE - rn->loaded);
        if (t->ret <= 0) {
@@ -179,6 +186,7 @@ static int http_recv_open(struct receiver_node *rn)
        rn->buf = para_calloc(BUFSIZE);
        rn->private_data = para_calloc(sizeof(struct private_http_recv_data));
        phd = rn->private_data;
+       PARA_NOTICE_LOG("phd = %p, rn = %p\n", phd, rn);
        ret = -E_HOST_INFO;
        if (!(he = get_host_info(conf->host_arg)))
                goto err_out;