int blinkIndicator(MqttsPublish* msg){ MQString sw = MQString(); sw.readBuf(msg->getData()); if( sw == *on){ indicator = 1; }else if( sw == *off){ indicator = 0; } return 0; }
/* =================================================== Procedures for Received Messages =====================================================*/ void MqttsnClient::recieveMessageHandler(NWResponse* recvMsg, int* returnCode){ uint8_t msgType = recvMsg->getType(); if ( _clientStatus.isSearching() && (msgType != MQTTSN_TYPE_GWINFO)){ *returnCode = MQTTSN_ERR_NO_ERROR; /*--------- GWINFO ----------*/ }else if (msgType == MQTTSN_TYPE_GWINFO){ D_MQTTW("GWINFO recv\r\n"); MqttsnGwInfo mqMsg = MqttsnGwInfo(); copyMsg(&mqMsg, recvMsg); if (getMsgRequestType() == MQTTSN_TYPE_SEARCHGW){ if(_clientStatus.recvGWINFO(&mqMsg)){ setMsgRequestStatus(MQTTSN_MSG_COMPLETE); }else{ setMsgRequestStatus(MQTTSN_MSG_REJECTED); } _network->setGwAddress(); } /*--------- REGISTER ----------*/ }else if (msgType == MQTTSN_TYPE_REGISTER){ if(_clientStatus.isAvailableToSend()){ D_MQTTW("REGISTER recv\r\n"); MqttsnRegister mqMsg = MqttsnRegister(); mqMsg.setFrame(recvMsg); uint16_t topicId = _topics.getTopicId(mqMsg.getTopicName()); if (topicId == 0){ if (_topics.match(mqMsg.getTopicName())){ MQString* mqStr = mqMsg.getTopicName()->create(); _topics.addTopic(mqStr); _topics.setTopicId(mqStr,mqMsg.getTopicId()); _topics.setCallback(mqMsg.getTopicId(),_topics.match(mqStr)->getCallback()); } } if (mqMsg.getMsgId() != 0){ regAck(mqMsg.getTopicId(), mqMsg.getMsgId(), MQTTSN_RC_ACCEPTED); if(getMsgRequestStatus() == MQTTSN_MSG_WAIT_ACK){ *returnCode = MQTTSN_READ_RESP_ONCE_MORE; } }else{ D_MQTTW("RegAck is not required\r\n"); } }else{ D_MQTTW("REGISTER recv. Client is not Active\r\n"); } /*--------- PUBLISH --------*/ }else if (msgType == MQTTSN_TYPE_PUBLISH){ if(_clientStatus.isAvailableToSend()){ D_MQTTW("PUBLISH recv\r\n"); MqttsnPublish mqMsg = MqttsnPublish(); mqMsg.setFrame(recvMsg); _pubHdl.exec(&mqMsg,&_topics); // Execute Callback routine if (mqMsg.getQos() == MQTTSN_FLAG_QOS_1){ pubAck(mqMsg.getTopicId(), mqMsg.getMsgId(), MQTTSN_RC_ACCEPTED); unicast(MQTTSN_TIME_RETRY); }else if(mqMsg.getQos() == MQTTSN_FLAG_QOS_2){ pubRec(mqMsg.getMsgId()); unicast(MQTTSN_TIME_RETRY); } if(getMsgRequestStatus() == MQTTSN_MSG_WAIT_ACK){ *returnCode = MQTTSN_READ_RESP_ONCE_MORE; } }else{ D_MQTTW("PUBLISH recv Client is not Active\r\n"); } /*=========== Response =========*/ /*--------- PUBACK ----------*/ }else if (msgType == MQTTSN_TYPE_PUBACK && (getMsgRequestStatus() == MQTTSN_MSG_WAIT_ACK && getMsgRequestType() == MQTTSN_TYPE_PUBLISH)){ MqttsnPubAck mqMsg = MqttsnPubAck(); copyMsg(&mqMsg, recvMsg); D_MQTTW("\nPUBACK recv RC="); D_MQTTLN(mqMsg.getReturnCode(),DEC); D_MQTTF("%d\r\n", mqMsg.getReturnCode()); if (mqMsg.getMsgId() == getUint16(_sendQ->getMessage(0)->getBody() + 3)){ if (mqMsg.getReturnCode() == MQTTSN_RC_ACCEPTED){ setMsgRequestStatus(MQTTSN_MSG_COMPLETE); }else if (mqMsg.getReturnCode() == MQTTSN_RC_REJECTED_CONGESTION){ setMsgRequestStatus(MQTTSN_MSG_RESEND_REQ); }else if (mqMsg.getReturnCode() == MQTTSN_RC_REJECTED_INVALID_TOPIC_ID){ *returnCode = MQTTSN_ERR_INVALID_TOPICID; setMsgRequestStatus(MQTTSN_MSG_REJECTED); } }else{ //D_MQTTW("MsgId dosn't match.\r\n"); } /*--------- PINGRESP ----------*/ }else if (msgType == MQTTSN_TYPE_PINGRESP){ D_MQTTW("PINGRESP recv\r\n"); if (getMsgRequestType() == MQTTSN_TYPE_PINGREQ){ _clientStatus.recvPINGRESP(); setMsgRequestStatus(MQTTSN_MSG_COMPLETE); } /*--------- ADVERTISE ----------*/ }else if (msgType == MQTTSN_TYPE_ADVERTISE){ D_MQTTW("ADVERTISE recv\r\n"); MqttsnAdvertise mqMsg = MqttsnAdvertise(); copyMsg(&mqMsg, recvMsg); _clientStatus.recvADVERTISE(&mqMsg); if(getMsgRequestStatus() == MQTTSN_MSG_WAIT_ACK){ *returnCode = MQTTSN_READ_RESP_ONCE_MORE; } /*--------- CONNACK ----------*/ }else if (msgType == MQTTSN_TYPE_CONNACK){ if ((getMsgRequestType() == MQTTSN_TYPE_CONNECT || getMsgRequestType() == MQTTSN_TYPE_WILLMSG)){ MqttsnConnack mqMsg = MqttsnConnack(); copyMsg(&mqMsg, recvMsg); D_MQTTW("CONNACK recv RC="); D_MQTTLN(mqMsg.getReturnCode(),DEC); D_MQTTF("%d\r\n", mqMsg.getReturnCode()); if (mqMsg.getReturnCode() == MQTTSN_RC_ACCEPTED){ setMsgRequestStatus(MQTTSN_MSG_COMPLETE); _clientStatus.recvCONNACK(); }else if (mqMsg.getReturnCode() == MQTTSN_RC_REJECTED_CONGESTION){ setMsgRequestStatus(MQTTSN_MSG_COMPLETE); _clientStatus.recvDISCONNECT(); *returnCode = MQTTSN_ERR_REJECTED; }else{ setMsgRequestStatus(MQTTSN_MSG_REJECTED); *returnCode = MQTTSN_ERR_REJECTED; // Return Code _clientStatus.recvDISCONNECT(); } } D_MQTTW("\r\n"); /*--------- REGACK ----------*/ }else if (msgType == MQTTSN_TYPE_REGACK){ D_MQTTW("REGACK recv\r\n"); if (getMsgRequestStatus() == MQTTSN_MSG_WAIT_ACK && getMsgRequestType() == MQTTSN_TYPE_REGISTER){ MqttsnRegAck mqMsg = MqttsnRegAck(); copyMsg(&mqMsg, recvMsg); if (mqMsg.getMsgId() == getUint16(_sendQ->getMessage(0)->getBody() + 2)){ if (getUint16((uint8_t*)_sendQ->getMessage(0)->getBody()+4)){ if (mqMsg.getReturnCode() == MQTTSN_RC_ACCEPTED){ setMsgRequestStatus(MQTTSN_MSG_COMPLETE); MQString topic; topic.readBuf(_sendQ->getMessage(0)->getBody() + 4); _topics.setTopicId(&topic, mqMsg.getTopicId()); }else if (mqMsg.getReturnCode() == MQTTSN_RC_REJECTED_CONGESTION){ setMsgRequestStatus(MQTTSN_MSG_RESEND_REQ); }else{ *returnCode = MQTTSN_ERR_REJECTED; } } } } /*--------- SUBACK ----------*/ }else if (msgType == MQTTSN_TYPE_SUBACK && getMsgRequestStatus() == MQTTSN_MSG_WAIT_ACK){ MqttsnSubAck mqMsg = MqttsnSubAck(); copyMsg(&mqMsg, recvMsg); D_MQTT("\nSUBACK RC="); D_MQTTLN(mqMsg.getReturnCode(),HEX); D_MQTTF("\nSUBACK RC=%d\r\n", mqMsg.getReturnCode()); if (mqMsg.getMsgId() == getUint16(_sendQ->getMessage(0)->getBody() + 1)){ if (mqMsg.getReturnCode() == MQTTSN_RC_ACCEPTED){ setMsgRequestStatus(MQTTSN_MSG_COMPLETE); if (_sendQ->getMessage(0)->getBodyLength() > 5){ // TopicName is not Id MQString topic; topic.copy(_sendQ->getMessage(0)->getBody() + 3, _sendQ->getMessage(0)->getBodyLength() - 3); _topics.setTopicId(&topic, mqMsg.getTopicId()); } }else if (mqMsg.getReturnCode() == MQTTSN_RC_REJECTED_CONGESTION){ setMsgRequestStatus(MQTTSN_MSG_RESEND_REQ); }else{ *returnCode = MQTTSN_ERR_REJECTED; // Return Code } } /*--------- UNSUBACK ----------*/ }else if (msgType == MQTTSN_TYPE_UNSUBACK && getMsgRequestStatus() == MQTTSN_MSG_WAIT_ACK){ D_MQTTW("UNSUBACK recv\r\n"); MqttsnUnSubAck mqMsg = MqttsnUnSubAck(); copyMsg(&mqMsg, recvMsg); if (mqMsg.getMsgId() == getUint16(_sendQ->getMessage(0)->getBody() + 1)){ setMsgRequestStatus(MQTTSN_MSG_COMPLETE); } /*--------- DISCONNECT ----------*/ }else if (msgType == MQTTSN_TYPE_DISCONNECT){ D_MQTTW("DISCONNECT recv\r\n"); setMsgRequestStatus(MQTTSN_MSG_COMPLETE); _clientStatus.recvDISCONNECT(); /*--------- WILLTOPICREQ ----------*/ }else if (msgType == MQTTSN_TYPE_WILLTOPICREQ){ D_MQTTW("WILLTOPICREQ recv\r\n"); if (getMsgRequestType() == MQTTSN_TYPE_CONNECT){ clearMsgRequest(); //setMsgRequestStatus(MQTTSN_MSG_COMPLETE); MqttsnWillTopic mqMsg = MqttsnWillTopic(); mqMsg.setFlags(0); // ToDo: add WillQoS, WillRetain to appConfig mqMsg.setWillTopic(_willTopic); requestPrioritySendMsg((MqttsnMessage*)&mqMsg); } /*--------- WILLMSGREQ -----------*/ }else if (msgType == MQTTSN_TYPE_WILLMSGREQ){ D_MQTTW("WILLMSGREQ recv\r\n"); if (getMsgRequestType() == MQTTSN_TYPE_WILLTOPIC){ clearMsgRequest(); //setMsgRequestStatus(MQTTSN_MSG_COMPLETE); MqttsnWillMsg mqMsg = MqttsnWillMsg(); mqMsg.setWillMsg(_willMessage); requestPrioritySendMsg((MqttsnMessage*)&mqMsg); } /*--------- PUBREC ----------*/ }else if (msgType == MQTTSN_TYPE_PUBREC && (getMsgRequestStatus() == MQTTSN_MSG_WAIT_ACK && getMsgRequestType() == MQTTSN_TYPE_PUBLISH)){ MqttsnPubRec mqMsg = MqttsnPubRec(); copyMsg(&mqMsg, recvMsg); D_MQTTW("\nPUBREC recv\r\n"); if (mqMsg.getMsgId() == getUint16(_sendQ->getMessage(0)->getBody() + 3)){ MqttsnPubRel mqrMsg = MqttsnPubRel(); mqrMsg.setMsgId(mqMsg.getMsgId()); requestPrioritySendMsg((MqttsnMessage*)&mqrMsg); } /*--------- PUBREL ----------*/ }else if (msgType == MQTTSN_TYPE_PUBREL && (getMsgRequestStatus() == MQTTSN_MSG_WAIT_ACK && getMsgRequestType() == MQTTSN_TYPE_PUBREC)){ MqttsnPubRel mqMsg = MqttsnPubRel(); copyMsg(&mqMsg, recvMsg); D_MQTTW("\nPUBREL recv\r\n"); if (mqMsg.getMsgId() == getUint16(_sendQ->getMessage(0)->getBody())){ clearMsgRequest(); // delete PUBREC MqttsnPubComp mqrMsg = MqttsnPubComp(); mqrMsg.setMsgId(mqMsg.getMsgId()); requestPrioritySendMsg((MqttsnMessage*)&mqMsg); } /*--------- PUBCOMP ----------*/ }else if (msgType == MQTTSN_TYPE_PUBCOMP && (getMsgRequestStatus() == MQTTSN_MSG_WAIT_ACK && getMsgRequestType() == MQTTSN_TYPE_PUBREL)){ MqttsnPubComp mqMsg = MqttsnPubComp(); copyMsg(&mqMsg, recvMsg); D_MQTTW("\nPUBCOMP recv\r\n"); if (mqMsg.getMsgId() == getUint16(_sendQ->getMessage(0)->getBody())){ clearMsgRequest(); // delete request of PUBREL setMsgRequestStatus(MQTTSN_MSG_COMPLETE); // PUBLISH complete } }else{ *returnCode = PACKET_ERROR_NODATA; } }
/* =================================================== Procedures for Received Messages =====================================================*/ void MqttsClient::recieveMessageHandler(ZBRxResponse* recvMsg, int* returnCode){ if ( _gwHdl.isSearching() && (recvMsg->getData()[1] != MQTTS_TYPE_GWINFO)){ *returnCode = MQTTS_ERR_NO_ERROR; /*--------- PUBLISH --------*/ }else if (recvMsg->getData()[1] == MQTTS_TYPE_PUBLISH){ #ifdef DEBUG_MQTTS #ifdef ARDUINO debug.println("PUBLISH Received"); #endif #ifdef MBED debug.fprintf(stdout,"PUBLISH received\n"); #endif #ifdef LINUX fprintf(stdout,"PUBLISH received\n"); #endif #endif /* DEBUG_MQTTS */ MqttsPublish mqMsg = MqttsPublish(); mqMsg.setFrame(recvMsg); if ( _gwHdl.getAddress16() == getRxRemoteAddress16()){ *returnCode = _pubHdl.exec(&mqMsg,&_topics); if (mqMsg.getQos() && MQTTS_FLAG_QOS_1){ pubAck(mqMsg.getTopicId(), mqMsg.getMsgId(), MQTTS_RC_ACCEPTED); } } /*--------- PUBACK ----------*/ }else if (recvMsg->getData()[1] == MQTTS_TYPE_PUBACK && getMsgRequestStatus() == MQTTS_MSG_WAIT_ACK){ MqttsPubAck mqMsg = MqttsPubAck(); copyMsg(&mqMsg, recvMsg); if (mqMsg.getMsgId() == getLong(_sendQ->getMessage(0)->getBody() + 3)){ if (mqMsg.getReturnCode() == MQTTS_RC_ACCEPTED){ setMsgRequestStatus(MQTTS_MSG_COMPLETE); }else if (mqMsg.getReturnCode() == MQTTS_RC_REJECTED_CONGESTION){ setMsgRequestStatus(MQTTS_MSG_RESEND_REQ); }else{ *returnCode = MQTTS_ERR_REJECTED; setMsgRequestStatus(MQTTS_MSG_REJECTED); } } #ifdef DEBUG_MQTTS #ifdef ARDUINO debug.print("\nPUBACK ReturnCode="); debug.println(mqMsg.getReturnCode(),HEX); debug.println(); #endif #ifdef MBED debug.fprintf(stdout,"\nPUBACK ReturnCode=%d\n", mqMsg.getReturnCode()); #endif #ifdef LINUX fprintf(stdout,"\nPUBACK ReturnCode=%d\n", mqMsg.getReturnCode()); #endif #endif /* DEBUG_MQTTS */ /*--------- PINGRESP ----------*/ }else if (recvMsg->getData()[1] == MQTTS_TYPE_PINGRESP){ _gwHdl.recvPingResp(); if (getMsgRequestType() == MQTTS_TYPE_PINGREQ){ setMsgRequestStatus(MQTTS_MSG_COMPLETE); } #ifdef DEBUG_MQTTS #ifdef ARDUINO debug.println(" PINGRESP received"); #endif #ifdef MBED debug.fprintf(stdout," PINGRESP received\n"); #endif #ifdef LINUX fprintf(stdout," PINGRESP received\n"); #endif #endif /* DEBUG_MQTTS */ /*--------- PINGREQ ----------*/ }else if (recvMsg->getData()[1] == MQTTS_TYPE_PINGREQ){ pingResp(); #ifdef DEBUG_MQTTS #ifdef ARDUINO debug.println(" PINGREQ received"); #endif #ifdef MBED debug.fprintf(stdout," PINGREQ received\n"); #endif #ifdef LINUX fprintf(stdout," PINGREQ received\n"); #endif #endif /* DEBUG_MQTTS */ /*--------- ADVERTISE ----------*/ }else if (recvMsg->getData()[1] == MQTTS_TYPE_ADVERTISE){ *returnCode = MQTTS_ERR_NO_ERROR; MqttsAdvertise mqMsg = MqttsAdvertise(); copyMsg(&mqMsg, recvMsg); _gwHdl.recvAdvertise(&mqMsg); #ifdef DEBUG_MQTTS #ifdef ARDUINO debug.println(" ADVERTISE received"); #endif #ifdef MBED debug.fprintf(stdout," ADVERTISE received\n"); #endif #ifdef LINUX fprintf(stdout," ADVERTISE received\n"); #endif #endif /* DEBUG_MQTTS */ // ToDo Update list of gateways. elements are ZBNode /*--------- GWINFO ----------*/ }else if (recvMsg->getData()[1] == MQTTS_TYPE_GWINFO){ MqttsGwInfo mqMsg = MqttsGwInfo(); copyMsg(&mqMsg, recvMsg); _gwHdl.recvGwInfo(&mqMsg); if (getMsgRequestType() == MQTTS_TYPE_SEARCHGW){ setMsgRequestStatus(MQTTS_MSG_COMPLETE); } #ifdef DEBUG_MQTTS #ifdef ARDUINO debug.println(" GWINFO received"); #endif #ifdef MBED debug.fprintf(stdout," GWINFO received\n"); #endif #ifdef LINUX fprintf(stdout," GWINFO received\n"); #endif #endif /* DEBUG_MQTTS */ /*--------- CANNACK ----------*/ }else if (recvMsg->getData()[1] == MQTTS_TYPE_CONNACK){ if (_qos == 1 && getMsgRequestStatus() == MQTTS_MSG_WAIT_ACK){ MqttsConnack mqMsg = MqttsConnack(); copyMsg(&mqMsg, recvMsg); if (mqMsg.getReturnCode() == MQTTS_RC_ACCEPTED){ setMsgRequestStatus(MQTTS_MSG_COMPLETE); _gwHdl.setStatus(MQTTS_GW_CONNECTED); }else if (mqMsg.getReturnCode() == MQTTS_RC_REJECTED_CONGESTION){ setMsgRequestStatus(MQTTS_MSG_RESEND_REQ); }else{ setMsgRequestStatus(MQTTS_MSG_REJECTED); *returnCode = MQTTS_ERR_REJECTED; } } #ifdef DEBUG_MQTTS #ifdef ARDUINO debug.println(" CONNACK received"); #endif #ifdef MBED debug.fprintf(stdout," CONNACK received\n"); #endif #ifdef LINUX fprintf(stdout," CONNACK received\n"); #endif #endif /* DEBUG_MQTTS */ /*--------- REGISTER ----------*/ }else if (recvMsg->getData()[1] == MQTTS_TYPE_REGISTER){ MqttsRegister mqMsg = MqttsRegister(); mqMsg.setFrame(recvMsg); if (_topics.match(mqMsg.getTopicName())){ _topics.addTopic(mqMsg.getTopicName()); _topics.setTopicId(mqMsg.getTopicName(),mqMsg.getTopicId()); _topics.setCallback(mqMsg.getTopicId(),_topics.match(mqMsg.getTopicName())->getCallback()); } #ifdef DEBUG_MQTTS #ifdef ARDUINO debug.println(" REGISTER received"); #endif #ifdef MBED debug.fprintf(stdout," REGISTER received\n"); #endif #ifdef LINUX fprintf(stdout," REGISTER received\n"); #endif #endif /* DEBUG_MQTTS */ /*--------- REGACK ----------*/ }else if (recvMsg->getData()[1] == MQTTS_TYPE_REGACK){ if (getMsgRequestStatus() == MQTTS_MSG_WAIT_ACK && getMsgRequestType() == MQTTS_TYPE_REGISTER){ // ToDo Debug MqttsRegAck mqMsg = MqttsRegAck(); copyMsg(&mqMsg, recvMsg); if (mqMsg.getMsgId() == getLong(_sendQ->getMessage(0)->getBody() + 2)){ if (getLong((uint8_t*)_sendQ->getMessage(0)->getBody()+4)){ if (mqMsg.getReturnCode() == MQTTS_RC_ACCEPTED){ MQString topic; topic.readBuf(_sendQ->getMessage(0)->getBody() + 4); _topics.setTopicId(&topic, mqMsg.getTopicId()); setMsgRequestStatus(MQTTS_MSG_COMPLETE); }else if (mqMsg.getReturnCode() == MQTTS_RC_REJECTED_CONGESTION){ setMsgRequestStatus(MQTTS_MSG_RESEND_REQ); }else{ *returnCode = MQTTS_ERR_REJECTED; } } } } #ifdef DEBUG_MQTTS #ifdef ARDUINO debug.println(" REGACK received"); #endif #ifdef MBED debug.fprintf(stdout," REGACK received\n"); #endif #ifdef LINUX fprintf(stdout," REGACK received\n"); #endif #endif /* DEBUG_MQTTS */ /*--------- SUBACK ----------*/ }else if (recvMsg->getData()[1] == MQTTS_TYPE_SUBACK && getMsgRequestStatus() == MQTTS_MSG_WAIT_ACK){ // ToDo Debug MqttsSubAck mqMsg = MqttsSubAck(); copyMsg(&mqMsg, recvMsg); if (mqMsg.getMsgId() == getLong(_sendQ->getMessage(0)->getBody() + 1)){ if (mqMsg.getReturnCode() == MQTTS_RC_ACCEPTED){ setMsgRequestStatus(MQTTS_MSG_COMPLETE); if (_sendQ->getMessage(0)->getBodyLength() > 5){ // TopicName is not Id MQString topic; topic.readBuf(_sendQ->getMessage(0)->getBody() + 3); _topics.setTopicId(&topic, mqMsg.getTopicId()); } }else if (mqMsg.getReturnCode() == MQTTS_RC_REJECTED_CONGESTION){ setMsgRequestStatus(MQTTS_MSG_REQUEST); }else{ *returnCode = MQTTS_ERR_REJECTED; } } #ifdef DEBUG_MQTTS #ifdef ARDUINO debug.println(); debug.print("SUBACK ReturnCode="); debug.println(mqMsg.getReturnCode(),HEX); #endif #if MBED debug.fprintf(stdout,"\nSUBACK ReturnCode=%d\n", mqMsg.getReturnCode()); #endif #ifdef LINUX fprintf(stdout,"\nSUBACK ReturnCode=%d\n", mqMsg.getReturnCode()); #endif #endif /* DEBUG_MQTTS */ /*--------- UNSUBACK ----------*/ }else if (recvMsg->getData()[1] == MQTTS_TYPE_UNSUBACK && getMsgRequestStatus() == MQTTS_MSG_WAIT_ACK){ MqttsUnSubAck mqMsg = MqttsUnSubAck(); copyMsg(&mqMsg, recvMsg); if (mqMsg.getMsgId() == getLong(_sendQ->getMessage(0)->getBody() + 1)){ setMsgRequestStatus(MQTTS_MSG_COMPLETE); } #ifdef DEBUG_MQTTS #ifdef ARDUINO debug.println(" UNSUBACK received"); #endif #ifdef MBED debug.fprintf(stdout," UNSUBACK received\n"); #endif #ifdef LINUX fprintf(stdout," UNSUBACK received\n"); #endif #endif /* DEBUG_MQTTS */ /*--------- DISCONNECT ----------*/ }else if (recvMsg->getData()[1] == MQTTS_TYPE_DISCONNECT && getMsgRequestStatus() == MQTTS_MSG_WAIT_ACK){ setMsgRequestStatus(MQTTS_MSG_COMPLETE); _gwHdl.setStatus(MQTTS_GW_DISCONNECTED); #ifdef DEBUG_MQTTS #ifdef ARDUINO debug.println(" DISCONNECT received"); #endif #ifdef MBED debug.fprintf(stdout," DISCONNECT received\n"); #endif #ifdef LINUX fprintf(stdout," UNSUBACK received\n"); #endif #endif /* DEBUG_MQTTS */ /*--------- WILLMSGRESP ----------*/ }else if (recvMsg->getData()[1] == MQTTS_TYPE_WILLMSGRESP && getMsgRequestStatus() == MQTTS_MSG_WAIT_ACK){ #ifdef DEBUG_MQTTS #ifdef ARDUINO debug.println(" WILLMSGRESP received"); #endif #ifdef MBED debug.fprintf(stdout," WILLMSGRESP received\n"); #endif #ifdef LINUX fprintf(stdout," WILLMSGRESP received\n"); #endif #endif /* DEBUG_MQTTS */ /*--------- WILLTOPICREQ ----------*/ }else if (recvMsg->getData()[1] == MQTTS_TYPE_WILLTOPICREQ){ if (getMsgRequestType() == MQTTS_TYPE_CONNECT){ setMsgRequestStatus(MQTTS_MSG_COMPLETE); MqttsWillTopic mqMsg = MqttsWillTopic(); mqMsg.setWillTopic(_willTopic); if ( _sendQ->addPriorityRequest((MqttsMessage*)&mqMsg) == 0){ setMsgRequestStatus(MQTTS_MSG_REQUEST); }else{ *returnCode = MQTTS_ERR_OUT_OF_MEMORY; } } #ifdef DEBUG_MQTTS #ifdef ARDUINO debug.println(" WILLTOPICREQ received"); #endif #ifdef MBED debug.fprintf(stdout," WILLTOPICREQ received\n"); #endif #ifdef LINUX fprintf(stdout," WILLTOPICREQ received\n"); #endif #endif /* DEBUG_MQTTS */ /*--------- WILLMSGREQ -----------*/ }else if (recvMsg->getData()[1] == MQTTS_TYPE_WILLMSGREQ){ if (getMsgRequestType() == MQTTS_TYPE_WILLTOPIC){ setMsgRequestStatus(MQTTS_MSG_COMPLETE); MqttsWillMsg mqMsg = MqttsWillMsg(); mqMsg.setWillMsg(_willMessage); if ( _sendQ->addPriorityRequest((MqttsMessage*)&mqMsg) == 0){ setMsgRequestStatus(MQTTS_MSG_REQUEST); }else{ *returnCode = MQTTS_ERR_OUT_OF_MEMORY; } } #ifdef DEBUG_MQTTS #ifdef ARDUINO debug.println(" WILLMSGREQ received"); #endif #ifdef MBED debug.fprintf(stdout," WILLMSGREQ received\n"); #endif #ifdef LINUX fprintf(stdout," WILLMSGREQ received\n"); #endif #endif /* DEBUG_MQTTS */ } }