Mercurial > pidgin.yaz
comparison src/protocols/toc/toc.c @ 6059:d8cd876e613e
[gaim-migrate @ 6509]
I made a lot of server.c functions use const chat * instead of const *
Made the alias entry have focus in the alias buddy dialog.
Fixed a typo thanks to J. Silvestri
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Tue, 08 Jul 2003 03:36:41 +0000 |
parents | 0878caaef952 |
children | c28dea25983c |
comparison
equal
deleted
inserted
replaced
6058:d5f4ae4f9a02 | 6059:d8cd876e613e |
---|---|
316 msg[cnt] = '\0'; | 316 msg[cnt] = '\0'; |
317 g_free(cpy); | 317 g_free(cpy); |
318 return cnt; | 318 return cnt; |
319 } | 319 } |
320 | 320 |
321 static int escape_text(char *msg) | 321 /* |
322 { | 322 * Duplicates the input string, replacing each \n with a <BR>, and |
323 char *c, *cpy; | 323 * escaping a few other characters. |
324 int cnt = 0; | 324 */ |
325 /* Assumes you have a buffer able to cary at least BUF_LEN * 4 bytes */ | 325 char *escape_text(const char *msg) |
326 if (strlen(msg) > BUF_LEN) { | 326 { |
327 fprintf(stderr, "Warning: truncating message to 2048 bytes\n"); | 327 char *ret; |
328 msg[2047] = '\0'; | 328 int i, j; |
329 } | 329 |
330 | 330 if (!msg) |
331 cpy = g_strdup(msg); | 331 return NULL; |
332 c = cpy; | 332 |
333 while (*c) { | 333 /* Calculate the length after escaping */ |
334 switch (*c) { | 334 i = 0; |
335 j = 0; | |
336 while (msg[i++]) | |
337 switch (msg[i]) { | |
335 case '\n': | 338 case '\n': |
336 msg[cnt++] = '<'; | 339 j += 4; |
337 msg[cnt++] = 'B'; | |
338 msg[cnt++] = 'R'; | |
339 msg[cnt++] = '>'; | |
340 break; | 340 break; |
341 case '{': | 341 case '{': |
342 case '}': | 342 case '}': |
343 case '\\': | 343 case '\\': |
344 case '"': | 344 case '"': |
345 msg[cnt++] = '\\'; | 345 j += 1; |
346 /* Fall through */ | |
347 default: | 346 default: |
348 msg[cnt++] = *c; | 347 j += 1; |
349 } | 348 } |
350 c++; | 349 |
351 } | 350 /* Allocate a string */ |
352 msg[cnt] = '\0'; | 351 ret = (char *)malloc((j+1) * sizeof(char)); |
353 g_free(cpy); | 352 |
354 return cnt; | 353 /* Copy the string */ |
354 i = 0; | |
355 j = 0; | |
356 while (msg[i++]) { | |
357 switch (msg[i]) { | |
358 case '\n': | |
359 ret[j++] = '<'; | |
360 ret[j++] = 'B'; | |
361 ret[j++] = 'R'; | |
362 ret[j++] = '>'; | |
363 break; | |
364 case '{': | |
365 case '}': | |
366 case '\\': | |
367 case '"': | |
368 ret[j++] = '\\'; | |
369 default: | |
370 ret[j++] = msg[i]; | |
371 } | |
372 } | |
373 ret[j] = '\0'; | |
374 | |
375 return ret; | |
355 } | 376 } |
356 | 377 |
357 static int sflap_send(GaimConnection *gc, char *buf, int olen, int type) | 378 static int sflap_send(GaimConnection *gc, char *buf, int olen, int type) |
358 { | 379 { |
359 int len; | 380 int len; |
1003 } | 1024 } |
1004 | 1025 |
1005 static int toc_send_im(GaimConnection *gc, const char *name, const char *message, int len, int flags) | 1026 static int toc_send_im(GaimConnection *gc, const char *name, const char *message, int len, int flags) |
1006 { | 1027 { |
1007 char buf[BUF_LEN * 2]; | 1028 char buf[BUF_LEN * 2]; |
1008 char *tmp = g_malloc(strlen(message) * 4 + 1); /* 4 because \n gets replaced with <BR> */ | 1029 char *tmp; |
1009 | 1030 |
1010 strcpy(tmp, message); | 1031 tmp = escape_text(message); |
1011 escape_text(tmp); | |
1012 if (strlen(tmp) + 52 > MSG_LEN) { | 1032 if (strlen(tmp) + 52 > MSG_LEN) { |
1013 g_free(tmp); | 1033 g_free(tmp); |
1014 return -E2BIG; | 1034 return -E2BIG; |
1015 } | 1035 } |
1016 g_snprintf(buf, MSG_LEN - 8, "toc_send_im %s \"%s\"%s", normalize(name), | 1036 g_snprintf(buf, MSG_LEN - 8, "toc_send_im %s \"%s\"%s", normalize(name), |
1045 } | 1065 } |
1046 | 1066 |
1047 static void toc_set_dir(GaimConnection *g, const char *first, const char *middle, const char *last, | 1067 static void toc_set_dir(GaimConnection *g, const char *first, const char *middle, const char *last, |
1048 const char *maiden, const char *city, const char *state, const char *country, int web) | 1068 const char *maiden, const char *city, const char *state, const char *country, int web) |
1049 { | 1069 { |
1050 char buf2[BUF_LEN * 4], buf[BUF_LEN]; | 1070 char *buf3, buf2[BUF_LEN * 4], buf[BUF_LEN]; |
1051 g_snprintf(buf2, sizeof(buf2), "%s:%s:%s:%s:%s:%s:%s:%s", first, | 1071 g_snprintf(buf2, sizeof(buf2), "%s:%s:%s:%s:%s:%s:%s:%s", first, |
1052 middle, last, maiden, city, state, country, (web == 1) ? "Y" : ""); | 1072 middle, last, maiden, city, state, country, (web == 1) ? "Y" : ""); |
1053 escape_text(buf2); | 1073 buf3 = escape_text(buf2); |
1054 g_snprintf(buf, sizeof(buf), "toc_set_dir %s", buf2); | 1074 g_snprintf(buf, sizeof(buf), "toc_set_dir %s", buf3); |
1075 g_free(buf3); | |
1055 sflap_send(g, buf, -1, TYPE_DATA); | 1076 sflap_send(g, buf, -1, TYPE_DATA); |
1056 } | 1077 } |
1057 | 1078 |
1058 static void toc_dir_search(GaimConnection *g, const char *first, const char *middle, const char *last, | 1079 static void toc_dir_search(GaimConnection *g, const char *first, const char *middle, const char *last, |
1059 const char *maiden, const char *city, const char *state, const char *country, const char *email) | 1080 const char *maiden, const char *city, const char *state, const char *country, const char *email) |
1064 debug_printf("Searching for: %s,%s,%s,%s,%s,%s,%s\n", first, middle, last, maiden, | 1085 debug_printf("Searching for: %s,%s,%s,%s,%s,%s,%s\n", first, middle, last, maiden, |
1065 city, state, country); | 1086 city, state, country); |
1066 sflap_send(g, buf, -1, TYPE_DATA); | 1087 sflap_send(g, buf, -1, TYPE_DATA); |
1067 } | 1088 } |
1068 | 1089 |
1069 static void toc_set_away(GaimConnection *g, char *state, char *message) | 1090 static void toc_set_away(GaimConnection *g, const char *state, const char *message) |
1070 { | 1091 { |
1071 char buf[BUF_LEN * 2]; | 1092 char buf[BUF_LEN * 2]; |
1072 if (g->away) { | 1093 if (g->away) { |
1073 g_free (g->away); | 1094 g_free (g->away); |
1074 g->away = NULL; | 1095 g->away = NULL; |
1075 } | 1096 } |
1076 if (message) { | 1097 if (message) { |
1077 char *tmp = g_malloc(strlen(message) * 4 + 1); | 1098 char *tmp; |
1078 strcpy(tmp, message); | 1099 g->away = g_strdup(message); |
1079 g->away = g_strdup (message); | 1100 tmp = escape_text(message); |
1080 escape_text(tmp); | |
1081 g_snprintf(buf, MSG_LEN, "toc_set_away \"%s\"", tmp); | 1101 g_snprintf(buf, MSG_LEN, "toc_set_away \"%s\"", tmp); |
1082 g_free(tmp); | 1102 g_free(tmp); |
1083 } else | 1103 } else |
1084 g_snprintf(buf, MSG_LEN, "toc_set_away \"\""); | 1104 g_snprintf(buf, MSG_LEN, "toc_set_away \"\""); |
1085 sflap_send(g, buf, -1, TYPE_DATA); | 1105 sflap_send(g, buf, -1, TYPE_DATA); |
1086 } | 1106 } |
1087 | 1107 |
1088 static void toc_set_info(GaimConnection *g, const char *info) | 1108 static void toc_set_info(GaimConnection *g, const char *info) |
1089 { | 1109 { |
1090 char buf[BUF_LEN * 2], buf2[BUF_LEN * 2]; | 1110 char buf[BUF_LEN * 2], *buf2; |
1091 g_snprintf(buf2, sizeof buf2, "%s", info); | 1111 buf2 = escape_text(info); |
1092 escape_text(buf2); | |
1093 g_snprintf(buf, sizeof(buf), "toc_set_info \"%s\n\"", buf2); | 1112 g_snprintf(buf, sizeof(buf), "toc_set_info \"%s\n\"", buf2); |
1113 g_free(buf2); | |
1094 sflap_send(g, buf, -1, TYPE_DATA); | 1114 sflap_send(g, buf, -1, TYPE_DATA); |
1095 } | 1115 } |
1096 | 1116 |
1097 static void toc_change_passwd(GaimConnection *g, const char *orig, const char *new) | 1117 static void toc_change_passwd(GaimConnection *g, const char *orig, const char *new) |
1098 { | 1118 { |
1124 buddies = buddies->next; | 1144 buddies = buddies->next; |
1125 } | 1145 } |
1126 sflap_send(g, buf, -1, TYPE_DATA); | 1146 sflap_send(g, buf, -1, TYPE_DATA); |
1127 } | 1147 } |
1128 | 1148 |
1129 static void toc_remove_buddy(GaimConnection *g, char *name, char *group) | 1149 static void toc_remove_buddy(GaimConnection *g, const char *name, const char *group) |
1130 { | 1150 { |
1131 char buf[BUF_LEN * 2]; | 1151 char buf[BUF_LEN * 2]; |
1132 g_snprintf(buf, sizeof(buf), "toc_remove_buddy %s", normalize(name)); | 1152 g_snprintf(buf, sizeof(buf), "toc_remove_buddy %s", normalize(name)); |
1133 sflap_send(g, buf, -1, TYPE_DATA); | 1153 sflap_send(g, buf, -1, TYPE_DATA); |
1134 toc_set_config(g); | 1154 toc_set_config(g); |
1157 char buf[BUF_LEN * 2]; | 1177 char buf[BUF_LEN * 2]; |
1158 g_snprintf(buf, sizeof(buf), "toc_set_idle %d", time); | 1178 g_snprintf(buf, sizeof(buf), "toc_set_idle %d", time); |
1159 sflap_send(g, buf, -1, TYPE_DATA); | 1179 sflap_send(g, buf, -1, TYPE_DATA); |
1160 } | 1180 } |
1161 | 1181 |
1162 static void toc_warn(GaimConnection *g, char *name, int anon) | 1182 static void toc_warn(GaimConnection *g, const char *name, int anon) |
1163 { | 1183 { |
1164 char send[BUF_LEN * 2]; | 1184 char send[BUF_LEN * 2]; |
1165 g_snprintf(send, 255, "toc_evil %s %s", name, ((anon) ? "anon" : "norm")); | 1185 g_snprintf(send, 255, "toc_evil %s %s", name, ((anon) ? "anon" : "norm")); |
1166 sflap_send(g, send, -1, TYPE_DATA); | 1186 sflap_send(g, send, -1, TYPE_DATA); |
1167 } | 1187 } |
1239 g_snprintf(buf, 255, "toc_chat_leave %d", id); | 1259 g_snprintf(buf, 255, "toc_chat_leave %d", id); |
1240 sflap_send(g, buf, -1, TYPE_DATA); | 1260 sflap_send(g, buf, -1, TYPE_DATA); |
1241 } | 1261 } |
1242 } | 1262 } |
1243 | 1263 |
1244 static void toc_chat_whisper(GaimConnection *g, int id, char *who, char *message) | 1264 static void toc_chat_whisper(GaimConnection *g, int id, const char *who, const char *message) |
1245 { | 1265 { |
1246 char buf2[BUF_LEN * 2]; | 1266 char *buf1, *buf2; |
1247 escape_text(message); | 1267 buf1 = escape_text(message); |
1248 g_snprintf(buf2, sizeof(buf2), "toc_chat_whisper %d %s \"%s\"", id, normalize(who), message); | 1268 buf2 = g_strdup_printf("toc_chat_whisper %d %s \"%s\"", id, normalize(who), buf1); |
1269 g_free(buf1); | |
1249 sflap_send(g, buf2, -1, TYPE_DATA); | 1270 sflap_send(g, buf2, -1, TYPE_DATA); |
1250 } | 1271 g_free(buf2); |
1251 | 1272 } |
1252 static int toc_chat_send(GaimConnection *g, int id, char *message) | 1273 |
1253 { | 1274 static int toc_chat_send(GaimConnection *g, int id, const char *message) |
1254 char buf[BUF_LEN * 2]; | 1275 { |
1255 escape_text(message); | 1276 char *buf1, *buf2; |
1256 if (strlen(message) > 2000) | 1277 buf1 = escape_text(message); |
1278 if (strlen(buf1) > 2000) { | |
1279 g_free(buf1); | |
1257 return -E2BIG; | 1280 return -E2BIG; |
1258 g_snprintf(buf, sizeof(buf), "toc_chat_send %d \"%s\"", id, message); | 1281 } |
1259 sflap_send(g, buf, -1, TYPE_DATA); | 1282 buf2 = g_strdup_printf("toc_chat_send %d \"%s\"", id, buf1); |
1283 g_free(buf1); | |
1284 sflap_send(g, buf2, -1, TYPE_DATA); | |
1285 g_free(buf2); | |
1260 return 0; | 1286 return 0; |
1261 } | 1287 } |
1262 | 1288 |
1263 static void toc_keepalive(GaimConnection *gc) | 1289 static void toc_keepalive(GaimConnection *gc) |
1264 { | 1290 { |