diff options
Diffstat (limited to 'src/knx/netip/qknxnetiproutinginterface.h')
-rw-r--r-- | src/knx/netip/qknxnetiproutinginterface.h | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/src/knx/netip/qknxnetiproutinginterface.h b/src/knx/netip/qknxnetiproutinginterface.h new file mode 100644 index 0000000..39560f6 --- /dev/null +++ b/src/knx/netip/qknxnetiproutinginterface.h @@ -0,0 +1,137 @@ +/****************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtKnx module. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +******************************************************************************/ + +#ifndef QKNXNETIPROUTINGINTERFACE_H +#define QKNXNETIPROUTINGINTERFACE_H + +#include <QtKnx/qknxaddress.h> +#include <QtKnx/qknxnetipframe.h> +#include <QtKnx/qknxlinklayerframe.h> +#include <QtKnx/qtknxglobal.h> + +#include <QtNetwork/qhostaddress.h> +#include <QtNetwork/qnetworkinterface.h> +#include <QtNetwork/qudpsocket.h> + +QT_BEGIN_NAMESPACE + +class QKnxNetIpRoutingInterfacePrivate; +class Q_KNX_EXPORT QKnxNetIpRoutingInterface : public QObject +{ + Q_OBJECT + Q_DISABLE_COPY(QKnxNetIpRoutingInterface) + Q_DECLARE_PRIVATE(QKnxNetIpRoutingInterface) + +public: + using FilterTable = QSet<QKnxAddress>; + + enum class State : quint8 + { + NotInit, + Routing, + NeighborBusy, + Stop, + Failure + }; + Q_ENUM(State) + QKnxNetIpRoutingInterface::State state() const; + + enum class Error : quint8 + { + None, + KnxRouting, + Network + }; + Q_ENUM(Error) + + QString errorString() const; + QKnxNetIpRoutingInterface::Error error() const; + + enum class FilterAction : quint8 + { + RouteUnmodified, + RouteDecremented, + RouteLast, + ForwardLocally, + IgnoreTotally, + IgnoreAcked + }; + Q_ENUM(FilterAction) + + enum class RoutingMode : quint8 + { + BlockRouting, + RouteAll, + FilterTableRouting + }; + + QKnxNetIpRoutingInterface(QObject *parent = nullptr); + ~QKnxNetIpRoutingInterface() = default; + + RoutingMode routingMode() const; + void setRoutingMode(RoutingMode mode); + + FilterTable filterTable() const; + void setFilterTable(const FilterTable &table); + + QNetworkInterface interfaceAffinity() const; + void setInterfaceAffinity(const QHostAddress &address); + void setInterfaceAffinity(const QNetworkInterface &iface); + + QHostAddress multicastAddress() const; + void setMulticastAddress(const QHostAddress &address); + + QKnxAddress individualAddress() const; + void setIndividualAddress(const QKnxAddress &address); + +public Q_SLOTS: + void sendRoutingIndication(const QKnxLinkLayerFrame &linkFrame); + void sendRoutingIndication(const QKnxNetIpFrame &frame); + void sendRoutingBusy(const QKnxNetIpFrame &frame); + void sendRoutingLostMessage(const QKnxNetIpFrame &frame); + + void start(); + void stop(); + +Q_SIGNALS: + void routingIndicationSent(QKnxNetIpFrame frame); + void routingBusySent(QKnxNetIpFrame frame); + void routingLostCountSent(QKnxNetIpFrame frame); + + void routingIndicationReceived(QKnxNetIpFrame frame, QKnxNetIpRoutingInterface::FilterAction action); + void routingBusyReceived(QKnxNetIpFrame frame); + void routingLostCountReceived(QKnxNetIpFrame frame); + + void stateChanged(QKnxNetIpRoutingInterface::State state); + void errorOccurred(QKnxNetIpRoutingInterface::Error error, QString errorString); +}; + +QT_END_NAMESPACE + +#endif |