#include <ccan/oserver/oserver.h>
+#include <ccan/oserver/oserver_types.h>
#include <ccan/read_write_all/read_write_all.h>
#include <ccan/opt/opt.h>
#include <ccan/tevent/tevent.h>
#include <signal.h>
#include <assert.h>
-enum state {
- SENDING_GREETING,
- RECEIVING_USER_QUESTION,
- SENDING_OTHER_QUESTION_PREFIX,
- SENDING_OTHER_QUESTION,
- RECEIVING_OTHER_ANSWER,
- SENDING_ANSWER_PREFIX,
- SENDING_ANSWER,
- FINISHED
-};
-
static uint16_t state_flag_map[] = {
[SENDING_GREETING] = TEVENT_FD_WRITE,
[RECEIVING_USER_QUESTION] = TEVENT_FD_READ,
[FINISHED] = 0
};
-struct client {
- /* What are we doing today, brain? */
- enum state state;
- /* Our event info, and the file descriptor. */
- struct tevent_fd *fde;
- int fd;
- /* The question we read from client. */
- char *question;
- /* The answer to the client. */
- char *answer;
- /* How many bytes of the reply we sent so far. */
- size_t bytes_sent;
- /* Our server. */
- struct oserver *oserver;
- /* Whose question this client is answering. */
- struct client *subclient;
- /* Who is answering our question. */
- struct client *oracle;
-};
-
-struct oserver {
- /* 5 clients should be enough for anybody! */
- struct client *clients[5];
- int fd;
- struct tevent_fd *fde;
-};
-
static ssize_t write_string(int fd, const char *str)
{
return write(fd, str, strlen(str));
--- /dev/null
+#ifndef CCAN_OSERVER_TYPES_H
+#define CCAN_OSERVER_TYPES_H
+#include <stdlib.h>
+
+enum state {
+ SENDING_GREETING,
+ RECEIVING_USER_QUESTION,
+ SENDING_OTHER_QUESTION_PREFIX,
+ SENDING_OTHER_QUESTION,
+ RECEIVING_OTHER_ANSWER,
+ SENDING_ANSWER_PREFIX,
+ SENDING_ANSWER,
+ FINISHED
+};
+
+struct client {
+ /* What are we doing today, brain? */
+ enum state state;
+ /* Our event info, and the file descriptor. */
+ struct tevent_fd *fde;
+ int fd;
+ /* The question we read from client. */
+ char *question;
+ /* The answer to the client. */
+ char *answer;
+ /* How many bytes of the reply we sent so far. */
+ size_t bytes_sent;
+ /* Our server. */
+ struct oserver *oserver;
+ /* Whose question this client is answering. */
+ struct client *subclient;
+ /* Who is answering our question. */
+ struct client *oracle;
+};
+
+struct oserver {
+ /* 5 clients should be enough for anybody! */
+ struct client *clients[5];
+ int fd;
+ struct tevent_fd *fde;
+};
+#endif /* CCAN_OSERVER_TYPES_H */