Ticket #53: bitlbee-recode-0.6.1.diff
| File bitlbee-recode-0.6.1.diff, 8.7 KB (added by newman, 2 years ago) |
|---|
-
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 im_connection *ic = sess->aux_data; 1035 1038 int flags = 0; … … 1038 1041 flags |= OPT_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 set_t **irc = (set_t**)irc_connection_list->data; 1051 // G_MODULE_EXPORT char *set_getstr( set_t **head, char *key ); 1052 if( ( cs = set_getstr( irc, "oscar_recode_charset" ) ) && ( g_strcasecmp( cs, "utf-8" ) != 0 ) ) 1053 src = cs; 1054 else 1055 src = "cp1250"; 1056 } 1047 1057 1048 1058 /* Try to use iconv first to convert the message to UTF8 - which is what BitlBee expects */ 1049 1059 if (do_iconv(src, "UTF-8", args->msg, tmp, args->msglen, BUF_LONG) >= 0) { 1060 //fprintf (stderr, "bitlbee: converted from %s to utf8!\n", src); 1050 1061 // Successfully converted! 1051 1062 } else if (args->icbmflags & AIM_IMFLAGS_UNICODE) { 1052 1063 int i; … … 1062 1073 g_snprintf(tmp+strlen(tmp), BUF_LONG-strlen(tmp), "&#%04x;", uni); 1063 1074 } 1064 1075 } 1076 //fprintf (stderr, "bitlbee: AIM_IMFLAGS_UNICODE, got %s!\n", tmp); 1065 1077 } else { 1066 g_snprintf(tmp, BUF_LONG, "%s", args->msg); 1078 char *cs; 1079 set_t **irc = (set_t**)irc_connection_list->data; 1080 if( ( cs = set_getstr( irc, "oscar_recode_charset" ) ) && ( g_strcasecmp( cs, "utf-8" ) != 0 ) ) 1081 src = cs; 1082 else 1083 src = "cp1250"; 1084 if (do_iconv(src, "UTF-8", args->msg, tmp, args->msglen, BUF_LONG) < 0) { 1085 g_snprintf(tmp, BUF_LONG, "[1%s]%s", src, args->msg); 1086 } 1087 //fprintf (stderr, "bitlbee: not utf8, nor unicode, got %s!\n", tmp); 1067 1088 } 1068 } else if (args->mpmsg.numparts == 0) {1069 g_snprintf(tmp, BUF_LONG, "%s", args->msg);1070 1089 } else { 1071 int i; 1072 1073 *tmp = 0; 1074 for (i = 0; i < args->mpmsg.numparts; i ++) { 1075 g_strlcat(tmp, (char*) args->mpmsg.parts[i].data, BUF_LONG); 1076 g_strlcat(tmp, "\n", BUF_LONG); 1090 char *cs; 1091 set_t **irc = (set_t**)irc_connection_list->data; 1092 if( ( cs = set_getstr( irc, "oscar_recode_charset" ) ) && ( g_strcasecmp( cs, "utf-8" ) != 0 ) ) 1093 src = cs; 1094 else 1095 src = "cp1250"; 1096 if (do_iconv(src, "UTF-8", args->msg, tmp, args->msglen, BUF_LONG) < 0) { 1097 g_snprintf(tmp, BUF_LONG, "[2%s]%s", src, args->msg); 1077 1098 } 1099 //fprintf (stderr, "bitlbee: unknown charset, got %s!\n", tmp); 1078 1100 } 1079 1101 1080 1102 strip_linefeed(tmp); … … 1172 1194 switch (args->type) { 1173 1195 case 0x0001: { /* An almost-normal instant message. Mac ICQ sends this. It's peculiar. */ 1174 1196 char *uin, *message; 1197 char *src = ""; 1198 char *cs; 1199 char *tmp = g_malloc(BUF_LONG + 1); 1200 set_t **irc = (set_t**)irc_connection_list->data; 1201 if( ( cs = set_getstr( irc, "oscar_recode_charset" ) ) && ( g_strcasecmp( cs, "utf-8" ) != 0 ) ) 1202 src = cs; 1203 else 1204 src = "cp1250"; 1175 1205 uin = g_strdup_printf("%u", args->uin); 1176 1206 message = g_strdup(args->msg); 1177 1207 strip_linefeed(message); 1178 imcb_buddy_msg(ic, uin, message, 0, 0); 1208 if (do_iconv(src, "UTF-8", message, tmp, strlen (message), BUF_LONG) < 0) 1209 tmp = message; 1210 // imcb_buddy_msg(ic, uin, message, 0, 0); 1211 imcb_buddy_msg(ic, uin, tmp, 0, 0); 1179 1212 g_free(uin); 1180 1213 g_free(message); 1214 g_free (tmp); 1181 1215 } break; 1182 1216 1183 1217 case 0x0004: { /* Someone sent you a URL */ … … 1824 1858 } else { 1825 1859 struct aim_sendimext_args args; 1826 1860 char *s; 1861 char *cs; 1862 char *src=""; 1863 set_t **irc = (set_t**)irc_connection_list->data; 1864 if( ( cs = set_getstr( irc, "oscar_recode_charset" ) ) && ( g_strcasecmp( cs, "utf-8" ) != 0 ) ) 1865 src = cs; 1866 else 1867 src = "cp1250"; 1868 1827 1869 1828 1870 args.flags = AIM_IMFLAGS_ACK; 1829 1871 if (odata->icq) … … 1837 1879 s = g_malloc(BUF_LONG); 1838 1880 /* Try if we can put it in an ISO8859-1 string first. 1839 1881 If we can't, fall back to UTF16. */ 1840 if ((ret = do_iconv("UTF-8", "ISO8859-1", message, s, len, BUF_LONG)) >= 0) {1882 if ((ret = do_iconv("UTF-8", src, message, s, len, BUF_LONG)) >= 0) { 1841 1883 args.flags |= AIM_IMFLAGS_ISO_8859_1; 1842 1884 len = ret; 1843 1885 } else if ((ret = do_iconv("UTF-8", "UNICODEBIG", message, s, len, BUF_LONG)) >= 0) { … … 2234 2276 return m; 2235 2277 } 2236 2278 2279 char *translatestr (char *x, char *tmp) 2280 { 2281 char *src, *cs; 2282 set_t **irc = (set_t**)irc_connection_list->data; 2283 if( ( cs = set_getstr( irc, "oscar_recode_charset" ) ) && ( g_strcasecmp( cs, "utf-8" ) != 0 ) ) 2284 src = cs; 2285 else 2286 src = "cp1250"; 2287 2288 return (do_iconv(src, "UTF-8", x, tmp, strlen (x), BUF_LONG) >= 0) ? tmp : x; 2289 } 2290 2237 2291 static int gaim_icqinfo(aim_session_t *sess, aim_frame_t *fr, ...) 2238 2292 { 2239 2293 struct im_connection *ic = sess->aux_data; … … 2241 2295 GString *str; 2242 2296 va_list ap; 2243 2297 struct aim_icq_info *info; 2244 2298 char tmp[BUF_LONG]; 2245 2299 va_start(ap, fr); 2246 2300 info = va_arg(ap, struct aim_icq_info *); 2247 2301 va_end(ap); … … 2249 2303 if (!info->uin) 2250 2304 return 0; 2251 2305 2306 // recode into oscar_recode_charset 2307 2308 #define translate(x) translatestr(x,tmp) 2309 2252 2310 str = g_string_sized_new(100); 2253 2311 g_snprintf(who, sizeof(who), "%u", info->uin); 2254 2312 2255 2313 g_string_sprintfa(str, "%s: %s - %s: %s", _("UIN"), who, _("Nick"), 2256 info->nick ? info->nick : "-"); 2257 info_string_append(str, "\n", _("First Name"), info->first); 2258 info_string_append(str, "\n", _("Last Name"), info->last); 2314 info->nick ? translate (info->nick) : "-"); 2315 2316 2317 info_string_append(str, "\n", _("First Name"), translate (info->first)); 2318 info_string_append(str, "\n", _("Last Name"), translate (info->last)); 2259 2319 info_string_append(str, "\n", _("Email Address"), info->email); 2260 2320 if (info->numaddresses && info->email2) { 2261 2321 int i; … … 2283 2343 info_string_append(str, "\n", _("Personal Web Page"), info->personalwebpage); 2284 2344 if (info->info && info->info[0]) { 2285 2345 g_string_sprintfa(str, "\n%s:\n%s\n%s", _("Additional Information"), 2286 info->info, _("End of Additional Information"));2346 translate (info->info), _("End of Additional Information")); 2287 2347 } 2288 2348 g_string_sprintfa(str, "\n"); 2289 2349 if ((info->homeaddr && (info->homeaddr[0])) || (info->homecity && info->homecity[0]) || (info->homestate && info->homestate[0]) || (info->homezip && info->homezip[0])) { -
bitlbee-1.1.
old new 109 109 set_add( &irc->set, "buddy_sendbuffer", "false", set_eval_bool, irc ); 110 110 set_add( &irc->set, "buddy_sendbuffer_delay", "200", set_eval_int, irc ); 111 111 set_add( &irc->set, "charset", "utf-8", set_eval_charset, irc ); 112 set_add( &irc->set, "oscar_recode_charset", "cp1250", set_eval_oscar_recode_charset, irc ); 112 113 set_add( &irc->set, "debug", "false", set_eval_bool, irc ); 113 114 set_add( &irc->set, "default_target", "root", NULL, irc ); 114 115 set_add( &irc->set, "display_namechanges", "false", set_eval_bool, irc ); -
bitlbee-1.1.
old new 24 24 */ 25 25 #define BITLBEE_CORE 26 26 #include "bitlbee.h" 27 #include <iconv.h> 27 28 28 29 set_t *set_add( set_t **head, char *key, char *def, set_eval eval, void *data ) 29 30 { … … 244 245 g_iconv_close( cd ); 245 246 return value; 246 247 } 248 249 char *set_eval_oscar_recode_charset( set_t *irc, set_t *set, char *value ) 250 { 251 iconv_t cd; 252 253 if ( g_strncasecmp( value, "none", 4 ) == 0 ) 254 return( value ); 255 256 cd = iconv_open( "UTF-8", value ); 257 if( cd == (iconv_t) -1 ) 258 return( NULL ); 259 260 iconv_close( cd ); 261 return( value ); 262 } -
bitlbee-1.1.
old new 97 97 char *set_eval_to_char( set_t *set, char *value ); 98 98 char *set_eval_ops( set_t *set, char *value ); 99 99 char *set_eval_charset( set_t *set, char *value ); 100 char *set_eval_oscar_recode_charset( set_t *irc, set_t *set, char *value ); 100 101 101 102 #endif /* __SET_H__ */
