コード例 #1
0
ファイル: mqtt-sn.c プロジェクト: gazally/mqtt-sn-tools
void mqtt_sn_dump_packet(char* packet)
{
    printf("%s: len=%d", mqtt_sn_type_string(packet[1]), packet[0]);

    switch(packet[1]) {
    case MQTT_SN_TYPE_CONNECT: {
        connect_packet_t* cpkt = (connect_packet_t*)packet;
        printf(" protocol_id=%d", cpkt->protocol_id);
        printf(" duration=%d", ntohs(cpkt->duration));
        printf(" client_id=%s", cpkt->client_id);
        break;
    }
    case MQTT_SN_TYPE_CONNACK: {
        connack_packet_t* capkt = (connack_packet_t*)packet;
        printf(" return_code=%d (%s)", capkt->return_code, mqtt_sn_return_code_string(capkt->return_code));
        break;
    }
    case MQTT_SN_TYPE_REGISTER: {
        register_packet_t* rpkt = (register_packet_t*)packet;
        printf(" topic_id=0x%4.4x", ntohs(rpkt->topic_id));
        printf(" message_id=0x%4.4x", ntohs(rpkt->message_id));
        printf(" topic_name=%s", rpkt->topic_name);
        break;
    }
    case MQTT_SN_TYPE_REGACK: {
        regack_packet_t* rapkt = (regack_packet_t*)packet;
        printf(" topic_id=0x%4.4x", ntohs(rapkt->topic_id));
        printf(" message_id=0x%4.4x", ntohs(rapkt->message_id));
        printf(" return_code=%d (%s)", rapkt->return_code, mqtt_sn_return_code_string(rapkt->return_code));
        break;
    }
    case MQTT_SN_TYPE_PUBLISH: {
        publish_packet_t* ppkt = (publish_packet_t*)packet;
        printf(" topic_id=0x%4.4x", ntohs(ppkt->topic_id));
        printf(" message_id=0x%4.4x", ntohs(ppkt->message_id));
        printf(" data=%s", ppkt->data);
        break;
    }
    case MQTT_SN_TYPE_SUBSCRIBE: {
        subscribe_packet_t* spkt = (subscribe_packet_t*)packet;
        printf(" message_id=0x%4.4x", ntohs(spkt->message_id));
        break;
    }
    case MQTT_SN_TYPE_SUBACK: {
        suback_packet_t* sapkt = (suback_packet_t*)packet;
        printf(" topic_id=0x%4.4x", ntohs(sapkt->topic_id));
        printf(" message_id=0x%4.4x", ntohs(sapkt->message_id));
        printf(" return_code=%d (%s)", sapkt->return_code, mqtt_sn_return_code_string(sapkt->return_code));
        break;
    }
    case MQTT_SN_TYPE_DISCONNECT: {
        disconnect_packet_t* dpkt = (disconnect_packet_t*)packet;
        printf(" duration=%d", ntohs(dpkt->duration));
        break;
    }
    }

    printf("\n");
}
コード例 #2
0
ファイル: mqtt-sn.c プロジェクト: gazally/mqtt-sn-tools
uint16_t mqtt_sn_receive_suback(int sock)
{
    suback_packet_t *packet = mqtt_sn_wait_for(MQTT_SN_TYPE_SUBACK, sock);
    uint16_t received_message_id, received_topic_id;

    if (packet == NULL) {
        log_err("Failed to subscribe to topic.");
        exit(EXIT_FAILURE);
    }

    // Check Suback return code
    log_debug("SUBACK return code: 0x%2.2x", packet->return_code);

    if (packet->return_code) {
        log_err("SUBSCRIBE error: %s", mqtt_sn_return_code_string(packet->return_code));
        exit(packet->return_code);
    }

    // Check that the Message ID matches
    received_message_id = ntohs(packet->message_id);
    if (received_message_id != next_message_id-1) {
        log_warn("Message id in SUBACK does not equal message id sent");
        log_debug("  Expecting: %d", next_message_id-1);
        log_debug("  Actual: %d", received_message_id);
    }

    // Return the topic ID returned by the gateway
    received_topic_id = ntohs(packet->topic_id);
    log_debug("SUBACK topic id: 0x%4.4x", received_topic_id);

    return received_topic_id;
}
コード例 #3
0
ファイル: mqtt-sn.c プロジェクト: gazally/mqtt-sn-tools
uint16_t mqtt_sn_receive_regack(int sock)
{
    regack_packet_t *packet = mqtt_sn_wait_for(MQTT_SN_TYPE_REGACK, sock);
    uint16_t received_message_id, received_topic_id;

    if (packet == NULL) {
        log_err("Failed to connect to register topic.");
        exit(EXIT_FAILURE);
    }

    // Check Regack return code
    log_debug("REGACK return code: 0x%2.2x", packet->return_code);

    if (packet->return_code) {
        log_err("REGISTER failed: %s", mqtt_sn_return_code_string(packet->return_code));
        exit(packet->return_code);
    }

    // Check that the Message ID matches
    received_message_id = ntohs(packet->message_id);
    if (received_message_id != next_message_id-1) {
        log_warn("Message id in Regack does not equal message id sent");
    }

    // Return the topic ID returned by the gateway
    received_topic_id = ntohs(packet->topic_id);
    log_debug("REGACK topic id: 0x%4.4x", received_topic_id);

    return received_topic_id;
}
コード例 #4
0
uint16_t mqtt_sn_recieve_suback(int sock)
{
    suback_packet_t *packet = recieve_packet(sock);
    uint16_t received_message_id, received_topic_id;

    if (packet == NULL) {
        fprintf(stderr, "Failed to subscribe to topic.\n");
        return;
    }

    if (packet->type != MQTT_SN_TYPE_SUBACK) {
        fprintf(stderr, "Was expecting SUBACK packet but received: 0x%2.2x\n", packet->type);
        exit(-1);
    }

    // Check Suback return code
    if (debug)
        fprintf(stderr, "SUBACK return code: 0x%2.2x\n", packet->return_code);

    if (packet->return_code) {
        fprintf(stderr, "SUBSCRIBE error: %s\n", mqtt_sn_return_code_string(packet->return_code));
        exit(packet->return_code);
    }

    // Check that the Message ID matches
    received_message_id = ntohs( packet->message_id );
    if (received_message_id != next_message_id-1) {
        fprintf(stderr, "Warning: message id in SUBACK does not equal message id sent\n");
        if (debug) {
            fprintf(stderr, "  Expecting: %d\n", next_message_id-1);
            fprintf(stderr, "  Actual: %d\n", received_message_id);
        }
    }

    // Return the topic ID returned by the gateway
    received_topic_id = ntohs( packet->topic_id );
    if (debug)
        fprintf(stderr, "Topic ID: %d\n", received_topic_id);

    return received_topic_id;
}
コード例 #5
0
ファイル: mqtt-sn.c プロジェクト: gazally/mqtt-sn-tools
void mqtt_sn_receive_connack(int sock)
{
    connack_packet_t *packet = mqtt_sn_receive_packet(sock);

    if (packet == NULL) {
        log_err("Failed to connect to MQTT-SN gateway.");
        exit(EXIT_FAILURE);
    }

    if (packet->type != MQTT_SN_TYPE_CONNACK) {
        log_err("Was expecting CONNACK packet but received: %s", mqtt_sn_type_string(packet->type));
        exit(EXIT_FAILURE);
    }

    // Check Connack return code
    log_debug("CONNACK return code: 0x%2.2x", packet->return_code);

    if (packet->return_code) {
        log_err("CONNECT error: %s", mqtt_sn_return_code_string(packet->return_code));
        exit(packet->return_code);
    }
}
コード例 #6
0
void mqtt_sn_recieve_connack(int sock)
{
    connack_packet_t *packet = recieve_packet(sock);

    if (packet == NULL) {
        fprintf(stderr, "Failed to connect to MQTT-S gateway.\n");
        return;
    }

    if (packet->type != MQTT_SN_TYPE_CONNACK) {
        fprintf(stderr, "Was expecting CONNACK packet but received: 0x%2.2x\n", packet->type);
        return;
    }

    // Check Connack return code
    if (debug)
        fprintf(stderr, "CONNACK return code: 0x%2.2x\n", packet->return_code);

    if (packet->return_code) {
        fprintf(stderr, "CONNECT error: %s\n", mqtt_sn_return_code_string(packet->return_code));
        exit(packet->return_code);
    }
}
コード例 #7
0
uint16_t mqtt_sn_recieve_regack(int sock)
{
    regack_packet_t *packet = recieve_packet(sock);
    uint16_t received_message_id, received_topic_id;

    if (packet == NULL) {
        fprintf(stderr, "Failed to connect to register topic.\n");
        return;
    }

    if (packet->type != MQTT_SN_TYPE_REGACK) {
        fprintf(stderr, "Was expecting REGACK packet but received: 0x%2.2x\n", packet->type);
        exit(-1);
    }

    // Check Regack return code
    if (debug)
        fprintf(stderr, "REGACK return code: 0x%2.2x\n", packet->return_code);

    if (packet->return_code) {
        fprintf(stderr, "REGISTER error: %s\n", mqtt_sn_return_code_string(packet->return_code));
        exit(packet->return_code);
    }

    // Check that the Message ID matches
    received_message_id = ntohs( packet->message_id );
    if (received_message_id != next_message_id-1) {
        fprintf(stderr, "Warning: message id in Regack does not equal message id sent\n");
    }

    // Return the topic ID returned by the gateway
    received_topic_id = ntohs( packet->topic_id );
    if (debug)
        fprintf(stderr, "Topic ID: %d\n", received_topic_id);

    return received_topic_id;
}