From 9552a54c3dad001e5777d5d0e2be283e727ca23e Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Wed, 17 Jun 2020 09:06:02 +0200 Subject: [PATCH] Initial commit --- .bash_history | 5 +++++ Dockerfile | 15 ++++++++++++++ Makefile | 25 +++++++++++++++++++++++ VERSION | 1 + logging.c | 13 ++++++++++++ logging.h | 8 ++++++++ mqttauditing.c | 42 ++++++++++++++++++++++++++++++++++++++ mqttauditing.cfg | 2 ++ ringbuffer.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++ ringbuffer.h | 9 ++++++++ startBuildEnv.sh | 6 ++++++ version.c | 6 ++++++ 12 files changed, 185 insertions(+) create mode 100644 .bash_history create mode 100644 Dockerfile create mode 100644 Makefile create mode 100644 VERSION create mode 100644 logging.c create mode 100644 logging.h create mode 100644 mqttauditing.c create mode 100644 mqttauditing.cfg create mode 100644 ringbuffer.c create mode 100644 ringbuffer.h create mode 100755 startBuildEnv.sh create mode 100644 version.c diff --git a/.bash_history b/.bash_history new file mode 100644 index 0000000..4399c8d --- /dev/null +++ b/.bash_history @@ -0,0 +1,5 @@ +ls +ls +make +gcc +ls diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..64fa253 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,15 @@ +FROM registry.hottis.de/dockerized/c-build-env AS builder + + + + + + + + + +LABEL Maintainer="Wolfgang Hottgenoth " +LABEL ImageName="registry.hottis.de/dockerized/mqttauditing" +LABEL AlternativeImageName="wollud1969/mqttauditing" + + diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..fb8213f --- /dev/null +++ b/Makefile @@ -0,0 +1,25 @@ +CC=gcc + +CFLAGS=-Wall +LDFLAGS=-lconfig + +INST_DIR=/opt/sbin + +REFCNT:=$(shell git rev-list --all --count) +VERSION:=$(shell cat VERSION) + +.PHONY: all +all: mqttauditing + +mqttauditing: mqttauditing.o logging.o ringbuffer.o version.o + $(CC) -o $@ $(LDFLAGS) $^ + +version.o: version.c VERSION + $(CC) -DD_REFCNT=$(REFCNT) -DD_VERSION=\"$(VERSION)\" -c $< + +.c.o: + $(CC) $(CFLAGS) -c $< + +.PHONY: clean +clean: + -rm -f *.o mqttauditing diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..49d5957 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +0.1 diff --git a/logging.c b/logging.c new file mode 100644 index 0000000..ec695e6 --- /dev/null +++ b/logging.c @@ -0,0 +1,13 @@ +#include +#include + +void logmsg(int prio, const char* format, ...) { + va_list vl; + + openlog("mqttauditing", 0, LOG_LOCAL0); + va_start(vl, format); + vsyslog(prio, format, vl); + va_end(vl); + closelog(); +} + diff --git a/logging.h b/logging.h new file mode 100644 index 0000000..57bd67f --- /dev/null +++ b/logging.h @@ -0,0 +1,8 @@ +#ifndef _LOGGING_H_ +#define _LOGGING_H_ + +#include + +void logmsg(int prio, const char* format, ...); + +#endif // _LOGGING_H_ diff --git a/mqttauditing.c b/mqttauditing.c new file mode 100644 index 0000000..60c7a1a --- /dev/null +++ b/mqttauditing.c @@ -0,0 +1,42 @@ +#include +#include +#include +#include +#include +#include + +#include "ringbuffer.h" +#include "logging.h" + + +extern char VERSION[]; +extern uint32_t REFCNT; + + +config_t cfg; + + + +void readConfig() { + config_init(&cfg); + if (! config_read_file(&cfg, "/opt/etc/mqttauditing.cfg")) { + logmsg(LOG_ERR, "failed to read config file: %s:%d - %s\n", + config_error_file(&cfg), config_error_line(&cfg), + config_error_text(&cfg)); + config_destroy(&cfg); + exit(-1); + } +} + +int main (void) { + fprintf(stderr, "VERSION: %s, REFCNT: %u\n", VERSION, REFCNT); + + readConfig(); + + + fprintf(stderr, "started.\n"); + + + // will never be reached + config_destroy(&cfg); +} diff --git a/mqttauditing.cfg b/mqttauditing.cfg new file mode 100644 index 0000000..ab8ffdd --- /dev/null +++ b/mqttauditing.cfg @@ -0,0 +1,2 @@ +# mqttauditing file + diff --git a/ringbuffer.c b/ringbuffer.c new file mode 100644 index 0000000..0d8c81d --- /dev/null +++ b/ringbuffer.c @@ -0,0 +1,53 @@ +#include +#include + + +#define BUFFER_SIZE 256 + +uint32_t buffer[BUFFER_SIZE+5]; + +uint32_t bufferReadIdx = 0; +uint32_t bufferWriteIdx = 0; + +pthread_mutex_t eventMutex = PTHREAD_MUTEX_INITIALIZER; +pthread_cond_t eventSignal = PTHREAD_COND_INITIALIZER; + + + + +void ringbufferPut(uint32_t f) { + if (bufferWriteIdx == (BUFFER_SIZE - 1)) { + while (bufferReadIdx == BUFFER_SIZE); + } else { + while (bufferReadIdx == (bufferWriteIdx + 1)); + } + + buffer[bufferWriteIdx] = f; + bufferWriteIdx++; + + if (bufferWriteIdx > BUFFER_SIZE) { + bufferWriteIdx = 0; + } + + pthread_mutex_lock(&eventMutex); + pthread_cond_signal(&eventSignal); + pthread_mutex_unlock(&eventMutex); +} + + +uint32_t ringbufferGet() { + if (bufferReadIdx == bufferWriteIdx) { + pthread_mutex_lock(&eventMutex); + pthread_cond_wait(&eventSignal, &eventMutex); + pthread_mutex_unlock(&eventMutex); + } + + double res = buffer[bufferReadIdx]; + bufferReadIdx++; + if (bufferReadIdx > BUFFER_SIZE) { + bufferReadIdx = 0; + } + return res; +} + + diff --git a/ringbuffer.h b/ringbuffer.h new file mode 100644 index 0000000..ce5c90c --- /dev/null +++ b/ringbuffer.h @@ -0,0 +1,9 @@ +#ifndef _RINGBUFFER_H_ +#define _RINGBUFFER_H_ + +#include + +void ringbufferPut(uint32_t f); +uint32_t ringbufferGet(); + +#endif // _RINGBUFFER_H_ \ No newline at end of file diff --git a/startBuildEnv.sh b/startBuildEnv.sh new file mode 100755 index 0000000..d3f6a70 --- /dev/null +++ b/startBuildEnv.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +IMAGE=registry.hottis.de/dockerized/c-build-env:latest + +docker pull $IMAGE +docker run -it --rm -v $PWD:/work $IMAGE bash diff --git a/version.c b/version.c new file mode 100644 index 0000000..21beb18 --- /dev/null +++ b/version.c @@ -0,0 +1,6 @@ +#include + +const uint32_t REFCNT = D_REFCNT; +const char VERSION[] = D_VERSION; + +