[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
| Re: [mosquitto-dev] Question about publishing to an MQTT	brokerusing TLS | 
Hi Roger.
I did call mosquitto_lib_init().  Since the test program isn't very long I've included it below.
I included the sleep() call because I thought the callbacks would be called asynchronously, and wanted to see if I was actually getting the connect completion before doing the publish.  I notice pub_client.c actually does the mosquitto_publish from within the connect callback.  I expect I'll so something similar to avoid races, but I didn't make that change because I noticed the connect wasn't completing.
- Mark
---------------------------------------------------------------------------------------------
#include <stdio.h>
#include <string.h>
#include <mosquitto.h>
#define cafile          "./rootCA.pem"
#define certfile        "./cert.pem"
#define keyfile         "./private-key.pem"
#define host            "the-mqtt-broker.com"
#define port            8883
#define qos             0
#define topic           "topic/test"
#define message         "{\"msg\" : \"Hello ... World\"}"
void connect_callback(struct mosquitto *mosq, void *obj, int result) {
    printf("Connect callback: \n");
}
void disconnect_callback(struct mosquitto *mosq, void *obj, int rc) {
    printf("Disconnect callback: \n");
}
void log_callback(struct mosquitto *mosq, void *obj, int level, const char *str) {
    printf("%s\n", str);
}
void publish_callback(struct mosquitto *mosq, void *obj, int mid) {
    printf("Publish callback: \n");
}
int main (int argc, char *argv[]) {
    char idstr[64];
    struct mosquitto *mosq = NULL;
//    int mqtt_version = 3;       /* MQTT_PROTOCOL_V31 */
    int mqtt_version = 4;       /* MQTT_PROTOCOL_V311 */
    int status;
    /* Initialize needed storage. */
    snprintf(idstr, sizeof(idstr), "mosquitto_%d", getpid());
    /* Initialize mosquitto. */
    mosquitto_lib_init();
    /* Create a new mosquitto instance. */
    mosq = mosquitto_new(idstr, true, NULL);
    if (!mosq) {
        printf("Error creating mosquitto instance\n");
        return 1;
    }
    printf("New mosquitto instance created\n");
    /* Connect up all the callback functions. */
    mosquitto_log_callback_set(mosq, log_callback);
    mosquitto_connect_callback_set(mosq, connect_callback);
    mosquitto_disconnect_callback_set(mosq, disconnect_callback);
    mosquitto_publish_callback_set(mosq, publish_callback);
    printf("Callback setup complete\n");
    /* Use TLS for communications. */
    status = mosquitto_tls_set(mosq, cafile, NULL,
                               certfile, keyfile, NULL);
    if (status) {
        printf("Error (%d) configuring TLS.\n", status);
        return 2;
    }
    printf("TLS setup complete\n");
    /* Maximum inflight messages. */
    status = mosquitto_max_inflight_messages_set(mosq, 20);
    if (status) {
        printf("Error (%d) setting max inflight message count.\n", status);
        return 6;
    }
    printf("Max inflight count set\n");
    /* Set mosquitto options. */
    status = mosquitto_opts_set(mosq, MOSQ_OPT_PROTOCOL_VERSION,
                                      &mqtt_version);
    if (status) {
        printf("Error (%d) setting mosquitto options.\n", status);
        return 7;
    }
    printf("Mosquitto options set\n");
    /* Connect to the broker. */
    status = mosquitto_connect_bind(mosq, host, port, 60, NULL);
    if (status) {
        printf("Error (%d) connecting to broker.\n", status);
        return 3;
    }
    sleep(1000);
    /* Publish the message */
    status = mosquitto_publish(mosq, NULL, topic,
                               strlen(message), message,
                               qos, false);
    if (status) {
        printf("Error (%d) publishing message.\n", status);
        return 4;
    }
    return 0;
}