Mercurial > pidgin
comparison src/protocols/irc/irc.c @ 2619:536198196dc6
[gaim-migrate @ 2632]
i hate you mid. i have that IM Me song stuck in my head.
committer: Tailor Script <tailor@pidgin.im>
| author | Eric Warmenhoven <eric@warmenhoven.org> |
|---|---|
| date | Fri, 26 Oct 2001 10:11:33 +0000 |
| parents | 251ecc5cd9b3 |
| children | a1b708ee93af |
comparison
equal
deleted
inserted
replaced
| 2618:047256035ec6 | 2619:536198196dc6 |
|---|---|
| 57 | 57 |
| 58 char *chantypes; | 58 char *chantypes; |
| 59 char *chanmodes; | 59 char *chanmodes; |
| 60 char *nickmodes; | 60 char *nickmodes; |
| 61 gboolean six_modes; | 61 gboolean six_modes; |
| 62 | |
| 63 gboolean in_whois; | |
| 64 GString *whois_str; | |
| 62 }; | 65 }; |
| 63 | 66 |
| 64 static char *irc_name() | 67 static char *irc_name() |
| 65 { | 68 { |
| 66 return "IRC"; | 69 return "IRC"; |
| 561 break; | 564 break; |
| 562 case 5: | 565 case 5: |
| 563 handle_005(gc, word, word_eol); | 566 handle_005(gc, word, word_eol); |
| 564 break; | 567 break; |
| 565 case 301: | 568 case 301: |
| 566 irc_got_im(gc, word[4], word_eol[5], IM_FLAG_AWAY, time(NULL)); | 569 if (id->in_whois) { |
| 570 id->whois_str = g_string_append(id->whois_str, "<BR><BR>"); | |
| 571 id->whois_str = g_string_append(id->whois_str, word_eol[4]); | |
| 572 } else | |
| 573 irc_got_im(gc, word[4], word_eol[5], IM_FLAG_AWAY, time(NULL)); | |
| 567 break; | 574 break; |
| 568 case 303: | 575 case 303: |
| 569 handle_list(gc, &word_eol[4][1]); | 576 handle_list(gc, &word_eol[4][1]); |
| 577 break; | |
| 578 case 311: | |
| 579 case 312: | |
| 580 case 313: | |
| 581 case 317: | |
| 582 case 319: | |
| 583 if (!id->in_whois) { | |
| 584 id->in_whois = TRUE; | |
| 585 id->whois_str = g_string_new(""); | |
| 586 } else { | |
| 587 id->whois_str = g_string_append(id->whois_str, "<BR><BR>"); | |
| 588 id->in_whois = TRUE; | |
| 589 } | |
| 590 id->whois_str = g_string_append(id->whois_str, word_eol[4]); | |
| 591 break; | |
| 592 case 318: | |
| 593 id->whois_str = g_string_append(id->whois_str, "<BR><BR>"); | |
| 594 id->whois_str = g_string_append(id->whois_str, word_eol[4]); | |
| 595 { | |
| 596 GString *str = decode_html(id->whois_str->str); | |
| 597 g_show_info_text(str->str); | |
| 598 g_string_free(str, TRUE); | |
| 599 } | |
| 600 g_string_free(id->whois_str, TRUE); | |
| 601 id->whois_str = NULL; | |
| 602 id->in_whois = FALSE; | |
| 570 break; | 603 break; |
| 571 case 324: | 604 case 324: |
| 572 handle_mode(gc, word, word_eol, TRUE); | 605 handle_mode(gc, word, word_eol, TRUE); |
| 573 break; | 606 break; |
| 574 case 332: | 607 case 332: |
| 577 case 353: | 610 case 353: |
| 578 handle_names(gc, word[5], word_eol[6]); | 611 handle_names(gc, word[5], word_eol[6]); |
| 579 break; | 612 break; |
| 580 case 376: | 613 case 376: |
| 581 irc_request_buddy_update(gc); | 614 irc_request_buddy_update(gc); |
| 615 break; | |
| 616 case 401: | |
| 617 case 402: | |
| 618 case 431: | |
| 619 if (!id->in_whois) { | |
| 620 id->in_whois = TRUE; | |
| 621 id->whois_str = g_string_new(""); | |
| 622 } else { | |
| 623 id->whois_str = g_string_append(id->whois_str, "<BR><BR>"); | |
| 624 id->in_whois = TRUE; | |
| 625 } | |
| 626 id->whois_str = g_string_append(id->whois_str, word_eol[4]); | |
| 582 break; | 627 break; |
| 583 } | 628 } |
| 584 } | 629 } |
| 585 | 630 |
| 586 static gboolean is_channel(struct gaim_connection *gc, char *name) | 631 static gboolean is_channel(struct gaim_connection *gc, char *name) |
| 949 g_free(idata->chantypes); | 994 g_free(idata->chantypes); |
| 950 g_free(idata->chanmodes); | 995 g_free(idata->chanmodes); |
| 951 g_free(idata->nickmodes); | 996 g_free(idata->nickmodes); |
| 952 | 997 |
| 953 g_string_free(idata->str, TRUE); | 998 g_string_free(idata->str, TRUE); |
| 999 if (idata->whois_str) | |
| 1000 g_string_free(idata->whois_str, TRUE); | |
| 954 | 1001 |
| 955 if (idata->timer) | 1002 if (idata->timer) |
| 956 g_source_remove(idata->timer); | 1003 g_source_remove(idata->timer); |
| 957 | 1004 |
| 958 if (gc->inpa) | 1005 if (gc->inpa) |
| 1164 if (*word_eol[3]) | 1211 if (*word_eol[3]) |
| 1165 g_snprintf(buf, sizeof(buf), "KICK %s %s :%s\r\n", who, word[2], word_eol[3]); | 1212 g_snprintf(buf, sizeof(buf), "KICK %s %s :%s\r\n", who, word[2], word_eol[3]); |
| 1166 else | 1213 else |
| 1167 g_snprintf(buf, sizeof(buf), "KICK %s %s\r\n", who, word[2]); | 1214 g_snprintf(buf, sizeof(buf), "KICK %s %s\r\n", who, word[2]); |
| 1168 irc_write(id->fd, buf, strlen(buf)); | 1215 irc_write(id->fd, buf, strlen(buf)); |
| 1169 } else if (!g_strcasecmp(pdibuf, "BAN")) { | |
| 1170 } else if (!g_strcasecmp(pdibuf, "KICKBAN")) { | |
| 1171 } else if (!g_strcasecmp(pdibuf, "JOIN")) { | 1216 } else if (!g_strcasecmp(pdibuf, "JOIN")) { |
| 1172 if (!*word[2]) | 1217 if (!*word[2]) |
| 1173 return -EINVAL; | 1218 return -EINVAL; |
| 1174 if (*word[3]) | 1219 if (*word[3]) |
| 1175 g_snprintf(buf, sizeof(buf), "JOIN %s %s\r\n", word[2], word[3]); | 1220 g_snprintf(buf, sizeof(buf), "JOIN %s %s\r\n", word[2], word[3]); |
| 1191 gc->buddy_chats = g_slist_remove(gc->buddy_chats, c); | 1236 gc->buddy_chats = g_slist_remove(gc->buddy_chats, c); |
| 1192 c->gc = NULL; | 1237 c->gc = NULL; |
| 1193 g_snprintf(buf, sizeof(buf), _("You have left %s"), chan); | 1238 g_snprintf(buf, sizeof(buf), _("You have left %s"), chan); |
| 1194 do_error_dialog(buf, _("IRC Part")); | 1239 do_error_dialog(buf, _("IRC Part")); |
| 1195 } | 1240 } |
| 1241 } else if (!g_strcasecmp(pdibuf, "WHOIS")) { | |
| 1242 g_snprintf(buf, sizeof(buf), "WHOIS %s\r\n", word_eol[2]); | |
| 1243 irc_write(id->fd, buf, strlen(buf)); | |
| 1196 } else if (!g_strcasecmp(pdibuf, "HELP")) { | 1244 } else if (!g_strcasecmp(pdibuf, "HELP")) { |
| 1197 struct conversation *c = NULL; | 1245 struct conversation *c = NULL; |
| 1198 if (is_channel(gc, who)) { | 1246 if (is_channel(gc, who)) { |
| 1199 c = irc_find_chat(gc, who); | 1247 c = irc_find_chat(gc, who); |
| 1200 } else { | 1248 } else { |
| 1201 c = find_conversation(who); | 1249 c = find_conversation(who); |
| 1202 } | 1250 } |
| 1203 if (!c) | 1251 if (!c) |
| 1204 return -EINVAL; | 1252 return -EINVAL; |
| 1205 write_to_conv(c, "<B>Currently supported commands:<BR>" | 1253 write_to_conv(c, "<B>Currently supported commands:<BR>" |
| 1206 "JOIN PART TOPIC<BR>" | 1254 "JOIN PART TOPIC WHOIS<BR>" |
| 1207 "OP DEOP VOICE DEVOICE KICK<BR>" | 1255 "OP DEOP VOICE DEVOICE KICK<BR>" |
| 1208 "NICK ME MSG QUOTE SAY</B>", | 1256 "NICK ME MSG QUOTE SAY</B>", |
| 1209 WFLAG_NOLOG, NULL, time(NULL)); | 1257 WFLAG_NOLOG, NULL, time(NULL)); |
| 1210 } else { | 1258 } else { |
| 1211 struct conversation *c = NULL; | 1259 struct conversation *c = NULL; |
| 1331 } | 1379 } |
| 1332 | 1380 |
| 1333 static char **irc_list_icon(int uc) | 1381 static char **irc_list_icon(int uc) |
| 1334 { | 1382 { |
| 1335 return irc_icon_xpm; | 1383 return irc_icon_xpm; |
| 1384 } | |
| 1385 | |
| 1386 static void irc_get_info(struct gaim_connection *gc, char *who) | |
| 1387 { | |
| 1388 struct irc_data *idata = gc->proto_data; | |
| 1389 char buf[IRC_BUF_LEN]; | |
| 1390 | |
| 1391 g_snprintf(buf, sizeof(buf), "WHOIS %s\r\n", who); | |
| 1392 irc_write(idata->fd, buf, strlen(buf)); | |
| 1393 } | |
| 1394 | |
| 1395 static GList *irc_buddy_menu(struct gaim_connection *gc, char *who) | |
| 1396 { | |
| 1397 GList *m = NULL; | |
| 1398 struct proto_buddy_menu *pbm; | |
| 1399 | |
| 1400 pbm = g_new0(struct proto_buddy_menu, 1); | |
| 1401 pbm->label = _("Get Info"); | |
| 1402 pbm->callback = irc_get_info; | |
| 1403 pbm->gc = gc; | |
| 1404 m = g_list_append(m, pbm); | |
| 1405 | |
| 1406 return m; | |
| 1336 } | 1407 } |
| 1337 | 1408 |
| 1338 static struct prpl *my_protocol = NULL; | 1409 static struct prpl *my_protocol = NULL; |
| 1339 | 1410 |
| 1340 void irc_init(struct prpl *ret) | 1411 void irc_init(struct prpl *ret) |
| 1353 ret->join_chat = irc_join_chat; | 1424 ret->join_chat = irc_join_chat; |
| 1354 ret->chat_leave = irc_chat_leave; | 1425 ret->chat_leave = irc_chat_leave; |
| 1355 ret->chat_send = irc_chat_send; | 1426 ret->chat_send = irc_chat_send; |
| 1356 ret->away_states = irc_away_states; | 1427 ret->away_states = irc_away_states; |
| 1357 ret->set_away = irc_set_away; | 1428 ret->set_away = irc_set_away; |
| 1429 ret->get_info = irc_get_info; | |
| 1430 ret->buddy_menu = irc_buddy_menu; | |
| 1358 my_protocol = ret; | 1431 my_protocol = ret; |
| 1359 } | 1432 } |
| 1360 | 1433 |
| 1361 #ifndef STATIC | 1434 #ifndef STATIC |
| 1362 | 1435 |
