/**
  * @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;
}
Пример #2
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;
}