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; }
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; } }