static void fb_mqtt_dispose(GObject *obj) { FbMqtt *mqtt = FB_MQTT(obj); FbMqttPrivate *priv = mqtt->priv; fb_mqtt_close(mqtt); g_byte_array_free(priv->rbuf, TRUE); g_byte_array_free(priv->wbuf, TRUE); }
/** * Frees all memory used by a #fb_mqtt. * * @param api The #fb_mqtt. **/ void fb_mqtt_free(fb_mqtt_t *mqtt) { if (G_UNLIKELY(mqtt == NULL)) return; fb_mqtt_close(mqtt); g_clear_error(&mqtt->err); g_byte_array_free(mqtt->wbuf, TRUE); g_byte_array_free(mqtt->rbuf, TRUE); g_free(mqtt); }
void fb_mqtt_disconnect(FbMqtt *mqtt) { FbMqttMessage *msg; if (G_UNLIKELY(!fb_mqtt_connected(mqtt, FALSE))) { return; } msg = fb_mqtt_message_new(FB_MQTT_MESSAGE_TYPE_DISCONNECT, 0); fb_mqtt_write(mqtt, msg); g_object_unref(msg); fb_mqtt_close(mqtt); }
/** * Disconnects from the MQTT service. This cleanly disconnects from the * MQTT services, rather than killing the socket stream. This closes * the #fb_mqtt via #fb_mqtt_close(). * * @param mqtt The #fb_mqtt. **/ void fb_mqtt_disconnect(fb_mqtt_t *mqtt) { fb_mqtt_msg_t *msg; g_return_if_fail(mqtt != NULL); if (G_UNLIKELY(!fb_mqtt_connected(mqtt, FALSE))) return; msg = fb_mqtt_msg_new(FB_MQTT_MSG_TYPE_DISCONNECT, 0); fb_mqtt_write(mqtt, msg); fb_mqtt_msg_free(msg); fb_mqtt_close(mqtt); }
/** * Opens the connection to the MQTT service. * * @param mqtt The #fb_mqtt. **/ void fb_mqtt_open(fb_mqtt_t *mqtt, const gchar *host, gint port) { g_return_if_fail(mqtt != NULL); fb_mqtt_close(mqtt); mqtt->ssl = ssl_connect((gchar*) host, port, TRUE, fb_mqtt_cb_open, mqtt); if (mqtt->ssl == NULL) { fb_mqtt_cb_open(mqtt, 1, NULL, 0); return; } fb_mqtt_timeout(mqtt); }
void fb_mqtt_open(FbMqtt *mqtt, const gchar *host, gint port) { FbMqttPrivate *priv; PurpleAccount *acc; g_return_if_fail(FB_IS_MQTT(mqtt)); priv = mqtt->priv; acc = purple_connection_get_account(priv->gc); fb_mqtt_close(mqtt); priv->gsc = purple_ssl_connect(acc, host, port, fb_mqtt_cb_open, fb_mqtt_cb_open_error, mqtt); if (priv->gsc == NULL) { fb_mqtt_cb_open_error(NULL, 0, mqtt); return; } fb_mqtt_timeout(mqtt); }