Fri, 22 Mar 2013 00:05:10 +0100
Tidying debug messages, signals
--- a/libpurple/account.c Thu Mar 21 22:21:50 2013 +0100 +++ b/libpurple/account.c Fri Mar 22 00:05:10 2013 +0100 @@ -380,16 +380,12 @@ if (purple_account_get_remember_password(account)) { - purple_debug_info("account", "Exporting password for account %s (%s).\n", - purple_account_get_username(account), - purple_account_get_protocol_id(account)); - purple_keyring_export_password(account, &keyring_id, &mode, &data, &error, &destroy); if (error != NULL) { - purple_debug_info("account", + purple_debug_error("account", "Failed to export password for account %s : %s.\n", purple_account_get_username(account), error->message); @@ -980,8 +976,7 @@ result = purple_keyring_import_password(ret, keyring_id, mode, data, NULL); if (result == TRUE) { - purple_debug_info("account", "Password imported successfully.\n"); - purple_account_set_remember_password(ret, TRUE); + purple_account_set_remember_password(ret, TRUE); } else { purple_debug_info("account", "Failed to import password.\n"); }
--- a/libpurple/core.c Thu Mar 21 22:21:50 2013 +0100 +++ b/libpurple/core.c Fri Mar 22 00:05:10 2013 +0100 @@ -114,6 +114,7 @@ purple_value_new(PURPLE_TYPE_BOXED, "GHashTable *")); /* Parameters */ purple_signal_register(core, "quitting", purple_marshal_VOID, NULL, 0); + purple_signal_register(core, "core-initialized", purple_marshal_VOID, NULL, 0); /* The prefs subsystem needs to be initialized before static protocols * for protocol prefs to work. */ @@ -136,7 +137,6 @@ purple_ciphers_init(); purple_cmds_init(); - purple_keyring_init(); /* Since plugins get probed so early we should probably initialize their * subsystem right away too. @@ -148,6 +148,7 @@ purple_plugins_probe(G_MODULE_SUFFIX); + purple_keyring_init(); purple_theme_manager_init(); /* The buddy icon code uses the imgstore, so init it early. */ @@ -188,15 +189,14 @@ if (ops != NULL && ops->ui_init != NULL) ops->ui_init(); - /* Selected keyring may have failed to load, so UI should be notified */ - purple_keyring_load_plugins(); - /* The UI may have registered some theme types, so refresh them */ purple_theme_manager_refresh(); /* Load the buddy list after UI init */ purple_blist_boot(); + purple_signal_emit(purple_get_core(), "core-initialized"); + return TRUE; } @@ -222,9 +222,8 @@ */ purple_certificate_uninit(); - /* The SSL and keyring plugins must be uninit before they're unloaded */ + /* The SSL plugins must be uninit before they're unloaded */ purple_ssl_uninit(); - purple_keyring_uninit(); /* Unload all non-loader, non-prpl plugins before shutting down * subsystems. */ @@ -245,6 +244,7 @@ purple_savedstatuses_uninit(); purple_status_uninit(); purple_accounts_uninit(); + purple_keyring_uninit(); /* after accounts */ purple_sound_uninit(); purple_theme_manager_uninit(); purple_xfers_uninit();
--- a/libpurple/keyring.c Thu Mar 21 22:21:50 2013 +0100 +++ b/libpurple/keyring.c Fri Mar 22 00:05:10 2013 +0100 @@ -254,10 +254,53 @@ purple_keyring_set_inuse(new, FALSE, NULL, data); } -void purple_keyring_load_plugins(void) +static void purple_keyring_core_initialized_cb() +{ + if (purple_keyring_inuse == NULL) { + purple_notify_error(NULL, _("Keyrings"), + _("Failed to load selected keyring."), + _("Check your system configuration or select another " + "one in Preferences dialog.")); + } +} + +void +purple_keyring_init(void) { + const char *touse; GList *it; + purple_keyring_keyrings = NULL; + purple_keyring_inuse = NULL; + + purple_signal_register(purple_keyring_get_handle(), + "keyring-register", + purple_marshal_VOID__POINTER_POINTER, + NULL, 2, + purple_value_new(PURPLE_TYPE_STRING), /* keyring ID */ + purple_value_new(PURPLE_TYPE_BOXED, "PurpleKeyring *")); /* a pointer to the keyring */ + + purple_signal_register(purple_keyring_get_handle(), + "keyring-unregister", + purple_marshal_VOID__POINTER_POINTER, + NULL, 2, + purple_value_new(PURPLE_TYPE_STRING), /* keyring ID */ + purple_value_new(PURPLE_TYPE_BOXED, "PurpleKeyring *")); /* a pointer to the keyring */ + + /* see what keyring we want to use */ + touse = purple_prefs_get_string("/purple/keyring/active"); + + if (touse == NULL) { + purple_prefs_add_none("/purple/keyring"); + purple_prefs_add_string("/purple/keyring/active", PURPLE_DEFAULT_KEYRING); + purple_keyring_to_use = g_strdup(PURPLE_DEFAULT_KEYRING); + } else { + purple_keyring_to_use = g_strdup(touse); + } + + purple_keyring_pref_cb_id = purple_prefs_connect_callback(NULL, + "/purple/keyring/active", purple_keyring_pref_cb, NULL); + for (it = purple_plugins_get_all(); it != NULL; it = it->next) { PurplePlugin *plugin = (PurplePlugin *)it->data; @@ -277,63 +320,18 @@ } } - if (purple_keyring_inuse == NULL) { + if (purple_keyring_inuse == NULL) purple_debug_error("keyring", "selected keyring failed to load\n"); - purple_notify_error(NULL, _("Keyrings"), - _("Failed to load selected keyring."), - _("Check your system configuration or select another " - "one in Preferences dialog.")); - } -} - -void -purple_keyring_init(void) -{ - PurpleCore *core; - const char *touse; - - /* Make sure we don't have junk */ - purple_keyring_keyrings = NULL; - purple_keyring_inuse = NULL; - - /* register signals */ - core = purple_get_core(); - purple_signal_register(core, "keyring-register", - purple_marshal_VOID__POINTER_POINTER, - NULL, 2, - purple_value_new(PURPLE_TYPE_STRING), /* keyring ID */ - purple_value_new(PURPLE_TYPE_BOXED, "PurpleKeyring *")); /* a pointer to the keyring */ - - purple_signal_register(core, "keyring-unregister", - purple_marshal_VOID__POINTER_POINTER, - NULL, 2, - purple_value_new(PURPLE_TYPE_STRING), /* keyring ID */ - purple_value_new(PURPLE_TYPE_BOXED, "PurpleKeyring *")); /* a pointer to the keyring */ - - /* see what keyring we want to use */ - touse = purple_prefs_get_string("/purple/keyring/active"); - - if (touse == NULL) { - purple_prefs_add_none("/purple/keyring"); - purple_prefs_add_string("/purple/keyring/active", PURPLE_DEFAULT_KEYRING); - purple_keyring_to_use = g_strdup(PURPLE_DEFAULT_KEYRING); - } else { - purple_keyring_to_use = g_strdup(touse); - } - - purple_keyring_pref_cb_id = purple_prefs_connect_callback(NULL, - "/purple/keyring/active", purple_keyring_pref_cb, NULL); - - purple_debug_info("keyring", "purple_keyring_init() done, selected keyring is : %s.\n", - purple_keyring_to_use); + purple_signal_connect(purple_get_core(), "core-initialized", + purple_keyring_get_handle(), + PURPLE_CALLBACK(purple_keyring_core_initialized_cb), NULL); } void purple_keyring_uninit(void) { GList *it; - PurpleCore *core = purple_get_core(); g_free(purple_keyring_to_use); purple_keyring_inuse = NULL; @@ -349,12 +347,19 @@ g_list_free(purple_keyring_loaded_plugins); purple_keyring_loaded_plugins = NULL; - purple_signal_unregister(core, "keyring-register"); - purple_signal_unregister(core, "keyring-unregister"); + purple_signals_unregister_by_instance(purple_keyring_get_handle()); purple_prefs_disconnect_callback(purple_keyring_pref_cb_id); purple_keyring_pref_cb_id = 0; } +void * +purple_keyring_get_handle(void) +{ + static int handle; + + return &handle; +} + PurpleKeyring * purple_keyring_find_keyring_by_id(const char *id) { @@ -426,26 +431,26 @@ switch(error->code) { case PURPLE_KEYRING_ERROR_NOCAP: purple_debug_info("keyring", - "Keyring could not save password for account %s : %s.\n", + "Keyring could not save password for account %s: %s.\n", name, error->message); break; case PURPLE_KEYRING_ERROR_NOPASSWD: purple_debug_info("keyring", - "No password found while changing keyring for account %s : %s.\n", + "No password found while changing keyring for account %s: %s.\n", name, error->message); break; case PURPLE_KEYRING_ERROR_NOCHANNEL: purple_debug_info("keyring", - "Failed to communicate with backend while changing keyring for account %s : %s. Aborting changes.\n", + "Failed to communicate with backend while changing keyring for account %s: %s. Aborting changes.\n", name, error->message); tracker->abort = TRUE; break; default: purple_debug_info("keyring", - "Unknown error while changing keyring for account %s : %s.\n", + "Unknown error while changing keyring for account %s: %s.\n", name, error->message); break; } @@ -561,11 +566,8 @@ PurpleKeyringClose close; PurpleKeyringChangeTracker *tracker; - if (newkeyring != NULL) - purple_debug_info("keyring", "Attempting to set new keyring : %s.\n", - newkeyring->id); - else - purple_debug_info("keyring", "Attempting to set new keyring : NULL.\n"); + purple_debug_info("keyring", "Attempting to set new keyring: %s.\n", + (newkeyring != NULL) ? newkeyring->id : "(null)"); oldkeyring = purple_keyring_get_inuse(); @@ -625,10 +627,12 @@ } } else { /* no keyring was set before. */ - purple_debug_info("keyring", "Setting keyring for the first time : %s.\n", - newkeyring->id); + if (purple_debug_is_verbose()) { + purple_debug_misc("keyring", "Setting keyring for the " + "first time: %s.\n", newkeyring->id); + } + purple_keyring_inuse = newkeyring; - if (cb != NULL) cb(newkeyring, TRUE, NULL, data); } @@ -665,7 +669,6 @@ purple_keyring_register(PurpleKeyring *keyring) { const char *keyring_id; - PurpleCore *core; g_return_if_fail(keyring != NULL); @@ -674,7 +677,7 @@ /* keyring with no ID. Add error handling ? */ g_return_if_fail(keyring_id != NULL); - purple_debug_info("keyring", "Registering keyring : %s.\n", + purple_debug_info("keyring", "Registering keyring: %s.\n", keyring->id); /* If this is the configured keyring, use it. */ @@ -687,11 +690,13 @@ } - core = purple_get_core(); - PURPLE_DBUS_REGISTER_POINTER(keyring, PurpleKeyring); - purple_signal_emit(core, "keyring-register", keyring_id, keyring); - purple_debug_info("keyring", "Registered keyring : %s.\n", keyring_id); + purple_signal_emit(purple_keyring_get_handle(), "keyring-register", + keyring_id, keyring); + if (purple_debug_is_verbose()) { + purple_debug_info("keyring", "Registered keyring: %s.\n", + keyring_id); + } purple_keyring_keyrings = g_list_prepend(purple_keyring_keyrings, keyring); @@ -700,27 +705,23 @@ void purple_keyring_unregister(PurpleKeyring *keyring) { - PurpleCore *core; const PurpleKeyring *inuse; PurpleKeyring *fallback; const char *keyring_id; g_return_if_fail(keyring != NULL); - purple_debug_info("keyring", "Unregistering keyring %s.\n", + purple_debug_info("keyring", "Unregistering keyring: %s.\n", purple_keyring_get_id(keyring)); - core = purple_get_core(); keyring_id = purple_keyring_get_id(keyring); - purple_signal_emit(core, "keyring-unregister", keyring_id, keyring); + purple_signal_emit(purple_keyring_get_handle(), "keyring-unregister", + keyring_id, keyring); PURPLE_DBUS_UNREGISTER_POINTER(keyring); inuse = purple_keyring_get_inuse(); fallback = purple_keyring_find_keyring_by_id(PURPLE_DEFAULT_KEYRING); - /* TODO: is there a possibility for (unneeded) password migration at - * Pidgin's exit? - */ if (inuse == keyring) { if (inuse != fallback) { purple_keyring_set_inuse(fallback, TRUE, NULL, NULL); @@ -733,8 +734,6 @@ purple_keyring_keyrings = g_list_remove(purple_keyring_keyrings, keyring); - - purple_debug_info("keyring", "Keyring %s unregistered.\n", keyring->id); } /*@}*/ @@ -756,7 +755,7 @@ PurpleKeyringImportPassword import; const char *realid; - purple_debug_info("keyring", "Importing password for account %s (%s) to keyring %s.\n", + purple_debug_misc("keyring", "Importing password for account %s (%s) to keyring %s.\n", purple_account_get_username(account), purple_account_get_protocol_id(account), keyringid); @@ -770,7 +769,7 @@ "No keyring configured, cannot import password " "info"); } - purple_debug_info("Keyring", + purple_debug_error("Keyring", "No keyring configured, cannot import password info for account %s (%s).\n", purple_account_get_username(account), purple_account_get_protocol_id(account)); return FALSE; @@ -826,18 +825,20 @@ if (inuse == NULL) { *error = g_error_new(PURPLE_KEYRING_ERROR, PURPLE_KEYRING_ERROR_NOKEYRING, "No keyring configured, cannot export password info"); - purple_debug_info("keyring", + purple_debug_error("keyring", "No keyring configured, cannot export password info.\n"); return FALSE; } *keyringid = purple_keyring_get_id(inuse); - purple_debug_info("keyring", - "Exporting password for account %s (%s) from keyring %s.\n", - purple_account_get_username(account), - purple_account_get_protocol_id(account), - *keyringid); + if (purple_debug_is_verbose()) { + purple_debug_misc("keyring", + "Exporting password for account %s (%s) from keyring " + "%s...\n", + purple_account_get_username(account), + purple_account_get_protocol_id(account), *keyringid); + } if (*keyringid == NULL) { *error = g_error_new(PURPLE_KEYRING_ERROR, PURPLE_KEYRING_ERROR_INVALID, @@ -906,7 +907,7 @@ g_error_free(error); } else { - purple_debug_info("keyring", "Reading password for account %s (%s).\n", + purple_debug_info("keyring", "Reading password for account %s (%s)...\n", purple_account_get_username(account), purple_account_get_protocol_id(account)); read(account, cb, data); @@ -929,6 +930,18 @@ cbinfo = data; cb = cbinfo->cb; + if (error == NULL && purple_debug_is_verbose()) { + purple_debug_misc("keyring", "Password for account %s (%s) " + "saved successfully.\n", + purple_account_get_username(account), + purple_account_get_protocol_id(account)); + } else if (purple_debug_is_verbose()) { + purple_debug_warning("keyring", "Password for account %s (%s) " + "not saved successfully.\n", + purple_account_get_username(account), + purple_account_get_protocol_id(account)); + } + if (error != NULL) { purple_notify_error(NULL, _("Keyrings"), _("Failed to save password in keyring."), @@ -974,6 +987,9 @@ cbinfo = g_new(PurpleKeyringCbInfo, 1); cbinfo->cb = cb; cbinfo->data = data; + purple_debug_info("keyring", "Saving password for account %s (%s)...\n", + purple_account_get_username(account), + purple_account_get_protocol_id(account)); save(account, password, purple_keyring_set_password_async_cb, cbinfo); } } @@ -1016,7 +1032,7 @@ if (inuse == NULL) { error = g_error_new(PURPLE_KEYRING_ERROR, PURPLE_KEYRING_ERROR_NOKEYRING, "No keyring configured, cannot change master password."); - purple_debug_info("keyring", "No keyring configured, cannot change master password.\n"); + purple_debug_error("keyring", "No keyring configured, cannot change master password.\n"); if (cb) cb(FALSE, error, data); g_error_free(error);
--- a/libpurple/keyring.h Thu Mar 21 22:21:50 2013 +0100 +++ b/libpurple/keyring.h Fri Mar 22 00:05:10 2013 +0100 @@ -227,11 +227,6 @@ GList *purple_keyring_get_options(void); /** - * Load keyring plugins. - */ -void purple_keyring_load_plugins(void); - -/** * Prepare stuff at startup. */ void purple_keyring_init(void); @@ -242,6 +237,13 @@ void purple_keyring_uninit(void); /** + * Returns the keyring subsystem handle. + * + * @return The keyring subsystem handle. + */ +void *purple_keyring_get_handle(void); + +/** * Get the keyring list. Used by the UI. */ const GList *
--- a/libpurple/plugins/keyrings/internalkeyring.c Thu Mar 21 22:21:50 2013 +0100 +++ b/libpurple/plugins/keyrings/internalkeyring.c Fri Mar 22 00:05:10 2013 +0100 @@ -66,17 +66,20 @@ ACTIVATE(); - purple_debug_misc("keyring-internal", - "Reading password for account %s (%s).\n", - purple_account_get_username(account), - purple_account_get_protocol_id(account)); - password = g_hash_table_lookup(internal_keyring_passwords, account); if (password != NULL) { + purple_debug_misc("keyring-internal", + "Got password for account %s (%s).\n", + purple_account_get_username(account), + purple_account_get_protocol_id(account)); if (cb != NULL) cb(account, password, NULL, data); } else { + purple_debug_misc("keyring-internal", + "No password for account %s (%s).\n", + purple_account_get_username(account), + purple_account_get_protocol_id(account)); error = g_error_new(PURPLE_KEYRING_ERROR, PURPLE_KEYRING_ERROR_NOPASSWD, "Password not found."); if (cb != NULL) @@ -93,20 +96,19 @@ { ACTIVATE(); - if (password == NULL || *password == '\0') { + if (password[0] == '\0') + password = NULL; + + if (password == NULL) g_hash_table_remove(internal_keyring_passwords, account); - purple_debug_info("keyring-internal", - "Deleted password for account %s (%s).\n", - purple_account_get_username(account), - purple_account_get_protocol_id(account)); - } else { + else g_hash_table_replace(internal_keyring_passwords, account, g_strdup(password)); - purple_debug_info("keyring-internal", - "Updated password for account %s (%s).\n", - purple_account_get_username(account), - purple_account_get_protocol_id(account)); - } + purple_debug_misc("keyring-internal", + "Password %s for account %s (%s).\n", + (password == NULL ? "removed" : "saved"), + purple_account_get_username(account), + purple_account_get_protocol_id(account)); if (cb != NULL) cb(account, NULL, data); @@ -127,21 +129,21 @@ const char *data, GError **error) { + g_return_if_fail(account != NULL); + g_return_if_fail(data != NULL); + ACTIVATE(); - purple_debug_info("keyring-internal", "Importing password.\n"); - - if (account != NULL && - data != NULL && - (mode == NULL || g_strcmp0(mode, "cleartext") == 0)) { - + if (mode == NULL || g_strcmp0(mode, "cleartext") == 0) { g_hash_table_replace(internal_keyring_passwords, account, g_strdup(data)); return TRUE; - } else { - *error = g_error_new(PURPLE_KEYRING_ERROR, PURPLE_KEYRING_ERROR_NOPASSWD, "No password for account."); + if (error != NULL) { + *error = g_error_new(PURPLE_KEYRING_ERROR, + PURPLE_KEYRING_ERROR_WRONGFORMAT, + "invalid mode"); + } return FALSE; - } return TRUE; @@ -158,8 +160,6 @@ ACTIVATE(); - purple_debug_info("keyring-internal", "Exporting password.\n"); - password = g_hash_table_lookup(internal_keyring_passwords, account); if (password == NULL) {
--- a/libpurple/plugins/keyrings/kwallet.cpp Thu Mar 21 22:21:50 2013 +0100 +++ b/libpurple/plugins/keyrings/kwallet.cpp Fri Mar 22 00:05:10 2013 +0100 @@ -199,11 +199,18 @@ KWalletPlugin::engine::~engine() { closing = true; + int abortedCount = 0; while (!isEmpty()) { request *req = dequeue(); req->abort(); delete req; + abortedCount++; + } + + if (abortedCount > 0) { + purple_debug_info("keyring-kwallet", "aborted requests: %d\n", + abortedCount); } delete wallet; @@ -242,11 +249,8 @@ connected = opened; if (!opened) { - while (!isEmpty()) { - request *req = dequeue(); - req->abort(); - delete req; - } + purple_debug_warning("keyring-kwallet", + "failed to open a wallet\n"); delete this; return; } @@ -378,8 +382,13 @@ "failed to read password, result was %d\n", result); abort(); } - else if (callback != NULL) + else if (callback != NULL) { + purple_debug_misc("keyring-kwallet", + "Got password for account %s (%s).\n", + purple_account_get_username(account), + purple_account_get_protocol_id(account)); callback(account, password.toUtf8().constData(), NULL, data); + } } void @@ -400,8 +409,14 @@ purple_debug_warning("keyring-kwallet", "failed to write password, result was %d\n", result); abort(); - } else if (callback != NULL) + } else if (callback != NULL) { + purple_debug_misc("keyring-kwallet", + "Password %s for account %s (%s).\n", + (noPassword ? "removed" : "saved"), + purple_account_get_username(account), + purple_account_get_protocol_id(account)); callback(account, NULL, data); + } } extern "C"