libpurple/protocols/facebook/mqtt.h

changeset 42187
fc241db9162d
parent 42186
637ba5491231
child 42188
04c0398f1046
--- a/libpurple/protocols/facebook/mqtt.h	Wed Mar 29 23:21:45 2023 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,520 +0,0 @@
-/* purple
- *
- * Purple is the legal property of its developers, whose names are too numerous
- * to list here.  Please refer to the COPYRIGHT file distributed with this
- * source distribution.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
- */
-
-#ifndef PURPLE_FACEBOOK_MQTT_H
-#define PURPLE_FACEBOOK_MQTT_H
-
-#include <glib.h>
-#include <string.h>
-
-#include <purple.h>
-
-#define FB_TYPE_MQTT  fb_mqtt_get_type()
-#define FB_TYPE_MQTT_MESSAGE  fb_mqtt_message_get_type()
-
-/**
- * FB_MQTT_NAME:
- *
- * The name of the MQTT version.
- */
-#define FB_MQTT_NAME  "MQTToT"
-
-/**
- * FB_MQTT_LEVEL:
- *
- * The level of the MQTT version.
- */
-#define FB_MQTT_LEVEL  3
-
-/**
- * FB_MQTT_KA:
- *
- * The keep-alive timeout, in seconds, of the MQTT connection.
- */
-#define FB_MQTT_KA  60
-
-/**
- * FB_MQTT_HOST:
- *
- * The MQTT host name for Facebook.
- */
-#define FB_MQTT_HOST  "mqtt.facebook.com"
-
-/**
- * FB_MQTT_PORT:
- *
- * The MQTT host port for Facebook.
- */
-#define FB_MQTT_PORT  443
-
-/**
- * FB_MQTT_TIMEOUT_CONN:
- *
- * The timeout, in seconds, to wait for a PING back from the server.
- */
-#define FB_MQTT_TIMEOUT_CONN ((guint)(FB_MQTT_KA * 1.5))
-
-/**
- * FB_MQTT_TIMEOUT_PING:
- *
- * The timeout, in seconds, to send a PING to the server.
- */
-#define FB_MQTT_TIMEOUT_PING (FB_MQTT_KA)
-
-/**
- * FB_MQTT_ERROR:
- *
- * The #GQuark of the domain of MQTT errors.
- */
-#define FB_MQTT_ERROR  fb_mqtt_error_quark()
-
-/**
- * FbMqttConnectFlags:
- * @FB_MQTT_CONNECT_FLAG_CLR: Clear the session.
- * @FB_MQTT_CONNECT_FLAG_WILL: A will message is in the payload.
- * @FB_MQTT_CONNECT_FLAG_RET: Retain the will message.
- * @FB_MQTT_CONNECT_FLAG_PASS: A password is in the payload.
- * @FB_MQTT_CONNECT_FLAG_USER: A user name is in the payload.
- * @FB_MQTT_CONNECT_FLAG_QOS0: Use no quality of service.
- * @FB_MQTT_CONNECT_FLAG_QOS1: Use level one quality of service.
- * @FB_MQTT_CONNECT_FLAG_QOS2: Use level two quality of service.
- *
- * The #FbMqttMessage flags for the CONNECT message.
- */
-typedef enum
-{
-	FB_MQTT_CONNECT_FLAG_CLR = 1 << 1,
-	FB_MQTT_CONNECT_FLAG_WILL = 1 << 2,
-	FB_MQTT_CONNECT_FLAG_RET = 1 << 5,
-	FB_MQTT_CONNECT_FLAG_PASS = 1 << 6,
-	FB_MQTT_CONNECT_FLAG_USER = 1 << 7,
-	FB_MQTT_CONNECT_FLAG_QOS0 = 0 << 3,
-	FB_MQTT_CONNECT_FLAG_QOS1 = 1 << 3,
-	FB_MQTT_CONNECT_FLAG_QOS2 = 2 << 3
-} FbMqttConnectFlags;
-
-/**
- * FbMqttError:
- * @FB_MQTT_ERROR_SUCCESS: There is no error.
- * @FB_MQTT_ERROR_PRTVERS: Unacceptable protocol version.
- * @FB_MQTT_ERROR_IDREJECT: Identifier rejected.
- * @FB_MQTT_ERROR_SRVGONE: Server unavailable.
- * @FB_MQTT_ERROR_USERPASS: Bad user name or password.
- * @FB_MQTT_ERROR_UNAUTHORIZED: Not authorized.
- * @FB_MQTT_ERROR_GENERAL: General failure.
- *
- * The error codes for the #FB_MQTT_ERROR domain.
- */
-typedef enum
-{
-	FB_MQTT_ERROR_SUCCESS = 0,
-	FB_MQTT_ERROR_PRTVERS = 1,
-	FB_MQTT_ERROR_IDREJECT = 2,
-	FB_MQTT_ERROR_SRVGONE = 3,
-	FB_MQTT_ERROR_USERPASS = 4,
-	FB_MQTT_ERROR_UNAUTHORIZED = 5,
-	FB_MQTT_ERROR_GENERAL
-} FbMqttError;
-
-/**
- * FbMqttMessageFlags:
- * @FB_MQTT_MESSAGE_FLAG_RET: Retain messages.
- * @FB_MQTT_MESSAGE_FLAG_DUP: Duplicate delivery of control packet.
- * @FB_MQTT_MESSAGE_FLAG_QOS0: Use no quality of service.
- * @FB_MQTT_MESSAGE_FLAG_QOS1: Use level one quality of service.
- * @FB_MQTT_MESSAGE_FLAG_QOS2: Use level two quality of service.
- *
- * The #FbMqttMessage flags.
- */
-typedef enum
-{
-	FB_MQTT_MESSAGE_FLAG_RET = 1 << 0,
-	FB_MQTT_MESSAGE_FLAG_DUP = 1 << 3,
-	FB_MQTT_MESSAGE_FLAG_QOS0 = 0 << 1,
-	FB_MQTT_MESSAGE_FLAG_QOS1 = 1 << 1,
-	FB_MQTT_MESSAGE_FLAG_QOS2 = 2 << 1
-} FbMqttMessageFlags;
-
-/**
- * FbMqttMessageType:
- * @FB_MQTT_MESSAGE_TYPE_CONNECT: Requests a connection.
- * @FB_MQTT_MESSAGE_TYPE_CONNACK: Connection acknowledgment.
- * @FB_MQTT_MESSAGE_TYPE_PUBLISH: Requests a message publication.
- * @FB_MQTT_MESSAGE_TYPE_PUBACK: Publication acknowledgment.
- * @FB_MQTT_MESSAGE_TYPE_PUBREC: Publication received.
- * @FB_MQTT_MESSAGE_TYPE_PUBREL: Publication released.
- * @FB_MQTT_MESSAGE_TYPE_PUBCOMP: Publication complete.
- * @FB_MQTT_MESSAGE_TYPE_SUBSCRIBE: Requests a subscription.
- * @FB_MQTT_MESSAGE_TYPE_SUBACK: Subscription acknowledgment.
- * @FB_MQTT_MESSAGE_TYPE_UNSUBSCRIBE: Requests an unsubscription.
- * @FB_MQTT_MESSAGE_TYPE_UNSUBACK: Unsubscription acknowledgment.
- * @FB_MQTT_MESSAGE_TYPE_PINGREQ: Requests a ping response.
- * @FB_MQTT_MESSAGE_TYPE_PINGRESP: Ping response.
- * @FB_MQTT_MESSAGE_TYPE_DISCONNECT: Requests a disconnection.
- *
- * The #FbMqttMessage types.
- */
-typedef enum
-{
-	FB_MQTT_MESSAGE_TYPE_CONNECT = 1,
-	FB_MQTT_MESSAGE_TYPE_CONNACK = 2,
-	FB_MQTT_MESSAGE_TYPE_PUBLISH = 3,
-	FB_MQTT_MESSAGE_TYPE_PUBACK = 4,
-	FB_MQTT_MESSAGE_TYPE_PUBREC = 5,
-	FB_MQTT_MESSAGE_TYPE_PUBREL = 6,
-	FB_MQTT_MESSAGE_TYPE_PUBCOMP = 7,
-	FB_MQTT_MESSAGE_TYPE_SUBSCRIBE = 8,
-	FB_MQTT_MESSAGE_TYPE_SUBACK = 9,
-	FB_MQTT_MESSAGE_TYPE_UNSUBSCRIBE = 10,
-	FB_MQTT_MESSAGE_TYPE_UNSUBACK = 11,
-	FB_MQTT_MESSAGE_TYPE_PINGREQ = 12,
-	FB_MQTT_MESSAGE_TYPE_PINGRESP = 13,
-	FB_MQTT_MESSAGE_TYPE_DISCONNECT = 14
-} FbMqttMessageType;
-
-G_DECLARE_FINAL_TYPE(FbMqtt, fb_mqtt, FB, MQTT, GObject)
-
-G_DECLARE_FINAL_TYPE(FbMqttMessage, fb_mqtt_message, FB, MQTT_MESSAGE,
-		GObject)
-
-/**
- * fb_mqtt_error_quark:
- *
- * Gets the #GQuark of the domain of MQTT errors.
- *
- * Returns: The #GQuark of the domain.
- */
-GQuark
-fb_mqtt_error_quark(void);
-
-/**
- * fb_mqtt_new:
- * @gc: The #PurpleConnection.
- *
- * Creates a new #FbMqtt. The returned #FbMqtt should be freed with
- * #g_object_unref() when no longer needed.
- *
- * Returns: The new #FbMqtt.
- */
-FbMqtt *
-fb_mqtt_new(PurpleConnection *gc);
-
-/**
- * fb_mqtt_close:
- * @mqtt: The #FbMqtt.
- *
- * Closes the MQTT without sending the `DISCONNECT` message. The #FbMqtt
- * may be reopened after calling this.
- */
-void
-fb_mqtt_close(FbMqtt *mqtt);
-
-/**
- * fb_mqtt_error:
- * @mqtt: The #FbMqtt.
- * @error: The #FbMqttError.
- * @format: The format string literal.
- * @...: The arguments for @format.
- *
- * Emits an #FbMqttError and closes the #FbMqtt.
- */
-void
-fb_mqtt_error(FbMqtt *mqtt, FbMqttError error, const gchar *format, ...)
-              G_GNUC_PRINTF(3, 4);
-
-/**
- * fb_mqtt_read:
- * @mqtt: The #FbMqtt.
- * @msg: The #FbMqttMessage.
- *
- * Reads an #FbMqttMessage into the #FbMqtt for processing.
- */
-void
-fb_mqtt_read(FbMqtt *mqtt, FbMqttMessage *msg);
-
-/**
- * fb_mqtt_write:
- * @mqtt: The #FbMqtt.
- * @msg: The #FbMqttMessage.
- *
- * Writes an #FbMqttMessage to the wire.
- */
-void
-fb_mqtt_write(FbMqtt *mqtt, FbMqttMessage *msg);
-
-/**
- * fb_mqtt_open:
- * @mqtt: The #FbMqtt.
- * @host: The host name.
- * @port: The port.
- *
- * Opens an SSL connection to the remote server.
- */
-void
-fb_mqtt_open(FbMqtt *mqtt, const gchar *host, gint port);
-
-/**
- * fb_mqtt_connect:
- * @mqtt: The #FbMqtt.
- * @flags: The #FbMqttConnectFlags.
- * @pload: The payload.
- *
- * Sends a message of type #FB_MQTT_MESSAGE_TYPE_CONNECT.
- */
-void
-fb_mqtt_connect(FbMqtt *mqtt, guint8 flags, const GByteArray *pload);
-
-/**
- * fb_mqtt_connected:
- * @mqtt: The #FbMqtt.
- * @error: #TRUE to error with no connection, otherwise #FALSE.
- *
- * Determines the connection state of the #FbMqtt, and optionally emits
- * an error.
- *
- * Returns: #TRUE if the #FbMqtt is connected, otherwise #FALSE.
- */
-gboolean
-fb_mqtt_connected(FbMqtt *mqtt, gboolean error);
-
-/**
- * fb_mqtt_disconnect:
- * @mqtt: The #FbMqtt.
- *
- * Sends a message of type #FB_MQTT_MESSAGE_TYPE_DISCONNECT, and closes
- * the connection.
- */
-void
-fb_mqtt_disconnect(FbMqtt *mqtt);
-
-/**
- * fb_mqtt_publish:
- * @mqtt: The #FbMqtt.
- * @topic: The topic.
- * @pload: The payload.
- *
- * Sends a message of type #FB_MQTT_MESSAGE_TYPE_PUBLISH.
- */
-void
-fb_mqtt_publish(FbMqtt *mqtt, const gchar *topic, const GByteArray *pload);
-
-/**
- * fb_mqtt_subscribe:
- * @mqtt: The #FbMqtt.
- * @...: The %NULL-terminated list of topic/QoS pairs.
- *
- * Sends a message of type #FB_MQTT_MESSAGE_TYPE_SUBSCRIBE.
- */
-void fb_mqtt_subscribe(FbMqtt *mqtt, ...) G_GNUC_NULL_TERMINATED;
-
-/**
- * fb_mqtt_unsubscribe:
- * @mqtt: The #FbMqtt.
- * @topic1: The first topic.
- * @...: The %NULL-terminated list of topics.
- *
- * Sends a message of type #FB_MQTT_MESSAGE_TYPE_UNSUBSCRIBE.
- */
-void
-fb_mqtt_unsubscribe(FbMqtt *mqtt, const gchar *topic1, ...)
-                    G_GNUC_NULL_TERMINATED;
-
-/**
- * fb_mqtt_message_new:
- * @type: The #FbMqttMessageType.
- * @flags: The #FbMqttMessageFlags.
- *
- * Creates a new #FbMqttMessage. The returned #FbMqttMessage should be
- * freed with #g_object_unref() when no longer needed.
- *
- * Returns: The new #FbMqttMessage.
- */
-FbMqttMessage *
-fb_mqtt_message_new(FbMqttMessageType type, FbMqttMessageFlags flags);
-
-/**
- * fb_mqtt_message_new_bytes:
- * @bytes: The #GByteArray.
- *
- * Creates a new #FbMqttMessage from a #GByteArray. The returned
- * #FbMqttMessage should be freed with #g_object_unref() when no
- * longer needed.
- *
- * Returns: The new #FbMqttMessage.
- */
-FbMqttMessage *
-fb_mqtt_message_new_bytes(GByteArray *bytes);
-
-/**
- * fb_mqtt_message_reset:
- * @msg: The #FbMqttMessage.
- *
- * Resets an #FbMqttMessage. This resets the cursor position, and
- * removes any sort of fixed header.
- */
-void
-fb_mqtt_message_reset(FbMqttMessage *msg);
-
-/**
- * fb_mqtt_message_bytes:
- * @msg: The #FbMqttMessage.
- *
- * Formats the internal #GByteArray of the #FbMqttMessage with the
- * required fixed header. This resets the cursor position.
- *
- * Returns: The internal #GByteArray.
- */
-const GByteArray *
-fb_mqtt_message_bytes(FbMqttMessage *msg);
-
-/**
- * fb_mqtt_message_read:
- * @msg: The #FbMqttMessage.
- * @data: The data buffer.
- * @size: The size of @buffer.
- *
- * Reads data from the #FbMqttMessage into a buffer. If @data is #NULL,
- * this will simply advance the cursor position.
- *
- * Returns: #TRUE if the data was read, otherwise #FALSE.
- */
-gboolean
-fb_mqtt_message_read(FbMqttMessage *msg, gpointer data, guint size);
-
-/**
- * fb_mqtt_message_read_r:
- * @msg: The #FbMqttMessage.
- * @bytes: The #GByteArray.
- *
- * Reads the remaining data from the #FbMqttMessage into a #GByteArray.
- * This is useful for obtaining the payload of a message.
- *
- * Returns: #TRUE if the data was read, otherwise #FALSE.
- */
-gboolean
-fb_mqtt_message_read_r(FbMqttMessage *msg, GByteArray *bytes);
-
-/**
- * fb_mqtt_message_read_byte:
- * @msg: The #FbMqttMessage.
- * @value: The return location for the value or #NULL.
- *
- * Reads an 8-bit integer value from the #FbMqttMessage. If @value is
- * #NULL, this will simply advance the cursor position.
- *
- * Returns: #TRUE if the value was read, otherwise #FALSE.
- */
-gboolean
-fb_mqtt_message_read_byte(FbMqttMessage *msg, guint8 *value);
-
-/**
- * fb_mqtt_message_read_mid:
- * @msg: The #FbMqttMessage.
- * @value: The return location for the value or #NULL.
- *
- * Reads a message identifier from the #FbMqttMessage. If @value is
- * #NULL, this will simply advance the cursor position.
- *
- * Returns: #TRUE if the value was read, otherwise #FALSE.
- */
-gboolean
-fb_mqtt_message_read_mid(FbMqttMessage *msg, guint16 *value);
-
-/**
- * fb_mqtt_message_read_u16:
- * @msg: The #FbMqttMessage.
- * @value: The return location for the value or #NULL.
- *
- * Reads a 16-bit integer value from the #FbMqttMessage. If @value is
- * #NULL, this will simply advance the cursor position.
- *
- * Returns: #TRUE if the value was read, otherwise #FALSE.
- */
-gboolean
-fb_mqtt_message_read_u16(FbMqttMessage *msg, guint16 *value);
-
-/**
- * fb_mqtt_message_read_str:
- * @msg: The #FbMqttMessage.
- * @value: The return location for the value or #NULL.
- *
- * Reads a string value from the #FbMqttMessage. The value returned to
- * @value should be freed with #g_free() when no longer needed. If
- * @value is #NULL, this will simply advance the cursor position.
- *
- * Returns: #TRUE if the value was read, otherwise #FALSE.
- */
-gboolean
-fb_mqtt_message_read_str(FbMqttMessage *msg, gchar **value);
-
-/**
- * fb_mqtt_message_write:
- * @msg: The #FbMqttMessage.
- * @data: The data buffer.
- * @size: The size of @buffer.
- *
- * Writes data to the #FbMqttMessage.
- */
-void
-fb_mqtt_message_write(FbMqttMessage *msg, gconstpointer data, guint size);
-
-/**
- * fb_mqtt_message_write_byte:
- * @msg: The #FbMqttMessage.
- * @value: The value.
- *
- * Writes an 8-bit integer value to the #FbMqttMessage.
- */
-void
-fb_mqtt_message_write_byte(FbMqttMessage *msg, guint8 value);
-
-/**
- * fb_mqtt_message_write_mid:
- * @msg: The #FbMqttMessage.
- * @value: The value.
- *
- * Writes a message identifier to the #FbMqttMessage. This increments
- * @value for the next message.
- */
-void
-fb_mqtt_message_write_mid(FbMqttMessage *msg, guint16 *value);
-
-/**
- * fb_mqtt_message_write_u16:
- * @msg: The #FbMqttMessage.
- * @value: The value.
- *
- * Writes a 16-bit integer value to the #FbMqttMessage.
- */
-void
-fb_mqtt_message_write_u16(FbMqttMessage *msg, guint16 value);
-
-/**
- * fb_mqtt_message_write_str:
- * @msg: The #FbMqttMessage.
- * @value: The value.
- *
- * Writes a string value to the #FbMqttMessage.
- */
-void
-fb_mqtt_message_write_str(FbMqttMessage *msg, const gchar *value);
-
-#endif /* PURPLE_FACEBOOK_MQTT_H */

mercurial