Example #1
0
static gboolean load_plugin (PurplePlugin *plugin) {

	purple_signal_register(plugin, "irc-sending-text",
			     purple_marshal_VOID__POINTER_POINTER, NULL, 2,
			     purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_CONNECTION),
			     purple_value_new_outgoing(PURPLE_TYPE_STRING));
	purple_signal_register(plugin, "irc-receiving-text",
			     purple_marshal_VOID__POINTER_POINTER, NULL, 2,
			     purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_CONNECTION),
			     purple_value_new_outgoing(PURPLE_TYPE_STRING));
	return TRUE;
}
Example #2
0
void
purple_plugins_init(void) {
	void *handle = purple_plugins_get_handle();

	purple_plugins_add_search_path(LIBDIR);

	purple_signal_register(handle, "plugin-load",
						 purple_marshal_VOID__POINTER,
						 G_TYPE_NONE, 1, PURPLE_TYPE_PLUGIN);
	purple_signal_register(handle, "plugin-unload",
						 purple_marshal_VOID__POINTER,
						 G_TYPE_NONE, 1, PURPLE_TYPE_PLUGIN);
}
Example #3
0
void pidgin_log_init(void)
{
	void *handle = pidgin_log_get_handle();

	purple_signal_register(handle, "log-displaying",
	                     purple_marshal_VOID__POINTER_POINTER,
	                     NULL, 2,
	                     purple_value_new(PURPLE_TYPE_BOXED,
	                                    "PidginLogViewer *"),
	                     purple_value_new(PURPLE_TYPE_SUBTYPE,
	                                    PURPLE_SUBTYPE_LOG));
}
Example #4
0
void
purple_xfers_init(void) {
	void *handle = purple_xfers_get_handle();

	xfers_data = g_hash_table_new_full(g_direct_hash, g_direct_equal,
	                                   NULL, purple_xfer_priv_data_destroy);

	/* register signals */
	purple_signal_register(handle, "file-recv-accept",
	                     purple_marshal_VOID__POINTER, NULL, 1,
	                     purple_value_new(PURPLE_TYPE_SUBTYPE,
	                                    PURPLE_SUBTYPE_XFER));
	purple_signal_register(handle, "file-send-accept",
	                     purple_marshal_VOID__POINTER, NULL, 1,
	                     purple_value_new(PURPLE_TYPE_SUBTYPE,
	                                    PURPLE_SUBTYPE_XFER));
	purple_signal_register(handle, "file-recv-start",
	                     purple_marshal_VOID__POINTER, NULL, 1,
	                     purple_value_new(PURPLE_TYPE_SUBTYPE,
	                                    PURPLE_SUBTYPE_XFER));
	purple_signal_register(handle, "file-send-start",
	                     purple_marshal_VOID__POINTER, NULL, 1,
	                     purple_value_new(PURPLE_TYPE_SUBTYPE,
	                                    PURPLE_SUBTYPE_XFER));
	purple_signal_register(handle, "file-send-cancel",
	                     purple_marshal_VOID__POINTER, NULL, 1,
	                     purple_value_new(PURPLE_TYPE_SUBTYPE,
	                                    PURPLE_SUBTYPE_XFER));
	purple_signal_register(handle, "file-recv-cancel",
	                     purple_marshal_VOID__POINTER, NULL, 1,
	                     purple_value_new(PURPLE_TYPE_SUBTYPE,
	                                    PURPLE_SUBTYPE_XFER));
	purple_signal_register(handle, "file-send-complete",
	                     purple_marshal_VOID__POINTER, NULL, 1,
	                     purple_value_new(PURPLE_TYPE_SUBTYPE,
	                                    PURPLE_SUBTYPE_XFER));
	purple_signal_register(handle, "file-recv-complete",
	                     purple_marshal_VOID__POINTER, NULL, 1,
	                     purple_value_new(PURPLE_TYPE_SUBTYPE,
	                                    PURPLE_SUBTYPE_XFER));
	purple_signal_register(handle, "file-recv-request",
	                     purple_marshal_VOID__POINTER, NULL, 1,
	                     purple_value_new(PURPLE_TYPE_SUBTYPE,
	                                    PURPLE_SUBTYPE_XFER));
}
Example #5
0
void
purple_imgstore_init()
{
	void *handle = purple_imgstore_get_handle();

	purple_signal_register(handle, "image-deleting",
	                       purple_marshal_VOID__POINTER, NULL,
	                       1,
	                       purple_value_new(PURPLE_TYPE_SUBTYPE,
	                                        PURPLE_SUBTYPE_STORED_IMAGE));

	imgstore = g_hash_table_new(g_int_hash, g_int_equal);
}
Example #6
0
static void waprpl_init(PurplePlugin * plugin)
{
	PurpleAccountOption *option;

	prpl_info.user_splits = NULL;

	option = purple_account_option_string_new("Server", "server", "");
	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);

	option = purple_account_option_int_new("Port", "port", WHATSAPP_DEFAULT_PORT);
	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);

	option = purple_account_option_string_new("Nickname", "nick", "");
	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);

	option = purple_account_option_string_new("Resource", "resource", default_resource);
	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);

	_whatsapp_protocol = plugin;

	// Some signals which can be caught by plugins
	purple_signal_register(plugin, "whatsapp-sending-message",
			purple_marshal_VOID__POINTER_POINTER_POINTER_POINTER,
			NULL, 4,
			purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_CONNECTION),
			purple_value_new(PURPLE_TYPE_STRING), /* id */
			purple_value_new(PURPLE_TYPE_STRING), /* who */
			purple_value_new(PURPLE_TYPE_STRING)  /* message */
	);
	purple_signal_register(plugin, "whatsapp-message-received",
			purple_marshal_VOID__POINTER_POINTER_UINT,
			NULL, 3,
			purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_CONNECTION),
			purple_value_new(PURPLE_TYPE_STRING),  /* id */
			purple_value_new(PURPLE_TYPE_INT)      /* reception-types */
	);

}
Example #7
0
void
purple_notify_init(void)
{
	gpointer handle = purple_notify_get_handle();

	purple_signal_register(handle, "displaying-email-notification",
						 purple_marshal_VOID__POINTER_POINTER_POINTER_POINTER,
						 G_TYPE_NONE, 4, G_TYPE_STRING, G_TYPE_STRING,
						 G_TYPE_STRING, G_TYPE_STRING);

	purple_signal_register(handle, "displaying-emails-notification",
						 purple_marshal_VOID__POINTER_POINTER_POINTER_POINTER_UINT,
						 G_TYPE_NONE, 5, G_TYPE_POINTER, G_TYPE_POINTER,
						 G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_UINT);

	purple_signal_register(handle, "displaying-emails-clear",
						 purple_marshal_VOID, G_TYPE_NONE, 0);

	purple_signal_register(handle, "displaying-userinfo",
						 purple_marshal_VOID__POINTER_POINTER_POINTER,
						 G_TYPE_NONE, 3, PURPLE_TYPE_ACCOUNT, G_TYPE_STRING,
						 PURPLE_TYPE_NOTIFY_USER_INFO);
}
Example #8
0
void
purple_ciphers_init() {
	gpointer handle;

	handle = purple_ciphers_get_handle();

	purple_signal_register(handle, "cipher-added",
						 purple_marshal_VOID__POINTER, NULL, 1,
						 purple_value_new(PURPLE_TYPE_SUBTYPE,
										PURPLE_SUBTYPE_CIPHER));
	purple_signal_register(handle, "cipher-removed",
						 purple_marshal_VOID__POINTER, NULL, 1,
						 purple_value_new(PURPLE_TYPE_SUBTYPE,
										PURPLE_SUBTYPE_CIPHER));

	purple_ciphers_register_cipher("md5", purple_md5_cipher_get_ops());
	purple_ciphers_register_cipher("sha1", purple_sha1_cipher_get_ops());
	purple_ciphers_register_cipher("sha256", purple_sha256_cipher_get_ops());
	purple_ciphers_register_cipher("md4", purple_md4_cipher_get_ops());
	purple_ciphers_register_cipher("hmac", purple_hmac_cipher_get_ops());
	purple_ciphers_register_cipher("des", purple_des_cipher_get_ops());
	purple_ciphers_register_cipher("des3", purple_des3_cipher_get_ops());
	purple_ciphers_register_cipher("rc4", purple_rc4_cipher_get_ops());
}
Example #9
0
void
purple_sound_init()
{
	void *handle = purple_sounds_get_handle();

	/**********************************************************************
	 * Register signals
	**********************************************************************/

	purple_signal_register(handle, "playing-sound-event",
	                     purple_marshal_BOOLEAN__INT_POINTER,
	                     G_TYPE_BOOLEAN, 2, G_TYPE_INT, PURPLE_TYPE_ACCOUNT);

	purple_prefs_add_none("/purple/sound");
	purple_prefs_add_int("/purple/sound/while_status", PURPLE_SOUND_STATUS_AVAILABLE);
	memset(last_played, 0, sizeof(last_played));

	purple_theme_manager_register_type(g_object_new(PURPLE_TYPE_SOUND_THEME_LOADER, "type", "sound", NULL));
}
Example #10
0
void
purple_sound_init()
{
	void *handle = purple_sounds_get_handle();

	/**********************************************************************
	 * Register signals
	**********************************************************************/

	purple_signal_register(handle, "playing-sound-event",
	                     purple_marshal_BOOLEAN__INT_POINTER,
	                     purple_value_new(PURPLE_TYPE_BOOLEAN), 2,
	                     purple_value_new(PURPLE_TYPE_INT),
	                     purple_value_new(PURPLE_TYPE_SUBTYPE,
	                                    PURPLE_SUBTYPE_ACCOUNT));

	purple_prefs_add_none("/purple/sound");
	purple_prefs_add_int("/purple/sound/while_status", STATUS_AVAILABLE);
	memset(last_played, 0, sizeof(last_played));
}
Example #11
0
void
purple_connections_init(void)
{
	void *handle = purple_connections_get_handle();

	purple_signal_register(handle, "signing-on",
						 purple_marshal_VOID__POINTER, NULL, 1,
						 purple_value_new(PURPLE_TYPE_SUBTYPE,
										PURPLE_SUBTYPE_CONNECTION));

	purple_signal_register(handle, "signed-on",
						 purple_marshal_VOID__POINTER, NULL, 1,
						 purple_value_new(PURPLE_TYPE_SUBTYPE,
										PURPLE_SUBTYPE_CONNECTION));

	purple_signal_register(handle, "signing-off",
						 purple_marshal_VOID__POINTER, NULL, 1,
						 purple_value_new(PURPLE_TYPE_SUBTYPE,
										PURPLE_SUBTYPE_CONNECTION));

	purple_signal_register(handle, "signed-off",
						 purple_marshal_VOID__POINTER, NULL, 1,
						 purple_value_new(PURPLE_TYPE_SUBTYPE,
										PURPLE_SUBTYPE_CONNECTION));

	purple_signal_register(handle, "connection-error",
	                       purple_marshal_VOID__POINTER_INT_POINTER, NULL, 3,
	                       purple_value_new(PURPLE_TYPE_SUBTYPE,
	                                        PURPLE_SUBTYPE_CONNECTION),
	                       purple_value_new(PURPLE_TYPE_ENUM),
	                       purple_value_new(PURPLE_TYPE_STRING));

	purple_signal_register(handle, "autojoin",
	                       purple_marshal_BOOLEAN__POINTER, NULL, 1,
	                       purple_value_new(PURPLE_TYPE_SUBTYPE,
	                                        PURPLE_SUBTYPE_CONNECTION));

}
Example #12
0
static gboolean load_plugin(PurplePlugin *plugin)
{
    purple_signal_register(plugin, "jabber-receiving-xmlnode",
                           purple_marshal_VOID__POINTER_POINTER, NULL, 2,
                           purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_CONNECTION),
                           purple_value_new_outgoing(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_XMLNODE));

    purple_signal_register(plugin, "jabber-sending-xmlnode",
                           purple_marshal_VOID__POINTER_POINTER, NULL, 2,
                           purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_CONNECTION),
                           purple_value_new_outgoing(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_XMLNODE));

    /*
     * Do not remove this or the plugin will fail. Completely. You have been
     * warned!
     */
    purple_signal_connect_priority(plugin, "jabber-sending-xmlnode",
                                   plugin, PURPLE_CALLBACK(jabber_send_signal_cb),
                                   NULL, PURPLE_SIGNAL_PRIORITY_HIGHEST);

    purple_signal_register(plugin, "jabber-sending-text",
                           purple_marshal_VOID__POINTER_POINTER, NULL, 2,
                           purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_CONNECTION),
                           purple_value_new_outgoing(PURPLE_TYPE_STRING));

    purple_signal_register(plugin, "jabber-receiving-message",
                           purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_POINTER_POINTER,
                           purple_value_new(PURPLE_TYPE_BOOLEAN), 6,
                           purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_CONNECTION),
                           purple_value_new(PURPLE_TYPE_STRING), /* type */
                           purple_value_new(PURPLE_TYPE_STRING), /* id */
                           purple_value_new(PURPLE_TYPE_STRING), /* from */
                           purple_value_new(PURPLE_TYPE_STRING), /* to */
                           purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_XMLNODE));

    purple_signal_register(plugin, "jabber-receiving-iq",
                           purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_POINTER,
                           purple_value_new(PURPLE_TYPE_BOOLEAN), 5,
                           purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_CONNECTION),
                           purple_value_new(PURPLE_TYPE_STRING), /* type */
                           purple_value_new(PURPLE_TYPE_STRING), /* id */
                           purple_value_new(PURPLE_TYPE_STRING), /* from */
                           purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_XMLNODE));

    purple_signal_register(plugin, "jabber-watched-iq",
                           purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_POINTER,
                           purple_value_new(PURPLE_TYPE_BOOLEAN), 5,
                           purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_CONNECTION),
                           purple_value_new(PURPLE_TYPE_STRING), /* type */
                           purple_value_new(PURPLE_TYPE_STRING), /* id */
                           purple_value_new(PURPLE_TYPE_STRING), /* from */
                           purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_XMLNODE)); /* child */

    /* Modifying these? Look at jabber_init_plugin for the ipc versions */
    purple_signal_register(plugin, "jabber-register-namespace-watcher",
                           purple_marshal_VOID__POINTER_POINTER,
                           NULL, 2,
                           purple_value_new(PURPLE_TYPE_STRING),  /* node */
                           purple_value_new(PURPLE_TYPE_STRING)); /* namespace */

    purple_signal_register(plugin, "jabber-unregister-namespace-watcher",
                           purple_marshal_VOID__POINTER_POINTER,
                           NULL, 2,
                           purple_value_new(PURPLE_TYPE_STRING),  /* node */
                           purple_value_new(PURPLE_TYPE_STRING)); /* namespace */

    purple_signal_connect(plugin, "jabber-register-namespace-watcher",
                          plugin, PURPLE_CALLBACK(jabber_iq_signal_register), NULL);
    purple_signal_connect(plugin, "jabber-unregister-namespace-watcher",
                          plugin, PURPLE_CALLBACK(jabber_iq_signal_unregister), NULL);

    purple_signal_register(plugin, "jabber-receiving-presence",
                           purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER,
                           purple_value_new(PURPLE_TYPE_BOOLEAN), 4,
                           purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_CONNECTION),
                           purple_value_new(PURPLE_TYPE_STRING), /* type */
                           purple_value_new(PURPLE_TYPE_STRING), /* from */
                           purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_XMLNODE));

    return TRUE;
}
Example #13
0
STATIC_PROTO_INIT

gboolean
purple_core_init(const char *ui)
{
    PurpleCoreUiOps *ops;
    PurpleCore *core;

    g_return_val_if_fail(ui != NULL, FALSE);
    g_return_val_if_fail(purple_get_core() == NULL, FALSE);

#ifdef ENABLE_NLS
    bindtextdomain(PACKAGE, LOCALEDIR);
#endif
//VOXOX - JRT - 2009.04.11
#ifdef _WIN32
    wpurple_init();

#ifdef _DEBUG
//	_CrtSetDbgFlag( 0x20 );	//_CRTDBG_LEAK_CHECK_DF );//VOXOX - JRT - 2009.04.10 JRT-XXX
//	_CrtSetAllocHook( AllocHook );
#endif
#endif

    g_type_init();

    _core = core = g_new0(PurpleCore, 1);
    core->ui = g_strdup(ui);
    core->reserved = NULL;

    ops = purple_core_get_ui_ops();

    /* The signals subsystem is important and should be first. */
    purple_signals_init();

    purple_util_init();

    purple_signal_register(core, "uri-handler",
                           purple_marshal_BOOLEAN__POINTER_POINTER_POINTER,
                           purple_value_new(PURPLE_TYPE_BOOLEAN), 3,
                           purple_value_new(PURPLE_TYPE_STRING), /* Protocol */
                           purple_value_new(PURPLE_TYPE_STRING), /* Command */
                           purple_value_new(PURPLE_TYPE_BOXED, "GHashTable *")); /* Parameters */

    purple_signal_register(core, "quitting", purple_marshal_VOID, NULL, 0);

    /* The prefs subsystem needs to be initialized before static protocols
     * for protocol prefs to work. */
    purple_prefs_init();

    purple_debug_init();

    if (ops != NULL)
    {
        if (ops->ui_prefs_init != NULL)
            ops->ui_prefs_init();

        if (ops->debug_ui_init != NULL)
            ops->debug_ui_init();
    }

#ifdef HAVE_DBUS
    purple_dbus_init();
#endif

    purple_ciphers_init();
    purple_cmds_init();

    /* Since plugins get probed so early we should probably initialize their
     * subsystem right away too.
     */
    purple_plugins_init();

    /* Initialize all static protocols. */
    static_proto_init();

    purple_plugins_probe(G_MODULE_SUFFIX);

    /* The buddy icon code uses the imgstore, so init it early. */
    purple_imgstore_init();

    /* Accounts use status, buddy icons and connection signals, so
     * initialize these before accounts
     */
    purple_status_init();
    purple_buddy_icons_init();
    purple_connections_init();

    purple_accounts_init();
    purple_savedstatuses_init();
    purple_notify_init();
    purple_certificate_init();
    purple_conversations_init();
    purple_blist_init();
    purple_log_init();
    purple_network_init();
    purple_privacy_init();
    purple_pounces_init();
    purple_proxy_init();
    purple_dnsquery_init();
    purple_sound_init();
    purple_ssl_init();
    purple_stun_init();
    purple_xfers_init();
    purple_idle_init();
    purple_smileys_init();

    /*
     * Call this early on to try to auto-detect our IP address and
     * hopefully save some time later.
     */
    purple_network_get_my_ip(-1);

    if (ops != NULL && ops->ui_init != NULL)
        ops->ui_init();

    return TRUE;
}
Example #14
0
void
purple_conversations_init(void)
{
	void *handle = purple_conversations_get_handle();

	conversation_cache = g_hash_table_new_full((GHashFunc)_purple_conversations_hconv_hash,
						(GEqualFunc)_purple_conversations_hconv_equal,
						(GDestroyNotify)_purple_conversations_hconv_free_key, NULL);

	/**********************************************************************
	 * Register preferences
	 **********************************************************************/

	/* Conversations */
	purple_prefs_add_none("/purple/conversations");

	/* Conversations -> Chat */
	purple_prefs_add_none("/purple/conversations/chat");
	purple_prefs_add_bool("/purple/conversations/chat/show_nick_change", TRUE);

	/* Conversations -> IM */
	purple_prefs_add_none("/purple/conversations/im");
	purple_prefs_add_bool("/purple/conversations/im/send_typing", TRUE);


	/**********************************************************************
	 * Register signals
	 **********************************************************************/
	purple_signal_register(handle, "writing-im-msg",
						 purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_UINT,
						 G_TYPE_BOOLEAN, 5, PURPLE_TYPE_ACCOUNT, G_TYPE_STRING,
						 G_TYPE_POINTER, /* pointer to a string */
						 PURPLE_TYPE_IM_CONVERSATION, G_TYPE_UINT);

	purple_signal_register(handle, "wrote-im-msg",
						 purple_marshal_VOID__POINTER_POINTER_POINTER_POINTER_UINT,
						 G_TYPE_NONE, 5, PURPLE_TYPE_ACCOUNT, G_TYPE_STRING,
						 G_TYPE_STRING, PURPLE_TYPE_IM_CONVERSATION, G_TYPE_UINT);

	purple_signal_register(handle, "sent-attention",
						 purple_marshal_VOID__POINTER_POINTER_POINTER_UINT,
						 G_TYPE_NONE, 4, PURPLE_TYPE_ACCOUNT, G_TYPE_STRING,
						 PURPLE_TYPE_CONVERSATION, G_TYPE_UINT);

	purple_signal_register(handle, "got-attention",
						 purple_marshal_VOID__POINTER_POINTER_POINTER_UINT,
						 G_TYPE_NONE, 4, PURPLE_TYPE_ACCOUNT, G_TYPE_STRING,
						 PURPLE_TYPE_CONVERSATION, G_TYPE_UINT);

	purple_signal_register(handle, "sending-im-msg",
						 purple_marshal_VOID__POINTER_POINTER_POINTER,
						 G_TYPE_NONE, 3, PURPLE_TYPE_ACCOUNT, G_TYPE_STRING,
						 G_TYPE_POINTER); /* pointer to a string */

	purple_signal_register(handle, "sent-im-msg",
						 purple_marshal_VOID__POINTER_POINTER_POINTER,
						 G_TYPE_NONE, 3, PURPLE_TYPE_ACCOUNT, G_TYPE_STRING,
						 G_TYPE_STRING);

	purple_signal_register(handle, "receiving-im-msg",
						 purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_POINTER,
						 G_TYPE_BOOLEAN, 5, PURPLE_TYPE_ACCOUNT,
						 G_TYPE_POINTER, /* pointer to a string */
						 G_TYPE_POINTER, /* pointer to a string */
						 PURPLE_TYPE_IM_CONVERSATION,
						 G_TYPE_POINTER); /* pointer to a string */

	purple_signal_register(handle, "received-im-msg",
						 purple_marshal_VOID__POINTER_POINTER_POINTER_POINTER_UINT,
						 G_TYPE_NONE, 5, PURPLE_TYPE_ACCOUNT, G_TYPE_STRING,
						 G_TYPE_STRING, PURPLE_TYPE_IM_CONVERSATION, G_TYPE_UINT);

	purple_signal_register(handle, "blocked-im-msg",
						 purple_marshal_VOID__POINTER_POINTER_POINTER_UINT_UINT,
						 G_TYPE_NONE, 5, PURPLE_TYPE_ACCOUNT, G_TYPE_STRING,
						 G_TYPE_STRING, G_TYPE_UINT, G_TYPE_UINT);

	purple_signal_register(handle, "writing-chat-msg",
						 purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_UINT,
						 G_TYPE_BOOLEAN, 5, PURPLE_TYPE_ACCOUNT, G_TYPE_STRING,
						 G_TYPE_POINTER, /* pointer to a string */
						 PURPLE_TYPE_CHAT_CONVERSATION, G_TYPE_UINT);

	purple_signal_register(handle, "wrote-chat-msg",
						 purple_marshal_VOID__POINTER_POINTER_POINTER_POINTER_UINT,
						 G_TYPE_NONE, 5, PURPLE_TYPE_ACCOUNT, G_TYPE_STRING,
						 G_TYPE_STRING, PURPLE_TYPE_CHAT_CONVERSATION, G_TYPE_UINT);

	purple_signal_register(handle, "sending-chat-msg",
						 purple_marshal_VOID__POINTER_POINTER_UINT, G_TYPE_NONE,
						 3, PURPLE_TYPE_ACCOUNT,
						 G_TYPE_POINTER, /* pointer to a string */
						 G_TYPE_UINT);

	purple_signal_register(handle, "sent-chat-msg",
						 purple_marshal_VOID__POINTER_POINTER_UINT, G_TYPE_NONE,
						 3, PURPLE_TYPE_ACCOUNT, G_TYPE_STRING, G_TYPE_UINT);

	purple_signal_register(handle, "receiving-chat-msg",
						 purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_POINTER,
						 G_TYPE_BOOLEAN, 5, PURPLE_TYPE_ACCOUNT,
						 G_TYPE_POINTER, /* pointer to a string */
						 G_TYPE_POINTER, /* pointer to a string */
						 PURPLE_TYPE_CHAT_CONVERSATION,
						 G_TYPE_POINTER); /* pointer to an unsigned int */

	purple_signal_register(handle, "received-chat-msg",
						 purple_marshal_VOID__POINTER_POINTER_POINTER_POINTER_UINT,
						 G_TYPE_NONE, 5, PURPLE_TYPE_ACCOUNT, G_TYPE_STRING,
						 G_TYPE_STRING, PURPLE_TYPE_CHAT_CONVERSATION, G_TYPE_UINT);

	purple_signal_register(handle, "conversation-created",
						 purple_marshal_VOID__POINTER, G_TYPE_NONE, 1,
						 PURPLE_TYPE_CONVERSATION);

	purple_signal_register(handle, "conversation-updated",
						 purple_marshal_VOID__POINTER_UINT, G_TYPE_NONE, 2,
						 PURPLE_TYPE_CONVERSATION, G_TYPE_UINT);

	purple_signal_register(handle, "deleting-conversation",
						 purple_marshal_VOID__POINTER, G_TYPE_NONE, 1,
						 PURPLE_TYPE_CONVERSATION);

	purple_signal_register(handle, "buddy-typing",
						 purple_marshal_VOID__POINTER_POINTER, G_TYPE_NONE, 2,
						 PURPLE_TYPE_ACCOUNT, G_TYPE_STRING);

	purple_signal_register(handle, "buddy-typed",
						 purple_marshal_VOID__POINTER_POINTER, G_TYPE_NONE, 2,
						 PURPLE_TYPE_ACCOUNT, G_TYPE_STRING);

	purple_signal_register(handle, "buddy-typing-stopped",
						 purple_marshal_VOID__POINTER_POINTER, G_TYPE_NONE, 2,
						 PURPLE_TYPE_ACCOUNT, G_TYPE_STRING);

	purple_signal_register(handle, "chat-user-joining",
						 purple_marshal_BOOLEAN__POINTER_POINTER_UINT,
						 G_TYPE_BOOLEAN, 3, PURPLE_TYPE_CHAT_CONVERSATION,
						 G_TYPE_STRING, G_TYPE_UINT);

	purple_signal_register(handle, "chat-user-joined",
						 purple_marshal_VOID__POINTER_POINTER_UINT_UINT,
						 G_TYPE_NONE, 4, PURPLE_TYPE_CHAT_CONVERSATION,
						 G_TYPE_STRING, G_TYPE_UINT, G_TYPE_BOOLEAN);

	purple_signal_register(handle, "chat-user-flags",
						 purple_marshal_VOID__POINTER_UINT_UINT, G_TYPE_NONE, 3,
						 PURPLE_TYPE_CHAT_USER, G_TYPE_UINT, G_TYPE_UINT);

	purple_signal_register(handle, "chat-user-leaving",
						 purple_marshal_BOOLEAN__POINTER_POINTER_POINTER,
						 G_TYPE_BOOLEAN, 3, PURPLE_TYPE_CHAT_CONVERSATION,
						 G_TYPE_STRING, G_TYPE_STRING);

	purple_signal_register(handle, "chat-user-left",
						 purple_marshal_VOID__POINTER_POINTER_POINTER,
						 G_TYPE_NONE, 3, PURPLE_TYPE_CHAT_CONVERSATION,
						 G_TYPE_STRING, G_TYPE_STRING);

	purple_signal_register(handle, "deleting-chat-user",
						 purple_marshal_VOID__POINTER, G_TYPE_NONE, 1,
						 PURPLE_TYPE_CHAT_USER);

	purple_signal_register(handle, "chat-inviting-user",
						 purple_marshal_VOID__POINTER_POINTER_POINTER,
						 G_TYPE_NONE, 3, PURPLE_TYPE_CHAT_CONVERSATION, 
						 G_TYPE_STRING,
						 G_TYPE_POINTER); /* pointer to a string */

	purple_signal_register(handle, "chat-invited-user",
						 purple_marshal_VOID__POINTER_POINTER_POINTER,
						 G_TYPE_NONE, 3, PURPLE_TYPE_CHAT_CONVERSATION,
						 G_TYPE_STRING, G_TYPE_STRING);

	purple_signal_register(handle, "chat-invited",
						 purple_marshal_INT__POINTER_POINTER_POINTER_POINTER_POINTER,
						 G_TYPE_INT, 5, PURPLE_TYPE_ACCOUNT, G_TYPE_STRING,
						 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER);

	purple_signal_register(handle, "chat-invite-blocked",
						 purple_marshal_VOID__POINTER_POINTER_POINTER_POINTER_POINTER,
						 G_TYPE_NONE, 5, PURPLE_TYPE_ACCOUNT, G_TYPE_STRING,
						 G_TYPE_STRING, G_TYPE_STRING,
						 G_TYPE_POINTER); /* (GHashTable *) */

	purple_signal_register(handle, "chat-joined",
						 purple_marshal_VOID__POINTER, G_TYPE_NONE, 1,
						 PURPLE_TYPE_CHAT_CONVERSATION);

	purple_signal_register(handle, "chat-join-failed",
						   purple_marshal_VOID__POINTER_POINTER, G_TYPE_NONE, 2,
						   PURPLE_TYPE_CONNECTION, G_TYPE_POINTER);

	purple_signal_register(handle, "chat-left",
						 purple_marshal_VOID__POINTER, G_TYPE_NONE, 1,
						 PURPLE_TYPE_CHAT_CONVERSATION);

	purple_signal_register(handle, "chat-topic-changed",
						 purple_marshal_VOID__POINTER_POINTER_POINTER,
						 G_TYPE_NONE, 3, PURPLE_TYPE_CHAT_CONVERSATION,
						 G_TYPE_STRING, G_TYPE_STRING);

	purple_signal_register(handle, "cleared-message-history",
	                       purple_marshal_VOID__POINTER, G_TYPE_NONE, 1,
	                       PURPLE_TYPE_CONVERSATION);

	purple_signal_register(handle, "conversation-extended-menu",
			     purple_marshal_VOID__POINTER_POINTER, G_TYPE_NONE, 2,
			     PURPLE_TYPE_CONVERSATION,
			     G_TYPE_POINTER); /* (GList **) */
}