aqhome: added AQH_MqttClientEndpoint2_GetNextPacketId(). added test for subscriptions.
This commit is contained in:
130
aqhome/libtest.c
130
aqhome/libtest.c
@@ -42,6 +42,9 @@
|
|||||||
static int _mqttConnect(GWEN_MSG_ENDPOINT_MGR *emgr, GWEN_MSG_ENDPOINT *epTcp);
|
static int _mqttConnect(GWEN_MSG_ENDPOINT_MGR *emgr, GWEN_MSG_ENDPOINT *epTcp);
|
||||||
static GWEN_MSG *_awaitPacket(GWEN_MSG_ENDPOINT_MGR *emgr, GWEN_MSG_ENDPOINT *epTcp, uint8_t expectedPacketType);
|
static GWEN_MSG *_awaitPacket(GWEN_MSG_ENDPOINT_MGR *emgr, GWEN_MSG_ENDPOINT *epTcp, uint8_t expectedPacketType);
|
||||||
|
|
||||||
|
static int _mqttConnect2(GWEN_MSG_ENDPOINT2 *epClient);
|
||||||
|
static GWEN_MSG *_awaitPacket2(GWEN_MSG_ENDPOINT2 *epClient, uint8_t expectedPacketType);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
GWEN_MSG *createPingMsg(uint8_t destAddr, uint8_t srcAddr)
|
GWEN_MSG *createPingMsg(uint8_t destAddr, uint8_t srcAddr)
|
||||||
@@ -355,11 +358,134 @@ int testMqttSubscribe(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int testMqttSubscribe2(int argc, char **argv)
|
||||||
|
{
|
||||||
|
GWEN_MSG_ENDPOINT2 *epClient;
|
||||||
|
int rv;
|
||||||
|
GWEN_MSG *msgOut;
|
||||||
|
GWEN_MSG *msgIn;
|
||||||
|
uint16_t pckId;
|
||||||
|
const char *host="127.0.0.1";
|
||||||
|
|
||||||
|
AQH_Init();
|
||||||
|
|
||||||
|
if (argc>1)
|
||||||
|
host=argv[1];
|
||||||
|
|
||||||
|
DBG_ERROR(AQH_LOGDOMAIN, "Connecting to %s (%s)", host, argv[1]);
|
||||||
|
epClient=AQH_MqttClientEndpoint2_new("TESTCLIENT1234", host, 1883, NULL, 1);
|
||||||
|
rv=_mqttConnect2(epClient);
|
||||||
|
if (rv<0) {
|
||||||
|
DBG_INFO(AQH_LOGDOMAIN, "here (%d)", rv);
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
pckId=AQH_MqttClientEndpoint2_GetNextPacketId(epClient);
|
||||||
|
//msgOut=GWEN_PublishMqttMsg_new(AQH_MQTTMSG_FLAGS_QOS1, 1, "test/subject1", (const uint8_t*) "29.9", 4);
|
||||||
|
//msgOut=GWEN_SubscribeMqttMsg_new(AQH_MQTTMSG_MSGTYPE_SUBSCRIBE, pckId, "aqhome/#", 0);
|
||||||
|
msgOut=GWEN_SubscribeMqttMsg_new(AQH_MQTTMSG_MSGTYPE_SUBSCRIBE, pckId, "#", 0);
|
||||||
|
if (msgOut==NULL) {
|
||||||
|
DBG_ERROR(NULL, "Error creating message");
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
GWEN_MsgEndpoint2_AddSendMessage(epClient, msgOut);
|
||||||
|
|
||||||
|
msgIn=_awaitPacket2(epClient, AQH_MQTTMSG_MSGTYPE_SUBACK);
|
||||||
|
if (msgIn) {
|
||||||
|
GWEN_BUFFER *buf;
|
||||||
|
|
||||||
|
buf=GWEN_Buffer_new(0, 256, 0, 1);
|
||||||
|
AQH_SubAckMqttMsg_DumpToBuffer(msgIn, buf, "received");
|
||||||
|
fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(buf));
|
||||||
|
GWEN_Buffer_free(buf);
|
||||||
|
GWEN_Msg_free(msgIn);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
GWEN_MSG *msg;
|
||||||
|
|
||||||
|
GWEN_MsgEndpoint2_IoLoop(epClient, 2000); /* 2000 ms */
|
||||||
|
msg=GWEN_MsgEndpoint2_TakeFirstReceivedMessage(epClient);
|
||||||
|
if (msg) {
|
||||||
|
if ((AQH_MqttMsg_GetMsgTypeAndFlags(msg) & 0xf0)==(AQH_MQTTMSG_MSGTYPE_PUBLISH & 0xf0)) {
|
||||||
|
GWEN_BUFFER *buf;
|
||||||
|
|
||||||
|
buf=GWEN_Buffer_new(0, 256, 0, 1);
|
||||||
|
AQH_PublishMqttMsg_DumpToBuffer(msg, buf, "received");
|
||||||
|
fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(buf));
|
||||||
|
GWEN_Buffer_free(buf);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
DBG_ERROR(NULL, "Received this message:");
|
||||||
|
GWEN_Text_DumpString((const char*) GWEN_Msg_GetConstBuffer(msg), GWEN_Msg_GetBytesInBuffer(msg), 2);
|
||||||
|
}
|
||||||
|
GWEN_Msg_free(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int _mqttConnect2(GWEN_MSG_ENDPOINT2 *epClient)
|
||||||
|
{
|
||||||
|
int loop;
|
||||||
|
|
||||||
|
for (loop=0;; loop++) {
|
||||||
|
DBG_INFO(GWEN_LOGDOMAIN, "Loop %d:", loop);
|
||||||
|
GWEN_MsgEndpoint2_IoLoop(epClient, 2000); /* 2000 ms */
|
||||||
|
|
||||||
|
if (GWEN_MsgEndpoint2_GetState(epClient)==GWEN_MSG_ENDPOINT_STATE_CONNECTED) {
|
||||||
|
DBG_INFO(AQH_LOGDOMAIN, "Connected.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if (GWEN_MsgEndpoint2_GetState(epClient)==GWEN_MSG_ENDPOINT_STATE_UNCONNECTED) {
|
||||||
|
DBG_INFO(AQH_LOGDOMAIN, "Disconnected.");
|
||||||
|
return GWEN_ERROR_IO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
GWEN_MSG *_awaitPacket2(GWEN_MSG_ENDPOINT2 *epClient, uint8_t expectedPacketType)
|
||||||
|
{
|
||||||
|
fprintf(stdout, "Waiting for response\n");
|
||||||
|
for (;;) {
|
||||||
|
GWEN_MSG *msg;
|
||||||
|
|
||||||
|
DBG_DEBUG(AQH_LOGDOMAIN, "Next loop");
|
||||||
|
GWEN_MsgEndpoint2_IoLoop(epClient, 2000); /* 2000 ms */
|
||||||
|
msg=GWEN_MsgEndpoint2_TakeFirstReceivedMessage(epClient);
|
||||||
|
if (msg) {
|
||||||
|
if ((AQH_MqttMsg_GetMsgTypeAndFlags(msg) & 0xf0)==(expectedPacketType & 0xf0)) {
|
||||||
|
return msg;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
DBG_ERROR(NULL, "Received this message:");
|
||||||
|
GWEN_Text_DumpString((const char*) GWEN_Msg_GetConstBuffer(msg), GWEN_Msg_GetBytesInBuffer(msg), 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} /* for */
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int _mqttConnect(GWEN_MSG_ENDPOINT_MGR *emgr, GWEN_MSG_ENDPOINT *epTcp)
|
int _mqttConnect(GWEN_MSG_ENDPOINT_MGR *emgr, GWEN_MSG_ENDPOINT *epTcp)
|
||||||
{
|
{
|
||||||
while(GWEN_ConnectableMsgEndpoint_GetState(epTcp)<GWEN_ENDPOINT_MQTTC_STATE_ESTABLISHED) {
|
while(GWEN_ConnectableMsgEndpoint_GetState(epTcp)<GWEN_ENDPOINT_MQTTC_STATE_ESTABLISHED) {
|
||||||
@@ -582,7 +708,9 @@ int main(int argc, char **argv)
|
|||||||
//return testHexfile(argc, argv);
|
//return testHexfile(argc, argv);
|
||||||
//return testFlashRecords(argc, argv);
|
//return testFlashRecords(argc, argv);
|
||||||
//return testMqttSubscribe(argc, argv);
|
//return testMqttSubscribe(argc, argv);
|
||||||
return testMqttConnection2();
|
|
||||||
|
//return testMqttConnection2();
|
||||||
|
return testMqttSubscribe2(argc, argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -140,6 +140,23 @@ void AQH_MqttClientEndpoint2_SetKeepAliveTime(GWEN_MSG_ENDPOINT2 *ep, uint16_t i
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
uint16_t AQH_MqttClientEndpoint2_GetNextPacketId(const GWEN_MSG_ENDPOINT2 *ep)
|
||||||
|
{
|
||||||
|
if (ep) {
|
||||||
|
GWEN_MSG_ENDPOINT2 *epChild;
|
||||||
|
|
||||||
|
epChild=GWEN_MsgEndpoint2_Tree2_GetFirstChild(ep);
|
||||||
|
if (epChild) {
|
||||||
|
return AQH_MqttEndpoint2_GetNextPacketId(epChild);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void _addSockets(GWEN_MSG_ENDPOINT2 *ep, GWEN_SOCKETSET *readSet, GWEN_SOCKETSET *writeSet, GWEN_SOCKETSET *xSet)
|
void _addSockets(GWEN_MSG_ENDPOINT2 *ep, GWEN_SOCKETSET *readSet, GWEN_SOCKETSET *writeSet, GWEN_SOCKETSET *xSet)
|
||||||
{
|
{
|
||||||
if (ep) {
|
if (ep) {
|
||||||
@@ -170,6 +187,7 @@ void _addSockets(GWEN_MSG_ENDPOINT2 *ep, GWEN_SOCKETSET *readSet, GWEN_SOCKETSET
|
|||||||
|
|
||||||
void _checkSockets(GWEN_MSG_ENDPOINT2 *ep, GWEN_SOCKETSET *readSet, GWEN_SOCKETSET *writeSet, GWEN_SOCKETSET *xSet)
|
void _checkSockets(GWEN_MSG_ENDPOINT2 *ep, GWEN_SOCKETSET *readSet, GWEN_SOCKETSET *writeSet, GWEN_SOCKETSET *xSet)
|
||||||
{
|
{
|
||||||
|
DBG_ERROR(AQH_LOGDOMAIN, "Checking sockets in state %d", GWEN_MsgEndpoint2_GetState(ep));
|
||||||
if (ep) {
|
if (ep) {
|
||||||
GWEN_MSG_ENDPOINT2 *epChild;
|
GWEN_MSG_ENDPOINT2 *epChild;
|
||||||
|
|
||||||
|
|||||||
@@ -29,6 +29,8 @@ AQHOME_API GWEN_MSG_ENDPOINT2 *AQH_MqttClientEndpoint2_new(const char *clientId,
|
|||||||
AQHOME_API uint16_t AQH_MqttClientEndpoint2_GetKeepAliveTime(const GWEN_MSG_ENDPOINT2 *ep);
|
AQHOME_API uint16_t AQH_MqttClientEndpoint2_GetKeepAliveTime(const GWEN_MSG_ENDPOINT2 *ep);
|
||||||
AQHOME_API void AQH_MqttClientEndpoint2_SetKeepAliveTime(GWEN_MSG_ENDPOINT2 *ep, uint16_t i);
|
AQHOME_API void AQH_MqttClientEndpoint2_SetKeepAliveTime(GWEN_MSG_ENDPOINT2 *ep, uint16_t i);
|
||||||
|
|
||||||
|
AQHOME_API uint16_t AQH_MqttClientEndpoint2_GetNextPacketId(const GWEN_MSG_ENDPOINT2 *ep);
|
||||||
|
|
||||||
|
|
||||||
AQHOME_API int AQH_MqttClientEndpoint2_StartConnect(GWEN_MSG_ENDPOINT2 *ep);
|
AQHOME_API int AQH_MqttClientEndpoint2_StartConnect(GWEN_MSG_ENDPOINT2 *ep);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user