Mercurial > pidgin
comparison src/protocols/toc/toc.c @ 2090:b66aca8e8dce
[gaim-migrate @ 2100]
change ../config.h to <config.h> because that's better. change from GdkInput functions to GaimInput for reasons mentioned elsewhere.
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Tue, 31 Jul 2001 23:23:40 +0000 |
parents | 424a40f12a6c |
children | 56c4382f2909 |
comparison
equal
deleted
inserted
replaced
2089:bb1ddaaf0d26 | 2090:b66aca8e8dce |
---|---|
20 */ | 20 */ |
21 | 21 |
22 | 22 |
23 | 23 |
24 #ifdef HAVE_CONFIG_H | 24 #ifdef HAVE_CONFIG_H |
25 #include "../config.h" | 25 #include <config.h> |
26 #endif | 26 #endif |
27 #include <netdb.h> | 27 #include <netdb.h> |
28 #include <gtk/gtk.h> | 28 #include <gtk/gtk.h> |
29 #include <unistd.h> | 29 #include <unistd.h> |
30 #include <errno.h> | 30 #include <errno.h> |
124 #define USEROPT_AUTHPORT 1 | 124 #define USEROPT_AUTHPORT 1 |
125 | 125 |
126 static GtkWidget *join_chat_spin = NULL; | 126 static GtkWidget *join_chat_spin = NULL; |
127 static GtkWidget *join_chat_entry = NULL; | 127 static GtkWidget *join_chat_entry = NULL; |
128 | 128 |
129 static void toc_login_callback(gpointer, gint, GdkInputCondition); | 129 static void toc_login_callback(gpointer, gint, GaimInputCondition); |
130 static void toc_callback(gpointer, gint, GdkInputCondition); | 130 static void toc_callback(gpointer, gint, GaimInputCondition); |
131 static unsigned char *roast_password(char *); | 131 static unsigned char *roast_password(char *); |
132 static void accept_file_dialog(struct ft_request *); | 132 static void accept_file_dialog(struct ft_request *); |
133 | 133 |
134 /* ok. this function used to take username/password, and return 0 on success. | 134 /* ok. this function used to take username/password, and return 0 on success. |
135 * now, it takes username/password, and returns NULL on error or a new gaim_connection | 135 * now, it takes username/password, and returns NULL on error or a new gaim_connection |
160 signoff(gc); | 160 signoff(gc); |
161 return; | 161 return; |
162 } | 162 } |
163 } | 163 } |
164 | 164 |
165 static void toc_login_callback(gpointer data, gint source, GdkInputCondition cond) | 165 static void toc_login_callback(gpointer data, gint source, GaimInputCondition cond) |
166 { | 166 { |
167 struct gaim_connection *gc = data; | 167 struct gaim_connection *gc = data; |
168 struct toc_data *tdt; | 168 struct toc_data *tdt; |
169 char buf[80]; | 169 char buf[80]; |
170 | 170 |
194 tdt->state = STATE_FLAPON; | 194 tdt->state = STATE_FLAPON; |
195 | 195 |
196 /* i know a lot of people like to look at gaim to see how TOC works. so i'll comment | 196 /* i know a lot of people like to look at gaim to see how TOC works. so i'll comment |
197 * on what this does. it's really simple. when there's data ready to be read from the | 197 * on what this does. it's really simple. when there's data ready to be read from the |
198 * toc_fd file descriptor, toc_callback is called, with gc passed as its data arg. */ | 198 * toc_fd file descriptor, toc_callback is called, with gc passed as its data arg. */ |
199 gc->inpa = gdk_input_add(tdt->toc_fd, GDK_INPUT_READ | GDK_INPUT_EXCEPTION, toc_callback, gc); | 199 gc->inpa = gaim_input_add(tdt->toc_fd, GAIM_INPUT_READ, toc_callback, gc); |
200 | 200 |
201 g_snprintf(buf, sizeof(buf), "Signon: %s", gc->username); | 201 g_snprintf(buf, sizeof(buf), "Signon: %s", gc->username); |
202 set_login_progress(gc, 2, buf); | 202 set_login_progress(gc, 2, buf); |
203 } | 203 } |
204 | 204 |
205 static void toc_close(struct gaim_connection *gc) | 205 static void toc_close(struct gaim_connection *gc) |
206 { | 206 { |
207 if (gc->inpa > 0) | 207 if (gc->inpa > 0) |
208 gdk_input_remove(gc->inpa); | 208 gaim_input_remove(gc->inpa); |
209 gc->inpa = 0; | 209 gc->inpa = 0; |
210 close(((struct toc_data *)gc->proto_data)->toc_fd); | 210 close(((struct toc_data *)gc->proto_data)->toc_fd); |
211 g_free(gc->proto_data); | 211 g_free(gc->proto_data); |
212 } | 212 } |
213 | 213 |
308 return; | 308 return; |
309 | 309 |
310 g_show_info_text(url_text); | 310 g_show_info_text(url_text); |
311 } | 311 } |
312 | 312 |
313 static void toc_callback(gpointer data, gint source, GdkInputCondition condition) | 313 static void toc_callback(gpointer data, gint source, GaimInputCondition condition) |
314 { | 314 { |
315 struct gaim_connection *gc = (struct gaim_connection *)data; | 315 struct gaim_connection *gc = (struct gaim_connection *)data; |
316 struct toc_data *tdt = (struct toc_data *)gc->proto_data; | 316 struct toc_data *tdt = (struct toc_data *)gc->proto_data; |
317 struct sflap_hdr *hdr; | 317 struct sflap_hdr *hdr; |
318 struct signon so; | 318 struct signon so; |
319 char buf[8 * 1024], *c; | 319 char buf[8 * 1024], *c; |
320 char snd[BUF_LEN * 2]; | 320 char snd[BUF_LEN * 2]; |
321 | |
322 if (condition & GDK_INPUT_EXCEPTION) { | |
323 debug_printf("gdk_input exception! check internet connection\n"); | |
324 hide_login_progress(gc, _("Connection Closed")); | |
325 signoff(gc); | |
326 return; | |
327 } | |
328 | 321 |
329 /* there's data waiting to be read, so read it. */ | 322 /* there's data waiting to be read, so read it. */ |
330 if (wait_reply(gc, buf, 8 * 1024) <= 0) { | 323 if (wait_reply(gc, buf, 8 * 1024) <= 0) { |
331 hide_login_progress(gc, _("Connection Closed")); | 324 hide_login_progress(gc, _("Connection Closed")); |
332 signoff(gc); | 325 signoff(gc); |
1409 f->dummy, f->macfileinfo, | 1402 f->dummy, f->macfileinfo, |
1410 ntohs(f->nencode), ntohs(f->nlanguage), | 1403 ntohs(f->nencode), ntohs(f->nlanguage), |
1411 f->name); | 1404 f->name); |
1412 } | 1405 } |
1413 | 1406 |
1414 static void toc_send_file_callback(gpointer data, gint source, GdkInputCondition cond) | 1407 static void toc_send_file_callback(gpointer data, gint source, GaimInputCondition cond) |
1415 { | 1408 { |
1416 char buf[BUF_LONG]; | 1409 char buf[BUF_LONG]; |
1417 int rt, i; | 1410 int rt, i; |
1418 | 1411 |
1419 struct file_transfer *ft = data; | 1412 struct file_transfer *ft = data; |
1420 | |
1421 if (cond & GDK_INPUT_EXCEPTION) { | |
1422 gdk_input_remove(ft->inpa); | |
1423 close(source); | |
1424 g_free(ft->filename); | |
1425 g_free(ft->user); | |
1426 g_free(ft->ip); | |
1427 g_free(ft->cookie); | |
1428 if (ft->file) | |
1429 fclose(ft->file); | |
1430 g_free(ft); | |
1431 return; | |
1432 } | |
1433 | 1413 |
1434 if (ft->hdr.hdrtype != 0x202) { | 1414 if (ft->hdr.hdrtype != 0x202) { |
1435 char *buf; | 1415 char *buf; |
1436 frombase64(ft->cookie, &buf, NULL); | 1416 frombase64(ft->cookie, &buf, NULL); |
1437 | 1417 |
1450 ft->file = fopen(ft->filename, "w"); | 1430 ft->file = fopen(ft->filename, "w"); |
1451 if (!ft->file) { | 1431 if (!ft->file) { |
1452 buf = g_strdup_printf("Could not open %s for writing!", ft->filename); | 1432 buf = g_strdup_printf("Could not open %s for writing!", ft->filename); |
1453 do_error_dialog(buf, _("Error")); | 1433 do_error_dialog(buf, _("Error")); |
1454 g_free(buf); | 1434 g_free(buf); |
1455 gdk_input_remove(ft->inpa); | 1435 gaim_input_remove(ft->inpa); |
1456 close(source); | 1436 close(source); |
1457 g_free(ft->filename); | 1437 g_free(ft->filename); |
1458 g_free(ft->user); | 1438 g_free(ft->user); |
1459 g_free(ft->ip); | 1439 g_free(ft->ip); |
1460 g_free(ft->cookie); | 1440 g_free(ft->cookie); |
1467 if (!ft->file) { | 1447 if (!ft->file) { |
1468 buf = g_strdup_printf("Could not open %s/%s for writing!", ft->filename, | 1448 buf = g_strdup_printf("Could not open %s/%s for writing!", ft->filename, |
1469 ft->hdr.name); | 1449 ft->hdr.name); |
1470 do_error_dialog(buf, _("Error")); | 1450 do_error_dialog(buf, _("Error")); |
1471 g_free(buf); | 1451 g_free(buf); |
1472 gdk_input_remove(ft->inpa); | 1452 gaim_input_remove(ft->inpa); |
1473 close(source); | 1453 close(source); |
1474 g_free(ft->filename); | 1454 g_free(ft->filename); |
1475 g_free(ft->user); | 1455 g_free(ft->user); |
1476 g_free(ft->ip); | 1456 g_free(ft->ip); |
1477 g_free(ft->cookie); | 1457 g_free(ft->cookie); |
1483 } | 1463 } |
1484 | 1464 |
1485 rt = read(source, buf, MIN(ntohl(ft->hdr.size) - ft->recvsize, 1024)); | 1465 rt = read(source, buf, MIN(ntohl(ft->hdr.size) - ft->recvsize, 1024)); |
1486 if (rt < 0) { | 1466 if (rt < 0) { |
1487 do_error_dialog("File transfer failed; other side probably canceled.", "Error"); | 1467 do_error_dialog("File transfer failed; other side probably canceled.", "Error"); |
1488 gdk_input_remove(ft->inpa); | 1468 gaim_input_remove(ft->inpa); |
1489 close(source); | 1469 close(source); |
1490 g_free(ft->user); | 1470 g_free(ft->user); |
1491 g_free(ft->ip); | 1471 g_free(ft->ip); |
1492 g_free(ft->cookie); | 1472 g_free(ft->cookie); |
1493 if (ft->file) | 1473 if (ft->file) |
1509 write(source, ft, 256); | 1489 write(source, ft, 256); |
1510 debug_header(ft); | 1490 debug_header(ft); |
1511 ft->recvsize = 0; | 1491 ft->recvsize = 0; |
1512 fclose(ft->file); | 1492 fclose(ft->file); |
1513 if (ft->hdr.filesleft == 0) { | 1493 if (ft->hdr.filesleft == 0) { |
1514 gdk_input_remove(ft->inpa); | 1494 gaim_input_remove(ft->inpa); |
1515 close(source); | 1495 close(source); |
1516 g_free(ft->filename); | 1496 g_free(ft->filename); |
1517 g_free(ft->user); | 1497 g_free(ft->user); |
1518 g_free(ft->ip); | 1498 g_free(ft->ip); |
1519 g_free(ft->cookie); | 1499 g_free(ft->cookie); |
1520 g_free(ft); | 1500 g_free(ft); |
1521 } | 1501 } |
1522 } | 1502 } |
1523 } | 1503 } |
1524 | 1504 |
1525 static void toc_send_file_connect(gpointer data, gint src, GdkInputCondition cond) | 1505 static void toc_send_file_connect(gpointer data, gint src, GaimInputCondition cond) |
1526 { | 1506 { |
1527 struct file_transfer *ft = data; | 1507 struct file_transfer *ft = data; |
1528 | 1508 |
1529 if (src == -1) { | 1509 if (src == -1) { |
1530 do_error_dialog(_("Could not connect for transfer!"), _("Error")); | 1510 do_error_dialog(_("Could not connect for transfer!"), _("Error")); |
1534 g_free(ft->ip); | 1514 g_free(ft->ip); |
1535 g_free(ft); | 1515 g_free(ft); |
1536 return; | 1516 return; |
1537 } | 1517 } |
1538 | 1518 |
1539 ft->inpa = gdk_input_add(src, GDK_INPUT_READ | GDK_INPUT_EXCEPTION, toc_send_file_callback, ft); | 1519 ft->inpa = gaim_input_add(src, GAIM_INPUT_READ, toc_send_file_callback, ft); |
1540 } | 1520 } |
1541 | 1521 |
1542 static void toc_send_file(gpointer a, struct file_transfer *old_ft) | 1522 static void toc_send_file(gpointer a, struct file_transfer *old_ft) |
1543 { | 1523 { |
1544 struct file_transfer *ft; | 1524 struct file_transfer *ft; |
1577 g_free(ft); | 1557 g_free(ft); |
1578 return; | 1558 return; |
1579 } | 1559 } |
1580 } | 1560 } |
1581 | 1561 |
1582 static void toc_get_file_callback(gpointer data, gint source, GdkInputCondition cond) | 1562 static void toc_get_file_callback(gpointer data, gint source, GaimInputCondition cond) |
1583 { | 1563 { |
1584 char buf[BUF_LONG]; | 1564 char buf[BUF_LONG]; |
1585 | 1565 |
1586 struct file_transfer *ft = data; | 1566 struct file_transfer *ft = data; |
1587 | 1567 |
1588 if (cond & GDK_INPUT_EXCEPTION) { | 1568 if (cond & GAIM_INPUT_WRITE) { |
1589 do_error_dialog("The file tranfer has been aborted; the other side most likely" | |
1590 " cancelled.", "Error"); | |
1591 gdk_input_remove(ft->inpa); | |
1592 close(source); | |
1593 g_free(ft->filename); | |
1594 g_free(ft->user); | |
1595 g_free(ft->ip); | |
1596 g_free(ft->cookie); | |
1597 if (ft->file) | |
1598 fclose(ft->file); | |
1599 g_free(ft); | |
1600 return; | |
1601 } | |
1602 | |
1603 if (cond & GDK_INPUT_WRITE) { | |
1604 int remain = MIN(ntohl(ft->hdr.totsize) - ft->recvsize, 1024); | 1569 int remain = MIN(ntohl(ft->hdr.totsize) - ft->recvsize, 1024); |
1605 int i; | 1570 int i; |
1606 for (i = 0; i < remain; i++) | 1571 for (i = 0; i < remain; i++) |
1607 fscanf(ft->file, "%c", &buf[i]); | 1572 fscanf(ft->file, "%c", &buf[i]); |
1608 write(source, buf, remain); | 1573 write(source, buf, remain); |
1609 ft->recvsize += remain; | 1574 ft->recvsize += remain; |
1610 if (ft->recvsize == ntohl(ft->hdr.totsize)) { | 1575 if (ft->recvsize == ntohl(ft->hdr.totsize)) { |
1611 gdk_input_remove(ft->inpa); | 1576 gaim_input_remove(ft->inpa); |
1612 ft->inpa = gdk_input_add(source, GDK_INPUT_READ | GDK_INPUT_EXCEPTION, | 1577 ft->inpa = gaim_input_add(source, GAIM_INPUT_READ, |
1613 toc_get_file_callback, ft); | 1578 toc_get_file_callback, ft); |
1614 } | 1579 } |
1615 return; | 1580 return; |
1616 } | 1581 } |
1617 | 1582 |
1646 debug_header(ft); | 1611 debug_header(ft); |
1647 | 1612 |
1648 if (ft->hdr.hdrtype != htons(0x120c)) { | 1613 if (ft->hdr.hdrtype != htons(0x120c)) { |
1649 g_snprintf(buf, sizeof(buf), "%s decided to cancel the transfer", ft->user); | 1614 g_snprintf(buf, sizeof(buf), "%s decided to cancel the transfer", ft->user); |
1650 do_error_dialog(buf, "Error"); | 1615 do_error_dialog(buf, "Error"); |
1651 gdk_input_remove(ft->inpa); | 1616 gaim_input_remove(ft->inpa); |
1652 close(source); | 1617 close(source); |
1653 g_free(ft->filename); | 1618 g_free(ft->filename); |
1654 g_free(ft->user); | 1619 g_free(ft->user); |
1655 g_free(ft->ip); | 1620 g_free(ft->ip); |
1656 g_free(ft->cookie); | 1621 g_free(ft->cookie); |
1670 if (ft->hdr.hdrtype == 0x0101) { | 1635 if (ft->hdr.hdrtype == 0x0101) { |
1671 read(source, ft, 8); | 1636 read(source, ft, 8); |
1672 read(source, &ft->hdr.bcookie, MIN(256 - 8, ntohs(ft->hdr.hdrlen) - 8)); | 1637 read(source, &ft->hdr.bcookie, MIN(256 - 8, ntohs(ft->hdr.hdrlen) - 8)); |
1673 debug_header(ft); | 1638 debug_header(ft); |
1674 | 1639 |
1675 gdk_input_remove(ft->inpa); | 1640 gaim_input_remove(ft->inpa); |
1676 ft->inpa = gdk_input_add(source, GDK_INPUT_WRITE | GDK_INPUT_EXCEPTION, | 1641 ft->inpa = gaim_input_add(source, GAIM_INPUT_WRITE, |
1677 toc_get_file_callback, ft); | 1642 toc_get_file_callback, ft); |
1678 return; | 1643 return; |
1679 } | 1644 } |
1680 | 1645 |
1681 if (ft->hdr.hdrtype == 0x0202) { | 1646 if (ft->hdr.hdrtype == 0x0202) { |
1682 read(source, ft, 8); | 1647 read(source, ft, 8); |
1683 read(source, &ft->hdr.bcookie, MIN(256 - 8, ntohs(ft->hdr.hdrlen) - 8)); | 1648 read(source, &ft->hdr.bcookie, MIN(256 - 8, ntohs(ft->hdr.hdrlen) - 8)); |
1684 debug_header(ft); | 1649 debug_header(ft); |
1685 | 1650 |
1686 gdk_input_remove(ft->inpa); | 1651 gaim_input_remove(ft->inpa); |
1687 close(source); | 1652 close(source); |
1688 g_free(ft->filename); | 1653 g_free(ft->filename); |
1689 g_free(ft->user); | 1654 g_free(ft->user); |
1690 g_free(ft->ip); | 1655 g_free(ft->ip); |
1691 g_free(ft->cookie); | 1656 g_free(ft->cookie); |
1694 g_free(ft); | 1659 g_free(ft); |
1695 return; | 1660 return; |
1696 } | 1661 } |
1697 } | 1662 } |
1698 | 1663 |
1699 static void toc_get_file_connect(gpointer data, gint src, GdkInputCondition cond) | 1664 static void toc_get_file_connect(gpointer data, gint src, GaimInputCondition cond) |
1700 { | 1665 { |
1701 struct file_transfer *ft = data; | 1666 struct file_transfer *ft = data; |
1702 struct file_header *hdr; | 1667 struct file_header *hdr; |
1703 char *buf; | 1668 char *buf; |
1704 | 1669 |
1741 g_free(ft->ip); | 1706 g_free(ft->ip); |
1742 g_free(ft); | 1707 g_free(ft); |
1743 return; | 1708 return; |
1744 } | 1709 } |
1745 | 1710 |
1746 ft->inpa = gdk_input_add(src, GDK_INPUT_READ | GDK_INPUT_EXCEPTION, toc_get_file_callback, ft); | 1711 ft->inpa = gaim_input_add(src, GAIM_INPUT_READ, toc_get_file_callback, ft); |
1747 } | 1712 } |
1748 | 1713 |
1749 static void toc_get_file(gpointer a, struct file_transfer *old_ft) | 1714 static void toc_get_file(gpointer a, struct file_transfer *old_ft) |
1750 { | 1715 { |
1751 struct file_transfer *ft; | 1716 struct file_transfer *ft; |