Compare commits

..

No commits in common. "master" and "update" have entirely different histories.

20 changed files with 49 additions and 172 deletions

6
.gitignore vendored
View file

@ -1,6 +1,8 @@
# object files/output directories
# executables
moxerver
# object files
*.o
*.dir
# logs directory during development
logs

View file

@ -1,7 +0,0 @@
language: cpp
compiler:
- gcc
- clang
script: make install

View file

@ -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)

View file

@ -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`

View file

@ -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));

14
tools/moxerverctl → moxanix.sh Normal file → Executable file
View file

@ -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)

View file

@ -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)

View file

@ -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)