X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Foserver%2Foserver.c;fp=ccan%2Foserver%2Foserver.c;h=9e1f2b0b6b46d421218b92187c9b5d19d7921700;hb=a3f893b6ac5fd0040a0610711a7eded786681d2b;hp=b8959035e1cadc8056f879892f541a74ea7c55d3;hpb=a88d58b2667c6fbd20c7fea563eed0d92654ea39;p=ccan-lca-2011.git diff --git a/ccan/oserver/oserver.c b/ccan/oserver/oserver.c index b895903..9e1f2b0 100644 --- a/ccan/oserver/oserver.c +++ b/ccan/oserver/oserver.c @@ -40,6 +40,8 @@ struct client { int fd; /* The question we read from client. */ char *question; + /* The answer to the client. */ + const char *answer; /* How many bytes of the reply we sent so far. */ size_t bytes_sent; /* Our server. */ @@ -51,6 +53,7 @@ struct oserver { struct client *clients[5]; int fd; struct tevent_fd *fde; + const char *last_answer; }; static ssize_t write_string(int fd, const char *str) @@ -118,19 +121,18 @@ static void service_client(struct tevent_context *ev, if (len <= 0) goto fail; if (input_finished(c->question)) { - unsigned int i; - - for (i = 0; c->question[i]; i++) - c->question[i] = toupper(c->question[i]); + c->answer = talloc_steal(c, c->oserver->last_answer); + c->oserver->last_answer + = talloc_steal(c->oserver, c->question); set_state(c, SENDING_ANSWER_PREFIX); } break; case SENDING_ANSWER_PREFIX: - if (!send_string(c, "Our answer is:\n")) + if (!send_string(c, "I believe a better question is ")) goto fail; break; case SENDING_ANSWER: - if (!send_string(c, c->question)) + if (!send_string(c, c->answer)) goto fail; break; default: @@ -218,7 +220,10 @@ struct oserver *oserver_setup(struct tevent_context *ev, unsigned short port) talloc_free(oserver); return NULL; } - + oserver->last_answer = talloc_strdup(oserver, + "how many manly men mendaciously" + " mention mending mansions?\n"); + talloc_set_destructor(oserver, destroy_oserver); if (setsockopt(oserver->fd, SOL_SOCKET, SO_REUSEADDR,