Mercurial > pidgin
comparison src/protocols/irc/irc.c @ 3033:1143524a2eaf
[gaim-migrate @ 3046]
Laying the ground work for image send. Also an IRC fix.
committer: Tailor Script <tailor@pidgin.im>
| author | Sean Egan <seanegan@gmail.com> |
|---|---|
| date | Tue, 12 Mar 2002 17:21:46 +0000 |
| parents | e40c30cf7572 |
| children | 22c84cbcd5a6 |
comparison
equal
deleted
inserted
replaced
| 3032:d3536105d581 | 3033:1143524a2eaf |
|---|---|
| 1460 irc_write(id->fd, buf, strlen(buf)); | 1460 irc_write(id->fd, buf, strlen(buf)); |
| 1461 g_string_free(str, TRUE); | 1461 g_string_free(str, TRUE); |
| 1462 return 1; | 1462 return 1; |
| 1463 } | 1463 } |
| 1464 | 1464 |
| 1465 what++; | 1465 process_data_init(pdibuf, what + 1, word, word_eol, TRUE); |
| 1466 process_data_init(pdibuf, what, word, word_eol, TRUE); | 1466 g_string_free(str, FALSE); |
| 1467 g_string_free(str, TRUE); | |
| 1468 if (!g_strcasecmp(pdibuf, "ME")) { | 1467 if (!g_strcasecmp(pdibuf, "ME")) { |
| 1469 if (dccchat) { | 1468 if (dccchat) { |
| 1470 g_snprintf(buf, sizeof(buf), "\001ACTION %s\001\r\n", word_eol[2]); | 1469 g_snprintf(buf, sizeof(buf), "\001ACTION %s\001\r\n", word_eol[2]); |
| 1471 irc_write(dccchat->fd, buf, strlen(buf)); | 1470 irc_write(dccchat->fd, buf, strlen(buf)); |
| 1471 g_free(what); | |
| 1472 return 1; | 1472 return 1; |
| 1473 } | 1473 } |
| 1474 g_snprintf(buf, sizeof(buf), "PRIVMSG %s :\001ACTION %s\001\r\n", who, word_eol[2]); | 1474 g_snprintf(buf, sizeof(buf), "PRIVMSG %s :\001ACTION %s\001\r\n", who, word_eol[2]); |
| 1475 irc_write(id->fd, buf, strlen(buf)); | 1475 irc_write(id->fd, buf, strlen(buf)); |
| 1476 g_free(what); | |
| 1476 return 1; | 1477 return 1; |
| 1477 } else if (!g_strcasecmp(pdibuf, "INVITE")) { | 1478 } else if (!g_strcasecmp(pdibuf, "INVITE")) { |
| 1478 char buf[IRC_BUF_LEN]; | 1479 char buf[IRC_BUF_LEN]; |
| 1479 g_snprintf(buf, sizeof(buf), "INVITE %s\r\n", word_eol[2]); | 1480 g_snprintf(buf, sizeof(buf), "INVITE %s\r\n", word_eol[2]); |
| 1480 irc_write(id->fd, buf, strlen(buf)); | 1481 irc_write(id->fd, buf, strlen(buf)); |
| 1481 } else if (!g_strcasecmp(pdibuf, "TOPIC")) { | 1482 } else if (!g_strcasecmp(pdibuf, "TOPIC")) { |
| 1482 if (!*word_eol[2]) | 1483 if (!*word_eol[2]) { |
| 1484 g_free(what); | |
| 1483 return -EINVAL; | 1485 return -EINVAL; |
| 1486 } | |
| 1484 g_snprintf(buf, sizeof(buf), "TOPIC %s :%s\r\n", who, word_eol[2]); | 1487 g_snprintf(buf, sizeof(buf), "TOPIC %s :%s\r\n", who, word_eol[2]); |
| 1485 irc_write(id->fd, buf, strlen(buf)); | 1488 irc_write(id->fd, buf, strlen(buf)); |
| 1486 } else if (!g_strcasecmp(pdibuf, "NICK")) { | 1489 } else if (!g_strcasecmp(pdibuf, "NICK")) { |
| 1487 if (!*word_eol[2]) | 1490 if (!*word_eol[2]) { |
| 1491 g_free(what); | |
| 1488 return -EINVAL; | 1492 return -EINVAL; |
| 1493 } | |
| 1489 g_snprintf(buf, sizeof(buf), "NICK %s\r\n", word_eol[2]); | 1494 g_snprintf(buf, sizeof(buf), "NICK %s\r\n", word_eol[2]); |
| 1490 irc_write(id->fd, buf, strlen(buf)); | 1495 irc_write(id->fd, buf, strlen(buf)); |
| 1491 } else if (!g_strcasecmp(pdibuf, "OP")) { | 1496 } else if (!g_strcasecmp(pdibuf, "OP")) { |
| 1492 set_mode(gc, who, '+', 'o', word); | 1497 set_mode(gc, who, '+', 'o', word); |
| 1493 } else if (!g_strcasecmp(pdibuf, "DEOP")) { | 1498 } else if (!g_strcasecmp(pdibuf, "DEOP")) { |
| 1495 } else if (!g_strcasecmp(pdibuf, "VOICE")) { | 1500 } else if (!g_strcasecmp(pdibuf, "VOICE")) { |
| 1496 set_mode(gc, who, '+', 'v', word); | 1501 set_mode(gc, who, '+', 'v', word); |
| 1497 } else if (!g_strcasecmp(pdibuf, "DEVOICE")) { | 1502 } else if (!g_strcasecmp(pdibuf, "DEVOICE")) { |
| 1498 set_mode(gc, who, '-', 'v', word); | 1503 set_mode(gc, who, '-', 'v', word); |
| 1499 } else if (!g_strcasecmp(pdibuf, "QUOTE")) { | 1504 } else if (!g_strcasecmp(pdibuf, "QUOTE")) { |
| 1500 if (!*word_eol[2]) | 1505 if (!*word_eol[2]) { |
| 1506 g_free(what); | |
| 1501 return -EINVAL; | 1507 return -EINVAL; |
| 1508 } | |
| 1502 g_snprintf(buf, sizeof(buf), "%s\r\n", word_eol[2]); | 1509 g_snprintf(buf, sizeof(buf), "%s\r\n", word_eol[2]); |
| 1503 irc_write(id->fd, buf, strlen(buf)); | 1510 irc_write(id->fd, buf, strlen(buf)); |
| 1504 } else if (!g_strcasecmp(pdibuf, "SAY")) { | 1511 } else if (!g_strcasecmp(pdibuf, "SAY")) { |
| 1505 if (!*word_eol[2]) | 1512 if (!*word_eol[2]) { |
| 1513 g_free(what); | |
| 1506 return -EINVAL; | 1514 return -EINVAL; |
| 1515 } | |
| 1507 g_snprintf(buf, sizeof(buf), "PRIVMSG %s :%s\r\n", who, word_eol[2]); | 1516 g_snprintf(buf, sizeof(buf), "PRIVMSG %s :%s\r\n", who, word_eol[2]); |
| 1508 irc_write(id->fd, buf, strlen(buf)); | 1517 irc_write(id->fd, buf, strlen(buf)); |
| 1509 return 1; | 1518 return 1; |
| 1510 } else if (!g_strcasecmp(pdibuf, "MSG")) { | 1519 } else if (!g_strcasecmp(pdibuf, "MSG")) { |
| 1511 if (!*word[2]) | 1520 if (!*word[2]) { |
| 1521 g_free(what); | |
| 1512 return -EINVAL; | 1522 return -EINVAL; |
| 1513 if (!*word_eol[3]) | 1523 } |
| 1524 if (!*word_eol[3]) { | |
| 1525 g_free(what); | |
| 1514 return -EINVAL; | 1526 return -EINVAL; |
| 1527 } | |
| 1515 g_snprintf(buf, sizeof(buf), "PRIVMSG %s :%s\r\n", word[2], word_eol[3]); | 1528 g_snprintf(buf, sizeof(buf), "PRIVMSG %s :%s\r\n", word[2], word_eol[3]); |
| 1516 irc_write(id->fd, buf, strlen(buf)); | 1529 irc_write(id->fd, buf, strlen(buf)); |
| 1517 } else if (!g_strcasecmp(pdibuf, "KICK")) { | 1530 } else if (!g_strcasecmp(pdibuf, "KICK")) { |
| 1518 if (!*word[2]) | 1531 if (!*word[2]) { |
| 1532 g_free(what); | |
| 1519 return -EINVAL; | 1533 return -EINVAL; |
| 1534 } | |
| 1520 if (*word_eol[3]) | 1535 if (*word_eol[3]) |
| 1521 g_snprintf(buf, sizeof(buf), "KICK %s %s :%s\r\n", who, word[2], word_eol[3]); | 1536 g_snprintf(buf, sizeof(buf), "KICK %s %s :%s\r\n", who, word[2], word_eol[3]); |
| 1522 else | 1537 else |
| 1523 g_snprintf(buf, sizeof(buf), "KICK %s %s\r\n", who, word[2]); | 1538 g_snprintf(buf, sizeof(buf), "KICK %s %s\r\n", who, word[2]); |
| 1524 irc_write(id->fd, buf, strlen(buf)); | 1539 irc_write(id->fd, buf, strlen(buf)); |
| 1525 } else if (!g_strcasecmp(pdibuf, "JOIN") || !g_strcasecmp(pdibuf, "J")) { | 1540 } else if (!g_strcasecmp(pdibuf, "JOIN") || !g_strcasecmp(pdibuf, "J")) { |
| 1526 if (!*word[2]) | 1541 if (!*word[2]) { |
| 1542 g_free(what); | |
| 1527 return -EINVAL; | 1543 return -EINVAL; |
| 1544 } | |
| 1528 if (*word[3]) | 1545 if (*word[3]) |
| 1529 g_snprintf(buf, sizeof(buf), "JOIN %s %s\r\n", word[2], word[3]); | 1546 g_snprintf(buf, sizeof(buf), "JOIN %s %s\r\n", word[2], word[3]); |
| 1530 else | 1547 else |
| 1531 g_snprintf(buf, sizeof(buf), "JOIN %s\r\n", word[2]); | 1548 g_snprintf(buf, sizeof(buf), "JOIN %s\r\n", word[2]); |
| 1532 irc_write(id->fd, buf, strlen(buf)); | 1549 irc_write(id->fd, buf, strlen(buf)); |
| 1533 } else if (!g_strcasecmp(pdibuf, "PART")) { | 1550 } else if (!g_strcasecmp(pdibuf, "PART")) { |
| 1534 char *chan = *word[2] ? word[2] : who; | 1551 char *chan = *word[2] ? word[2] : who; |
| 1535 char *reason = word_eol[3]; | 1552 char *reason = word_eol[3]; |
| 1536 struct conversation *c; | 1553 struct conversation *c; |
| 1537 if (!is_channel(gc, chan)) | 1554 if (!is_channel(gc, chan)) { |
| 1555 g_free(what); | |
| 1538 return -EINVAL; | 1556 return -EINVAL; |
| 1557 } | |
| 1539 c = irc_find_chat(gc, chan); | 1558 c = irc_find_chat(gc, chan); |
| 1540 g_snprintf(buf, sizeof(buf), "PART %s%s%s\r\n", chan, | 1559 g_snprintf(buf, sizeof(buf), "PART %s%s%s\r\n", chan, |
| 1541 *reason ? " :" : "", | 1560 *reason ? " :" : "", |
| 1542 *reason ? reason : ""); | 1561 *reason ? reason : ""); |
| 1543 irc_write(id->fd, buf, strlen(buf)); | 1562 irc_write(id->fd, buf, strlen(buf)); |
| 1558 if (is_channel(gc, who)) { | 1577 if (is_channel(gc, who)) { |
| 1559 c = irc_find_chat(gc, who); | 1578 c = irc_find_chat(gc, who); |
| 1560 } else { | 1579 } else { |
| 1561 c = find_conversation(who); | 1580 c = find_conversation(who); |
| 1562 } | 1581 } |
| 1563 if (!c) | 1582 if (!c) { |
| 1583 g_free(what); | |
| 1564 return -EINVAL; | 1584 return -EINVAL; |
| 1585 } | |
| 1565 write_to_conv(c, "<B>Currently supported commands:<BR>" | 1586 write_to_conv(c, "<B>Currently supported commands:<BR>" |
| 1566 "WHOIS INVITE NICK LIST<BR>" | 1587 "WHOIS INVITE NICK LIST<BR>" |
| 1567 "JOIN PART TOPIC KICK<BR>" | 1588 "JOIN PART TOPIC KICK<BR>" |
| 1568 "OP DEOP VOICE DEVOICE<BR>" | 1589 "OP DEOP VOICE DEVOICE<BR>" |
| 1569 "ME MSG QUOTE SAY</B>", | 1590 "ME MSG QUOTE SAY</B>", |
| 1573 if (is_channel(gc, who)) { | 1594 if (is_channel(gc, who)) { |
| 1574 c = irc_find_chat(gc, who); | 1595 c = irc_find_chat(gc, who); |
| 1575 } else { | 1596 } else { |
| 1576 c = find_conversation(who); | 1597 c = find_conversation(who); |
| 1577 } | 1598 } |
| 1578 if (!c) | 1599 if (!c) { |
| 1600 g_free(what); | |
| 1579 return -EINVAL; | 1601 return -EINVAL; |
| 1602 } | |
| 1580 write_to_conv(c, "<B>Unknown command</B>", WFLAG_NOLOG, NULL, time(NULL), -1); | 1603 write_to_conv(c, "<B>Unknown command</B>", WFLAG_NOLOG, NULL, time(NULL), -1); |
| 1581 } | 1604 } |
| 1582 | 1605 g_free(what); |
| 1583 return 0; | 1606 return 0; |
| 1584 } | 1607 } |
| 1585 | 1608 |
| 1586 static int send_msg(struct gaim_connection *gc, char *who, char *what) | 1609 static int send_msg(struct gaim_connection *gc, char *who, char *what) |
| 1587 { | 1610 { |
| 1611 struct conversation *c = irc_find_chat_by_id(gc, idn); | 1634 struct conversation *c = irc_find_chat_by_id(gc, idn); |
| 1612 g_snprintf(buf, sizeof(buf), "INVITE %s %s\r\n", name, c->name); | 1635 g_snprintf(buf, sizeof(buf), "INVITE %s %s\r\n", name, c->name); |
| 1613 irc_write(id->fd, buf, strlen(buf)); | 1636 irc_write(id->fd, buf, strlen(buf)); |
| 1614 } | 1637 } |
| 1615 | 1638 |
| 1616 static int irc_send_im(struct gaim_connection *gc, char *who, char *what, int flags) | 1639 static int irc_send_im(struct gaim_connection *gc, char *who, char *what, int len, int flags) |
| 1617 { | 1640 { |
| 1618 if (*who == '@' || *who == '+') | 1641 if (*who == '@' || *who == '+') |
| 1619 return send_msg(gc, who + 1, what); | 1642 return send_msg(gc, who + 1, what); |
| 1620 return send_msg(gc, who, what); | 1643 return send_msg(gc, who, what); |
| 1621 } | 1644 } |
| 1785 chat->inpa = | 1808 chat->inpa = |
| 1786 gaim_input_add (chat->fd, GAIM_INPUT_READ, dcc_chat_connected, | 1809 gaim_input_add (chat->fd, GAIM_INPUT_READ, dcc_chat_connected, |
| 1787 chat); | 1810 chat); |
| 1788 snprintf (buf, sizeof buf, "\001DCC CHAT chat %s %d\001\n", | 1811 snprintf (buf, sizeof buf, "\001DCC CHAT chat %s %d\001\n", |
| 1789 chat->ip_address, chat->port); | 1812 chat->ip_address, chat->port); |
| 1790 irc_send_im (gc, who, buf, 0); | 1813 irc_send_im (gc, who, buf, -1, 0); |
| 1791 } | 1814 } |
| 1792 | 1815 |
| 1793 static void irc_get_info(struct gaim_connection *gc, char *who) | 1816 static void irc_get_info(struct gaim_connection *gc, char *who) |
| 1794 { | 1817 { |
| 1795 struct irc_data *idata = gc->proto_data; | 1818 struct irc_data *idata = gc->proto_data; |
