GithubHelp home page GithubHelp logo

OpenSSL subscribe about mqtt-c HOT 5 CLOSED

liambindle avatar liambindle commented on May 27, 2024
OpenSSL subscribe

from mqtt-c.

Comments (5)

learn-more avatar learn-more commented on May 27, 2024 1

Hello @theanhhoang

The problem here is that you are using a very generic subscriber name, and you are also not passing the MQTT_CONNECT_CLEAN_SESSION flag to mqtt_connect.

Effectively, this means that you continue on the previous session of a client named subscribing_client.

from mqtt-c.

LiamBindle avatar LiamBindle commented on May 27, 2024

Hi @theanhhoang, sorry for the delayed response. What you've tried is the correct approach. The only difference between the simple and openssl examples is how the socket is create/set up.

It's very strange it appears the subscriber is subscribing to all topics. My guess is an application-level peice of code would be causing this. Have you made any progress with tracking down your issue?

from mqtt-c.

LiamBindle avatar LiamBindle commented on May 27, 2024

Received an email from @theanhhoang saying this issue was resolved. The issue ended up being -D MQTT_USE_BIO wasn't being defined in their build.

from mqtt-c.

theanhhoang avatar theanhhoang commented on May 27, 2024

Hi @LiamBindle, sorry for the late reply. I have checked my build and -D MQTT_USE_BIO is in the build and the subscriber still subscribes every topics!
My build is like this:

gcc -Wextra -Wall -std=gnu99 -Iinclude -Wno-unused-parameter -Wno-unused-variable -Wno-duplicate-decl-specifier -D MQTT_USE_BIO examples/openssl_subscriber.c src/mqtt.c src/mqtt_pal.c -lpthread `pkg-config --libs openssl` -o bin/openssl_subscriber

In main function, I combined openssl_publisher and simple_subscriber and got something like this:

int main(int argc, const char *argv[])
{
    const char* addr;
    const char* port;
    const char* topic;
    const char* ca_file;

    /* Load OpenSSL */
    SSL_load_error_strings();
    ERR_load_BIO_strings();
    OpenSSL_add_all_algorithms();
    SSL_library_init();


    SSL_CTX* ssl_ctx;
    BIO* sockfd;

    if (argc > 1) {
        ca_file = argv[1];
    } else {
        printf("error: path to the CA certificate to use\n");
        exit(1);
    }

    addr = "10.109.242.139";

    port = "8883";

    topic = "datetime";

    /* open the non-blocking TCP socket (connecting to the broker) */
    open_nb_socket(&sockfd, &ssl_ctx, addr, port, ca_file, NULL);

    if (sockfd == NULL) {
        perror("Failed to open socket: ");
        exit_example(EXIT_FAILURE, sockfd, NULL);
    }

    /* setup a client */
    struct mqtt_client client;
    uint8_t sendbuf[2048]; /* sendbuf should be large enough to hold multiple whole mqtt messages */
    uint8_t recvbuf[1024]; /* recvbuf should be large enough any whole mqtt message expected to be received */
    mqtt_init(&client, sockfd, sendbuf, sizeof(sendbuf), recvbuf, sizeof(recvbuf), publish_callback);
    mqtt_connect(&client, "subscribing_client", NULL, NULL, 0, NULL, NULL, 0, 400);

    /* check that we don't have any errors */
    if (client.error != MQTT_OK) {
        fprintf(stderr, "error: %s\n", mqtt_error_str(client.error));
        exit_example(EXIT_FAILURE, sockfd, NULL);
    }

    /* start a thread to refresh the client (handle egress and ingree client traffic) */
    pthread_t client_daemon;
    if(pthread_create(&client_daemon, NULL, client_refresher, &client)) {
        fprintf(stderr, "Failed to start client daemon.\n");
        exit_example(EXIT_FAILURE, sockfd, NULL);

    }

    /* subscribe */
    mqtt_subscribe(&client, topic, 0);


    /* start publishing the time */
    printf("%s listening for '%s' messages.\n", argv[0], topic);
    printf("Press CTRL-D to exit.\n\n");

    while(fgetc(stdin) == '\n');

    /* disconnect */
    printf("\n%s disconnecting from %s\n", argv[0], addr);
    sleep(1);

    /* exit */
    exit_example(EXIT_SUCCESS, sockfd, &client_daemon);
}

And here is the result:
image

Rgs,
The Anh

from mqtt-c.

theanhhoang avatar theanhhoang commented on May 27, 2024

Hi @learn-more, MQTT_CONNECT_CLEAN_SESSION solved my problems.!!!!

Thank you so much for your help! 💯 💯 💯

from mqtt-c.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.