Ejemplo n.º 1
0
static void OnRecvCallback(MQTT_MESSAGE_HANDLE msgHandle, void* context)
{
    const APP_PAYLOAD* appMsg = mqttmessage_getApplicationMsg(msgHandle);

    PrintLogFunction(0, "Incoming Msg: Packet Id: %d\r\nQOS: %s\r\nTopic Name: %s\r\nIs Retained: %s\r\nIs Duplicate: %s\r\nApp Msg: ", mqttmessage_getPacketId(msgHandle),
        QosToString(mqttmessage_getQosType(msgHandle) ),
        mqttmessage_getTopicName(msgHandle),
        mqttmessage_getIsRetained(msgHandle) ? "true" : "fale",
        mqttmessage_getIsDuplicateMsg(msgHandle) ? "true" : "fale"
        );
    for (size_t index = 0; index < appMsg->length; index++)
    {
        PrintLogFunction(0, "0x%x", appMsg->message[index]);
    }
    PrintLogFunction(0, "\r\n");
}
static void mqtt_notification_callback(MQTT_MESSAGE_HANDLE handle, void* user_ctx)
{
    if (user_ctx != NULL)
    {
        PROV_TRANSPORT_MQTT_INFO* mqtt_info = (PROV_TRANSPORT_MQTT_INFO*)user_ctx;

        const APP_PAYLOAD* payload = mqttmessage_getApplicationMsg(handle);
        if (payload != NULL)
        {
            if (mqtt_info->payload_data != NULL)
            {
                free(mqtt_info->payload_data);
                mqtt_info->payload_data = NULL;
            }
            
            if ((mqtt_info->payload_data = malloc(payload->length + 1)) == NULL)
            {
                LogError("failure allocating payload data");
                mqtt_info->transport_state = TRANSPORT_CLIENT_STATE_ERROR;
                mqtt_info->mqtt_state = MQTT_STATE_ERROR;
            }
            else
            {
                memset(mqtt_info->payload_data, 0, payload->length + 1);
                memcpy(mqtt_info->payload_data, payload->message, payload->length);
                if (mqtt_info->transport_state == TRANSPORT_CLIENT_STATE_REG_SENT)
                {
                    mqtt_info->transport_state = TRANSPORT_CLIENT_STATE_REG_RECV;
                }
                else
                {
                    mqtt_info->transport_state = TRANSPORT_CLIENT_STATE_STATUS_RECV;
                }
            }
        }
        else
        {
            LogError("failure NULL message encountered from umqtt");
            mqtt_info->transport_state = TRANSPORT_CLIENT_STATE_ERROR;
            mqtt_info->mqtt_state = MQTT_STATE_ERROR;
        }
    }
    else
    {
        LogError("mqtt_notification_callback was invoked with a NULL context");
    }
}
static void MqttRecvCallback(MQTT_MESSAGE_HANDLE msgHandle, void* callbackCtx)
{
    if (msgHandle != NULL && callbackCtx != NULL)
    {
        const APP_PAYLOAD* appPayload = mqttmessage_getApplicationMsg(msgHandle);
        IOTHUB_MESSAGE_HANDLE IoTHubMessage = IoTHubMessage_CreateFromByteArray(appPayload->message, appPayload->length);
        if (IoTHubMessage == NULL)
        {
            LogError("IotHub Message creation has failed.\r\n");
        }
        else
        {
            PMQTTTRANSPORT_HANDLE_DATA transportData = (PMQTTTRANSPORT_HANDLE_DATA)callbackCtx;
            if (IoTHubClient_LL_MessageCallback(transportData->llClientHandle, IoTHubMessage) != IOTHUBMESSAGE_ACCEPTED)
            {
                LogError("Event not accepted by our client.\r\n");
            }
            IoTHubMessage_Destroy(IoTHubMessage);
        }
    }
}