diff options
Diffstat (limited to 'lib/edi/Transport.h')
| -rw-r--r-- | lib/edi/Transport.h | 71 | 
1 files changed, 71 insertions, 0 deletions
| diff --git a/lib/edi/Transport.h b/lib/edi/Transport.h new file mode 100644 index 0000000..df6fe56 --- /dev/null +++ b/lib/edi/Transport.h @@ -0,0 +1,71 @@ +/* +   Copyright (C) 2019 +   Matthias P. Braendli, matthias.braendli@mpb.li + +    http://www.opendigitalradio.org + +   EDI output, +   UDP and TCP transports and their configuration + +   */ +/* +   This file is part of the ODR-mmbTools. + +   This program 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. + +   This program 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 this program.  If not, see <http://www.gnu.org/licenses/>. + */ + +#pragma once + +#include "config.h" +#include "EDIConfig.h" +#include "AFPacket.h" +#include "PFT.h" +#include "Interleaver.h" +#include "Socket.h" +#include <vector> +#include <unordered_map> +#include <stdexcept> +#include <fstream> +#include <cstdint> + +namespace edi { + +/** Configuration for EDI output */ + +class Sender { +    public: +        Sender(const configuration_t& conf); + +        void write(const TagPacket& tagpacket); + +    private: +        configuration_t m_conf; +        std::ofstream edi_debug_file; + +        // The TagPacket will then be placed into an AFPacket +        edi::AFPacketiser edi_afPacketiser; + +        // The AF Packet will be protected with reed-solomon and split in fragments +        edi::PFT edi_pft; + +        // To mitigate for burst packet loss, PFT fragments can be sent out-of-order +        edi::Interleaver edi_interleaver; + +        std::unordered_map<udp_destination_t*, std::shared_ptr<Socket::UDPSocket>> udp_sockets; +        std::unordered_map<tcp_server_t*, std::shared_ptr<Socket::TCPDataDispatcher>> tcp_dispatchers; +        std::unordered_map<tcp_client_t*, std::shared_ptr<Socket::TCPSocket>> tcp_senders; +}; + +} + | 
