# HG changeset patch # User Tim Ringenbach # Date 1086145370 0 # Node ID 76125b842b231dd85a4d30b1efad82f985c9a324 # Parent 8d22bc97b7bef4c7bf4b18ee97c337afcfaf185f [gaim-migrate @ 9949] This is proper yahoo japan support. Technically it worked before, but you had to know the yahoo japan server, and typing in nonascii didn't work. The account options are kind of ugly. Eventually Chip is going to replace the check box with something more like a dropdown thingy, that automaticly hides the settings that aren't used (Pager Host vs. Japan Pager Host, etc) But it's not too bad now. And I think I orignally wrote this patch for 0.64 or something, so I got tired of waiting. committer: Tailor Script diff -r 8d22bc97b7be -r 76125b842b23 ChangeLog --- a/ChangeLog Wed Jun 02 01:26:21 2004 +0000 +++ b/ChangeLog Wed Jun 02 03:02:50 2004 +0000 @@ -4,6 +4,8 @@ New Features: * Display name changes are now shown in the conversation windows. (Robert Mibus) + * Yahoo! Japan support. Click More Options and check Yahoo Japan + in the account editor, to use your Yahoo! Japan account. Bug Fixes: * Non-looping animated icons no longer cause Gaim to freeze diff -r 8d22bc97b7be -r 76125b842b23 src/protocols/yahoo/util.c --- a/src/protocols/yahoo/util.c Wed Jun 02 01:26:21 2004 +0000 +++ b/src/protocols/yahoo/util.c Wed Jun 02 03:02:50 2004 +0000 @@ -44,13 +44,20 @@ */ char *yahoo_string_encode(GaimConnection *gc, const char *str, gboolean *utf8) { + struct yahoo_data *yd = gc->proto_data; char *ret; char *to_codeset; + if (yd->jp && utf8 && *utf8) + *utf8 = FALSE; + if (utf8 && *utf8) /* FIXME: maybe don't use utf8 if it'll fit in latin1 */ return g_strdup(str); - to_codeset = "ISO-8859-1"; + if (yd->jp) + to_codeset = "SHIFT_JIS"; + else + to_codeset = "ISO-8859-1"; ret = g_convert_with_fallback(str, strlen(str), to_codeset, "UTF-8", "?", NULL, NULL, NULL); if (ret) @@ -69,6 +76,7 @@ */ char *yahoo_string_decode(GaimConnection *gc, const char *str, gboolean utf8) { + struct yahoo_data *yd = gc->proto_data; char *ret; char *from_codeset; @@ -77,7 +85,10 @@ return g_strdup(str); } - from_codeset = "ISO-8859-1"; + if (yd->jp) + from_codeset = "SHIFT_JIS"; + else + from_codeset = "ISO-8859-1"; ret = g_convert_with_fallback(str, strlen(str), "UTF-8", from_codeset, NULL, NULL, NULL, NULL); diff -r 8d22bc97b7be -r 76125b842b23 src/protocols/yahoo/yahoo.c --- a/src/protocols/yahoo/yahoo.c Wed Jun 02 01:26:21 2004 +0000 +++ b/src/protocols/yahoo/yahoo.c Wed Jun 02 03:02:50 2004 +0000 @@ -2256,15 +2256,27 @@ yahoo_server_check(account); - if (gaim_proxy_connect(account, - gaim_account_get_string(account, "server", YAHOO_PAGER_HOST), - gaim_account_get_int(account, "port", YAHOO_PAGER_PORT), - yahoo_got_connected, gc) != 0) - { - gaim_connection_error(gc, _("Connection problem")); - return; + if (gaim_account_get_bool(account, "yahoojp", FALSE)) { + yd->jp = TRUE; + if (gaim_proxy_connect(account, + gaim_account_get_string(account, "serverjp", YAHOOJP_PAGER_HOST), + gaim_account_get_int(account, "port", YAHOO_PAGER_PORT), + yahoo_got_connected, gc) != 0) + { + gaim_connection_error(gc, _("Connection problem")); + return; + } + } else { + yd->jp = FALSE; + if (gaim_proxy_connect(account, + gaim_account_get_string(account, "server", YAHOO_PAGER_HOST), + gaim_account_get_int(account, "port", YAHOO_PAGER_PORT), + yahoo_got_connected, gc) != 0) + { + gaim_connection_error(gc, _("Connection problem")); + return; + } } - #else gaim_url_fetch(WEBMESSENGER_URL, TRUE, "Gaim/" VERSION, FALSE, yahoo_login_page_cb, gc); @@ -3185,15 +3197,24 @@ { GaimAccountOption *option; + option = gaim_account_option_bool_new(_("Yahoo Japan"), "yahoojp", FALSE); + prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); + option = gaim_account_option_string_new(_("Pager host"), "server", YAHOO_PAGER_HOST); prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); + option = gaim_account_option_string_new(_("Japan Pager host"), "serverjp", YAHOOJP_PAGER_HOST); + prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); + option = gaim_account_option_int_new(_("Pager port"), "port", YAHOO_PAGER_PORT); prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); option = gaim_account_option_string_new(_("File transfer host"), "xfer_host", YAHOO_XFER_HOST); prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); + option = gaim_account_option_string_new(_("Japan File transfer host"), "xferjp_host", YAHOOJP_XFER_HOST); + prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); + option = gaim_account_option_int_new(_("File transfer port"), "xfer_port", YAHOO_XFER_PORT); prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); diff -r 8d22bc97b7be -r 76125b842b23 src/protocols/yahoo/yahoo.h --- a/src/protocols/yahoo/yahoo.h Wed Jun 02 01:26:21 2004 +0000 +++ b/src/protocols/yahoo/yahoo.h Wed Jun 02 03:02:50 2004 +0000 @@ -34,6 +34,13 @@ #define YAHOO_XFER_PORT 80 #define YAHOO_ROOMLIST_URL "http://insider.msg.yahoo.com/ycontent/" +/* really we should get the list of servers from + http://update.messenger.yahoo.co.jp/servers.html */ +#define YAHOOJP_PAGER_HOST "cs.yahoo.co.jp" +#define YAHOOJP_XFER_HOST "filetransfer.msg.yahoo.co.jp" +#define YAHOOJP_WEBCAM_HOST "wc.yahoo.co.jp" +#define YAHOOJP_PROFILE_URL "profiles.yahoo.co.jp" + #define WEBMESSENGER_URL "http://login.yahoo.com/config/login?.src=pg" enum yahoo_service { /* these are easier to see in hex */ @@ -136,6 +143,7 @@ char *cookie_y; char *cookie_t; int session_id; + gboolean jp; }; struct yahoo_pair { diff -r 8d22bc97b7be -r 76125b842b23 src/protocols/yahoo/yahoo_filexfer.c --- a/src/protocols/yahoo/yahoo_filexfer.c Wed Jun 02 01:26:21 2004 +0000 +++ b/src/protocols/yahoo/yahoo_filexfer.c Wed Jun 02 03:02:50 2004 +0000 @@ -201,13 +201,24 @@ "One Megabyte (1,048,576 bytes).")); gaim_xfer_cancel_local(xfer); } else { - if (gaim_proxy_connect(account, gaim_account_get_string(account, "xfer_host", YAHOO_XFER_HOST), - gaim_account_get_int(account, "xfer_port", YAHOO_XFER_PORT), - yahoo_sendfile_connected, xfer) == -1) - { - gaim_notify_error(gc, NULL, _("File Transfer Aborted"), - _("Unable to establish file descriptor.")); - gaim_xfer_cancel_remote(xfer); + if (yd->jp) { + if (gaim_proxy_connect(account, gaim_account_get_string(account, "xferjp_host", YAHOOJP_XFER_HOST), + gaim_account_get_int(account, "xfer_port", YAHOO_XFER_PORT), + yahoo_sendfile_connected, xfer) == -1) + { + gaim_notify_error(gc, NULL, _("File Transfer Aborted"), + _("Unable to establish file descriptor.")); + gaim_xfer_cancel_remote(xfer); + } + } else { + if (gaim_proxy_connect(account, gaim_account_get_string(account, "xfer_host", YAHOO_XFER_HOST), + gaim_account_get_int(account, "xfer_port", YAHOO_XFER_PORT), + yahoo_sendfile_connected, xfer) == -1) + { + gaim_notify_error(gc, NULL, _("File Transfer Aborted"), + _("Unable to establish file descriptor.")); + gaim_xfer_cancel_remote(xfer); + } } } } else { diff -r 8d22bc97b7be -r 76125b842b23 src/protocols/yahoo/yahoo_profile.c --- a/src/protocols/yahoo/yahoo_profile.c Wed Jun 02 01:26:21 2004 +0000 +++ b/src/protocols/yahoo/yahoo_profile.c Wed Jun 02 03:02:50 2004 +0000 @@ -900,6 +900,7 @@ void yahoo_get_info(GaimConnection *gc, const char *name) { + struct yahoo_data *yd = gc->proto_data; YahooGetInfoData *data; char *url; @@ -907,7 +908,7 @@ data->gc = gc; data->name = g_strdup(name); - if (strstr(gaim_account_get_string(gaim_connection_get_account(gc), "server", YAHOO_PAGER_HOST), "yahoo.co.jp")) { + if (yd->jp) { url = g_strdup_printf("%s%s", "http://profiles.yahoo.co.jp/", name); } else { url = g_strdup_printf("%s%s", YAHOO_PROFILE_URL, name);