- Timestamp:
- Oct 3, 2009, 8:45:52 PM (16 years ago)
- Branches:
- master, release-1.10, release-1.4, release-1.5, release-1.6, release-1.7, release-1.8, release-1.9
- Children:
- 3b80321
- Parents:
- 82a79a6
- git-author:
- Nelson Elhage <nelhage@mit.edu> (10/03/09 18:33:38)
- git-committer:
- Nelson Elhage <nelhage@mit.edu> (10/03/09 20:45:52)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
aim.c
r82a79a6 r1fdca1b 1189 1189 owl_message *m; 1190 1190 char *stripmsg, *nz_screenname, *wrapmsg; 1191 char realmsg[8192+1] = ""; 1192 /* int clienttype = AIM_CLIENTTYPE_UNKNOWN; */ 1193 1194 /* clienttype = aim_fingerprintclient(args->features, args->featureslen); */ 1195 1196 /* 1197 printf("icbm: sn = \"%s\"\n", userinfo->sn); 1198 printf("icbm: probable client type: %d\n", clienttype); 1199 printf("icbm: warnlevel = %f\n", aim_userinfo_warnlevel(userinfo)); 1200 printf("icbm: flags = 0x%04x = ", userinfo->flags); 1201 printuserflags(userinfo->flags); 1202 printf("\n"); 1203 */ 1204 1205 /* 1206 printf("icbm: membersince = %lu\n", userinfo->membersince); 1207 printf("icbm: onlinesince = %lu\n", userinfo->onlinesince); 1208 printf("icbm: idletime = 0x%04x\n", userinfo->idletime); 1209 printf("icbm: capabilities = %s = 0x%08lx\n", (userinfo->present & AIM_USERINFO_PRESENT_CAPABILITIES) ? "present" : "not present", userinfo->capabilities); 1210 */ 1211 1212 /* 1213 printf("icbm: icbmflags = "); 1214 if (args->icbmflags & AIM_IMFLAGS_AWAY) printf("away "); 1215 if (args->icbmflags & AIM_IMFLAGS_ACK) printf("ackrequest "); 1216 if (args->icbmflags & AIM_IMFLAGS_OFFLINE) printf("offline "); 1217 if (args->icbmflags & AIM_IMFLAGS_BUDDYREQ) printf("buddyreq "); 1218 if (args->icbmflags & AIM_IMFLAGS_HASICON) printf("hasicon "); 1219 printf("\n"); 1220 */ 1221 1222 /* 1223 if (args->icbmflags & AIM_IMFLAGS_CUSTOMCHARSET) { 1224 printf("icbm: encoding flags = {%04x, %04x}\n", args->charset, args->charsubset); 1225 } 1226 */ 1227 1228 /* 1229 * Quickly convert it to eight bit format, replacing non-ASCII UNICODE 1230 * characters with their equivelent HTML entity. 1231 */ 1232 if (args->icbmflags & AIM_IMFLAGS_UNICODE) { 1233 int i; 1234 1235 for (i=0; i<args->msglen; i+=2) { 1236 fu16_t uni; 1237 1238 uni = ((args->msg[i] & 0xff) << 8) | (args->msg[i+1] & 0xff); 1239 if ((uni < 128) || ((uni >= 160) && (uni <= 255))) { /* ISO 8859-1 */ 1240 snprintf(realmsg+strlen(realmsg), sizeof(realmsg)-strlen(realmsg), "%c", uni); 1241 } else { /* something else, do UNICODE entity */ 1242 snprintf(realmsg+strlen(realmsg), sizeof(realmsg)-strlen(realmsg), "&#%04x;", uni); 1243 } 1244 } 1191 char *realmsg = NULL; 1192 1193 if (!args->msg) { 1194 realmsg = owl_strdup(""); 1195 } else if (args->icbmflags & AIM_IMFLAGS_UNICODE) { 1196 realmsg = g_convert(args->msg, args->msglen, "UTF-8", "UCS-2BE", 1197 NULL, NULL, NULL); 1198 } else if(args->icbmflags & AIM_IMFLAGS_ISO_8859_1) { 1199 realmsg = g_convert(args->msg, args->msglen, "UTF-8", "ISO-8859-1", 1200 NULL, NULL, NULL); 1245 1201 } else { 1246 /* 1247 * For non-UNICODE encodings (ASCII and ISO 8859-1), there is 1248 * no need to do anything special here. Most 1249 * terminals/whatever will be able to display such characters 1250 * unmodified. 1251 * 1252 * Beware that PC-ASCII 128 through 159 are _not_ actually 1253 * defined in ASCII or ISO 8859-1, and you should send them as 1254 * UNICODE. WinAIM will send these characters in a UNICODE 1255 * message, so you need to do so as well. 1256 * 1257 * You may not think it necessary to handle UNICODE messages. 1258 * You're probably wrong. For one thing, Microsoft "Smart 1259 * Quotes" will be sent by WinAIM as UNICODE (not HTML UNICODE, 1260 * but real UNICODE). If you don't parse UNICODE at all, your 1261 * users will get a blank message instead of the message 1262 * containing Smart Quotes. 1263 * 1264 */ 1265 if (args->msg && args->msglen) 1266 strncpy(realmsg, args->msg, sizeof(realmsg)); 1202 realmsg = owl_strdup(args->msg); 1203 } 1204 1205 if (!realmsg) { 1206 realmsg = owl_strdup("[Error decoding incoming IM]"); 1267 1207 } 1268 1208 … … 1309 1249 } 1310 1250 1311 /* 1312 if (realmsg) { 1313 int i = 0; 1314 while (realmsg[i] == '<') { 1315 if (realmsg[i] == '<') { 1316 while (realmsg[i] != '>') 1317 i++; 1318 i++; 1319 } 1320 } 1321 tmpstr = realmsg+i; 1322 faimtest_handlecmd(sess, conn, userinfo, tmpstr); 1323 } 1324 */ 1325 1251 owl_free(realmsg); 1252 1326 1253 return(1); 1327 1254 }
Note: See TracChangeset
for help on using the changeset viewer.