int logger_init(unsigned int _logLevel, const char *endpoint, int timeout_milliseconds) { prong_assert(logLevel >= LOG_SEVERITY_DEBUG); prong_assert(logLevel <= LOG_SEVERITY_SEVERE); prong_assert(endpoint != NULL); if (id != NULL) { g_free(id); } id = g_strdup_printf("PID(%d) %s", getpid(), basename_safe(PROCESS_NAME)); logLevel = _logLevel; if (transport == NULL) { transport_close(transport); } transport = transport_init(TRANSPORT_TYPE_PUSH, endpoint); if (transport == NULL) { g_free(id); return -1; } transport_set_send_timeout(transport, timeout_milliseconds); return 0; }
/** * @brief 向代理(服务器)发送一个消息 * @param pTopic 消息主题 * @param pMessage 消息内容 * @retval 小于0表示发送失败 */ int mqtt_publish(char *pTopic,char *pMessage) { int32_t len,rc; MQTTPacket_connectData data = MQTTPacket_connectData_initializer; unsigned char buf[200]; MQTTString topicString = MQTTString_initializer; int msglen = strlen(pMessage); int buflen = sizeof(buf); data.clientID.cstring = "me"; data.keepAliveInterval = 5; data.cleansession = 1; len = MQTTSerialize_connect(buf, buflen, &data); /* 1 */ topicString.cstring = pTopic; len += MQTTSerialize_publish(buf + len, buflen - len, 0, 0, 0, 0, topicString, (unsigned char*)pMessage, msglen); /* 2 */ len += MQTTSerialize_disconnect(buf + len, buflen - len); /* 3 */ transport_open(); rc = transport_sendPacketBuffer(buf,len); transport_close(); if (rc == len) printf("Successfully published\n\r"); else printf("Publish failed\n\r"); return 0; }
/* All process exit() calls come from here */ void forceExit(int exit_code) { /* make sure the transport is closed down before we exit() */ transport_close(); exit(exit_code); }
void transport_forward_packet(struct transport_forward *self, uint32_t length, const uint8_t *packet) { /* FIXME: This is unnecessary allocation and copying. */ transport_send_packet(&self->super, 0, ssh_format("%ls", length, packet)); if (packet[0] == SSH_MSG_DISCONNECT) transport_close(&self->super, 1); }
static void agentx_signal_handler(int sigfd, unsigned char flag, void *ud) { int len; struct signalfd_siginfo siginfo; len = read(sigfd, &siginfo, sizeof(siginfo)); if (len == sizeof(siginfo) && siginfo.ssi_signo == SIGINT) { transport_close(); } }
JNIEXPORT void JNICALL DEF_Agent_OnUnload(JavaVM *vm) { gdata->isLoaded = JNI_FALSE; /* Cleanup, but make sure VM is alive before using JNI, and * make sure JVMTI environment is ok before deallocating * memory allocated through JVMTI, which all of it is. */ /* * Close transport before exit */ if (transport_is_open()) { transport_close(); } }
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 = 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); 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 = transport_sendPacketBuffer(host, port, buf, len); transport_close(); return 0; }
static void cleanup(transport_t t) { transport_close(t); // If something went wrong like a subcontractor crashed, it's possible files will be left behind. // Double check it here char *test_harness_listen_endpoint = g_strdup_printf("%s-%d", TEST_SOCKET, getpid()); char *file = strstr(test_harness_listen_endpoint, IPC_PREFIX); if (file != NULL && (strlen(test_harness_listen_endpoint) > (strlen(IPC_PREFIX) + 1))) { file = test_harness_listen_endpoint + strlen(IPC_PREFIX); struct stat info; if (stat(file, &info) != 0) { debug_log("Couldn't stat %s, not cleaning up.", file); } else { if (unlink(file) != 0) { warning_log("Couldn't delete endpoint %s, may still exist. Error was %i (%s)", file, errno, strerror(errno)); } else { debug_log("Deleted left over IPC end point %s", file); } } } else { debug_log("End point doesn't appear to be ipc. Not removing file: %s ", file); } g_free(test_harness_listen_endpoint); logger_close(); config_close(); }
void logger_close(void) { if (buffer != NULL) { g_free(buffer); buffer = NULL; } // We need to make sure all users of transport* close() properly... otherwise // our messages aren't guaranteed to arrive! if (transport != NULL) { transport_close(transport); transport = NULL; } if (id != NULL) { g_free(id); id = NULL; } }
/** * @brief 向服务器订阅一个消息,该函数会因为TCP接收数据函数而阻塞 * @param pTopic 消息主题,传入 * @param pMessage 消息内容,传出 * @retval 小于0表示订阅消息失败 */ int mqtt_subscrib(char *pTopic,char *pMessage) { MQTTPacket_connectData data = MQTTPacket_connectData_initializer; int rc = 0; unsigned char buf[200]; int buflen = sizeof(buf); int msgid = 1; MQTTString topicString = MQTTString_initializer; int req_qos = 0; int len = 0; rc = transport_open(); if(rc < 0){ printf("transport_open error\n\r"); return rc; } data.clientID.cstring = ""; data.keepAliveInterval = 5;//服务器保持连接时间,超过该时间后,服务器会主动断开连接,单位为秒 data.cleansession = 1; data.username.cstring = ""; data.password.cstring = ""; len = MQTTSerialize_connect(buf, buflen, &data); rc = transport_sendPacketBuffer(buf, len); if(rc != len){ printf("connect transport_sendPacketBuffer error\n\r"); goto exit; } /* wait for connack */ if (MQTTPacket_read(buf, buflen, transport_getdata) == CONNACK) { unsigned char sessionPresent, connack_rc; if (MQTTDeserialize_connack(&sessionPresent, &connack_rc, buf, buflen) != 1 || connack_rc != 0) { printf("Unable to connect, return code %d\n\r", connack_rc); goto exit; } }else{ printf("MQTTPacket_read error\n\r"); goto exit; } /* subscribe */ topicString.cstring = pTopic; len = MQTTSerialize_subscribe(buf, buflen, 0, msgid, 1, &topicString, &req_qos); rc = transport_sendPacketBuffer(buf, len); if(rc != len){ printf("connect transport_sendPacketBuffer error\n\r"); goto exit; } if (MQTTPacket_read(buf, buflen, transport_getdata) == SUBACK) /* wait for suback */ { unsigned short submsgid; int subcount; int granted_qos; rc = MQTTDeserialize_suback(&submsgid, 1, &subcount, &granted_qos, buf, buflen); if (granted_qos != 0) { printf("granted qos != 0, %d\n\r", granted_qos); goto exit; } } else goto exit; /* loop getting msgs on subscribed topic */ topicString.cstring = pTopic; memset(buf,0,buflen); //transport_getdata接收数据会阻塞,除非服务器断开连接后才返回 if (MQTTPacket_read(buf, buflen, transport_getdata) == PUBLISH){ unsigned char dup; int qos; unsigned char retained; unsigned short msgid; int payloadlen_in; unsigned char* payload_in; MQTTString receivedTopic; rc = MQTTDeserialize_publish(&dup, &qos, &retained, &msgid, &receivedTopic, &payload_in, &payloadlen_in, buf, buflen); printf("message arrived %d: %s\n\r", payloadlen_in, payload_in); strcpy(pMessage,(const char *)payload_in); } printf("disconnecting\n\r"); len = MQTTSerialize_disconnect(buf, buflen); rc = transport_sendPacketBuffer(buf, len); exit: transport_close(); return rc; }
void debugLoop_run(void) { jboolean shouldListen; jdwpPacket p; jvmtiStartFunction func; /* Initialize all statics */ /* We may be starting a new connection after an error */ cmdQueue = NULL; cmdQueueLock = debugMonitorCreate("JDWP Command Queue Lock"); transportError = JNI_FALSE; shouldListen = JNI_TRUE; func = &reader; (void)spawnNewThread(func, NULL, "JDWP Command Reader"); standardHandlers_onConnect(); threadControl_onConnect(); /* Okay, start reading cmds! */ while (shouldListen) { if (!dequeue(&p)) { break; } if (p.type.cmd.flags & JDWPTRANSPORT_FLAGS_REPLY) { /* * Its a reply packet. */ continue; } else { /* * Its a cmd packet. */ jdwpCmdPacket *cmd = &p.type.cmd; PacketInputStream in; PacketOutputStream out; CommandHandler func; /* Should reply be sent to sender. * For error handling, assume yes, since * only VM/exit does not reply */ jboolean replyToSender = JNI_TRUE; /* * For VirtualMachine.Resume commands we hold the resumeLock * while executing and replying to the command. This ensures * that a Resume after VM_DEATH will be allowed to complete * before the thread posting the VM_DEATH continues VM * termination. */ if (resumeCommand(cmd)) { debugMonitorEnter(resumeLock); } /* Initialize the input and output streams */ inStream_init(&in, p); outStream_initReply(&out, inStream_id(&in)); LOG_MISC(("Command set %d, command %d", cmd->cmdSet, cmd->cmd)); func = debugDispatch_getHandler(cmd->cmdSet,cmd->cmd); if (func == NULL) { /* we've never heard of this, so I guess we * haven't implemented it. * Handle gracefully for future expansion * and platform / vendor expansion. */ outStream_setError(&out, JDWP_ERROR(NOT_IMPLEMENTED)); } else if (gdata->vmDead && ((cmd->cmdSet) != JDWP_COMMAND_SET(VirtualMachine))) { /* Protect the VM from calls while dead. * VirtualMachine cmdSet quietly ignores some cmds * after VM death, so, it sends it's own errors. */ outStream_setError(&out, JDWP_ERROR(VM_DEAD)); } else { /* Call the command handler */ replyToSender = func(&in, &out); } /* Reply to the sender */ if (replyToSender) { if (inStream_error(&in)) { outStream_setError(&out, inStream_error(&in)); } outStream_sendReply(&out); } /* * Release the resumeLock as the reply has been posted. */ if (resumeCommand(cmd)) { debugMonitorExit(resumeLock); } inStream_destroy(&in); outStream_destroy(&out); shouldListen = !lastCommand(cmd); } } threadControl_onDisconnect(); standardHandlers_onDisconnect(); /* * Cut off the transport immediately. This has the effect of * cutting off any events that the eventHelper thread might * be trying to send. */ transport_close(); debugMonitorDestroy(cmdQueueLock); /* Reset for a new connection to this VM if it's still alive */ if ( ! gdata->vmDead ) { debugInit_reset(getEnv()); } }
/* ** This routine is called when the inbound message has been received ** and it is time to start sending again. */ void transport_rewind(void){ if( g.urlIsFile ){ transport_close(); } }
int main(int argc, char *argv[]) { MQTTPacket_connectData data = MQTTPacket_connectData_initializer; int rc = 0; int mysock = 0; unsigned char buf[200]; int buflen = sizeof(buf); int msgid = 1; MQTTString topicString = MQTTString_initializer; int req_qos = 0; char* payload = "mypayload"; int payloadlen = strlen(payload); int len = 0; char *host = "m2m.eclipse.org"; int port = 1883; MQTTTransport mytransport; stop_init(); if (argc > 1) host = argv[1]; if (argc > 2) port = atoi(argv[2]); mysock = transport_open(host, port); if(mysock < 0) return mysock; printf("Sending to hostname %s port %d\n", host, port); mytransport.sck = &mysock; mytransport.getfn = transport_getdatanb; mytransport.state = 0; data.clientID.cstring = "me"; data.keepAliveInterval = 20; data.cleansession = 1; data.username.cstring = "testuser"; data.password.cstring = "testpassword"; len = MQTTSerialize_connect(buf, buflen, &data); rc = transport_sendPacketBuffer(mysock, buf, len); /* wait for connack */ if (MQTTPacket_read(buf, buflen, transport_getdata) == CONNACK) { unsigned char sessionPresent, connack_rc; if (MQTTDeserialize_connack(&sessionPresent, &connack_rc, buf, buflen) != 1 || connack_rc != 0) { printf("Unable to connect, return code %d\n", connack_rc); goto exit; } } else goto exit; /* subscribe */ topicString.cstring = "substopic"; len = MQTTSerialize_subscribe(buf, buflen, 0, msgid, 1, &topicString, &req_qos); rc = transport_sendPacketBuffer(mysock, buf, len); do { int frc; if ((frc=MQTTPacket_readnb(buf, buflen, &mytransport)) == SUBACK) /* wait for suback */ { unsigned short submsgid; int subcount; int granted_qos; rc = MQTTDeserialize_suback(&submsgid, 1, &subcount, &granted_qos, buf, buflen); if (granted_qos != 0) { printf("granted qos != 0, %d\n", granted_qos); goto exit; } break; } else if (frc == -1) goto exit; } while (1); /* handle timeouts here */ /* loop getting msgs on subscribed topic */ topicString.cstring = "pubtopic"; while (!toStop) { /* handle timeouts */ if (MQTTPacket_readnb(buf, buflen, &mytransport) == PUBLISH) { unsigned char dup; int qos; unsigned char retained; unsigned short msgid; int payloadlen_in; unsigned char* payload_in; int rc; MQTTString receivedTopic; rc = MQTTDeserialize_publish(&dup, &qos, &retained, &msgid, &receivedTopic, &payload_in, &payloadlen_in, buf, buflen); printf("message arrived %.*s\n", payloadlen_in, payload_in); printf("publishing reading\n"); len = MQTTSerialize_publish(buf, buflen, 0, 0, 0, 0, topicString, (unsigned char*)payload, payloadlen); rc = transport_sendPacketBuffer(mysock, buf, len); } } printf("disconnecting\n"); len = MQTTSerialize_disconnect(buf, buflen); rc = transport_sendPacketBuffer(mysock, buf, len); exit: transport_close(mysock); return 0; }
int main(int argc, char *argv[]) { /******MQTT*******/ MQTTPacket_connectData data = MQTTPacket_connectData_initializer; int rc = 0; char buf[200]; int buflen = sizeof(buf); int mysock = 0; MQTTString topicString = MQTTString_initializer; char* payload = "mypayload"; int payloadlen = strlen(payload); int len = 0; char *host = "192.168.8.241"; int port = 1883; /******UART*******/ int fd = FALSE; int ret; char rcv_buf[512]; int i; if(argc < 2){ printf("Usage: %s /dev/ttySn \n",argv[0]); return FALSE; } if (argc > 2) host = argv[2]; if (argc > 3) port = atoi(argv[3]); fd = UART_Open(fd,argv[1]); if(FALSE == fd){ printf("open error\n"); exit(1); } ret = UART_Init(fd,9600,0,8,1,'N'); if (FALSE == fd){ printf("Set Port Error\n"); exit(1); } ret = UART_Send(fd,"*IDN?\n",6); if(FALSE == ret){ printf("write error!\n"); exit(1); } printf("command: %s\n","*IDN?"); memset(rcv_buf,0,sizeof(rcv_buf)); /**************MQTT tansport*************/ mysock = transport_open(host,port); if(mysock < 0) return mysock; printf("Sending to hostname %s port %d\n", host, port); data.clientID.cstring = "me"; data.keepAliveInterval = 20; data.cleansession = 1; data.username.cstring = "testuser"; data.password.cstring = "testpassword"; data.MQTTVersion = 4; for(i=0;;i++) { ret = UART_Recv(fd, rcv_buf,512); if(ret > 0) { rcv_buf[ret]='\0'; printf("%s",rcv_buf); len = MQTTSerialize_connect((unsigned char *)buf, buflen, &data); topicString.cstring = "mytopic"; len += MQTTSerialize_publish((unsigned char *)(buf + len), buflen - len, 0, 0, 0, 0, topicString, (unsigned char *)rcv_buf, ret+1); len += MQTTSerialize_disconnect((unsigned char *)(buf + len), buflen - len); rc = transport_sendPacketBuffer(mysock, buf, len); if (rc == len) printf("Successfully published\n"); else printf("Publish failed\n"); } else { printf("cannot receive data1\n"); break; } } exit: UART_Close(fd); transport_close(mysock); 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; }
/* ** This routine is called when the inbound message has been received ** and it is time to start sending again. */ void transport_rewind(UrlData *pUrlData){ if( pUrlData->isFile ){ transport_close(pUrlData); } }
int main(int argc, char** argv) { int rc = 0; int mysock; unsigned char buf[200]; int buflen = sizeof(buf); unsigned char payload[16]; int payloadlen = 0; int len = 0; int qos = 0; int retained = 0; short packetid = 0; char ascii = 0; // char *topicname = "a long topic name"; char *host = "127.0.0.1"; int port = 1884; int i = 0; MQTTSNString msstr = {0}; 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]); TLOG("Sending to hostname %s port %d\n", host, port); options.clientID.cstring = "testclientid_case1"; 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) { TLOG("Unable to connect, return code %d\n", connack_rc); goto exit; } else TLOG("connected rc %d\n", connack_rc); } else goto exit; len = MQTTSNSerialize_disconnect(buf, buflen, 5); rc = transport_sendPacketBuffer(host, port, buf, len); /* wait for DISCONNECT */ if ((rc = MQTTSNPacket_read(buf, buflen, transport_getdata)) == MQTTSN_DISCONNECT) { int duration = 0; if (MQTTSNDeserialize_disconnect(&duration, buf, buflen) != 1) { TLOG("Unable to diconnect, return code %d\n", duration); goto exit; } else TLOG("duration %d\n", duration); } else { TLOG("rc %d\n", rc); goto exit; } sleep(2); msstr.cstring = "testclientid_case1"; len = MQTTSNSerialize_pingreq(buf, buflen, msstr); rc = transport_sendPacketBuffer(host, port, buf, len); /* wait for PINGRSP */ if (MQTTSNPacket_read(buf, buflen, transport_getdata) == MQTTSN_PINGRESP) { if (MQTTSNDeserialize_pingresp(buf, buflen) != 1) { TLOG("Unable to ping\n"); goto exit; } else TLOG("get pingresp\n"); } else goto exit; mark_result(argv[0], RESULT_PASS); transport_close(); return 0; exit: mark_result(argv[0], RESULT_FAIL); 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; 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); unsigned char payload[16]; int payloadlen = 0; int len = 0; int qos = 3; int retained = 0; short packetid = 0; char ascii = 0; // char *topicname = "a long topic name"; char *host = "127.0.0.1"; int port = 1884; int i = 0; 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]); TLOG("Sending to hostname %s port %d\n", host, port); options.clientID.cstring = "pubpredef0 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) { TLOG("Unable to connect, return code %d\n", connack_rc); goto exit; } else TLOG("connected rc %d\n", connack_rc); } else goto exit; for(i=0;i<2;i++) { ascii = 'a'+(i%26); payload[0] = payload[1] = payload[2] = ascii; payload[3] = 0; payloadlen = 4; send_pub(host, port, buf, buflen, qos, retained, packetid, payload, payloadlen); TLOG("%d send publish %s", i, payload); sleep(1); } exit: transport_close(); return 0; }
int main(int argc, char *argv[]) { char *device = NULL; int i, err, opt, transport = CSR_TRANSPORT_HCI; while ((opt=getopt_long(argc, argv, "+t:d:i:h", main_options, NULL)) != EOF) { switch (opt) { case 't': if (!strcasecmp(optarg, "hci")) transport = CSR_TRANSPORT_HCI; else if (!strcasecmp(optarg, "usb")) transport = CSR_TRANSPORT_USB; else if (!strcasecmp(optarg, "bcsp")) transport = CSR_TRANSPORT_BCSP; else if (!strcasecmp(optarg, "h4")) transport = CSR_TRANSPORT_H4; else if (!strcasecmp(optarg, "h5")) transport = CSR_TRANSPORT_3WIRE; else if (!strcasecmp(optarg, "3wire")) transport = CSR_TRANSPORT_3WIRE; else if (!strcasecmp(optarg, "twutl")) transport = CSR_TRANSPORT_3WIRE; else transport = CSR_TRANSPORT_UNKNOWN; break; case 'd': case 'i': device = strdup(optarg); break; case 'h': default: usage(); exit(0); } } argc -= optind; argv += optind; optind = 0; if (argc < 1) { usage(); exit(1); } if (transport_open(transport, device) < 0) exit(1); if (device) free(device); for (i = 0; commands[i].str; i++) { if (strcasecmp(commands[i].str, argv[0])) continue; err = commands[i].func(transport, argc, argv); transport_close(transport); if (err < 0) { fprintf(stderr, "Can't execute command: %s (%d)\n", strerror(errno), errno); exit(1); } exit(0); } fprintf(stderr, "Unsupported command\n"); transport_close(transport); exit(1); }
int main(int argc, char *argv[]) { char *device = NULL; int i, err, opt, transport = CSR_TRANSPORT_HCI; speed_t bcsp_rate = B38400; while ((opt=getopt_long(argc, argv, "+t:d:i:b:h", main_options, NULL)) != EOF) { switch (opt) { case 't': if (!strcasecmp(optarg, "hci")) transport = CSR_TRANSPORT_HCI; else if (!strcasecmp(optarg, "usb")) transport = CSR_TRANSPORT_USB; else if (!strcasecmp(optarg, "bcsp")) transport = CSR_TRANSPORT_BCSP; else if (!strcasecmp(optarg, "h4")) transport = CSR_TRANSPORT_H4; else if (!strcasecmp(optarg, "h5")) transport = CSR_TRANSPORT_3WIRE; else if (!strcasecmp(optarg, "3wire")) transport = CSR_TRANSPORT_3WIRE; else if (!strcasecmp(optarg, "twutl")) transport = CSR_TRANSPORT_3WIRE; else transport = CSR_TRANSPORT_UNKNOWN; break; case 'd': case 'i': device = strdup(optarg); break; case 'b': switch (atoi(optarg)) { case 9600: bcsp_rate = B9600; break; case 19200: bcsp_rate = B19200; break; case 38400: bcsp_rate = B38400; break; case 57600: bcsp_rate = B57600; break; case 115200: bcsp_rate = B115200; break; case 230400: bcsp_rate = B230400; break; case 460800: bcsp_rate = B460800; break; case 500000: bcsp_rate = B500000; break; case 576000: bcsp_rate = B576000; break; case 921600: bcsp_rate = B921600; break; case 1000000: bcsp_rate = B1000000; break; case 1152000: bcsp_rate = B1152000; break; case 1500000: bcsp_rate = B1500000; break; case 2000000: bcsp_rate = B2000000; break; #ifdef B2500000 case 2500000: bcsp_rate = B2500000; break; #endif #ifdef B3000000 case 3000000: bcsp_rate = B3000000; break; #endif #ifdef B3500000 case 3500000: bcsp_rate = B3500000; break; #endif #ifdef B4000000 case 4000000: bcsp_rate = B4000000; break; #endif default: printf("Unknown BCSP baud rate specified, defaulting to 38400bps\n"); bcsp_rate = B38400; } break; case 'h': default: usage(); exit(0); } } argc -= optind; argv += optind; optind = 0; if (argc < 1) { usage(); exit(1); } if (transport_open(transport, device, bcsp_rate) < 0) exit(1); free(device); for (i = 0; commands[i].str; i++) { if (strcasecmp(commands[i].str, argv[0])) continue; err = commands[i].func(transport, argc, argv); transport_close(transport); if (err < 0) { fprintf(stderr, "Can't execute command: %s (%d)\n", strerror(errno), errno); exit(1); } exit(0); } fprintf(stderr, "Unsupported command\n"); transport_close(transport); exit(1); }