--- a/libpurple/xfer.h Wed Aug 30 20:33:01 2017 -0300 +++ b/libpurple/xfer.h Thu Aug 31 22:40:50 2017 -0500 @@ -38,6 +38,11 @@ #define PURPLE_TYPE_XFER_UI_OPS (purple_xfer_ui_ops_get_type()) +#define PURPLE_TYPE_PROTOCOL_XFER (purple_protocol_xfer_get_type()) +#define PURPLE_PROTOCOL_XFER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_PROTOCOL_XFER, PurpleProtocolXferInterface)) +#define PURPLE_IS_PROTOCOL_XFER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_PROTOCOL_XFER)) +#define PURPLE_PROTOCOL_XFER_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE((obj), PURPLE_TYPE_PROTOCOL_XFER, PurpleProtocolXferInterface)) + /**************************************************************************/ /** Data Structures */ /**************************************************************************/ @@ -46,10 +51,13 @@ typedef struct _PurpleXferUiOps PurpleXferUiOps; +typedef struct _PurpleProtocolXferInterface PurpleProtocolXferInterface; + #include <glib.h> #include <stdio.h> #include "account.h" +#include "connection.h" /** * PurpleXferType: @@ -182,6 +190,27 @@ void (*_purple_reserved4)(void); }; +/** + * PurpleProtocolXferIface: + * + * The protocol file transfer interface. + * + * This interface provides file transfer callbacks for the protocol. + */ +struct _PurpleProtocolXferInterface +{ + /*< private >*/ + GTypeInterface parent_iface; + + /*< public >*/ + gboolean (*can_receive)(PurpleConnection *, const char *who); + + void (*send)(PurpleConnection *, const char *who, + const char *filename); + + PurpleXfer *(*new_xfer)(PurpleConnection *, const char *who); +}; + G_BEGIN_DECLS /**************************************************************************/ @@ -946,6 +975,52 @@ */ PurpleXferUiOps *purple_xfers_get_ui_ops(void); +/****************************************************************************** + * Protocol Interface + *****************************************************************************/ + +/** + * purple_protocol_xfer_get_type: + * + * Returns: The #GType for the protocol xfer interface. + */ +GType purple_protocol_xfer_get_type(void); + +/** + * purple_protocol_xfer_can_receive: + * @iface: The #PurpleProtocolXferIface instance + * @connection: The #PurpleConnection that we're checking + * @who: The user that we want to set a file transfer to. + * + * Checks whether or not we can transfer a file to @who. + * + * Returns: TRUE on success, FALSE otherwise. + */ +gboolean purple_protocol_xfer_can_receive(PurpleProtocolXferInterface *iface, PurpleConnection *connection, const gchar *who); + +/** + * purple_protocol_xfer_send: + * @iface: The #PurpleProtocolXferInterface instance + * @connection: The #PurpleConnection that we're checking + * @who: The user that we want to set a file transfer to. + * @filename: The name of the file to send. + * + * Sends @filename to @who. + */ +void purple_protocol_xfer_send(PurpleProtocolXferInterface *iface, PurpleConnection *connection, const gchar *who, const gchar *filename); + +/** + * purple_protocol_xfer_send: + * @iface: The #PurpleProtocolXferInterface instance + * @connection: The #PurpleConnection that we're checking + * @who: The user that we want to set a file transfer to. + * + * Creates a new #PurpleXfer to @who. + * + * Returns: A new #PurpleXfer instance. + */ +PurpleXfer *purple_protocol_xfer_new_xfer(PurpleProtocolXferInterface *iface, PurpleConnection *connection, const gchar *who); + G_END_DECLS #endif /* _PURPLE_XFER_H_ */