]> git.ozlabs.org Git - ccan-lca-2011.git/commitdiff
lca2011: make our server parrot the last answer it got.
authorRusty Russell <rusty@rustcorp.com.au>
Fri, 21 Jan 2011 05:29:42 +0000 (15:59 +1030)
committerRusty Russell <rusty@rustcorp.com.au>
Fri, 21 Jan 2011 05:29:42 +0000 (15:59 +1030)
Include my own fairly lame attempt to match up with the woodchuck question.

ccan/oserver/oserver.c
ccan/oserver/test/run.c

index b8959035e1cadc8056f879892f541a74ea7c55d3..9e1f2b0b6b46d421218b92187c9b5d19d7921700 100644 (file)
@@ -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,
index b093a560c56fa273745134d4e360799328c57ec6..e553f3d6a75494ba1ceb882899190c17e1ecc11f 100644 (file)
@@ -22,10 +22,10 @@ static void run_server(int readyfd, int exitfd)
        if (oserver_setup(ev, OSERVER_PORT) == NULL)
                exit(1);
 
+       tevent_add_fd(ev, ev, exitfd, TEVENT_FD_READ, exit_quietly, NULL);
        /* Tell parent we are ready to go. */
        write(readyfd, "", 1);
 
-       tevent_add_fd(ev, ev, exitfd, TEVENT_FD_READ, exit_quietly, NULL);
        while (tevent_loop_wait(ev) == 0);
 }      
 
@@ -113,10 +113,12 @@ int main(int argc, char *argv[])
        ok1(no_input(sfd2));
 
        ok1(write_sall(sfd1, " 1\n"));
+       /* Make sure that arrives first! */
+       sleep(1);
        ok1(write_sall(sfd2, " 2\n"));
 
-       ok1(input_is(sfd1, "Our answer is:\nQUESTION 1\n"));
-       ok1(input_is(sfd2, "Our answer is:\nQUESTION 2\n"));
+       ok1(input_is(sfd1, "I believe a better question is how many manly men mendaciously mention mending mansions?\n"));
+       ok1(input_is(sfd2, "I believe a better question is question 1\n"));
 
        /* Sockets should be dead now. */
        ok1(read(sfd1, &c, 1) == 0);