X-Git-Url: https://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Fio%2Ftest%2Frun-17-homemade-io.c;h=d104f3e9a01c18f730da677d847f88172f6628cf;hp=8b6f17ad89a6ef21ad292cbf2b6c49317f51028d;hb=43185ec669720903fa86aac5f2d1b1ee62e3a12b;hpb=0f16a4197c94bfa84dad56d0cb9a9c20438d0a45 diff --git a/ccan/io/test/run-17-homemade-io.c b/ccan/io/test/run-17-homemade-io.c index 8b6f17ad..d104f3e9 100644 --- a/ccan/io/test/run-17-homemade-io.c +++ b/ccan/io/test/run-17-homemade-io.c @@ -6,7 +6,9 @@ #include #include -#ifndef PORT +#ifdef DEBUG_CONN +#define PORT "64017" +#else #define PORT "65017" #endif @@ -20,33 +22,33 @@ static void finish_ok(struct io_conn *conn, struct packet *pkt) { ok1(pkt->state == 3); pkt->state++; - io_break(pkt, io_idle()); + io_break(pkt); } -static bool do_read_packet(int fd, struct io_plan *plan) +static int do_read_packet(int fd, struct io_plan_arg *arg) { - struct packet *pkt = plan->u.ptr_len.p; + struct packet *pkt = arg->u1.vp; char *dest; ssize_t ret; size_t off, totlen; /* Reading len? */ - if (plan->u.ptr_len.len < sizeof(size_t)) { + if (arg->u2.s < sizeof(size_t)) { ok1(pkt->state == 1); pkt->state++; dest = (char *)&pkt->len; - off = plan->u.ptr_len.len; + off = arg->u2.s; totlen = sizeof(pkt->len); } else { ok1(pkt->state == 2); pkt->state++; if (pkt->len == 0) - return true; + return 1; if (!pkt->contents && !(pkt->contents = malloc(pkt->len))) goto fail; else { dest = pkt->contents; - off = plan->u.ptr_len.len - sizeof(pkt->len); + off = arg->u2.s - sizeof(pkt->len); totlen = pkt->len; } } @@ -55,45 +57,42 @@ static bool do_read_packet(int fd, struct io_plan *plan) if (ret <= 0) goto fail; - plan->u.ptr_len.len += ret; + arg->u2.s += ret; /* Finished? */ - return (plan->u.ptr_len.len >= sizeof(pkt->len) - && plan->u.ptr_len.len == pkt->len + sizeof(pkt->len)); + return arg->u2.s >= sizeof(pkt->len) + && arg->u2.s == pkt->len + sizeof(pkt->len); fail: free(pkt->contents); - /* Override next function to close us. */ - plan->next = io_close; - return true; + return -1; } -static struct io_plan io_read_packet(struct packet *pkt, - struct io_plan (*cb)(struct io_conn *, void *), - void *arg) +static struct io_plan *io_read_packet(struct io_conn *conn, + struct packet *pkt, + struct io_plan *(*cb)(struct io_conn *, + void *), + void *cb_arg) { - struct io_plan plan; + struct io_plan_arg *arg = io_plan_arg(conn, IO_IN); - assert(cb); pkt->contents = NULL; - plan.u.ptr_len.p = pkt; - plan.u.ptr_len.len = 0; - plan.io = do_read_packet; - plan.next = cb; - plan.next_arg = arg; - plan.pollflag = POLLIN; - - io_plan_debug(&plan); - return plan; + arg->u1.vp = pkt; + arg->u2.s = 0; + + return io_set_plan(conn, IO_IN, do_read_packet, cb, cb_arg); } -static void init_conn(int fd, struct packet *pkt) +static struct io_plan *init_conn(struct io_conn *conn, struct packet *pkt) { +#ifdef DEBUG_CONN + io_set_debug(conn, true); +#endif ok1(pkt->state == 0); pkt->state++; - io_set_finish(io_new_conn(fd, io_read_packet(pkt, io_close, pkt)), - finish_ok, pkt); + io_set_finish(conn, finish_ok, pkt); + return io_read_packet(conn, pkt, io_close_cb, pkt); } static int make_listen_fd(const char *port, struct addrinfo **info) @@ -140,7 +139,7 @@ int main(void) pkt->state = 0; fd = make_listen_fd(PORT, &addrinfo); ok1(fd >= 0); - l = io_new_listener(fd, init_conn, pkt); + l = io_new_listener(NULL, fd, init_conn, pkt); ok1(l); fflush(stdout); if (!fork()) { @@ -169,7 +168,7 @@ int main(void) exit(0); } freeaddrinfo(addrinfo); - ok1(io_loop() == pkt); + ok1(io_loop(NULL, NULL) == pkt); ok1(pkt->state == 4); ok1(pkt->len == 8); ok1(memcmp(pkt->contents, "hithere!", 8) == 0);