# HG changeset patch # User tomkiewicz@o2.pl # Date 1304305929 0 # Node ID b2daa6e51596897b22c1bd21f1f1c779eb9606b0 # Parent 81a2ec76c28581bf1a459d3ef526f0ab24e50d94 gg: Allow the user to choose whether to use SSL/TLS support. Fixes #13894. committer: John Bailey diff -r 81a2ec76c285 -r b2daa6e51596 libpurple/protocols/gg/gg.c --- a/libpurple/protocols/gg/gg.c Mon May 02 02:57:58 2011 +0000 +++ b/libpurple/protocols/gg/gg.c Mon May 02 03:12:09 2011 +0000 @@ -1845,6 +1845,9 @@ case GG_STATE_RESOLVING: purple_debug_info("gg", "GG_STATE_RESOLVING\n"); break; + case GG_STATE_RESOLVING_GG: + purple_debug_info("gg", "GG_STATE_RESOLVING_GG\n"); + break; case GG_STATE_CONNECTING_HUB: purple_debug_info("gg", "GG_STATE_CONNECTING_HUB\n"); break; @@ -1860,6 +1863,9 @@ case GG_STATE_READING_REPLY: purple_debug_info("gg", "GG_STATE_READING_REPLY\n"); break; + case GG_STATE_TLS_NEGOTIATION: + purple_debug_info("gg", "GG_STATE_TLS_NEGOTIATION\n"); + break; default: purple_debug_error("gg", "unknown state = %d\n", info->session->state); @@ -1880,10 +1886,11 @@ purple_input_remove(gc->inpa); /** XXX I think that this shouldn't be done if ev->type is GG_EVENT_CONN_FAILED or GG_EVENT_CONN_SUCCESS -datallah */ - gc->inpa = purple_input_add(info->session->fd, - (info->session->check == 1) ? PURPLE_INPUT_WRITE - : PURPLE_INPUT_READ, - ggp_async_login_handler, gc); + if (info->session->fd >= 0) + gc->inpa = purple_input_add(info->session->fd, + (info->session->check == 1) ? PURPLE_INPUT_WRITE : + PURPLE_INPUT_READ, + ggp_async_login_handler, gc); switch (ev->type) { case GG_EVENT_NONE: @@ -2096,6 +2103,7 @@ struct gg_login_params *glp; GGPInfo *info; const char *address; + const gchar *encryption_type; if (ggp_setup_proxy(account) == -1) return; @@ -2129,11 +2137,13 @@ glp->async = 1; glp->status = ggp_to_gg_status(status, &glp->status_descr); -#if defined(USE_GNUTLS) || !defined(USE_INTERNAL_LIBGADU) - glp->tls = 1; -#else - glp->tls = 0; -#endif + + encryption_type = purple_account_get_string(account, "encryption", "none"); + purple_debug_info("gg", "Requested encryption type: %s\n", encryption_type); + if (strcmp(encryption_type, "opportunistic_tls") == 0) + glp->tls = 1; + else + glp->tls = 0; purple_debug_info("gg", "TLS enabled: %d\n", glp->tls); if (!info->status_broadcasting) @@ -2780,6 +2790,7 @@ static void init_plugin(PurplePlugin *plugin) { PurpleAccountOption *option; + GList *encryption_options = NULL; option = purple_account_option_string_new(_("Nickname"), "nick", _("Gadu-Gadu User")); @@ -2791,6 +2802,26 @@ prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); +#define ADD_VALUE(list, desc, v) { \ + PurpleKeyValuePair *kvp = g_new0(PurpleKeyValuePair, 1); \ + kvp->key = g_strdup((desc)); \ + kvp->value = g_strdup((v)); \ + list = g_list_append(list, kvp); \ +} + + ADD_VALUE(encryption_options, _("Don't use encryption"), "none"); + ADD_VALUE(encryption_options, _("Use encryption if available"), + "opportunistic_tls"); +#if 0 + /* TODO */ + ADD_VALUE(encryption_options, _("Require encryption"), "require_tls"); +#endif + + option = purple_account_option_list_new(_("Connection security"), + "encryption", encryption_options); + prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, + option); + my_protocol = plugin; gg_debug_handler = purple_gg_debug_handler;