static int subscribe_to_topic(PROV_TRANSPORT_MQTT_INFO* mqtt_info)
{
    int result;
    SUBSCRIBE_PAYLOAD subscribe[SUBSCRIBE_TOPIC_COUNT];
    subscribe[0].subscribeTopic = MQTT_SUBSCRIBE_TOPIC;
    subscribe[0].qosReturn = DELIVER_AT_LEAST_ONCE;

    if (mqtt_client_subscribe(mqtt_info->mqtt_client, get_next_packet_id(mqtt_info), subscribe, SUBSCRIBE_TOPIC_COUNT) != 0)
    {
        LogError("Failed subscribing to topic.");
        result = __FAILURE__;
    }
    else
    {
        result = 0;
    }
    return result;
}
Exemple #2
0
static int test_subscribe(struct harness_t *harness_p)
{
    struct mqtt_application_message_t foobar;

    /* Subscribe. */
    foobar.topic.buf_p = "foo/bar";
    foobar.topic.size = 7;
    foobar.qos = mqtt_qos_1_t;
    BTASSERT(mqtt_client_subscribe(&client, &foobar) == 0);

    thrd_sleep_ms(500);
    
    /* Unsubscribe. */
    foobar.topic.buf_p = "foo/bar";
    foobar.topic.size = 7;
    BTASSERT(mqtt_client_unsubscribe(&client, &foobar) == 0);

    return (0);
}
static int SubscribeToMqttProtocol(PMQTTTRANSPORT_HANDLE_DATA transportState)
{
    int result;

    SUBSCRIBE_PAYLOAD subscribe[] = {
        { STRING_c_str(transportState->mqttMessageTopic), DELIVER_AT_LEAST_ONCE }
    };
    /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_016: [IoTHubTransportMqtt_Subscribe shall call mqtt_client_subscribe to subscribe to the Message Topic.] */
    if (mqtt_client_subscribe(transportState->mqttClient, transportState->packetId++, subscribe, 1) != 0)
    {
        /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_017: [Upon failure IoTHubTransportMqtt_Subscribe shall return a non-zero value.] */
        result = __LINE__;
    }
    else
    {
        /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_018: [On success IoTHubTransportMqtt_Subscribe shall return 0.] */
        transportState->subscribed = true;
        transportState->currPacketState = SUBSCRIBE_TYPE;
        result = 0;
    }
    return result;
}
static void OnOperationComplete(MQTT_CLIENT_HANDLE handle, MQTT_CLIENT_EVENT_RESULT actionResult, const void* msgInfo, void* callbackCtx)
{
    (void)callbackCtx;
    switch (actionResult)
    {
        case MQTT_CLIENT_ON_CONNACK:
        {
            PrintLogFunction(LOG_LINE, "ConnAck function called");
            const CONNECT_ACK* connack = (CONNECT_ACK*)msgInfo;
            SUBSCRIBE_PAYLOAD subscribe[] = {
                { TOPIC_NAME_A, DELIVER_AT_MOST_ONCE },
                { TOPIC_NAME_B, DELIVER_EXACTLY_ONCE },
            };
            if (mqtt_client_subscribe(handle, PACKET_ID_VALUE++, subscribe, sizeof(subscribe) / sizeof(subscribe[0])) != 0)
            {
                PrintLogFunction(LOG_LINE, "%d: mqtt_client_subscribe failed", __LINE__);
                g_continue = false;
            }
            break;
        }
        case MQTT_CLIENT_ON_SUBSCRIBE_ACK:
        {
            const SUBSCRIBE_ACK* suback = (SUBSCRIBE_ACK*)msgInfo;
            MQTT_MESSAGE_HANDLE msg = mqttmessage_create(PACKET_ID_VALUE++, TOPIC_NAME_A, DELIVER_EXACTLY_ONCE, APP_NAME_A, strlen(APP_NAME_A));
            if (msg == NULL)
            {
                PrintLogFunction(LOG_LINE, "%d: mqttmessage_create failed", __LINE__);
                g_continue = false;
            }
            else
            {
                if (mqtt_client_publish(handle, msg))
                {
                    PrintLogFunction(LOG_LINE, "%d: mqtt_client_publish failed", __LINE__);
                    g_continue = false;
                }
                mqttmessage_destroy(msg);
            }
            // Now send a message that will get 
            break;
        }
        case MQTT_CLIENT_ON_PUBLISH_ACK:
        {
            const PUBLISH_ACK* puback = (PUBLISH_ACK*)msgInfo;
            break;
        }
        case MQTT_CLIENT_ON_PUBLISH_RECV:
        {
            const PUBLISH_ACK* puback = (PUBLISH_ACK*)msgInfo;
            break;
        }
        case MQTT_CLIENT_ON_PUBLISH_REL:
        {
            const PUBLISH_ACK* puback = (PUBLISH_ACK*)msgInfo;
            break;
        }
        case MQTT_CLIENT_ON_PUBLISH_COMP:
        {
            const PUBLISH_ACK* puback = (PUBLISH_ACK*)msgInfo;
            // Done so send disconnect
            mqtt_client_disconnect(handle);
            break;
        }
        case MQTT_CLIENT_ON_ERROR:
        case MQTT_CLIENT_ON_DISCONNECT:
            g_continue = false;
            break;
    }
}