diff --git a/.gitignore b/.gitignore index 93bbd66..709140d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,8 @@ -# object files/output directories +# executables +moxerver + +# object files *.o -*.dir # logs directory during development logs diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index fb156f3..0000000 --- a/.travis.yml +++ /dev/null @@ -1,7 +0,0 @@ -language: cpp - -compiler: -- gcc -- clang - -script: make install diff --git a/Makefile b/Makefile index 49f1fee..fa9aaef 100644 --- a/Makefile +++ b/Makefile @@ -1,38 +1,43 @@ -# components -SERVER = moxerver -TOOLS = tools +# target name +TARGET = moxerver -# system install root directory -INSTALL_ROOT = $(abspath ./install.dir) +# special include directories +INCDIRS = -I. +# special library directories +LIBDIRS = -L. +# used libraries +#LIBS = -lm +LIBS = -lpthread -# prefix for /bin directory -BIN_PREFIX = /usr +# compiler and flags +CC = gcc +CFLAGS = -Wall $(INCDIRS) $(LIBDIRS) $(LIBS) -# ============================================================================== +# objects are .o files created from all .c files in the directory (same name) +OBJECTS = $(patsubst %.c,%.o,$(wildcard *.c)) +# headers are all .h files in the directory +HEADERS = $(wildcard *.h) -# directories used for local component builds -BUILDDIR = build.dir -# directory configuration for local component builds -DIR_CONFIG = BUILDDIR=$(BUILDDIR) INSTALLDIR=$(INSTALL_ROOT) BIN_PREFIX=$(BIN_PREFIX) +# all objects are built from their .c files and all headers in the directory +%.o: %.c $(HEADERS) + $(CC) $(CFLAGS) -c $< -o $@ -# ============================================================================== +# target is built from all object files +$(TARGET): $(OBJECTS) + $(CC) $(OBJECTS) $(CFLAGS) -o $@ -# supported make options (clean, install...) -.PHONY: default install clean -# default builds components -default: - cd $(SERVER) && make $(DIR_CONFIG) - cd $(TOOLS) && make $(DIR_CONFIG) +# support for default, clean and all options +.PHONY: default all clean -# install handles component installation -install: default - mkdir -p $(INSTALL_ROOT) - cd $(SERVER) && make install $(DIR_CONFIG) - cd $(TOOLS) && make install $(DIR_CONFIG) +# all calls all other options +all: default -# clean removes build and install results +# default builds target +default: $(TARGET) + +# clean removed object files and target clean: - cd $(SERVER) && make clean $(DIR_CONFIG) - cd $(TOOLS) && make clean $(DIR_CONFIG) - -rm -rf $(INSTALL_ROOT) + -rm -f *.o + -rm -f $(TARGET) + diff --git a/README.md b/README.md index ede4025..e3f8b1c 100644 --- a/README.md +++ b/README.md @@ -1,40 +1,16 @@ -[![Build Status](https://travis-ci.org/socec/moxanix.svg?branch=master)](https://travis-ci.org/socec/moxanix) - -Moxanix +moxanix ======= A serial device server, provides console access to multiple serial devices through telnet connection. -Architecture -============ - -The serial device server is broken down into multiple micro servers dedicated to a single serial device and TCP port pair. -These micro servers are then managed by a control script. The control script allows the user to start and stop these micro servers or check their status. -Connections between serial devices and TCP ports are configured in a separate file. -This design allows scalability and customization based on the number of available serial connections and TCP port availability. moxerver -------- -- a light server application handling the session between one TCP port and one serial device +- server application handling the session between a specific TCP port and a specific serial device - allows bidirectional communication -- it is expected to run a separate instance for every serial device and TCP port pair +- it is expected to run a separate instance for every serial device -moxerverctl ------------ +moxanix.sh +---------- - starts, stops or displays status for different moxervers - commands can handle one specific or all moxervers at once - -moxerver.cfg ------------- -- defines connections between serial devices and TCP ports -- each line corresponds to one micro server handling the defined connection - -Build and install -================= - -Run `make` to build the project and `make install` to install it. -This default build will produce artifacts in a directory "install.dir" with executables installed in "usr/bin" (default prefix is "usr"). - -You can install directly into some other directory with `make INSTALL_ROOT=/some/dir`. -You can change the default install prefix for executables with `make BIN_PREFIX=someprefix`. -These options can also be combined into `make INSTALL_ROOT=/some/dir BIN_PREFIX=someprefix` diff --git a/moxerver/client.c b/client.c similarity index 98% rename from moxerver/client.c rename to client.c index 65ee94a..673c199 100644 --- a/moxerver/client.c +++ b/client.c @@ -133,7 +133,7 @@ int client_ask_username(client_t *client) /* show username request to the client */ snprintf(msg, BUFFER_LEN, - "\nPlease provide a username to identify yourself to " + "\nPlease provide a username to identify yourself to" "other users (max %d characters):\n", USERNAME_LEN); client_write(client, msg, strlen(msg)); diff --git a/moxerver/client.h b/client.h similarity index 100% rename from moxerver/client.h rename to client.h diff --git a/moxerver/common.h b/common.h similarity index 100% rename from moxerver/common.h rename to common.h diff --git a/tools/moxerver.cfg b/moxanix.cfg similarity index 100% rename from tools/moxerver.cfg rename to moxanix.cfg diff --git a/tools/moxerverctl b/moxanix.sh old mode 100644 new mode 100755 similarity index 94% rename from tools/moxerverctl rename to moxanix.sh index d37eb3e..03b72be --- a/tools/moxerverctl +++ b/moxanix.sh @@ -4,12 +4,10 @@ # setup # ===== -ROOT="" - # parameters -CONFIGURATION_FILE="$ROOT/etc/moxerver.cfg" -SERVER_BINARY="moxerver" -LOG_DIRECTORY="$ROOT/var/log/moxerver" +CONFIGURATION_FILE="./moxanix.cfg" +SERVER_BINARY="./moxerver" +LOG_DIRECTORY="./logs" # global variables for configuration @@ -63,9 +61,9 @@ do_read_config() # configuration lines CONF_LINES[$CONF_SIZE]=$(echo -n $line) # extract configuration arguments - tcp=$(echo $line | awk '{print $1}' | sed -e 's/tcp=//') - tty=$(echo $line | awk '{print $2}' | sed -e 's/tty=//') - baud=$(echo $line | awk '{print $3}' | sed -e 's/baud=//') + tcp=$(echo $line | awk '{print $1}' | tr -d "tcp=") + tty=$(echo $line | awk '{print $2}' | tr -d "tty=") + baud=$(echo $line | awk '{print $3}' | tr -d "baud=") # compose configuration argument lines for passing to the servers CONF_ARGS[$CONF_SIZE]="-p $tcp -t $tty -b $baud" # increment configuration size (array index) diff --git a/moxerver/moxerver.c b/moxerver.c similarity index 100% rename from moxerver/moxerver.c rename to moxerver.c diff --git a/moxerver/Makefile b/moxerver/Makefile deleted file mode 100644 index b04f9d0..0000000 --- a/moxerver/Makefile +++ /dev/null @@ -1,65 +0,0 @@ -# target names -TARGET_BINARY = moxerver - -# ============================================================================== - -# directory for build results -BUILDDIR = $(abspath build.dir) -# installation root -INSTALLDIR = $(abspath install.dir) -# prefix for /bin directory -BIN_PREFIX = /usr - -# ============================================================================== - -# add include directories -INCDIRS = -I. -# add library directories -LIBDIRS = -L. -# list used libraries -#LIBS = -lm -LIBS = -lpthread - -# ============================================================================== - -# compiler and flags -CC = gcc -CFLAGS = -Wall $(INCDIRS) $(LIBDIRS) $(LIBS) - -# ============================================================================== - -# build everything in a dedicated directory $(BUILDDIR) - -# objects are .o files created from all .c files in the directory (same name) -OBJECTS = $(patsubst %.c, $(BUILDDIR)/%.o, $(wildcard *.c)) -# headers are all .h files in the directory -HEADERS = $(wildcard *.h) - -# all objects are built from their .c files in the directory -$(BUILDDIR)/%.o: %.c - mkdir -p $(BUILDDIR) - $(CC) $(CFLAGS) -c $< -o $@ - -# target binary is built from all object files -$(BUILDDIR)/$(TARGET_BINARY): $(OBJECTS) - $(CC) $(OBJECTS) $(CFLAGS) -o $@ - -# ============================================================================== - -# supported make options (clean, install...) -.PHONY: all default install clean - -# all calls all other options -all: default install - -# default builds target -default: $(BUILDDIR)/$(TARGET_BINARY) - -# install target binary -install: default - install -Dm0755 $(BUILDDIR)/$(TARGET_BINARY) $(INSTALLDIR)/$(BIN_PREFIX)/bin/$(TARGET_BINARY) - -# clean removes object files and target (ignore errors with "-" before commands) -clean: - -rm -rf $(BUILDDIR) - -rm -rf $(INSTALLDIR) diff --git a/moxerver/server.c b/server.c similarity index 100% rename from moxerver/server.c rename to server.c diff --git a/moxerver/server.h b/server.h similarity index 100% rename from moxerver/server.h rename to server.h diff --git a/moxerver/task_threads.c b/task_threads.c similarity index 100% rename from moxerver/task_threads.c rename to task_threads.c diff --git a/moxerver/task_threads.h b/task_threads.h similarity index 100% rename from moxerver/task_threads.h rename to task_threads.h diff --git a/moxerver/telnet.c b/telnet.c similarity index 100% rename from moxerver/telnet.c rename to telnet.c diff --git a/moxerver/telnet.h b/telnet.h similarity index 100% rename from moxerver/telnet.h rename to telnet.h diff --git a/tools/Makefile b/tools/Makefile deleted file mode 100644 index 9bc4e54..0000000 --- a/tools/Makefile +++ /dev/null @@ -1,32 +0,0 @@ -# target names -TARGET_CONTROL = moxerverctl -TARGET_CONFIG = moxerver.cfg - -# ============================================================================== - -# directory for build results -BUILDDIR = $(abspath build.dir) -# installation root -INSTALLDIR = $(abspath install.dir) -# prefix for /bin directory -BIN_PREFIX = /usr - -# ============================================================================== - -# supported make options (clean, install...) -.PHONY: default install clean - -# default does nothing -default: - -# install targets -install: - # install configuration file - install -Dm0644 $(TARGET_CONFIG) $(INSTALLDIR)/etc/$(TARGET_CONFIG) - # install control script, referring to the configuration file - install -Dm0755 $(TARGET_CONTROL) $(INSTALLDIR)/$(BIN_PREFIX)/bin/$(TARGET_CONTROL) - sed -i -e 's#ROOT=\"\"#ROOT=$(INSTALLDIR)#' $(INSTALLDIR)/$(BIN_PREFIX)/bin/$(TARGET_CONTROL) - -# clean removes object files and target (ignore errors with "-" before commands) -clean: - -rm -rf $(INSTALLDIR) diff --git a/moxerver/tty.c b/tty.c similarity index 100% rename from moxerver/tty.c rename to tty.c diff --git a/moxerver/tty.h b/tty.h similarity index 100% rename from moxerver/tty.h rename to tty.h