]> git.seodisparate.com - c_simple_http/commitdiff
Cleanup
authorStephen Seo <seo.disparate@gmail.com>
Thu, 29 Aug 2024 06:38:44 +0000 (15:38 +0900)
committerStephen Seo <seo.disparate@gmail.com>
Thu, 29 Aug 2024 06:38:44 +0000 (15:38 +0900)
Separate out functions/structs/constants/globals to properly named
files.

12 files changed:
Makefile
src/arg_parse.c [new file with mode: 0644]
src/arg_parse.h [new file with mode: 0644]
src/big_endian.c [new file with mode: 0644]
src/big_endian.h [new file with mode: 0644]
src/globals.c [new file with mode: 0644]
src/globals.h [new file with mode: 0644]
src/main.c
src/signal_handling.c [new file with mode: 0644]
src/signal_handling.h [new file with mode: 0644]
src/tcp_socket.c [new file with mode: 0644]
src/tcp_socket.h [new file with mode: 0644]

index 2ea666c7a77540d3e3be55397d2cdb7f51654ec0..7bdf199b3bcc37a6f50c7e0242f56baed441c0bb 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -9,7 +9,13 @@ else
 endif
 
 SOURCES = \
-               src/main.c
+               src/main.c \
+               src/arg_parse.c \
+               src/big_endian.c \
+               src/tcp_socket.c \
+               src/signal_handling.c \
+               src/globals.c
+
 OBJECT_DIR = objs
 OBJECTS = $(addprefix ${OBJECT_DIR}/,$(patsubst %.c,%.c.o,${SOURCES}))
 
diff --git a/src/arg_parse.c b/src/arg_parse.c
new file mode 100644 (file)
index 0000000..ecdbed5
--- /dev/null
@@ -0,0 +1,42 @@
+#include "arg_parse.h"
+
+// Standard library includes.
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+void print_usage(void) {
+  puts("Usage:");
+  puts("  -p <port> | --port <port>");
+}
+
+Args parse_args(int argc, char **argv) {
+  --argc;
+  ++argv;
+
+  Args args;
+  memset(&args, 0, sizeof(Args));
+
+  while (argc > 0) {
+    if ((strcmp(argv[0], "-p") == 0 || strcmp(argv[0], "--port") == 0)
+        && argc > 1) {
+      int value = atoi(argv[1]);
+      if (value >= 0 && value <= 0xFFFF) {
+        args.port = (unsigned short) value;
+      }
+      --argc;
+      ++argv;
+    } else {
+      puts("ERROR: Invalid args!\n");
+      print_usage();
+      exit(1);
+    }
+
+    --argc;
+    ++argv;
+  }
+
+  return args;
+}
+
+// vim: ts=2 sts=2 sw=2
diff --git a/src/arg_parse.h b/src/arg_parse.h
new file mode 100644 (file)
index 0000000..7073ea7
--- /dev/null
@@ -0,0 +1,15 @@
+#ifndef SEODISPARATE_COM_C_SIMPLE_HTTP_ARG_PARSE_H_
+#define SEODISPARATE_COM_C_SIMPLE_HTTP_ARG_PARSE_H_
+
+typedef struct Args {
+  unsigned short flags;
+  unsigned short port;
+} Args;
+
+void print_usage(void);
+
+Args parse_args(int argc, char **argv);
+
+#endif
+
+// vim: ts=2 sts=2 sw=2
diff --git a/src/big_endian.c b/src/big_endian.c
new file mode 100644 (file)
index 0000000..ca89847
--- /dev/null
@@ -0,0 +1,20 @@
+#include "big_endian.h"
+
+int is_big_endian(void) {
+  union {
+    int i;
+    char c[4];
+  } bint = {0x01020304};
+
+  return bint.c[0] == 1 ? 1 : 0;
+}
+
+unsigned short u16_be_swap(unsigned short value) {
+  if (is_big_endian()) {
+    return value;
+  } else {
+    return ((value >> 8) & 0xFF) | ((value << 8) & 0xFF00);
+  }
+}
+
+// vim: ts=2 sts=2 sw=2
diff --git a/src/big_endian.h b/src/big_endian.h
new file mode 100644 (file)
index 0000000..6c7a872
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef SEODISPARATE_COM_C_SIMPLE_HTTP_BIG_ENDIAN_H_
+#define SEODISPARATE_COM_C_SIMPLE_HTTP_BIG_ENDIAN_H_
+
+int is_big_endian(void);
+
+unsigned short u16_be_swap(unsigned short value);
+
+#endif
+
+// vim: ts=2 sts=2 sw=2
diff --git a/src/globals.c b/src/globals.c
new file mode 100644 (file)
index 0000000..8c865d6
--- /dev/null
@@ -0,0 +1,5 @@
+#include "globals.h"
+
+int C_SIMPLE_HTTP_KEEP_RUNNING = 1;
+
+// vim: ts=2 sts=2 sw=2
diff --git a/src/globals.h b/src/globals.h
new file mode 100644 (file)
index 0000000..07d5739
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef SEODISPARATE_COM_C_SIMPLE_HTTP_GLOBALS_H_
+#define SEODISPARATE_COM_C_SIMPLE_HTTP_GLOBALS_H_
+
+extern int C_SIMPLE_HTTP_KEEP_RUNNING;
+
+#endif
+
+// vim: ts=2 sts=2 sw=2
index 640eed92f2065940b221bd767c2c67d39aa5eb50..6c997736400b6a2765f742172a012e1c6e2da45e 100644 (file)
 #include <stdio.h>
 
 // Unix includes.
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <netinet/tcp.h>
-#include <unistd.h>
-#include <errno.h>
 #include <signal.h>
 #include <time.h>
 
-#define C_SIMPLE_HTTP_TCP_SOCKET_BACKLOG 64
-#define C_SIMPLE_HTTP_SLEEP_NANOS 1000000
-
-static int C_SIMPLE_HTTP_KEEP_RUNNING = 1;
-
-void C_SIMPLE_HTTP_handle_sigint(int signal) {
-  if (signal == SIGINT) {
-#ifndef NDEBUG
-    puts("Handling SIGINT");
-#endif
-    C_SIMPLE_HTTP_KEEP_RUNNING = 0;
-  }
-}
-
-typedef struct Args {
-  unsigned short flags;
-  unsigned short port;
-} Args;
+// Local includes.
+#include "arg_parse.h"
+#include "big_endian.h"
+#include "tcp_socket.h"
+#include "signal_handling.h"
+#include "globals.h"
 
-int is_big_endian(void) {
-  union {
-    int i;
-    char c[4];
-  } bint = {0x01020304};
-
-  return bint.c[0] == 1 ? 1 : 0;
-}
-
-unsigned short u16_be_swap(unsigned short value) {
-  if (is_big_endian()) {
-    return value;
-  } else {
-    return ((value >> 8) & 0xFF) | ((value << 8) & 0xFF00);
-  }
-}
-
-int create_tcp_socket(unsigned short port) {
-  struct sockaddr_in6 ipv6_addr;
-  memset(&ipv6_addr, 0, sizeof(struct sockaddr_in6));
-  ipv6_addr.sin6_family = AF_INET6;
-  ipv6_addr.sin6_port = u16_be_swap(port);
-  ipv6_addr.sin6_addr = in6addr_any;
-
-  int tcp_socket = socket(AF_INET6, SOCK_STREAM | SOCK_NONBLOCK, 6);
-
-  if (tcp_socket == -1) {
-    switch (errno) {
-      case EACCES:
-        puts("ERROR: Socket creation: EACCES");
-        break;
-      case EAFNOSUPPORT:
-        puts("ERROR: Socket creation: EAFNOSUPPORT");
-        break;
-      case EINVAL:
-        puts("ERROR: Socket creation: EINVAL");
-        break;
-      case EMFILE:
-        puts("ERROR: Socket creation: EMFILE");
-        break;
-      case ENOBUFS:
-        puts("ERROR: Socket creation: ENOBUFS");
-        break;
-      case ENOMEM:
-        puts("ERROR: Socket creation: ENOMEM");
-        break;
-      case EPROTONOSUPPORT:
-        puts("ERROR: Socket creation: EPROTONOSUPPORT");
-        break;
-      default:
-        puts("ERROR: Socket creation: Unknown Error");
-        break;
-    }
-    return -1;
-  }
-
-  int ret = bind(tcp_socket, (const struct sockaddr *)&ipv6_addr, sizeof(struct sockaddr_in6));
-  if (ret != 0) {
-    close(tcp_socket);
-    puts("ERROR: Failed to bind socket!");
-    return -1;
-  }
-
-  ret = listen(tcp_socket, C_SIMPLE_HTTP_TCP_SOCKET_BACKLOG);
-
-  if (ret == 0) {
-    return tcp_socket;
-  } else {
-    switch (errno) {
-      case EADDRINUSE:
-        puts("ERROR: Socket listen: EADDRINUSE");
-        break;
-      case EBADF:
-        puts("ERROR: Socket listen: EBADF");
-        break;
-      case ENOTSOCK:
-        puts("ERROR: Socket listen: ENOTSOCK");
-        break;
-      default:
-        puts("ERROR: Socket listen: Unknown Error");
-        break;
-    }
-
-    return -1;
-  }
-}
-
-void cleanup_tcp_socket(int *tcp_socket) {
-  if (tcp_socket && *tcp_socket != -1) {
-    close(*tcp_socket);
-    *tcp_socket = -1;
-  }
-}
-
-void print_usage(void) {
-  puts("Usage:");
-  puts("  -p <port> | --port <port>");
-}
-
-Args parse_args(int argc, char **argv) {
-  --argc;
-  ++argv;
-
-  Args args;
-  memset(&args, 0, sizeof(Args));
-
-  while (argc > 0) {
-    if ((strcmp(argv[0], "-p") == 0 || strcmp(argv[0], "--port") == 0)
-        && argc > 1) {
-      int value = atoi(argv[1]);
-      if (value >= 0 && value <= 0xFFFF) {
-        args.port = (unsigned short) value;
-      }
-      --argc;
-      ++argv;
-    } else {
-      puts("ERROR: Invalid args!\n");
-      print_usage();
-      exit(1);
-    }
-
-    --argc;
-    ++argv;
-  }
-
-  return args;
-}
+#define C_SIMPLE_HTTP_SLEEP_NANOS 1000000
 
 int main(int argc, char **argv) {
   Args args = parse_args(argc, argv);
diff --git a/src/signal_handling.c b/src/signal_handling.c
new file mode 100644 (file)
index 0000000..69e9ba9
--- /dev/null
@@ -0,0 +1,21 @@
+#include "signal_handling.h"
+
+// Standard library includes.
+#include <stdio.h>
+
+// Unix includes.
+#include <signal.h>
+
+// Local includes
+#include "globals.h"
+
+void C_SIMPLE_HTTP_handle_sigint(int signal) {
+  if (signal == SIGINT) {
+#ifndef NDEBUG
+    puts("Handling SIGINT");
+#endif
+    C_SIMPLE_HTTP_KEEP_RUNNING = 0;
+  }
+}
+
+// vim: ts=2 sts=2 sw=2
diff --git a/src/signal_handling.h b/src/signal_handling.h
new file mode 100644 (file)
index 0000000..f9a576d
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef SEODISPARATE_COM_C_SIMPLE_HTTP_SIGNAL_HANDLING_H_
+#define SEODISPARATE_COM_C_SIMPLE_HTTP_SIGNAL_HANDLING_H_
+
+void C_SIMPLE_HTTP_handle_sigint(int signal);
+
+#endif
+
+// vim: ts=2 sts=2 sw=2
diff --git a/src/tcp_socket.c b/src/tcp_socket.c
new file mode 100644 (file)
index 0000000..6a7c2e2
--- /dev/null
@@ -0,0 +1,94 @@
+#include "tcp_socket.h"
+
+// Standard library includes.
+#include <stdio.h>
+#include <string.h>
+
+// Unix includes.
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <netinet/tcp.h>
+#include <errno.h>
+#include <unistd.h>
+
+// Local includes.
+#include "big_endian.h"
+
+int create_tcp_socket(unsigned short port) {
+  struct sockaddr_in6 ipv6_addr;
+  memset(&ipv6_addr, 0, sizeof(struct sockaddr_in6));
+  ipv6_addr.sin6_family = AF_INET6;
+  ipv6_addr.sin6_port = u16_be_swap(port);
+  ipv6_addr.sin6_addr = in6addr_any;
+
+  int tcp_socket = socket(AF_INET6, SOCK_STREAM | SOCK_NONBLOCK, 6);
+
+  if (tcp_socket == -1) {
+    switch (errno) {
+      case EACCES:
+        puts("ERROR: Socket creation: EACCES");
+        break;
+      case EAFNOSUPPORT:
+        puts("ERROR: Socket creation: EAFNOSUPPORT");
+        break;
+      case EINVAL:
+        puts("ERROR: Socket creation: EINVAL");
+        break;
+      case EMFILE:
+        puts("ERROR: Socket creation: EMFILE");
+        break;
+      case ENOBUFS:
+        puts("ERROR: Socket creation: ENOBUFS");
+        break;
+      case ENOMEM:
+        puts("ERROR: Socket creation: ENOMEM");
+        break;
+      case EPROTONOSUPPORT:
+        puts("ERROR: Socket creation: EPROTONOSUPPORT");
+        break;
+      default:
+        puts("ERROR: Socket creation: Unknown Error");
+        break;
+    }
+    return -1;
+  }
+
+  int ret = bind(tcp_socket, (const struct sockaddr *)&ipv6_addr, sizeof(struct sockaddr_in6));
+  if (ret != 0) {
+    close(tcp_socket);
+    puts("ERROR: Failed to bind socket!");
+    return -1;
+  }
+
+  ret = listen(tcp_socket, C_SIMPLE_HTTP_TCP_SOCKET_BACKLOG);
+
+  if (ret == 0) {
+    return tcp_socket;
+  } else {
+    switch (errno) {
+      case EADDRINUSE:
+        puts("ERROR: Socket listen: EADDRINUSE");
+        break;
+      case EBADF:
+        puts("ERROR: Socket listen: EBADF");
+        break;
+      case ENOTSOCK:
+        puts("ERROR: Socket listen: ENOTSOCK");
+        break;
+      default:
+        puts("ERROR: Socket listen: Unknown Error");
+        break;
+    }
+
+    return -1;
+  }
+}
+
+void cleanup_tcp_socket(int *tcp_socket) {
+  if (tcp_socket && *tcp_socket != -1) {
+    close(*tcp_socket);
+    *tcp_socket = -1;
+  }
+}
+
+// vim: ts=2 sts=2 sw=2
diff --git a/src/tcp_socket.h b/src/tcp_socket.h
new file mode 100644 (file)
index 0000000..d7ae93e
--- /dev/null
@@ -0,0 +1,12 @@
+#ifndef SEODISPARATE_COM_C_SIMPLE_HTTP_TCP_SOCKET_H_
+#define SEODISPARATE_COM_C_SIMPLE_HTTP_TCP_SOCKET_H_
+
+#define C_SIMPLE_HTTP_TCP_SOCKET_BACKLOG 64
+
+int create_tcp_socket(unsigned short port);
+
+void cleanup_tcp_socket(int *tcp_socket);
+
+#endif
+
+// vim: ts=2 sts=2 sw=2