QKnxNetIpSearchRequestProxy Class

The QKnxNetIpSearchRequestProxy class provides the means to read a search request from the generic QKnxNetIpFrame class and to create a KNXnet/IP frame based on the information. More...

Header: #include <QKnxNetIpSearchRequestProxy>
qmake: QT += knx

Public Types

class Builder
class ExtendedBuilder

Public Functions

QKnxNetIpSearchRequestProxy(const QKnxNetIpFrame &frame)
QKnxNetIpHpai discoveryEndpoint() const
QVector<QKnxNetIpSrp> extendedSearchParameters() const
bool isExtended() const
bool isValid() const

Static Public Members

QKnxNetIpSearchRequestProxy::Builder builder()
QKnxNetIpSearchRequestProxy::ExtendedBuilder extendedBuilder()

Detailed Description

In networks where IP addresses are assigned at runtime, via BootP or DHCP, for example, it is important that KNXnet/IP clients are able to discover KNXnet/IP servers within a subnetwork and to establish connections to them without manual input.

To discover servers, a client sends a search request data packet via multicast using its discovery endpoint. The search request contains the host address protocol information (HPAI) of the discovery endpoint. The HPAI may also contain a unicast IP address to receive the answers from the different servers directly in a point-to-point manner. Typically, it should contain the KNXnet/IP system setup multicast address to ensure reception from KNXnet/IP servers that are on a different subnetwork.

In most programs, this class will not be used directly. Instead, the QKnxNetIpServerDiscoveryAgent and QKnxNetIpServerInfo are provided to discover KNXnet/IP servers on the network.

Note: When using QKnxNetIpSearchRequestProxy, care must be taken to ensure that the referenced KNXnet/IP frame outlives the proxy on all code paths, lest the proxy ends up referencing deleted data.

The following code sample illustrates how to read the search request information sent by a KNXnet/IP client:

 auto netIpFrame = QKnxNetIpFrame::fromBytes(...);

 QKnxNetIpSearchRequestProxy proxy(netIpFrame);
 if (!proxy.isValid())
     return;

 QKnxNetIpHpai hpai = proxy.discoveryEndpoint();
 // ...

See also builder() and Qt KNXnet/IP Connection Classes.

Member Function Documentation

QKnxNetIpSearchRequestProxy::QKnxNetIpSearchRequestProxy(const QKnxNetIpFrame &frame)

Constructs a proxy object to read the search request information carried by the specified KNXnet/IP frame frame.

[static] QKnxNetIpSearchRequestProxy::Builder QKnxNetIpSearchRequestProxy::builder()

Returns a builder object to create a KNXnet/IP search request frame.

QKnxNetIpHpai QKnxNetIpSearchRequestProxy::discoveryEndpoint() const

Returns the discovery endpoint of the KNXnet/IP client.

[static] QKnxNetIpSearchRequestProxy::ExtendedBuilder QKnxNetIpSearchRequestProxy::extendedBuilder()

Returns a builder object to create a KNXnet/IP extended search request frame.

This function was introduced in Qt 5.12.

QVector<QKnxNetIpSrp> QKnxNetIpSearchRequestProxy::extendedSearchParameters() const

Returns a vector of extended search request parameter (SRP) structures. The vector can be empty if no such structures are present or in case of an error while extracting the SRPs.

Note: The function does not perform validity checks on the QKnxNetIpFrame used to create the search request proxy object.

This function was introduced in Qt 5.12.

bool QKnxNetIpSearchRequestProxy::isExtended() const

Returns true if the frame service type is search request extended, otherwise returns false.

This function was introduced in Qt 5.12.

bool QKnxNetIpSearchRequestProxy::isValid() const

Returns true if the frame contains initialized values and is in itself valid, otherwise returns false. A valid KNXnet/IP frame consists of a search request with at least a valid header and a size in bytes corresponding to the total size of the KNXnet/IP frame header or a extended search request containing a valid header.

Note: The extended search parameter's validity check is not done by this function. It is up to the programmer to do the appropriate validity checks on that field.

See also QKnxNetIpFrameHeader::totalSize().