diff options
author | Matthias P. Braendli (think) <matthias@mpb.li> | 2013-11-08 18:14:57 +0100 |
---|---|---|
committer | Matthias P. Braendli (think) <matthias@mpb.li> | 2013-11-08 18:14:57 +0100 |
commit | d930ee6b9a52f0eb9939b3fe55afd2361944edb2 (patch) | |
tree | a26c6c31bebe6681da54d9acd782c3fe96969da7 /src | |
parent | c5306f81a9d3b87df7e16c852f2505ac913193ca (diff) | |
download | dabmux-d930ee6b9a52f0eb9939b3fe55afd2361944edb2.tar.gz dabmux-d930ee6b9a52f0eb9939b3fe55afd2361944edb2.tar.bz2 dabmux-d930ee6b9a52f0eb9939b3fe55afd2361944edb2.zip |
add support for ZeroMQ output
Diffstat (limited to 'src')
-rw-r--r-- | src/DabMux.cpp | 10 | ||||
-rw-r--r-- | src/Makefile.am | 11 | ||||
-rw-r--r-- | src/Makefile.in | 27 | ||||
-rw-r--r-- | src/dabOutput/dabOutput.h | 42 | ||||
-rw-r--r-- | src/dabOutput/dabOutputFifo.cpp | 25 | ||||
-rw-r--r-- | src/dabOutput/dabOutputFile.cpp | 25 | ||||
-rw-r--r-- | src/dabOutput/dabOutputRaw.cpp | 25 | ||||
-rw-r--r-- | src/dabOutput/dabOutputSimul.cpp | 25 | ||||
-rw-r--r-- | src/dabOutput/dabOutputTcp.cpp | 25 | ||||
-rw-r--r-- | src/dabOutput/dabOutputUdp.cpp | 26 | ||||
-rw-r--r-- | src/dabOutput/dabOutputZMQ.cpp | 78 |
11 files changed, 314 insertions, 5 deletions
diff --git a/src/DabMux.cpp b/src/DabMux.cpp index 0e97340..ca0fb1a 100644 --- a/src/DabMux.cpp +++ b/src/DabMux.cpp @@ -494,6 +494,16 @@ int main(int argc, char *argv[]) } else if ((*output)->outputProto == "simul") { (*output)->output = new DabOutputSimul(); #endif // defined(HAVE_OUTPUT_SIMUL) +#if defined(HAVE_OUTPUT_ZEROMQ) + } else if ((*output)->outputProto == "zmq+tcp") { + (*output)->output = new DabOutputZMQ("tcp"); + } else if ((*output)->outputProto == "zmq+ipc") { + (*output)->output = new DabOutputZMQ("ipc"); + } else if ((*output)->outputProto == "zmq+pgm") { + (*output)->output = new DabOutputZMQ("pgm"); + } else if ((*output)->outputProto == "zmq+epgm") { + (*output)->output = new DabOutputZMQ("epgm"); +#endif // defined(HAVE_OUTPUT_ZEROMQ) } else { etiLog.printHeader(TcpLog::ERR, "Output protcol unknown: %s\n", (*output)->outputProto.c_str()); diff --git a/src/Makefile.am b/src/Makefile.am index b67a09c..4815e96 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -24,8 +24,14 @@ bin_PROGRAMS=CRC-DabMux CRC-BridgeTest FEC_FLAGS = FEC_LIBS =-lfec +if HAVE_OUTPUT_ZEROMQ_TEST +ZMQ_LIBS =-lzmq +else +ZMQ_LIBS = +endif + CRC_DabMux_CPPFLAGS =-I$(FARSYNC_DIR) -CRC_DabMux_LDADD =$(FEC_LIBS) -lpthread +CRC_DabMux_LDADD =$(FEC_LIBS) $(ZMQ_LIBS) -lpthread CRC_DabMux_SOURCES =DabMux.cpp \ dabInput.h dabInput.cpp \ dabInputBridgeUdp.h dabInputBridgeUdp.cpp \ @@ -53,6 +59,7 @@ CRC_DabMux_SOURCES =DabMux.cpp \ dabOutput/dabOutputSimul.cpp \ dabOutput/dabOutputTcp.cpp \ dabOutput/dabOutputUdp.cpp \ + dabOutput/dabOutputZMQ.cpp \ bridge.h bridge.c \ utils.cpp utils.h \ MuxElements.cpp MuxElements.h \ @@ -86,4 +93,4 @@ CRC-DabMux-cfg: CRC-DabMux all: CRC-DabMux-cfg all-am clean-local: - rm CRC-DabMux-cfg + rm -f CRC-DabMux-cfg diff --git a/src/Makefile.in b/src/Makefile.in index 0daffbd..c978e7e 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -148,6 +148,7 @@ am_CRC_DabMux_OBJECTS = CRC_DabMux-DabMux.$(OBJEXT) \ dabOutput/CRC_DabMux-dabOutputSimul.$(OBJEXT) \ dabOutput/CRC_DabMux-dabOutputTcp.$(OBJEXT) \ dabOutput/CRC_DabMux-dabOutputUdp.$(OBJEXT) \ + dabOutput/CRC_DabMux-dabOutputZMQ.$(OBJEXT) \ CRC_DabMux-bridge.$(OBJEXT) CRC_DabMux-utils.$(OBJEXT) \ CRC_DabMux-MuxElements.$(OBJEXT) \ CRC_DabMux-ParserCmdline.$(OBJEXT) \ @@ -160,7 +161,7 @@ am_CRC_DabMux_OBJECTS = CRC_DabMux-DabMux.$(OBJEXT) \ CRC_DabMux-TcpServer.$(OBJEXT) CRC_DabMux-TcpSocket.$(OBJEXT) CRC_DabMux_OBJECTS = $(am_CRC_DabMux_OBJECTS) am__DEPENDENCIES_1 = -CRC_DabMux_DEPENDENCIES = $(am__DEPENDENCIES_1) +CRC_DabMux_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false @@ -345,8 +346,10 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ FEC_FLAGS = FEC_LIBS = -lfec +@HAVE_OUTPUT_ZEROMQ_TEST_FALSE@ZMQ_LIBS = +@HAVE_OUTPUT_ZEROMQ_TEST_TRUE@ZMQ_LIBS = -lzmq CRC_DabMux_CPPFLAGS = -I$(FARSYNC_DIR) -CRC_DabMux_LDADD = $(FEC_LIBS) -lpthread +CRC_DabMux_LDADD = $(FEC_LIBS) $(ZMQ_LIBS) -lpthread CRC_DabMux_SOURCES = DabMux.cpp \ dabInput.h dabInput.cpp \ dabInputBridgeUdp.h dabInputBridgeUdp.cpp \ @@ -374,6 +377,7 @@ CRC_DabMux_SOURCES = DabMux.cpp \ dabOutput/dabOutputSimul.cpp \ dabOutput/dabOutputTcp.cpp \ dabOutput/dabOutputUdp.cpp \ + dabOutput/dabOutputZMQ.cpp \ bridge.h bridge.c \ utils.cpp utils.h \ MuxElements.cpp MuxElements.h \ @@ -496,6 +500,8 @@ dabOutput/CRC_DabMux-dabOutputTcp.$(OBJEXT): \ dabOutput/$(am__dirstamp) dabOutput/$(DEPDIR)/$(am__dirstamp) dabOutput/CRC_DabMux-dabOutputUdp.$(OBJEXT): \ dabOutput/$(am__dirstamp) dabOutput/$(DEPDIR)/$(am__dirstamp) +dabOutput/CRC_DabMux-dabOutputZMQ.$(OBJEXT): \ + dabOutput/$(am__dirstamp) dabOutput/$(DEPDIR)/$(am__dirstamp) CRC-DabMux$(EXEEXT): $(CRC_DabMux_OBJECTS) $(CRC_DabMux_DEPENDENCIES) $(EXTRA_CRC_DabMux_DEPENDENCIES) @rm -f CRC-DabMux$(EXEEXT) @@ -554,6 +560,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@dabOutput/$(DEPDIR)/CRC_DabMux-dabOutputSimul.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@dabOutput/$(DEPDIR)/CRC_DabMux-dabOutputTcp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@dabOutput/$(DEPDIR)/CRC_DabMux-dabOutputUdp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@dabOutput/$(DEPDIR)/CRC_DabMux-dabOutputZMQ.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @@ -1035,6 +1042,20 @@ dabOutput/CRC_DabMux-dabOutputUdp.obj: dabOutput/dabOutputUdp.cpp @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(CRC_DabMux_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o dabOutput/CRC_DabMux-dabOutputUdp.obj `if test -f 'dabOutput/dabOutputUdp.cpp'; then $(CYGPATH_W) 'dabOutput/dabOutputUdp.cpp'; else $(CYGPATH_W) '$(srcdir)/dabOutput/dabOutputUdp.cpp'; fi` +dabOutput/CRC_DabMux-dabOutputZMQ.o: dabOutput/dabOutputZMQ.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(CRC_DabMux_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT dabOutput/CRC_DabMux-dabOutputZMQ.o -MD -MP -MF dabOutput/$(DEPDIR)/CRC_DabMux-dabOutputZMQ.Tpo -c -o dabOutput/CRC_DabMux-dabOutputZMQ.o `test -f 'dabOutput/dabOutputZMQ.cpp' || echo '$(srcdir)/'`dabOutput/dabOutputZMQ.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) dabOutput/$(DEPDIR)/CRC_DabMux-dabOutputZMQ.Tpo dabOutput/$(DEPDIR)/CRC_DabMux-dabOutputZMQ.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='dabOutput/dabOutputZMQ.cpp' object='dabOutput/CRC_DabMux-dabOutputZMQ.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(CRC_DabMux_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o dabOutput/CRC_DabMux-dabOutputZMQ.o `test -f 'dabOutput/dabOutputZMQ.cpp' || echo '$(srcdir)/'`dabOutput/dabOutputZMQ.cpp + +dabOutput/CRC_DabMux-dabOutputZMQ.obj: dabOutput/dabOutputZMQ.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(CRC_DabMux_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT dabOutput/CRC_DabMux-dabOutputZMQ.obj -MD -MP -MF dabOutput/$(DEPDIR)/CRC_DabMux-dabOutputZMQ.Tpo -c -o dabOutput/CRC_DabMux-dabOutputZMQ.obj `if test -f 'dabOutput/dabOutputZMQ.cpp'; then $(CYGPATH_W) 'dabOutput/dabOutputZMQ.cpp'; else $(CYGPATH_W) '$(srcdir)/dabOutput/dabOutputZMQ.cpp'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) dabOutput/$(DEPDIR)/CRC_DabMux-dabOutputZMQ.Tpo dabOutput/$(DEPDIR)/CRC_DabMux-dabOutputZMQ.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='dabOutput/dabOutputZMQ.cpp' object='dabOutput/CRC_DabMux-dabOutputZMQ.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(CRC_DabMux_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o dabOutput/CRC_DabMux-dabOutputZMQ.obj `if test -f 'dabOutput/dabOutputZMQ.cpp'; then $(CYGPATH_W) 'dabOutput/dabOutputZMQ.cpp'; else $(CYGPATH_W) '$(srcdir)/dabOutput/dabOutputZMQ.cpp'; fi` + CRC_DabMux-utils.o: utils.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(CRC_DabMux_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT CRC_DabMux-utils.o -MD -MP -MF $(DEPDIR)/CRC_DabMux-utils.Tpo -c -o CRC_DabMux-utils.o `test -f 'utils.cpp' || echo '$(srcdir)/'`utils.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/CRC_DabMux-utils.Tpo $(DEPDIR)/CRC_DabMux-utils.Po @@ -1447,7 +1468,7 @@ CRC-DabMux-cfg: CRC-DabMux all: CRC-DabMux-cfg all-am clean-local: - rm CRC-DabMux-cfg + rm -f CRC-DabMux-cfg # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/src/dabOutput/dabOutput.h b/src/dabOutput/dabOutput.h index 7f295b4..a39a6ca 100644 --- a/src/dabOutput/dabOutput.h +++ b/src/dabOutput/dabOutput.h @@ -30,6 +30,7 @@ #include "UdpSocket.h" #include "TcpServer.h" #include "TcpLog.h" +#include <stdexcept> #include <signal.h> #ifdef _WIN32 # include <io.h> @@ -45,6 +46,9 @@ # define O_BINARY 0 # endif // O_BINARY #endif +#ifdef HAVE_OUTPUT_ZEROMQ +# include "zmq.hpp" +#endif extern TcpLog etiLog; @@ -244,5 +248,43 @@ class DabOutputSimul : public DabOutput #endif }; +#if defined(HAVE_OUTPUT_ZEROMQ) +// -------------- ZeroMQ message queue ------------------ +class DabOutputZMQ : public DabOutput +{ + public: + DabOutputZMQ() : + zmq_proto_(""), zmq_context_(1), zmq_pub_sock_(zmq_context_, ZMQ_PUB) + { + throw std::runtime_error("ERROR: No ZMQ protocol specified !"); + } + + DabOutputZMQ(std::string zmq_proto) : + zmq_proto_(zmq_proto), zmq_context_(1), zmq_pub_sock_(zmq_context_, ZMQ_PUB) + { } + + + DabOutputZMQ(const DabOutputZMQ& other) : + zmq_proto_(other.zmq_proto_), zmq_context_(1), zmq_pub_sock_(zmq_context_, ZMQ_PUB) + { + // cannot copy context + } + + ~DabOutputZMQ() + { + zmq_pub_sock_.close(); + } + + int Open(const char* name); + int Write(void* buffer, int size); + int Close(); + private: + std::string zmq_proto_; + zmq::context_t zmq_context_; // handle for the zmq context + zmq::socket_t zmq_pub_sock_; // handle for the zmq publisher socket +}; + +#endif + #endif diff --git a/src/dabOutput/dabOutputFifo.cpp b/src/dabOutput/dabOutputFifo.cpp index 49fc331..1674cd8 100644 --- a/src/dabOutput/dabOutputFifo.cpp +++ b/src/dabOutput/dabOutputFifo.cpp @@ -1,3 +1,28 @@ +/* + Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Her Majesty the Queen in + Right of Canada (Communications Research Center Canada) + + Copyright (C) 2013 Matthias P. Braendli + http://mpb.li + + Fifo output is very similar to file, except it doesn't seek + */ +/* + This file is part of CRC-DabMux. + + CRC-DabMux is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + CRC-DabMux is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with CRC-DabMux. If not, see <http://www.gnu.org/licenses/>. + */ #include <cstdio> #include <cstring> #include <fcntl.h> diff --git a/src/dabOutput/dabOutputFile.cpp b/src/dabOutput/dabOutputFile.cpp index 349a308..6512c5a 100644 --- a/src/dabOutput/dabOutputFile.cpp +++ b/src/dabOutput/dabOutputFile.cpp @@ -1,3 +1,28 @@ +/* + Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Her Majesty the Queen in + Right of Canada (Communications Research Center Canada) + + Copyright (C) 2013 Matthias P. Braendli + http://mpb.li + + File output + */ +/* + This file is part of CRC-DabMux. + + CRC-DabMux is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + CRC-DabMux is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with CRC-DabMux. If not, see <http://www.gnu.org/licenses/>. + */ #include <cstdio> #include <cstring> #include <fcntl.h> diff --git a/src/dabOutput/dabOutputRaw.cpp b/src/dabOutput/dabOutputRaw.cpp index 1a78b63..a9cd2a9 100644 --- a/src/dabOutput/dabOutputRaw.cpp +++ b/src/dabOutput/dabOutputRaw.cpp @@ -1,3 +1,28 @@ +/* + Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Her Majesty the Queen in + Right of Canada (Communications Research Center Canada) + + Copyright (C) 2013 Matthias P. Braendli + http://mpb.li + + RAW output used for farsync + */ +/* + This file is part of CRC-DabMux. + + CRC-DabMux is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + CRC-DabMux is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with CRC-DabMux. If not, see <http://www.gnu.org/licenses/>. + */ #include <cstdio> #include <cstring> #include "dabOutput.h" diff --git a/src/dabOutput/dabOutputSimul.cpp b/src/dabOutput/dabOutputSimul.cpp index e53b4ba..176649b 100644 --- a/src/dabOutput/dabOutputSimul.cpp +++ b/src/dabOutput/dabOutputSimul.cpp @@ -1,3 +1,28 @@ +/* + Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Her Majesty the Queen in + Right of Canada (Communications Research Center Canada) + + Copyright (C) 2013 Matthias P. Braendli + http://mpb.li + + SIMUL throttling output. It guarantees correct frame generation rate + */ +/* + This file is part of CRC-DabMux. + + CRC-DabMux is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + CRC-DabMux is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with CRC-DabMux. If not, see <http://www.gnu.org/licenses/>. + */ #include "dabOutput.h" #include <cstring> #include <cstdio> diff --git a/src/dabOutput/dabOutputTcp.cpp b/src/dabOutput/dabOutputTcp.cpp index a3d7a5a..c59eacb 100644 --- a/src/dabOutput/dabOutputTcp.cpp +++ b/src/dabOutput/dabOutputTcp.cpp @@ -1,3 +1,28 @@ +/* + Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Her Majesty the Queen in + Right of Canada (Communications Research Center Canada) + + Copyright (C) 2013 Matthias P. Braendli + http://mpb.li + + TCP output + */ +/* + This file is part of CRC-DabMux. + + CRC-DabMux is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + CRC-DabMux is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with CRC-DabMux. If not, see <http://www.gnu.org/licenses/>. + */ #include <cstring> #include <cstdio> #include <signal.h> diff --git a/src/dabOutput/dabOutputUdp.cpp b/src/dabOutput/dabOutputUdp.cpp index 1410071..684cd50 100644 --- a/src/dabOutput/dabOutputUdp.cpp +++ b/src/dabOutput/dabOutputUdp.cpp @@ -1,3 +1,29 @@ +/* + Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Her Majesty the Queen in + Right of Canada (Communications Research Center Canada) + + Copyright (C) 2013 Matthias P. Braendli + http://mpb.li + + UDP output + */ +/* + This file is part of CRC-DabMux. + + CRC-DabMux is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + CRC-DabMux is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with CRC-DabMux. If not, see <http://www.gnu.org/licenses/>. + */ + #include <cstring> #include <cstdio> #include <limits.h> diff --git a/src/dabOutput/dabOutputZMQ.cpp b/src/dabOutput/dabOutputZMQ.cpp new file mode 100644 index 0000000..271cfa1 --- /dev/null +++ b/src/dabOutput/dabOutputZMQ.cpp @@ -0,0 +1,78 @@ +/* + Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Her Majesty the Queen in + Right of Canada (Communications Research Center Canada) + + Copyright (C) 2013 Matthias P. Braendli + http://mpb.li + + ZeroMQ output. see www.zeromq.org for more info + + From the ZeroMQ manpage 'zmq': + + The 0MQ lightweight messaging kernel is a library which extends the standard + socket interfaces with features traditionally provided by specialised + messaging middleware products. 0MQ sockets provide an abstraction of + asynchronous message queues, multiple messaging patterns, message filtering + (subscriptions), seamless access to multiple transport protocols and more. + + */ +/* + This file is part of CRC-DabMux. + + CRC-DabMux is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + CRC-DabMux is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with CRC-DabMux. If not, see <http://www.gnu.org/licenses/>. + */ +#include "config.h" + +#if defined(HAVE_OUTPUT_ZEROMQ) + +#include <stdexcept> +#include <cstdio> +#include <cstring> +#include <signal.h> +#include <limits.h> +#include <unistd.h> +#include <errno.h> +#include <zmq.hpp> +#include "dabOutput.h" + +using namespace std; + +int DabOutputZMQ::Open(const char* endpoint) + // the format for endpoint shall be as defined in the zmq_bind manpage + // but without specifying the protocol. The protocol has been given in + // the constructor +{ + // bind to uri + string proto_endpoint = zmq_proto_ + "://" + std::string(endpoint); + std::cerr << "ZMQ socket " << proto_endpoint << std::endl; + zmq_pub_sock_.bind(proto_endpoint.c_str()); + + return 0; +} + + +int DabOutputZMQ::Write(void* buffer, int size) +{ + int flags = 0; + + return zmq_send(zmq_pub_sock_, buffer, size, flags); +} + + +int DabOutputZMQ::Close() +{ + return zmq_close(zmq_pub_sock_); +} + +#endif |