X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=send_common.c;h=f570273f6c3b5d4aaa71133463d16c54149efc69;hp=e1f3b11d435dcc8ba5b2d7131ed455df9e1005a7;hb=5d67c3dcd623fb61ca6ec4b427eeeb51daeca71e;hpb=a6cbab95272b31c55b2b41e1d3dd55743c7c774f diff --git a/send_common.c b/send_common.c index e1f3b11d..f570273f 100644 --- a/send_common.c +++ b/send_common.c @@ -102,23 +102,31 @@ static int queue_chunk_or_shutdown(struct sender_client *sc, return ret; } -/* return: negative on errors, zero if not everything was sent, one otherwise */ -static int send_queued_chunks(struct sender_client *sc, +/** + * Try to empty the chunk queue for this fd. + * + * \param fd The file descriptor. + * \param cq The list of queued chunks. + * \param max_bytes_per_write Do not send more than this in one go. + * + * \return Negative on errors, zero if not everything was sent, one otherwise. + */ +int send_queued_chunks(int fd, struct chunk_queue *cq, size_t max_bytes_per_write) { struct queued_chunk *qc; - while ((qc = cq_peek(sc->cq))) { + while ((qc = cq_peek(cq))) { const char *buf; size_t len; int ret; cq_get(qc, &buf, &len); - ret = write_nonblock(sc->fd, buf, len, max_bytes_per_write); + ret = write_nonblock(fd, buf, len, max_bytes_per_write); if (ret < 0) return ret; - cq_update(sc->cq, ret); + cq_update(cq, ret); if (ret != len) return 0; - cq_dequeue(sc->cq); + cq_dequeue(cq); } return 1; } @@ -153,7 +161,7 @@ void send_chunk(struct sender_client *sc, struct sender_status *ss, } sc->header_sent = 1; } - ret = send_queued_chunks(sc, max_bytes_per_write); + ret = send_queued_chunks(sc->fd, sc->cq, max_bytes_per_write); if (ret < 0) { shutdown_client(sc, ss); goto out; @@ -251,7 +259,7 @@ char *get_sender_info(struct sender_status *ss, char *name) void generic_com_allow(struct sender_command_data *scd, struct sender_status *ss) { - acl_allow(scd->addr, scd->netmask, &ss->acl, ss->default_deny); + acl_allow(scd->host, scd->netmask, &ss->acl, ss->default_deny); } /** @@ -265,7 +273,7 @@ void generic_com_allow(struct sender_command_data *scd, void generic_com_deny(struct sender_command_data *scd, struct sender_status *ss) { - acl_deny(scd->addr, scd->netmask, &ss->acl, ss->default_deny); + acl_deny(scd->host, scd->netmask, &ss->acl, ss->default_deny); } /**