summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Lutton <david@dalun.space>2016-09-11 23:09:38 +0100
committerDavid Lutton <david@dalun.space>2016-09-11 23:09:38 +0100
commit4edbb92086c6e63cc1d4234cdf992f71a0ea2806 (patch)
tree3cb9d546a1a3cdc07b9bc6f0c56bb6474b2f656b
parente0b501d897c90530df485add40a47864883bd26a (diff)
downloaddabmux-4edbb92086c6e63cc1d4234cdf992f71a0ea2806.tar.gz
dabmux-4edbb92086c6e63cc1d4234cdf992f71a0ea2806.tar.bz2
dabmux-4edbb92086c6e63cc1d4234cdf992f71a0ea2806.zip
Creates FIFO but breaks stdout
-rw-r--r--src/dabOutput/dabOutput.h2
-rw-r--r--src/dabOutput/dabOutputFifo.cpp58
2 files changed, 58 insertions, 2 deletions
diff --git a/src/dabOutput/dabOutput.h b/src/dabOutput/dabOutput.h
index d68cd9c..9032297 100644
--- a/src/dabOutput/dabOutput.h
+++ b/src/dabOutput/dabOutput.h
@@ -154,6 +154,7 @@ class DabOutputFifo : public DabOutputFile
DabOutputFifo() : DabOutputFile() {}
~DabOutputFifo() {}
+ int Open(const char* filename);
int Write(void* buffer, int size);
std::string get_info() const {
@@ -405,4 +406,3 @@ class DabOutputZMQ : public DabOutput
#endif
#endif
-
diff --git a/src/dabOutput/dabOutputFifo.cpp b/src/dabOutput/dabOutputFifo.cpp
index 6b1c016..1bc4d92 100644
--- a/src/dabOutput/dabOutputFifo.cpp
+++ b/src/dabOutput/dabOutputFifo.cpp
@@ -27,8 +27,65 @@
#include <cstring>
#include <fcntl.h>
#include <limits.h>
+#include <sys/types.h> // mkfifo
+#include <sys/stat.h> // mkfifo
#include "dabOutput.h"
+int DabOutputFifo::Open(const char* filename)
+{
+ char* token = strchr((char*)filename, '?');
+ if (token != NULL) {
+ *(token++) = 0;
+ char* nextPair;
+ char* key;
+ char* value;
+ // Go through all the &stuff=foo pairs
+ // Only the key "type" is supported
+ do {
+ nextPair = strchr(token, '&');
+ if (nextPair != NULL) {
+ *nextPair = 0;
+ }
+ key = token;
+ value = strchr(token, '=');
+ if (value != NULL) {
+ *(value++) = 0;
+ if (strcmp(key, "type") == 0) {
+ if (strcmp(value, "raw") == 0) {
+ this->type_ = ETI_FILE_TYPE_RAW;
+ break;
+ } else if (strcmp(value, "framed") == 0) {
+ this->type_ = ETI_FILE_TYPE_FRAMED;
+ break;
+ } else if (strcmp(value, "streamed") == 0) {
+ this->type_ = ETI_FILE_TYPE_STREAMED;
+ break;
+ } else {
+ etiLog.log(error,
+ "File type '%s' is not supported.\n", value);
+ return -1;
+ }
+ }
+ else {
+ etiLog.log(warn, "Parameter '%s' unknown\n", key);
+ }
+ }
+ } while (nextPair != NULL);
+ }
+
+ this->file_ = mkfifo(filename, 0666);
+ if (this->file_ == -1) {
+ perror(filename);
+ return -2;
+ }
+ this->file_ = open(filename, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0666);
+ if (this->file_ == -1) {
+ perror(filename);
+ return -1;
+ }
+ return 0;
+}
+
int DabOutputFifo::Write(void* buffer, int size)
{
@@ -71,4 +128,3 @@ FIFO_WRITE_ERROR:
perror("Error while writting to file");
return -1;
}
-