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