35#define G_LOG_DOMAIN "libgvm util"
168 rc = MQTTClient_disconnect5 (mqtt->
client, 200,
169 MQTTREASONCODE_NORMAL_DISCONNECTION, NULL);
170 if (rc != MQTTCLIENT_SUCCESS)
172 g_warning (
"Failed to disconnect: %s", MQTTClient_strerror (rc));
203 g_free ((*mqtt)->client_id);
214 g_debug (
"%s: start", __func__);
225 g_debug (
"%s: end", __func__);
241 MQTTClient_createOptions create_opts = MQTTClient_createOptions_initializer;
242 create_opts.MQTTVersion = MQTTVERSION_5;
244 if (mqtt == NULL || mqtt->
client_id == NULL)
247 int rc = MQTTClient_createWithOptions (&client, address, mqtt->
client_id,
248 MQTTCLIENT_PERSISTENCE_NONE, NULL,
251 if (rc != MQTTCLIENT_SUCCESS)
253 g_warning (
"%s: Error creating MQTTClient: %s", __func__,
254 MQTTClient_strerror (rc));
310 const char *password)
314 MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer5;
315 MQTTProperties connect_properties = MQTTProperties_initializer;
325 conn_opts.keepAliveInterval = 0;
326 conn_opts.cleanstart = 1;
327 conn_opts.MQTTVersion = MQTTVERSION_5;
329 if (username != NULL && password != NULL)
331 conn_opts.username = username;
332 conn_opts.password = password;
335 resp = MQTTClient_connect5 (client, &conn_opts, &connect_properties, NULL);
336 rc = resp.reasonCode;
337 MQTTProperties_free (&connect_properties);
338 if (rc != MQTTCLIENT_SUCCESS)
341 "%s: mqtt connection error to %s: %s", __func__, server_uri,
342 MQTTClient_strerror (rc));
343 MQTTResponse_free (resp);
349 MQTTResponse_free (resp);
376 const char *password)
380 g_debug (
"%s: start", __func__);
382 mqtt = g_malloc0 (
sizeof (
mqtt_t));
386 g_warning (
"%s: Could not set client id.", __func__);
391 g_debug (
"%s: client id set: %s", __func__, mqtt->
client_id);
401 if (
mqtt_connect (mqtt, server_uri, username, password))
403 g_warning (
"%s: Unable to connect to MQTT broker.", __func__);
412 g_debug (
"%s: end", __func__);
423 const char *server_uri;
424 const char *username;
425 const char *password;
428 if (server_uri == NULL)
430 g_warning (
"%s: mqtt_init() has to be called once at program start "
431 "else the server URI is not set. ",
452 MQTTClient_message pubmsg = MQTTClient_message_initializer;
453 MQTTClient_deliveryToken token;
463 pubmsg.payload = (
char *) msg;
464 pubmsg.payloadlen = (int) strlen (msg);
468 resp = MQTTClient_publishMessage5 (client, topic, &pubmsg, &token);
469 rc = resp.reasonCode;
470 if (rc != MQTTCLIENT_SUCCESS)
472 g_warning (
"Failed to connect: %s", MQTTClient_strerror (rc));
473 MQTTResponse_free (resp);
477 rc = MQTTClient_waitForCompletion (client, token,
TIMEOUT);
478 if (rc != MQTTCLIENT_SUCCESS)
480 g_debug (
"Message '%s' with delivery token %d could not be "
481 "published on topic %s",
485 MQTTResponse_free (resp);
551 const char *username_in,
552 const char *passwd_in,
const char *topic,
555 const char *server_uri;
556 const char *username = NULL;
557 const char *password = NULL;
562 if (server_uri_in == NULL)
565 if (server_uri == NULL)
568 "%s: No server URI provided and no global server URI available.",
575 server_uri = server_uri_in;
578 if (username_in == NULL || passwd_in == NULL)
585 username = username_in;
586 password = passwd_in;
589 mqtt = g_malloc0 (
sizeof (
mqtt_t));
593 g_warning (
"%s: Could not set client id.", __func__);
627 if (mqtt == NULL || mqtt->
client == NULL)
631 MQTTSubscribe_options opts = MQTTSubscribe_options_initializer;
632 MQTTProperties props = MQTTProperties_initializer;
634 MQTTClient_subscribe5 (mqtt->
client, topic, qos, &opts, &props);
635 if (resp.reasonCode != MQTTREASONCODE_GRANTED_QOS_1)
637 MQTTResponse_free (resp);
640 MQTTResponse_free (resp);
681 if (mqtt == NULL || mqtt->
client == NULL)
686 if (MQTTClient_unsubscribe (mqtt->
client, topic) != MQTTCLIENT_SUCCESS)
740 char **payload,
int *payload_len,
741 const unsigned int timeout)
745 MQTTClient_message *message = NULL;
746 if (mqtt == NULL || mqtt->
client == NULL)
748 g_warning (
"mqtt is not initialized.");
753 rc = MQTTClient_receive (mqtt->
client, &tmp, topic_len, &message, timeout);
754 if (rc == MQTTCLIENT_SUCCESS || rc == MQTTCLIENT_TOPICNAME_TRUNCATED)
758 g_debug (
"%s: got message %s (%d) on topic %s (%d) \n", __func__,
759 (
char *) message->payload, message->payloadlen, tmp,
762 *topic = calloc (1, *topic_len);
768 if ((memcpy (*topic, tmp, *topic_len)) == NULL)
770 g_warning (
"unable to copy topic");
775 *payload_len = message->payloadlen;
776 *payload = calloc (1, message->payloadlen);
777 if ((memcpy (*payload, (
char *) message->payload,
778 message->payloadlen))
781 g_warning (
"unable to copy payload");
802 MQTTClient_freeMessage (&message);
804 MQTTClient_free (tmp);
838 int *payload_len,
const unsigned int timeout)
841 payload, payload_len, timeout);
#define G_LOG_DOMAIN
GLib log domain.
Definition array.c:17
int mqtt_publish_single_message_auth(const char *server_uri_in, const char *username_in, const char *passwd_in, const char *topic, const char *msg)
Send a single message with credentials.
Definition mqtt.c:550
#define QOS
Definition mqtt.c:37
static int mqtt_connect(mqtt_t *mqtt, const char *server_uri, const char *username, const char *password)
Make new client and connect to mqtt broker.
Definition mqtt.c:309
static const char * mqtt_get_global_server_uri()
Get global server URI.
Definition mqtt.c:91
static int mqtt_unsubscribe_r(mqtt_t *mqtt, const char *topic)
unsubscribe a single topic.
Definition mqtt.c:679
static void mqtt_set_global_password(const char *password)
Set the global mqtt password.
Definition mqtt.c:122
static void mqtt_set_global_client(mqtt_t *mqtt)
Set global client.
Definition mqtt.c:151
static const char * global_password
Definition mqtt.c:48
static int mqtt_set_client(mqtt_t *mqtt, MQTTClient client)
Set MQTTClient of mqtt_t.
Definition mqtt.c:288
static int mqtt_disconnect(mqtt_t *mqtt)
Disconnect from the Broker.
Definition mqtt.c:164
#define TIMEOUT
Definition mqtt.c:38
static void mqtt_set_initialized_status(gboolean status)
Set the global init status.
Definition mqtt.c:58
int mqtt_init_auth(const char *server_uri, const char *username, const char *password)
Init MQTT communication.
Definition mqtt.c:375
int mqtt_publish_single_message(const char *server_uri_in, const char *topic, const char *msg)
Send a single message.
Definition mqtt.c:527
static const char * mqtt_get_global_password()
Get global password.
Definition mqtt.c:131
gboolean mqtt_is_initialized()
Get the global init status.
Definition mqtt.c:69
int mqtt_retrieve_message(char **topic, int *topic_len, char **payload, int *payload_len, const unsigned int timeout)
wait for a given timeout in ms to retrieve any message of subscribed topics
Definition mqtt.c:837
int mqtt_unsubscribe(const char *topic)
unsubscribe a single topic.
Definition mqtt.c:705
static const char * global_server_uri
Definition mqtt.c:46
int mqtt_publish(const char *topic, const char *msg)
Publish a message on topic using the global client.
Definition mqtt.c:498
void mqtt_reset()
Destroy MQTTClient handle and free mqtt_t.
Definition mqtt.c:212
static void mqtt_reinit()
Reinitializes communication after mqtt_reset was used.
Definition mqtt.c:421
static void mqtt_client_destroy(mqtt_t *mqtt)
Destroy the MQTTClient client of the mqtt_t.
Definition mqtt.c:186
static void mqtt_set_global_username(const char *username)
Set the global mqtt username.
Definition mqtt.c:102
static mqtt_t * global_mqtt_client
Definition mqtt.c:49
int mqtt_init(const char *server_uri)
Init MQTT communication.
Definition mqtt.c:361
static mqtt_t * mqtt_get_global_client()
Definition mqtt.c:142
static int mqtt_retrieve_message_r(mqtt_t *mqtt, char **topic, int *topic_len, char **payload, int *payload_len, const unsigned int timeout)
wait for a given timeout in ms to retrieve any message of subscribed topics
Definition mqtt.c:739
static MQTTClient mqtt_create(mqtt_t *mqtt, const char *address)
Create a new mqtt client.
Definition mqtt.c:238
static char * mqtt_set_client_id(mqtt_t *mqtt)
Set a random client ID.
Definition mqtt.c:269
static int mqtt_subscribe_r(mqtt_t *mqtt, int qos, const char *topic)
subscribes to a single topic.
Definition mqtt.c:625
static void mqtt_set_global_server_uri(const char *server_uri_in)
Set the global mqtt server URI.
Definition mqtt.c:80
int mqtt_subscribe(const char *topic)
subscribes to a single topic.
Definition mqtt.c:660
static gboolean mqtt_initialized
Definition mqtt.c:50
static int mqtt_client_publish(mqtt_t *mqtt, const char *topic, const char *msg)
Use the provided client to publish message on a topic.
Definition mqtt.c:449
static const char * mqtt_get_global_username()
Get global username.
Definition mqtt.c:111
static const char * global_username
Definition mqtt.c:47
static void mqtt_client_data_destroy(mqtt_t **mqtt)
Destroy the mqtt_t data.
Definition mqtt.c:201
Protos for MQTT handling.
void MQTTClient_destroy(MQTTClient *client)
Definition mqtt_tests.c:15
char * client_id
Definition mqtt.c:43
void * client
Definition mqtt.c:42
char * gvm_uuid_make(void)
Make a new universal identifier.
Definition uuidutils.c:30