diff -ru /var/tmp/portage/net-im/bitlbee-1.0.3/work/bitlbee-1.0.3/irc.c ./irc.c
|
old
|
new
|
|
| 116 | 116 | set_add( irc, "buddy_sendbuffer", "false", set_eval_bool ); |
| 117 | 117 | set_add( irc, "buddy_sendbuffer_delay", "200", set_eval_int ); |
| 118 | 118 | set_add( irc, "charset", "iso8859-1", set_eval_charset ); |
| | 119 | set_add( irc, "oscar_recode_charset", "iso8859-1", set_eval_oscar_recode_charset ); |
| 119 | 120 | set_add( irc, "debug", "false", set_eval_bool ); |
| 120 | 121 | set_add( irc, "default_target", "root", NULL ); |
| 121 | 122 | set_add( irc, "display_namechanges", "false", set_eval_bool ); |
diff -ru /var/tmp/portage/net-im/bitlbee-1.0.3/work/bitlbee-1.0.3/protocols/oscar/oscar.c ./protocols/oscar/oscar.c
|
old
|
new
|
|
| 1029 | 1029 | return 1; |
| 1030 | 1030 | } |
| 1031 | 1031 | |
| | 1032 | extern GSList *irc_connection_list; |
| | 1033 | |
| 1032 | 1034 | static int incomingim_chan1(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_t *userinfo, struct aim_incomingim_ch1_args *args) { |
| | 1035 | char *src=""; |
| 1033 | 1036 | char *tmp = g_malloc(BUF_LONG + 1); |
| 1034 | 1037 | struct gaim_connection *gc = sess->aux_data; |
| 1035 | 1038 | int flags = 0; |
| … |
… |
|
| 1038 | 1041 | flags |= IM_FLAG_AWAY; |
| 1039 | 1042 | |
| 1040 | 1043 | if ((args->icbmflags & AIM_IMFLAGS_UNICODE) || (args->icbmflags & AIM_IMFLAGS_ISO_8859_1)) { |
| 1041 | | char *src; |
| 1042 | 1044 | |
| 1043 | 1045 | if (args->icbmflags & AIM_IMFLAGS_UNICODE) |
| 1044 | 1046 | src = "UNICODEBIG"; |
| 1045 | 1047 | else |
| 1046 | | src = "ISO8859-1"; |
| | 1048 | { |
| | 1049 | char *cs; |
| | 1050 | irc_t *irc = (irc_t*)irc_connection_list->data; |
| | 1051 | if( ( cs = set_getstr( irc, "oscar_recode_charset" ) ) && ( g_strcasecmp( cs, "utf-8" ) != 0 ) ) |
| | 1052 | src = cs; |
| | 1053 | else |
| | 1054 | src = "iso88590-1"; |
| | 1055 | } |
| 1047 | 1056 | |
| 1048 | 1057 | /* Try to use iconv first to convert the message to UTF8 - which is what BitlBee expects */ |
| 1049 | 1058 | if (do_iconv(src, "UTF-8", args->msg, tmp, args->msglen, BUF_LONG) >= 0) { |
| | 1059 | //fprintf (stderr, "bitlbee: converted from %s to utf8!\n", src); |
| 1050 | 1060 | // Successfully converted! |
| 1051 | 1061 | } else if (args->icbmflags & AIM_IMFLAGS_UNICODE) { |
| 1052 | 1062 | int i; |
| … |
… |
|
| 1062 | 1072 | g_snprintf(tmp+strlen(tmp), BUF_LONG-strlen(tmp), "&#%04x;", uni); |
| 1063 | 1073 | } |
| 1064 | 1074 | } |
| | 1075 | //fprintf (stderr, "bitlbee: AIM_IMFLAGS_UNICODE, got %s!\n", tmp); |
| 1065 | 1076 | } else { |
| 1066 | | g_snprintf(tmp, BUF_LONG, "%s", args->msg); |
| | 1077 | char *cs; |
| | 1078 | irc_t *irc = (irc_t*)irc_connection_list->data; |
| | 1079 | if( ( cs = set_getstr( irc, "oscar_recode_charset" ) ) && ( g_strcasecmp( cs, "utf-8" ) != 0 ) ) |
| | 1080 | src = cs; |
| | 1081 | else |
| | 1082 | src = "iso88590-1"; |
| | 1083 | if (do_iconv(src, "UTF-8", args->msg, tmp, args->msglen, BUF_LONG) < 0) { |
| | 1084 | g_snprintf(tmp, BUF_LONG, "[1%s]%s", src, args->msg); |
| | 1085 | } |
| | 1086 | //fprintf (stderr, "bitlbee: not utf8, nor unicode, got %s!\n", tmp); |
| 1067 | 1087 | } |
| 1068 | | } else |
| 1069 | | g_snprintf(tmp, BUF_LONG, "%s", args->msg); |
| 1070 | | |
| | 1088 | } else { |
| | 1089 | char *cs; |
| | 1090 | irc_t *irc = (irc_t*)irc_connection_list->data; |
| | 1091 | if( ( cs = set_getstr( irc, "oscar_recode_charset" ) ) && ( g_strcasecmp( cs, "utf-8" ) != 0 ) ) |
| | 1092 | src = cs; |
| | 1093 | else |
| | 1094 | src = "iso88590-1"; |
| | 1095 | if (do_iconv(src, "UTF-8", args->msg, tmp, args->msglen, BUF_LONG) < 0) { |
| | 1096 | g_snprintf(tmp, BUF_LONG, "[2%s]%s", src, args->msg); |
| | 1097 | } |
| | 1098 | //fprintf (stderr, "bitlbee: unknown charset, got %s!\n", tmp); |
| | 1099 | } |
| | 1100 | |
| 1071 | 1101 | strip_linefeed(tmp); |
| 1072 | 1102 | serv_got_im(gc, userinfo->sn, tmp, flags, time(NULL), -1); |
| 1073 | 1103 | g_free(tmp); |
| … |
… |
|
| 1163 | 1193 | switch (args->type) { |
| 1164 | 1194 | case 0x0001: { /* An almost-normal instant message. Mac ICQ sends this. It's peculiar. */ |
| 1165 | 1195 | char *uin, *message; |
| | 1196 | char *src = ""; |
| | 1197 | char *cs; |
| | 1198 | char *tmp = g_malloc(BUF_LONG + 1); |
| | 1199 | irc_t *irc = (irc_t*)irc_connection_list->data; |
| | 1200 | if( ( cs = set_getstr( irc, "oscar_recode_charset" ) ) && ( g_strcasecmp( cs, "utf-8" ) != 0 ) ) |
| | 1201 | src = cs; |
| | 1202 | else |
| | 1203 | src = "iso88590-1"; |
| 1166 | 1204 | uin = g_strdup_printf("%u", args->uin); |
| 1167 | 1205 | message = g_strdup(args->msg); |
| 1168 | 1206 | strip_linefeed(message); |
| 1169 | | serv_got_im(gc, uin, message, 0, time(NULL), -1); |
| | 1207 | if (do_iconv(src, "UTF-8", message, tmp, strlen (message), BUF_LONG) < 0) |
| | 1208 | tmp = message; |
| | 1209 | serv_got_im(gc, uin, tmp, 0, time(NULL), -1); |
| 1170 | 1210 | g_free(uin); |
| 1171 | 1211 | g_free(message); |
| | 1212 | g_free (tmp); |
| 1172 | 1213 | } break; |
| 1173 | 1214 | |
| 1174 | 1215 | case 0x0004: { /* Someone sent you a URL */ |
| … |
… |
|
| 1768 | 1809 | char sender[32]; |
| 1769 | 1810 | char *dialog_msg = g_strdup(msg->msg); |
| 1770 | 1811 | time_t t = get_time(msg->year, msg->month, msg->day, msg->hour, msg->minute, 0); |
| | 1812 | char *tmp = g_malloc(BUF_LONG + 1); |
| | 1813 | char *src = ""; |
| | 1814 | char *cs; |
| | 1815 | irc_t *irc = (irc_t*)irc_connection_list->data; |
| | 1816 | if( ( cs = set_getstr( irc, "oscar_recode_charset" ) ) && ( g_strcasecmp( cs, "utf-8" ) != 0 ) ) |
| | 1817 | src = cs; |
| | 1818 | else |
| | 1819 | src = "iso88590-1"; |
| 1771 | 1820 | g_snprintf(sender, sizeof(sender), "%u", msg->sender); |
| 1772 | 1821 | strip_linefeed(dialog_msg); |
| 1773 | | serv_got_im(gc, sender, dialog_msg, 0, t, -1); |
| | 1822 | if (do_iconv(src, "UTF-8", dialog_msg, tmp, strlen (msg->msg), BUF_LONG) < 0) |
| | 1823 | tmp = dialog_msg; |
| | 1824 | fprintf (stderr, "bitlbee: offlinemsg, got %s\n", tmp); |
| | 1825 | serv_got_im(gc, sender, tmp, 0, t, -1); |
| | 1826 | if (dialog_msg != tmp) |
| | 1827 | g_free (tmp); |
| 1774 | 1828 | g_free(dialog_msg); |
| 1775 | 1829 | } break; |
| 1776 | 1830 | |
| … |
… |
|
| 1838 | 1892 | } else { |
| 1839 | 1893 | struct aim_sendimext_args args; |
| 1840 | 1894 | char *s; |
| | 1895 | char *cs; |
| | 1896 | char *src=""; |
| | 1897 | irc_t *irc = (irc_t*)irc_connection_list->data; |
| | 1898 | if( ( cs = set_getstr( irc, "oscar_recode_charset" ) ) && ( g_strcasecmp( cs, "utf-8" ) != 0 ) ) |
| | 1899 | src = cs; |
| | 1900 | else |
| | 1901 | src = "iso88590-1"; |
| | 1902 | |
| 1841 | 1903 | |
| 1842 | 1904 | args.flags = AIM_IMFLAGS_ACK; |
| 1843 | 1905 | if (odata->icq) |
| … |
… |
|
| 1851 | 1913 | s = g_malloc(BUF_LONG); |
| 1852 | 1914 | /* Try if we can put it in an ISO8859-1 string first. |
| 1853 | 1915 | If we can't, fall back to UTF16. */ |
| 1854 | | if ((ret = do_iconv("UTF-8", "ISO8859-1", message, s, len, BUF_LONG)) >= 0) { |
| | 1916 | if ((ret = do_iconv("UTF-8", src, message, s, len, BUF_LONG)) >= 0) { |
| 1855 | 1917 | args.flags |= AIM_IMFLAGS_ISO_8859_1; |
| 1856 | 1918 | len = ret; |
| 1857 | 1919 | } else if ((ret = do_iconv("UTF-8", "UNICODEBIG", message, s, len, BUF_LONG)) >= 0) { |
| … |
… |
|
| 2248 | 2310 | return m; |
| 2249 | 2311 | } |
| 2250 | 2312 | |
| | 2313 | char *translatestr (char *x, char *tmp) |
| | 2314 | { |
| | 2315 | char *src, *cs; |
| | 2316 | irc_t *irc; |
| | 2317 | irc = (irc_t*)irc_connection_list->data; |
| | 2318 | if( ( cs = set_getstr( irc, "oscar_recode_charset" ) ) && ( g_strcasecmp( cs, "utf-8" ) != 0 ) ) |
| | 2319 | src = cs; |
| | 2320 | else |
| | 2321 | src = "iso88590-1"; |
| | 2322 | |
| | 2323 | return (do_iconv(src, "UTF-8", x, tmp, strlen (x), BUF_LONG) >= 0) ? tmp : x; |
| | 2324 | } |
| | 2325 | |
| 2251 | 2326 | static int gaim_icqinfo(aim_session_t *sess, aim_frame_t *fr, ...) |
| 2252 | 2327 | { |
| 2253 | 2328 | struct gaim_connection *gc = sess->aux_data; |
| … |
… |
|
| 2255 | 2330 | GString *str; |
| 2256 | 2331 | va_list ap; |
| 2257 | 2332 | struct aim_icq_info *info; |
| 2258 | | |
| | 2333 | char tmp[BUF_LONG]; |
| 2259 | 2334 | va_start(ap, fr); |
| 2260 | 2335 | info = va_arg(ap, struct aim_icq_info *); |
| 2261 | 2336 | va_end(ap); |
| … |
… |
|
| 2263 | 2338 | if (!info->uin) |
| 2264 | 2339 | return 0; |
| 2265 | 2340 | |
| | 2341 | // recode into oscar_recode_charset |
| | 2342 | |
| | 2343 | #define translate(x) translatestr(x,tmp) |
| | 2344 | |
| 2266 | 2345 | str = g_string_sized_new(100); |
| 2267 | 2346 | g_snprintf(who, sizeof(who), "%u", info->uin); |
| 2268 | 2347 | |
| 2269 | 2348 | g_string_sprintfa(str, "%s: %s - %s: %s", _("UIN"), who, _("Nick"), |
| 2270 | | info->nick ? info->nick : "-"); |
| 2271 | | info_string_append(str, "\n", _("First Name"), info->first); |
| 2272 | | info_string_append(str, "\n", _("Last Name"), info->last); |
| | 2349 | info->nick ? translate (info->nick) : "-"); |
| | 2350 | |
| | 2351 | |
| | 2352 | info_string_append(str, "\n", _("First Name"), translate (info->first)); |
| | 2353 | info_string_append(str, "\n", _("Last Name"), translate (info->last)); |
| 2273 | 2354 | info_string_append(str, "\n", _("Email Address"), info->email); |
| 2274 | 2355 | if (info->numaddresses && info->email2) { |
| 2275 | 2356 | int i; |
| … |
… |
|
| 2296 | 2377 | info_string_append(str, "\n", _("Personal Web Page"), info->personalwebpage); |
| 2297 | 2378 | if (info->info && info->info[0]) { |
| 2298 | 2379 | g_string_sprintfa(str, "\n%s:\n%s\n%s", _("Additional Information"), |
| 2299 | | info->info, _("End of Additional Information")); |
| | 2380 | translate (info->info), _("End of Additional Information")); |
| 2300 | 2381 | } |
| 2301 | 2382 | g_string_sprintfa(str, "\n"); |
| 2302 | 2383 | if ((info->homeaddr && (info->homeaddr[0])) || (info->homecity && info->homecity[0]) || (info->homestate && info->homestate[0]) || (info->homezip && info->homezip[0])) { |
diff -ru /var/tmp/portage/net-im/bitlbee-1.0.3/work/bitlbee-1.0.3/util.c ./util.c
|
old
|
new
|
|
| 453 | 453 | iconv_close( cd ); |
| 454 | 454 | return( value ); |
| 455 | 455 | } |
| | 456 | |
| | 457 | char *set_eval_oscar_recode_charset( irc_t *irc, set_t *set, char *value ) |
| | 458 | { |
| | 459 | iconv_t cd; |
| | 460 | |
| | 461 | if ( g_strncasecmp( value, "none", 4 ) == 0 ) |
| | 462 | return( value ); |
| | 463 | |
| | 464 | cd = iconv_open( "UTF-8", value ); |
| | 465 | if( cd == (iconv_t) -1 ) |
| | 466 | return( NULL ); |
| | 467 | |
| | 468 | iconv_close( cd ); |
| | 469 | return( value ); |
| | 470 | } |
diff -ru /var/tmp/portage/net-im/bitlbee-1.0.3/work/bitlbee-1.0.3/util.h ./util.h
|
old
|
new
|
|
| 46 | 46 | |
| 47 | 47 | G_MODULE_EXPORT signed int do_iconv( char *from_cs, char *to_cs, char *src, char *dst, size_t size, size_t maxbuf ); |
| 48 | 48 | char *set_eval_charset( irc_t *irc, set_t *set, char *value ); |
| | 49 | char *set_eval_oscar_recode_charset( irc_t *irc, set_t *set, char *value ); |
| 49 | 50 | |
| 50 | 51 | #endif |