/** * @brief 发送MQTT Connet报文,登录鉴权 * @param ctx:上下文变量 * @retval ret:0,成功,<0 失败 **/ static int MqttSample_CmdConnect(struct MqttSampleContext *ctx) { int err; int bytes = 0; printf("%s %d\n", __func__, __LINE__); err = Mqtt_PackConnectPkt(ctx->mqttbuf, 0, ctx->devid, 1, "WillTopic", "will message-test", 17, MQTT_QOS_LEVEL0, 0, ctx->proid, ctx->apikey, strlen(ctx->apikey)); if(MQTTERR_NOERROR != err) { printf("Failed to pack the MQTT CONNECT PACKET, errcode is %d.\n", err); return -1; } bytes = Mqtt_SendPkt(ctx->mqttctx, ctx->mqttbuf, 0); MqttBuffer_Reset(ctx->mqttbuf); return 0; }
//-------------------------------- Commands ------------------------------------------------------ static int MqttSample_CmdConnect(struct MqttSampleContext *ctx) { int err, flags; struct epoll_event event; if(ctx->mqttfd >= 0) { close(ctx->mqttfd); epoll_ctl(ctx->epfd, EPOLL_CTL_DEL, ctx->mqttfd, NULL); } ctx->mqttfd = MqttSample_CreateTcpConnect(ctx->host, ctx->port); if(ctx->mqttfd < 0) { return -1; } ctx->mqttctx->read_func_arg = (void*)(size_t)ctx->mqttfd; ctx->mqttctx->writev_func_arg = (void*)(size_t)ctx->mqttfd; flags = fcntl(ctx->mqttfd, F_GETFL, 0); if(-1 == flags) { printf("Failed to get the socket file flags, errcode is %d.\n", errno); } if(fcntl(ctx->mqttfd, F_SETFL, flags | O_NONBLOCK) < 0) { printf("Failed to set the socket to nonblock mode, errcode is %d.\n", errno); return -1; } event.data.fd = ctx->mqttfd; event.events = EPOLLIN | EPOLLONESHOT | EPOLLET; if(epoll_ctl(ctx->epfd, EPOLL_CTL_ADD, ctx->mqttfd, &event) < 0) { printf("Failed to add the socket to the epoll, errcode is %d.\n", errno); return -1; } err = Mqtt_PackConnectPkt(ctx->mqttbuf, 0, ctx->devid, 1, "WillTopic", "will message-xxxx", 17, MQTT_QOS_LEVEL0, 0, ctx->proid, ctx->apikey, strlen(ctx->apikey)); if(MQTTERR_NOERROR != err) { printf("Failed to pack the MQTT CONNECT PACKET, errcode is %d.\n", err); return -1; } return 0; }