Initial commit
This commit is contained in:
commit
9552a54c3d
5
.bash_history
Normal file
5
.bash_history
Normal file
@ -0,0 +1,5 @@
|
||||
ls
|
||||
ls
|
||||
make
|
||||
gcc
|
||||
ls
|
15
Dockerfile
Normal file
15
Dockerfile
Normal file
@ -0,0 +1,15 @@
|
||||
FROM registry.hottis.de/dockerized/c-build-env AS builder
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
LABEL Maintainer="Wolfgang Hottgenoth <woho@hottis.de>"
|
||||
LABEL ImageName="registry.hottis.de/dockerized/mqttauditing"
|
||||
LABEL AlternativeImageName="wollud1969/mqttauditing"
|
||||
|
||||
|
25
Makefile
Normal file
25
Makefile
Normal file
@ -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
|
13
logging.c
Normal file
13
logging.c
Normal file
@ -0,0 +1,13 @@
|
||||
#include <syslog.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
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();
|
||||
}
|
||||
|
8
logging.h
Normal file
8
logging.h
Normal file
@ -0,0 +1,8 @@
|
||||
#ifndef _LOGGING_H_
|
||||
#define _LOGGING_H_
|
||||
|
||||
#include <syslog.h>
|
||||
|
||||
void logmsg(int prio, const char* format, ...);
|
||||
|
||||
#endif // _LOGGING_H_
|
42
mqttauditing.c
Normal file
42
mqttauditing.c
Normal file
@ -0,0 +1,42 @@
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <libconfig.h>
|
||||
#include <math.h>
|
||||
|
||||
#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);
|
||||
}
|
2
mqttauditing.cfg
Normal file
2
mqttauditing.cfg
Normal file
@ -0,0 +1,2 @@
|
||||
# mqttauditing file
|
||||
|
53
ringbuffer.c
Normal file
53
ringbuffer.c
Normal file
@ -0,0 +1,53 @@
|
||||
#include <stdint.h>
|
||||
#include <pthread.h>
|
||||
|
||||
|
||||
#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;
|
||||
}
|
||||
|
||||
|
9
ringbuffer.h
Normal file
9
ringbuffer.h
Normal file
@ -0,0 +1,9 @@
|
||||
#ifndef _RINGBUFFER_H_
|
||||
#define _RINGBUFFER_H_
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
void ringbufferPut(uint32_t f);
|
||||
uint32_t ringbufferGet();
|
||||
|
||||
#endif // _RINGBUFFER_H_
|
6
startBuildEnv.sh
Executable file
6
startBuildEnv.sh
Executable file
@ -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
|
Loading…
x
Reference in New Issue
Block a user