Mercurial > pidgin
comparison libpurple/protocols/gg/gg.c @ 31515:b2daa6e51596
gg: Allow the user to choose whether to use SSL/TLS support. Fixes #13894.
committer: John Bailey <rekkanoryo@rekkanoryo.org>
author | tomkiewicz@o2.pl |
---|---|
date | Mon, 02 May 2011 03:12:09 +0000 |
parents | 64d1be114e02 |
children | 79ae7200a11a |
comparison
equal
deleted
inserted
replaced
31514:81a2ec76c285 | 31515:b2daa6e51596 |
---|---|
1843 | 1843 |
1844 switch (info->session->state) { | 1844 switch (info->session->state) { |
1845 case GG_STATE_RESOLVING: | 1845 case GG_STATE_RESOLVING: |
1846 purple_debug_info("gg", "GG_STATE_RESOLVING\n"); | 1846 purple_debug_info("gg", "GG_STATE_RESOLVING\n"); |
1847 break; | 1847 break; |
1848 case GG_STATE_RESOLVING_GG: | |
1849 purple_debug_info("gg", "GG_STATE_RESOLVING_GG\n"); | |
1850 break; | |
1848 case GG_STATE_CONNECTING_HUB: | 1851 case GG_STATE_CONNECTING_HUB: |
1849 purple_debug_info("gg", "GG_STATE_CONNECTING_HUB\n"); | 1852 purple_debug_info("gg", "GG_STATE_CONNECTING_HUB\n"); |
1850 break; | 1853 break; |
1851 case GG_STATE_READING_DATA: | 1854 case GG_STATE_READING_DATA: |
1852 purple_debug_info("gg", "GG_STATE_READING_DATA\n"); | 1855 purple_debug_info("gg", "GG_STATE_READING_DATA\n"); |
1857 case GG_STATE_READING_KEY: | 1860 case GG_STATE_READING_KEY: |
1858 purple_debug_info("gg", "GG_STATE_READING_KEY\n"); | 1861 purple_debug_info("gg", "GG_STATE_READING_KEY\n"); |
1859 break; | 1862 break; |
1860 case GG_STATE_READING_REPLY: | 1863 case GG_STATE_READING_REPLY: |
1861 purple_debug_info("gg", "GG_STATE_READING_REPLY\n"); | 1864 purple_debug_info("gg", "GG_STATE_READING_REPLY\n"); |
1865 break; | |
1866 case GG_STATE_TLS_NEGOTIATION: | |
1867 purple_debug_info("gg", "GG_STATE_TLS_NEGOTIATION\n"); | |
1862 break; | 1868 break; |
1863 default: | 1869 default: |
1864 purple_debug_error("gg", "unknown state = %d\n", | 1870 purple_debug_error("gg", "unknown state = %d\n", |
1865 info->session->state); | 1871 info->session->state); |
1866 break; | 1872 break; |
1878 info->session->check, info->session->state); | 1884 info->session->check, info->session->state); |
1879 | 1885 |
1880 purple_input_remove(gc->inpa); | 1886 purple_input_remove(gc->inpa); |
1881 | 1887 |
1882 /** XXX I think that this shouldn't be done if ev->type is GG_EVENT_CONN_FAILED or GG_EVENT_CONN_SUCCESS -datallah */ | 1888 /** XXX I think that this shouldn't be done if ev->type is GG_EVENT_CONN_FAILED or GG_EVENT_CONN_SUCCESS -datallah */ |
1883 gc->inpa = purple_input_add(info->session->fd, | 1889 if (info->session->fd >= 0) |
1884 (info->session->check == 1) ? PURPLE_INPUT_WRITE | 1890 gc->inpa = purple_input_add(info->session->fd, |
1885 : PURPLE_INPUT_READ, | 1891 (info->session->check == 1) ? PURPLE_INPUT_WRITE : |
1886 ggp_async_login_handler, gc); | 1892 PURPLE_INPUT_READ, |
1893 ggp_async_login_handler, gc); | |
1887 | 1894 |
1888 switch (ev->type) { | 1895 switch (ev->type) { |
1889 case GG_EVENT_NONE: | 1896 case GG_EVENT_NONE: |
1890 /* Nothing happened. */ | 1897 /* Nothing happened. */ |
1891 purple_debug_info("gg", "GG_EVENT_NONE\n"); | 1898 purple_debug_info("gg", "GG_EVENT_NONE\n"); |
2094 PurplePresence *presence; | 2101 PurplePresence *presence; |
2095 PurpleStatus *status; | 2102 PurpleStatus *status; |
2096 struct gg_login_params *glp; | 2103 struct gg_login_params *glp; |
2097 GGPInfo *info; | 2104 GGPInfo *info; |
2098 const char *address; | 2105 const char *address; |
2106 const gchar *encryption_type; | |
2099 | 2107 |
2100 if (ggp_setup_proxy(account) == -1) | 2108 if (ggp_setup_proxy(account) == -1) |
2101 return; | 2109 return; |
2102 | 2110 |
2103 gc = purple_account_get_connection(account); | 2111 gc = purple_account_get_connection(account); |
2127 glp->protocol_features = (GG_FEATURE_STATUS80|GG_FEATURE_DND_FFC | 2135 glp->protocol_features = (GG_FEATURE_STATUS80|GG_FEATURE_DND_FFC |
2128 |GG_FEATURE_TYPING_NOTIFICATION); | 2136 |GG_FEATURE_TYPING_NOTIFICATION); |
2129 | 2137 |
2130 glp->async = 1; | 2138 glp->async = 1; |
2131 glp->status = ggp_to_gg_status(status, &glp->status_descr); | 2139 glp->status = ggp_to_gg_status(status, &glp->status_descr); |
2132 #if defined(USE_GNUTLS) || !defined(USE_INTERNAL_LIBGADU) | 2140 |
2133 glp->tls = 1; | 2141 encryption_type = purple_account_get_string(account, "encryption", "none"); |
2134 #else | 2142 purple_debug_info("gg", "Requested encryption type: %s\n", encryption_type); |
2135 glp->tls = 0; | 2143 if (strcmp(encryption_type, "opportunistic_tls") == 0) |
2136 #endif | 2144 glp->tls = 1; |
2145 else | |
2146 glp->tls = 0; | |
2137 purple_debug_info("gg", "TLS enabled: %d\n", glp->tls); | 2147 purple_debug_info("gg", "TLS enabled: %d\n", glp->tls); |
2138 | 2148 |
2139 if (!info->status_broadcasting) | 2149 if (!info->status_broadcasting) |
2140 glp->status = glp->status|GG_STATUS_FRIENDS_MASK; | 2150 glp->status = glp->status|GG_STATUS_FRIENDS_MASK; |
2141 | 2151 |
2778 } | 2788 } |
2779 | 2789 |
2780 static void init_plugin(PurplePlugin *plugin) | 2790 static void init_plugin(PurplePlugin *plugin) |
2781 { | 2791 { |
2782 PurpleAccountOption *option; | 2792 PurpleAccountOption *option; |
2793 GList *encryption_options = NULL; | |
2783 | 2794 |
2784 option = purple_account_option_string_new(_("Nickname"), | 2795 option = purple_account_option_string_new(_("Nickname"), |
2785 "nick", _("Gadu-Gadu User")); | 2796 "nick", _("Gadu-Gadu User")); |
2786 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, | 2797 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, |
2787 option); | 2798 option); |
2789 option = purple_account_option_string_new(_("GG server"), | 2800 option = purple_account_option_string_new(_("GG server"), |
2790 "gg_server", ""); | 2801 "gg_server", ""); |
2791 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, | 2802 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, |
2792 option); | 2803 option); |
2793 | 2804 |
2805 #define ADD_VALUE(list, desc, v) { \ | |
2806 PurpleKeyValuePair *kvp = g_new0(PurpleKeyValuePair, 1); \ | |
2807 kvp->key = g_strdup((desc)); \ | |
2808 kvp->value = g_strdup((v)); \ | |
2809 list = g_list_append(list, kvp); \ | |
2810 } | |
2811 | |
2812 ADD_VALUE(encryption_options, _("Don't use encryption"), "none"); | |
2813 ADD_VALUE(encryption_options, _("Use encryption if available"), | |
2814 "opportunistic_tls"); | |
2815 #if 0 | |
2816 /* TODO */ | |
2817 ADD_VALUE(encryption_options, _("Require encryption"), "require_tls"); | |
2818 #endif | |
2819 | |
2820 option = purple_account_option_list_new(_("Connection security"), | |
2821 "encryption", encryption_options); | |
2822 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, | |
2823 option); | |
2824 | |
2794 my_protocol = plugin; | 2825 my_protocol = plugin; |
2795 | 2826 |
2796 gg_debug_handler = purple_gg_debug_handler; | 2827 gg_debug_handler = purple_gg_debug_handler; |
2797 } | 2828 } |
2798 | 2829 |