You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
dvmhost/src/fne/network/MetadataNetwork.h

133 lines
3.9 KiB

// SPDX-License-Identifier: GPL-2.0-only
/*
* Digital Voice Modem - Converged FNE Software
* GPLv2 Open Source. Use is subject to license terms.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright (C) 2024 Bryan Biedenkapp, N2PLL
*
*/
/**
* @file MetadataNetwork.h
* @ingroup fne_network
* @file MetadataNetwork.cpp
* @ingroup fne_network
*/
#if !defined(__METADATA_NETWORK_H__)
#define __METADATA_NETWORK_H__
#include "fne/Defines.h"
#include "common/network/BaseNetwork.h"
#include "common/ThreadPool.h"
#include "fne/network/TrafficNetwork.h"
#include <string>
// ---------------------------------------------------------------------------
// Class Prototypes
// ---------------------------------------------------------------------------
class HOST_SW_API HostFNE;
namespace network
{
// ---------------------------------------------------------------------------
// Class Declaration
// ---------------------------------------------------------------------------
/**
* @brief Implements the diagnostic/activity log networking logic.
* @ingroup fne_network
*/
class HOST_SW_API MetadataNetwork : public BaseNetwork {
public:
/**
* @brief Initializes a new instance of the MetadataNetwork class.
* @param host Instance of the HostFNE class.
* @param network Instance of the TrafficNetwork class.
* @param address Network Hostname/IP address to listen on.
* @param port Network port number.
* @param workerCnt Number of worker threads.
*/
MetadataNetwork(HostFNE* host, TrafficNetwork* trafficNetwork, const std::string& address, uint16_t port, uint16_t workerCnt);
/**
* @brief Finalizes a instance of the MetadataNetwork class.
*/
~MetadataNetwork() override;
/**
* @brief Gets the current status of the network.
* @returns NET_CONN_STATUS Current network status.
*/
NET_CONN_STATUS getStatus() { return m_status; }
/**
* @brief Sets endpoint preshared encryption key.
* @param presharedKey Encryption preshared key for networking.
*/
void setPresharedKey(const uint8_t* presharedKey);
/**
* @brief Process a data frames from the network.
*/
void processNetwork();
/**
* @brief Updates the timer by the passed number of milliseconds.
* @param ms Number of milliseconds.
*/
void clock(uint32_t ms) override;
/**
* @brief Opens connection to the network.
* @returns bool True, if networking has started, otherwise false.
*/
bool open() override;
/**
* @brief Closes connection to the network.
*/
void close() override;
private:
friend class TrafficNetwork;
TrafficNetwork* m_trafficNetwork;
HostFNE* m_host;
std::string m_address;
uint16_t m_port;
NET_CONN_STATUS m_status;
/**
* @brief Represents a packet buffer entry in a map.
*/
class PacketBufferEntry {
public:
/**
* @brief Stream ID of the packet.
*/
uint32_t streamId;
/**
* @brief Packet fragment buffer.
*/
PacketBuffer* buffer;
bool locked;
};
concurrent::unordered_map<uint32_t, PacketBufferEntry> m_peerReplicaActPkt;
concurrent::unordered_map<uint32_t, PacketBufferEntry> m_peerTreeListPkt;
ThreadPool m_threadPool;
/**
* @brief Entry point to process a given network packet.
* @param req Instance of the NetPacketRequest structure.
*/
static void taskNetworkRx(NetPacketRequest* req);
};
} // namespace network
#endif // __METADATA_NETWORK_H__

Powered by TurnKey Linux.