int send_pub(char *host, int port, char * buf, int buflen, int qos, int retained, short packetid, char *payload, int payloadlen) { MQTTSN_topicid topic; int rc = 0; int len = 0; int dup = 0; /* publish with short name */ topic.type = MQTTSN_TOPIC_TYPE_SHORT; memcpy(topic.data.short_name, SHORT_TOPIC, 2); len = MQTTSNSerialize_publish(buf, buflen, dup, qos, retained, packetid, topic, payload, payloadlen); rc = transport_sendPacketBuffer(host, port, buf, len); TLOG("rc %d from send packet %s for publish topictype %d topicid %d length %d\n", rc, payload, topic.type, topic.data.id, len); return rc; }
int main(int argc, char** argv) { int rc = 0; int mysock; unsigned char buf[200]; int buflen = sizeof(buf); MQTTSN_topicid topic; unsigned char* payload = (unsigned char*)"mypayload"; int payloadlen = strlen((char*)payload); int len = 0; int dup = 0; int qos = 3; int retained = 0; short packetid = 0; char *topicname = "a long topic name"; char *host = "127.0.0.1"; int port = 1883; mysock = lowlevel_open(); if(mysock < 0) return mysock; if (argc > 1) host = argv[1]; if (argc > 2) port = atoi(argv[2]); printf("Sending to hostname %s port %d\n", host, port); topic.type = MQTTSN_TOPIC_TYPE_NORMAL; topic.data.long_.name = topicname; topic.data.long_.len = strlen(topicname); len = MQTTSNSerialize_publish(buf, buflen, dup, qos, retained, packetid, topic, payload, payloadlen); rc = lowlevel_sendPacketBuffer(host, port, buf, len); lowlevel_close(); return 0; }
int main(int argc, char** argv) { int rc = 0; int mysock; unsigned char buf[200]; int buflen = sizeof(buf); MQTTSN_topicid topic; unsigned char* payload = (unsigned char*)"mypayload"; int payloadlen = strlen((char*)payload); int len = 0; int dup = 0; int qos = 3; int retained = 0; short packetid = 0; char *host = "127.0.0.1"; int port = 1883; mysock = transport_open(); if(mysock < 0) return mysock; if (argc > 1) host = argv[1]; if (argc > 2) port = atoi(argv[2]); printf("Sending to hostname %s port %d\n", host, port); /* publish with short name */ topic.type = MQTTSN_TOPIC_TYPE_SHORT; memcpy(topic.data.short_name, "tt", 2); len = MQTTSNSerialize_publish(buf, buflen, dup, qos, retained, packetid, topic, payload, payloadlen); rc = transport_sendPacketBuffer(host, port, buf, len); transport_close(); return 0; }
int main(int argc, char** argv) { int rc = 0; int mysock; unsigned char buf[200]; int buflen = sizeof(buf); MQTTSN_topicid topic; MQTTSNString topicstr; unsigned char* payload = (unsigned char*)"mypayload"; int payloadlen = strlen((char*)payload); int len = 0; int dup = 0; int qos = 0; int retained = 0; short packetid = 0; char *topicname = "a long topic name"; char *host = "127.0.0.1"; int port = 1883; MQTTSNPacket_connectData options = MQTTSNPacket_connectData_initializer; unsigned short topicid; mysock = lowlevel_open(); if(mysock < 0) return mysock; if (argc > 1) host = argv[1]; if (argc > 2) port = atoi(argv[2]); printf("Sending to hostname %s port %d\n", host, port); options.clientID.cstring = "myclientid"; len = MQTTSNSerialize_connect(buf, buflen, &options); rc = lowlevel_sendPacketBuffer(host, port, buf, len); /* wait for connack */ if (MQTTSNPacket_read(buf, buflen, lowlevel_getdata) == MQTTSN_CONNACK) { int connack_rc = -1; if (MQTTSNDeserialize_connack(&connack_rc, buf, buflen) != 1 || connack_rc != 0) { printf("Unable to connect, return code %d\n", connack_rc); goto exit; } else printf("connected rc %d\n", connack_rc); } else goto exit; /* register topic name */ printf("Registering\n"); topicstr.cstring = topicname; topicstr.lenstring.len = strlen(topicname); len = MQTTSNSerialize_register(buf, buflen, 0, packetid, &topicstr); rc = lowlevel_sendPacketBuffer(host, port, buf, len); if (MQTTSNPacket_read(buf, buflen, lowlevel_getdata) == MQTTSN_REGACK) /* wait for regack */ { unsigned short submsgid; unsigned char returncode; rc = MQTTSNDeserialize_regack(&topicid, &submsgid, &returncode, buf, buflen); if (returncode != 0) { printf("return code %d\n", returncode); goto exit; } else printf("regack topic id %d\n", topicid); } else goto exit; /* publish with obtained id */ printf("Publishing\n"); topic.type = MQTTSN_TOPIC_TYPE_NORMAL; topic.data.id = topicid; ++packetid; len = MQTTSNSerialize_publish(buf, buflen, dup, qos, retained, packetid, topic, payload, payloadlen); rc = lowlevel_sendPacketBuffer(host, port, buf, len); printf("rc %d from send packet for publish length %d\n", rc, len); exit: lowlevel_close(); return 0; }
int main(int argc, char** argv) { int rc = 0; int mysock; unsigned char buf[200]; int buflen = sizeof(buf); MQTTSN_topicid topic; unsigned char* payload = (unsigned char*)"mypayload"; int payloadlen = strlen((char*)payload); int len = 0; unsigned char dup = 0; int qos = 1; unsigned char retained = 0; short packetid = 1; char *topicname = "a long topic name"; char *host = "127.0.0.1"; int port = 1883; MQTTSNPacket_connectData options = MQTTSNPacket_connectData_initializer; unsigned short topicid; mysock = transport_open(); if(mysock < 0) return mysock; if (argc > 1) host = argv[1]; if (argc > 2) port = atoi(argv[2]); printf("Sending to hostname %s port %d\n", host, port); options.clientID.cstring = "pub0sub1 MQTT-SN"; len = MQTTSNSerialize_connect(buf, buflen, &options); rc = transport_sendPacketBuffer(host, port, buf, len); /* wait for connack */ if (MQTTSNPacket_read(buf, buflen, transport_getdata) == MQTTSN_CONNACK) { int connack_rc = -1; if (MQTTSNDeserialize_connack(&connack_rc, buf, buflen) != 1 || connack_rc != 0) { printf("Unable to connect, return code %d\n", connack_rc); goto exit; } else printf("connected rc %d\n", connack_rc); } else goto exit; /* subscribe */ printf("Subscribing\n"); topic.type = MQTTSN_TOPIC_TYPE_NORMAL; topic.data.long_.name = topicname; topic.data.long_.len = strlen(topic.data.long_.name); len = MQTTSNSerialize_subscribe(buf, buflen, 0, 2, packetid, &topic); rc = transport_sendPacketBuffer(host, port, buf, len); if (MQTTSNPacket_read(buf, buflen, transport_getdata) == MQTTSN_SUBACK) /* wait for suback */ { unsigned short submsgid; int granted_qos; unsigned char returncode; rc = MQTTSNDeserialize_suback(&granted_qos, &topicid, &submsgid, &returncode, buf, buflen); if (granted_qos != 2 || returncode != 0) { printf("granted qos != 2, %d return code %d\n", granted_qos, returncode); goto exit; } else printf("suback topic id %d\n", topicid); } else goto exit; printf("Publishing\n"); /* publish with short name */ topic.type = MQTTSN_TOPIC_TYPE_NORMAL; topic.data.id = topicid; ++packetid; len = MQTTSNSerialize_publish(buf, buflen, dup, qos, retained, packetid, topic, payload, payloadlen); rc = transport_sendPacketBuffer(host, port, buf, len); /* wait for puback */ if (MQTTSNPacket_read(buf, buflen, transport_getdata) == MQTTSN_PUBACK) { unsigned short packet_id, topic_id; unsigned char returncode; if (MQTTSNDeserialize_puback(&topic_id, &packet_id, &returncode, buf, buflen) != 1 || returncode != MQTTSN_RC_ACCEPTED) printf("Unable to publish, return code %d\n", returncode); else printf("puback received, msgid %d topic id %d\n", packet_id, topic_id); } else goto exit; printf("Receive publish\n"); if (MQTTSNPacket_read(buf, buflen, transport_getdata) == MQTTSN_PUBLISH) { unsigned short packet_id; int qos, payloadlen; unsigned char* payload; unsigned char dup, retained; MQTTSN_topicid pubtopic; if (MQTTSNDeserialize_publish(&dup, &qos, &retained, &packet_id, &pubtopic, &payload, &payloadlen, buf, buflen) != 1) printf("Error deserializing publish\n"); else printf("publish received, id %d qos %d\n", packet_id, qos); if (qos == 1) { len = MQTTSNSerialize_puback(buf, buflen, pubtopic.data.id, packet_id, MQTTSN_RC_ACCEPTED); rc = transport_sendPacketBuffer(host, port, buf, len); if (rc == 0) printf("puback sent\n"); } } else goto exit; len = MQTTSNSerialize_disconnect(buf, buflen, 0); rc = transport_sendPacketBuffer(host, port, buf, len); exit: transport_close(); return 0; }
int main(int argc, char** argv) { int rc = 0; int mysock; unsigned char buf[200]; int buflen = sizeof(buf); MQTTSN_topicid topic; unsigned char* payload = (unsigned char*)"mypayload"; int payloadlen = strlen((char*)payload); int len = 0; int dup = 0; int qos = 1; int retained = 0; short packetid = 1; char *host = "127.0.0.1"; int port = 1883; MQTTSNPacket_connectData options = MQTTSNPacket_connectData_initializer; mysock = transport_open(); if(mysock < 0) return mysock; if (argc > 1) host = argv[1]; if (argc > 2) port = atoi(argv[2]); printf("Sending to hostname %s port %d\n", host, port); options.clientID.cstring = "myclientid"; len = MQTTSNSerialize_connect(buf, buflen, &options); rc = transport_sendPacketBuffer(host, port, buf, len); /* wait for connack */ if (MQTTSNPacket_read(buf, buflen, transport_getdata) == MQTTSN_CONNACK) { int connack_rc = -1; if (MQTTSNDeserialize_connack(&connack_rc, buf, buflen) != 1 || connack_rc != 0) { printf("Unable to connect, return code %d\n", connack_rc); goto exit; } else printf("connected rc %d\n", connack_rc); } else goto exit; /* publish with short name */ topic.type = MQTTSN_TOPIC_TYPE_SHORT; memcpy(topic.data.short_name, "tt", 2); len = MQTTSNSerialize_publish(buf, buflen - len, dup, qos, retained, packetid, topic, payload, payloadlen); rc = transport_sendPacketBuffer(host, port, buf, len); /* wait for puback */ if (MQTTSNPacket_read(buf, buflen, transport_getdata) == MQTTSN_PUBACK) { unsigned short packet_id, topic_id; unsigned char returncode; if (MQTTSNDeserialize_puback(&topic_id, &packet_id, &returncode, buf, buflen) != 1 || returncode != MQTTSN_RC_ACCEPTED) printf("Unable to publish, return code %d\n", returncode); else printf("puback received, id %d\n", packet_id); } else goto exit; len = MQTTSNSerialize_disconnect(buf, buflen, 0); rc = transport_sendPacketBuffer(host, port, buf, len); exit: transport_close(); return 0; }
int test2(struct Options options) { int rc = 0; unsigned char buf[100]; int buflen = sizeof(buf); unsigned char dup = 0; int qos = 2; unsigned char retained = 0; unsigned short msgid = 23; MQTTSN_topicid topic; unsigned char *payload = (unsigned char*)"kkhkhkjkj jkjjk jk jk "; int payloadlen = strlen((char*)payload); unsigned char dup2 = 1; int qos2 = 1; unsigned char retained2 = 1; unsigned short msgid2 = 3243; MQTTSN_topicid topic2; unsigned char *payload2 = NULL; int payloadlen2 = 0; unsigned char acktype; unsigned char returncode = 3, returncode2 = -99; fprintf(xml, "<testcase classname=\"test1\" name=\"de/serialization\""); global_start_time = start_clock(); failures = 0; MyLog(LOGA_INFO, "Starting test 2 - serialization of publish and back"); memset(&topic, 0, sizeof(topic)); memset(&topic2, 0, sizeof(topic2)); topic.type = MQTTSN_TOPIC_TYPE_SHORT; memcpy(topic.data.short_name, "my", 2); rc = MQTTSNSerialize_publish(buf, buflen, dup, qos, retained, msgid, topic, payload, payloadlen); assert("good rc from serialize publish", rc > 0, "rc was %d\n", rc); rc = MQTTSNDeserialize_publish(&dup2, &qos2, &retained2, &msgid2, &topic2, &payload2, &payloadlen2, buf, buflen); assert("good rc from deserialize publish", rc == 1, "rc was %d\n", rc); /* data after should be the same as data before */ assert("dups should be the same", dup == dup2, "dups were different %d\n", dup2); assert("qoss should be the same", qos == qos2, "qoss were different %d\n", qos2); assert("retaineds should be the same", retained == retained2, "retaineds were different %d\n", retained2); assert("msgids should be the same", msgid == msgid2, "msgids were different %d\n", msgid2); assert("topics should be the same", checkMQTTSNTopics(topic, topic2), "topics were different %s\n", ""); assert("payload lengths should be the same", payloadlen == payloadlen2, "payload lengths were different %d\n", payloadlen2); assert("payloads should be the same", memcmp(payload, payload2, payloadlen) == 0, "payloads were different %s\n", ""); rc = MQTTSNSerialize_puback(buf, buflen, topic.data.id, msgid, returncode); assert("good rc from serialize puback", rc > 0, "rc was %d\n", rc); rc = MQTTSNDeserialize_puback(&topic2.data.id, &msgid2, &returncode2, buf, buflen); assert("good rc from deserialize puback", rc > 0, "rc was %d\n", rc); assert("msgids should be the same", msgid == msgid2, "msgids were different %d\n", msgid2); assert("return codes should be the same", returncode == returncode2, "return codes were different %d\n", returncode2); rc = MQTTSNSerialize_pubrec(buf, buflen, msgid); assert("good rc from serialize pubrec", rc > 0, "rc was %d\n", rc); rc = MQTTSNDeserialize_ack(&acktype, &msgid2, buf, buflen); assert("good rc from deserialize pubrec", rc == 1, "rc was %d\n", rc); assert("Acktype should be MQTTSN_PUBREC", acktype == MQTTSN_PUBREC, "acktype was %d\n", acktype); assert("msgids should be the same", msgid == msgid2, "msgids were different %d\n", msgid2); /*exit:*/ MyLog(LOGA_INFO, "TEST2: test %s. %d tests run, %d failures.", (failures == 0) ? "passed" : "failed", tests, failures); write_test_result(); return failures; }