Return error if zigbee network is not online yet and fix crash if reply is already finished before getting a response
This commit is contained in:
parent
0acc4d667f
commit
4b7e6a0ddb
@ -72,13 +72,13 @@ ZigbeeNetworkReply *ZigbeeNetworkDeconz::sendRequest(const ZigbeeNetworkRequest
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Finish the reply right the way if the network is offline
|
// Finish the reply right the way if the network is offline
|
||||||
if (!m_controller->available()) {
|
if (!m_controller->available() || state() != ZigbeeNetwork::StateRunning) {
|
||||||
finishNetworkReply(reply, ZigbeeNetworkReply::ErrorNetworkOffline);
|
finishNetworkReply(reply, ZigbeeNetworkReply::ErrorNetworkOffline);
|
||||||
return reply;
|
return reply;
|
||||||
}
|
}
|
||||||
|
|
||||||
ZigbeeInterfaceDeconzReply *interfaceReply = m_controller->requestSendRequest(request);
|
ZigbeeInterfaceDeconzReply *interfaceReply = m_controller->requestSendRequest(request);
|
||||||
connect(interfaceReply, &ZigbeeInterfaceDeconzReply::finished, this, [this, reply, interfaceReply](){
|
connect(interfaceReply, &ZigbeeInterfaceDeconzReply::finished, reply, [this, reply, interfaceReply](){
|
||||||
if (interfaceReply->statusCode() != Deconz::StatusCodeSuccess) {
|
if (interfaceReply->statusCode() != Deconz::StatusCodeSuccess) {
|
||||||
qCWarning(dcZigbeeController()) << "Could send request to controller. SQN:" << interfaceReply->sequenceNumber() << interfaceReply->statusCode();
|
qCWarning(dcZigbeeController()) << "Could send request to controller. SQN:" << interfaceReply->sequenceNumber() << interfaceReply->statusCode();
|
||||||
finishNetworkReply(reply, ZigbeeNetworkReply::ErrorInterfaceError);
|
finishNetworkReply(reply, ZigbeeNetworkReply::ErrorInterfaceError);
|
||||||
|
|||||||
@ -81,13 +81,13 @@ ZigbeeNetworkReply *ZigbeeNetworkNxp::sendRequest(const ZigbeeNetworkRequest &re
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Finish the reply right the way if the network is offline
|
// Finish the reply right the way if the network is offline
|
||||||
if (!m_controller->available()) {
|
if (!m_controller->available() || state() != ZigbeeNetwork::StateRunning) {
|
||||||
finishNetworkReply(reply, ZigbeeNetworkReply::ErrorNetworkOffline);
|
finishNetworkReply(reply, ZigbeeNetworkReply::ErrorNetworkOffline);
|
||||||
return reply;
|
return reply;
|
||||||
}
|
}
|
||||||
|
|
||||||
ZigbeeInterfaceNxpReply *interfaceReply = m_controller->requestSendRequest(request);
|
ZigbeeInterfaceNxpReply *interfaceReply = m_controller->requestSendRequest(request);
|
||||||
connect(interfaceReply, &ZigbeeInterfaceNxpReply::finished, this, [this, reply, interfaceReply](){
|
connect(interfaceReply, &ZigbeeInterfaceNxpReply::finished, reply, [this, reply, interfaceReply](){
|
||||||
if (interfaceReply->status() != Nxp::StatusSuccess) {
|
if (interfaceReply->status() != Nxp::StatusSuccess) {
|
||||||
qCWarning(dcZigbeeController()) << "Could send request to controller. SQN:" << interfaceReply->sequenceNumber() << interfaceReply->status();
|
qCWarning(dcZigbeeController()) << "Could send request to controller. SQN:" << interfaceReply->sequenceNumber() << interfaceReply->status();
|
||||||
finishNetworkReply(reply, ZigbeeNetworkReply::ErrorInterfaceError);
|
finishNetworkReply(reply, ZigbeeNetworkReply::ErrorInterfaceError);
|
||||||
@ -102,7 +102,7 @@ ZigbeeNetworkReply *ZigbeeNetworkNxp::sendRequest(const ZigbeeNetworkRequest &re
|
|||||||
}
|
}
|
||||||
|
|
||||||
quint8 networkRequestId = interfaceReply->responseData().at(0);
|
quint8 networkRequestId = interfaceReply->responseData().at(0);
|
||||||
qCDebug(dcZigbeeNetwork()) << "Request has network SQN" << networkRequestId;
|
//qCDebug(dcZigbeeNetwork()) << "Request has network SQN" << networkRequestId;
|
||||||
reply->request().setRequestId(networkRequestId);
|
reply->request().setRequestId(networkRequestId);
|
||||||
m_pendingReplies.insert(networkRequestId, reply);
|
m_pendingReplies.insert(networkRequestId, reply);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user