minor cosmetic changes/renames
[rxpd] / rxpd.h
diff --git a/rxpd.h b/rxpd.h
index 2345ccc..ed45055 100644 (file)
--- a/rxpd.h
+++ b/rxpd.h
 #ifndef RXPD_H
 #define RXPD_H
 
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <regex.h>
-//#include <>
 #include "llist.h"
 #include "psplay.h"
 
+#include <errno.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <unistd.h>
+#include <regex.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <event.h>
 
 #define RXPD_COMMANDS                           \
-{                                               \
-  RXPD_CMD(CHECK),                              \
-  RXPD_CMD(APPEND),                             \
-  RXPD_CMD(PREPEND),                            \
-  RXPD_CMD(REMOVE),                             \
-  RXPD_CMD(REPLACE),                            \
-  RXPD_CMD(LOAD),                               \
-  RXPD_CMD(SAVE),                               \
-  RXPD_CMD(DUMP),                               \
-  RXPD_CMD(LIST),                               \
-  RXPD_CMD(END)                                 \
-}
-
-#define RXPD_CMD(cmd) RXPD_CMD_##cmd
-enum RXPD_COMMANDS;
+  RXPD_CMD(CHECK)                               \
+  RXPD_CMD(APPEND)                              \
+  RXPD_CMD(PREPEND)                             \
+  RXPD_CMD(REMOVE)                              \
+  RXPD_CMD(REPLACE)                             \
+  RXPD_CMD(LOAD)                                \
+  RXPD_CMD(SAVE)                                \
+  RXPD_CMD(DUMP)                                \
+  RXPD_CMD(LIST)
+
+#define RXPD_CMD(cmd) RXPD_CMD_##cmd,
+enum rxpd_cmd_e {RXPD_COMMANDS};
 #undef RXPD_CMD
 
 struct rxpd_base;
 struct rxpd_file;
 struct rxpd_rule;
+struct rxpd_socket;
+struct rxpd_buffer;
+struct rxpd_connection;
 
 struct rxpd_base
 {
   char* rulesdir;
   psplayroot files;
+
+  llist sockets_pending;
+  llist sockets_active;
+  llist connections_pending;
+  llist connections_active;
 };
 
 
@@ -101,5 +114,108 @@ int
 rxpd_file_cmp (const void* A, const void* B);
 
 
+//
+
+struct rxpd_socket
+{
+  llist node;
+  int fd;
+  struct event ev;
+  struct rxpd_base* base;
+};
+
+
+struct rxpd_socket*
+rxpd_socket_new_tcp4 (struct rxpd_base* base, const char* addr, unsigned short port);
+
+//struct rxpd_socket*
+//rxpd_socket_new_unix (struct rxpd_base* base, const char* name);
+
+void
+rxpd_socket_delete (struct rxpd_socket* self);
+
+void
+rxpd_socket_accept (int sock, short event, void* ptr);
+
+struct rxpd_socket*
+rxpd_socket_activate (struct rxpd_socket* self);
+
+struct rxpd_socket*
+rxpd_socket_suspend (struct rxpd_socket* self);
+
+
+//
+
+enum rxpd_buffer_state_e
+  {
+    RXPD_OK,            // operational
+    RXPD_EOF,           // connection closed
+    RXPD_ERROR          // some other error
+  };
+
+struct rxpd_buffer
+{
+  struct rxpd_connection* conn;
+  enum rxpd_buffer_state_e state;
+  char* eol;
+  char* eob;
+  char buffer[4096];
+};
+
+struct rxpd_buffer*
+rxpd_buffer_init (struct rxpd_buffer* self, struct rxpd_connection* conn);
+
+char*
+rxpd_buffer_readline (struct rxpd_buffer* self, int again);
+
+inline static enum rxpd_buffer_state_e
+rxpd_buffer_state (struct rxpd_buffer* self)
+{
+  return self->state;
+}
+
+
+//
+struct rxpd_connection
+{
+  llist node;
+  int fd;
+  struct event ev;
+  struct rxpd_base* base;
+  struct rxpd_file* file;
+
+  struct sockaddr peer_addr;
+
+  struct rxpd_buffer in;
+  struct rxpd_buffer out;
+};
+
+
+struct rxpd_connection*
+rxpd_connection_new (struct rxpd_base* base, int accept_fd);
+
+void
+rxpd_connection_delete (struct rxpd_connection* self);
+
+
+struct rxpd_connection*
+rxpd_connection_activate (struct rxpd_connection* self);
+
+
+struct rxpd_connection*
+rxpd_connection_suspend (struct rxpd_connection* self);
+
+
+int
+rxpd_connection_readline (struct rxpd_connection* self);
+
+void
+rxpd_connection_parse_cmd (int fd, short event, void* ptr);
+
+/* generate prototypes for each defined command */
+#define RXPD_CMD(cmd) void rxpd_connection_cmd_##cmd (int fd, short event, void* ptr);
+RXPD_COMMANDS
+#undef RXPD_CMD
+
 
 #endif