Mercurial > pidgin
comparison src/protocols/oscar/oscar.c @ 3771:765769211688
[gaim-migrate @ 3910]
More FT cleanups by Wil Mahan. Thanks, Wil.
committer: Tailor Script <tailor@pidgin.im>
author | Rob Flynn <gaim@robflynn.com> |
---|---|
date | Sun, 20 Oct 2002 23:46:56 +0000 |
parents | f53370197bb9 |
children | a3aca202aa04 |
comparison
equal
deleted
inserted
replaced
3770:a72e303e6f5c | 3771:765769211688 |
---|---|
51 #include "aim.h" | 51 #include "aim.h" |
52 #include "proxy.h" | 52 #include "proxy.h" |
53 | 53 |
54 #ifdef _WIN32 | 54 #ifdef _WIN32 |
55 #include "win32dep.h" | 55 #include "win32dep.h" |
56 #define NOSIGALARM | |
57 #endif | 56 #endif |
58 | 57 |
59 #include "pixmaps/protocols/oscar/ab.xpm" | 58 #include "pixmaps/protocols/oscar/ab.xpm" |
60 #include "pixmaps/protocols/oscar/admin_icon.xpm" | 59 #include "pixmaps/protocols/oscar/admin_icon.xpm" |
61 #include "pixmaps/protocols/oscar/aol_icon.xpm" | 60 #include "pixmaps/protocols/oscar/aol_icon.xpm" |
375 static int gaim_update_ui (aim_session_t *, aim_frame_t *, ...); | 374 static int gaim_update_ui (aim_session_t *, aim_frame_t *, ...); |
376 | 375 |
377 static int oscar_file_transfer_do(aim_session_t *, aim_frame_t *, ...); | 376 static int oscar_file_transfer_do(aim_session_t *, aim_frame_t *, ...); |
378 static void oscar_file_transfer_disconnect(aim_session_t *, | 377 static void oscar_file_transfer_disconnect(aim_session_t *, |
379 aim_conn_t *); | 378 aim_conn_t *); |
380 static void oscar_cancel_transfer(struct gaim_connection *, | 379 static void oscar_file_transfer_cancel(struct gaim_connection *, |
381 struct file_transfer *); | 380 struct file_transfer *); |
382 static int oscar_sendfile_request(aim_session_t *sess, | 381 static int oscar_sendfile_request(aim_session_t *sess, |
383 struct oscar_file_transfer *oft); | 382 struct oscar_file_transfer *oft); |
384 static int oscar_sendfile_timeout(aim_session_t *sess, aim_frame_t *fr, ...); | 383 static int oscar_sendfile_timeout(aim_session_t *sess, aim_frame_t *fr, ...); |
385 | 384 |
1538 /* Stop watching listener conn; watch transfer conn instead */ | 1537 /* Stop watching listener conn; watch transfer conn instead */ |
1539 gaim_input_remove(oft->watcher); | 1538 gaim_input_remove(oft->watcher); |
1540 aim_conn_kill(sess, &listenerconn); | 1539 aim_conn_kill(sess, &listenerconn); |
1541 | 1540 |
1542 aim_conn_addhandler(od->sess, oft->conn, AIM_CB_FAM_OFT, | 1541 aim_conn_addhandler(od->sess, oft->conn, AIM_CB_FAM_OFT, |
1543 AIM_CB_OFT_GETFILEFILESEND, | 1542 AIM_CB_OFT_SENDFILEFILESEND, |
1544 oscar_file_transfer_do, | 1543 oscar_file_transfer_do, |
1545 0); | 1544 0); |
1546 aim_conn_addhandler(sess, conn, | 1545 aim_conn_addhandler(sess, conn, |
1547 AIM_CB_FAM_OFT, | 1546 AIM_CB_FAM_OFT, |
1548 AIM_CB_OFT_GETFILECOMPLETE, | 1547 AIM_CB_OFT_SENDFILECOMPLETE, |
1549 oscar_sendfile_out_done, | 1548 oscar_sendfile_out_done, |
1550 0); | 1549 0); |
1551 oft->watcher = gaim_input_add(oft->conn->fd, GAIM_INPUT_READ, | 1550 oft->watcher = gaim_input_add(oft->conn->fd, GAIM_INPUT_READ, |
1552 oscar_callback, oft->conn); | 1551 oscar_callback, oft->conn); |
1553 | 1552 |
1578 | 1577 |
1579 return 1; /* success */ | 1578 return 1; /* success */ |
1580 } | 1579 } |
1581 | 1580 |
1582 /* Called once at the beginning of an outgoing transfer session. */ | 1581 /* Called once at the beginning of an outgoing transfer session. */ |
1583 static void oscar_start_transfer_out(struct gaim_connection *gc, | 1582 static void oscar_file_transfer_out(struct gaim_connection *gc, |
1584 struct file_transfer *xfer, const char *name, int totfiles, | 1583 struct file_transfer *xfer, const char *name, int totfiles, |
1585 int totsize) { | 1584 int totsize) { |
1586 struct oscar_data *od = (struct oscar_data *)gc->proto_data; | 1585 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
1587 struct oscar_file_transfer *oft = find_oft_by_xfer(gc, xfer); | 1586 struct oscar_file_transfer *oft = find_oft_by_xfer(gc, xfer); |
1588 | 1587 |
1599 GAIM_ERROR); | 1598 GAIM_ERROR); |
1600 return; | 1599 return; |
1601 } | 1600 } |
1602 | 1601 |
1603 aim_conn_addhandler(od->sess, oft->conn, AIM_CB_FAM_OFT, | 1602 aim_conn_addhandler(od->sess, oft->conn, AIM_CB_FAM_OFT, |
1604 AIM_CB_OFT_GETFILEINITIATE, | 1603 AIM_CB_OFT_SENDFILEINITIATE, |
1605 oscar_sendfile_accepted, | 1604 oscar_sendfile_accepted, |
1606 0); | 1605 0); |
1607 oft->watcher = gaim_input_add(oft->conn->fd, GAIM_INPUT_READ, | 1606 oft->watcher = gaim_input_add(oft->conn->fd, GAIM_INPUT_READ, |
1608 oscar_callback, oft->conn); | 1607 oscar_callback, oft->conn); |
1609 } | 1608 } |
1610 | 1609 |
1611 static void oscar_transfer_data_chunk(struct gaim_connection *gc, | 1610 static void oscar_file_transfer_data_chunk(struct gaim_connection *gc, |
1612 struct file_transfer *xfer, const char *buf, int len) | 1611 struct file_transfer *xfer, const char *buf, int len) |
1613 { | 1612 { |
1614 struct oscar_file_transfer *oft = find_oft_by_xfer(gc, xfer); | 1613 struct oscar_file_transfer *oft = find_oft_by_xfer(gc, xfer); |
1615 aim_session_t *sess = aim_conn_getsess(oft->conn); | 1614 aim_session_t *sess = aim_conn_getsess(oft->conn); |
1616 | 1615 |
1617 if (oft->type == OFT_SENDFILE_IN) | 1616 if (oft->type == OFT_SENDFILE_IN) |
1618 aim_update_checksum(sess, oft->conn, buf, len); | 1617 aim_update_checksum(sess, oft->conn, buf, len); |
1619 } | 1618 } |
1620 | 1619 |
1621 static void oscar_start_transfer_in(struct gaim_connection *gc, | 1620 static void oscar_file_transfer_in(struct gaim_connection *gc, |
1622 struct file_transfer *xfer, int offset) { | 1621 struct file_transfer *xfer, int offset) { |
1623 struct oscar_data *od = (struct oscar_data *)gc->proto_data; | 1622 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
1624 struct oscar_file_transfer *oft = find_oft_by_xfer(gc, xfer); | 1623 struct oscar_file_transfer *oft = find_oft_by_xfer(gc, xfer); |
1625 | 1624 |
1626 oft->xfer = xfer; | 1625 oft->xfer = xfer; |
1634 g_free(buf); | 1633 g_free(buf); |
1635 return; | 1634 return; |
1636 } | 1635 } |
1637 | 1636 |
1638 aim_conn_addhandler(od->sess, oft->conn, AIM_CB_FAM_OFT, | 1637 aim_conn_addhandler(od->sess, oft->conn, AIM_CB_FAM_OFT, |
1639 AIM_CB_OFT_GETFILEFILEREQ, oscar_file_transfer_do, | 1638 AIM_CB_OFT_SENDFILEFILEREQ, oscar_file_transfer_do, |
1640 0); | 1639 0); |
1641 | 1640 |
1642 oft->watcher = gaim_input_add(oft->conn->fd, GAIM_INPUT_READ, | 1641 oft->watcher = gaim_input_add(oft->conn->fd, GAIM_INPUT_READ, |
1643 oscar_callback, oft->conn); | 1642 oscar_callback, oft->conn); |
1644 } | 1643 } |
1645 | 1644 |
1646 static void oscar_cancel_transfer(struct gaim_connection *gc, | 1645 static void oscar_file_transfer_cancel(struct gaim_connection *gc, |
1647 struct file_transfer *xfer) { | 1646 struct file_transfer *xfer) { |
1648 struct oscar_data *od = (struct oscar_data *)gc->proto_data; | 1647 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
1649 struct oscar_file_transfer *oft = find_oft_by_xfer(gc, xfer); | 1648 struct oscar_file_transfer *oft = find_oft_by_xfer(gc, xfer); |
1650 | 1649 |
1651 if (oft->type == OFT_SENDFILE_IN) | 1650 if (oft->type == OFT_SENDFILE_IN) |
1890 | 1889 |
1891 oscar_sendfile_request(sess, oft); | 1890 oscar_sendfile_request(sess, oft); |
1892 | 1891 |
1893 aim_conn_addhandler(sess, oft->conn, | 1892 aim_conn_addhandler(sess, oft->conn, |
1894 AIM_CB_FAM_OFT, | 1893 AIM_CB_FAM_OFT, |
1895 AIM_CB_OFT_GETFILECOMPLETE, | 1894 AIM_CB_OFT_SENDFILECOMPLETE, |
1896 oscar_sendfile_out_done, | 1895 oscar_sendfile_out_done, |
1897 0); | 1896 0); |
1898 aim_conn_addhandler(sess, oft->conn, | 1897 aim_conn_addhandler(sess, oft->conn, |
1899 AIM_CB_FAM_OFT, | 1898 AIM_CB_FAM_OFT, |
1900 AIM_CB_OFT_GETFILEFILESEND, | 1899 AIM_CB_OFT_SENDFILEFILESEND, |
1901 oscar_file_transfer_do, | 1900 oscar_file_transfer_do, |
1902 0); | 1901 0); |
1903 oft->watcher = gaim_input_add(oft->conn->fd, | 1902 oft->watcher = gaim_input_add(oft->conn->fd, |
1904 GAIM_INPUT_READ, oscar_callback, | 1903 GAIM_INPUT_READ, oscar_callback, |
1905 oft->conn); | 1904 oft->conn); |
4136 if (uc & UC_NORMAL) | 4135 if (uc & UC_NORMAL) |
4137 return (char **)free_icon_xpm; | 4136 return (char **)free_icon_xpm; |
4138 return NULL; | 4137 return NULL; |
4139 } | 4138 } |
4140 | 4139 |
4141 void oscar_transfer_nextfile(struct gaim_connection *gc, | 4140 void oscar_file_transfer_nextfile(struct gaim_connection *gc, |
4142 struct file_transfer *xfer) { | 4141 struct file_transfer *xfer) { |
4143 struct oscar_file_transfer *oft = find_oft_by_xfer(gc, xfer); | 4142 struct oscar_file_transfer *oft = find_oft_by_xfer(gc, xfer); |
4144 aim_conn_t *conn = oft->conn; | 4143 aim_conn_t *conn = oft->conn; |
4145 aim_session_t *sess = aim_conn_getsess(conn); | 4144 aim_session_t *sess = aim_conn_getsess(conn); |
4146 | 4145 |
4157 | 4156 |
4158 if (oft->type == OFT_SENDFILE_IN) | 4157 if (oft->type == OFT_SENDFILE_IN) |
4159 aim_oft_end(sess, conn); | 4158 aim_oft_end(sess, conn); |
4160 } | 4159 } |
4161 | 4160 |
4162 void oscar_transfer_done(struct gaim_connection *gc, | 4161 void oscar_file_transfer_done(struct gaim_connection *gc, |
4163 struct file_transfer *xfer) { | 4162 struct file_transfer *xfer) { |
4164 struct oscar_file_transfer *oft = find_oft_by_xfer(gc, xfer); | 4163 struct oscar_file_transfer *oft = find_oft_by_xfer(gc, xfer); |
4165 aim_conn_t *conn = oft->conn; | 4164 aim_conn_t *conn = oft->conn; |
4166 aim_session_t *sess = aim_conn_getsess(conn); | 4165 aim_session_t *sess = aim_conn_getsess(conn); |
4167 | 4166 |
4180 static int oscar_file_transfer_do(aim_session_t *sess, aim_frame_t *fr, ...) { | 4179 static int oscar_file_transfer_do(aim_session_t *sess, aim_frame_t *fr, ...) { |
4181 struct gaim_connection *gc = sess->aux_data; | 4180 struct gaim_connection *gc = sess->aux_data; |
4182 va_list ap; | 4181 va_list ap; |
4183 aim_conn_t *conn; | 4182 aim_conn_t *conn; |
4184 struct oscar_file_transfer *oft; | 4183 struct oscar_file_transfer *oft; |
4184 struct aim_fileheader_t *fh; | |
4185 int err; | 4185 int err; |
4186 | 4186 |
4187 va_start(ap, fr); | 4187 va_start(ap, fr); |
4188 conn = va_arg(ap, aim_conn_t *); | 4188 conn = va_arg(ap, aim_conn_t *); |
4189 fh = va_arg(ap, struct aim_fileheader_t *); | |
4190 va_end(ap); | |
4189 | 4191 |
4190 oft = find_oft_by_conn(gc, conn); | 4192 oft = find_oft_by_conn(gc, conn); |
4191 | 4193 |
4192 /* Don't use the regular input handler for the raw data. */ | 4194 /* Don't use the regular input handler for the raw data. */ |
4193 gaim_input_remove(oft->watcher); | 4195 gaim_input_remove(oft->watcher); |
4194 oft->watcher = 0; | 4196 oft->watcher = 0; |
4195 | 4197 |
4196 if (oft->type == OFT_SENDFILE_IN) { | 4198 if (oft->type == OFT_SENDFILE_IN) { |
4197 const char *name = va_arg(ap, const char *); | 4199 err = transfer_in_do(oft->xfer, conn->fd, |
4198 int size = va_arg(ap, int); | 4200 fh->name, fh->size); |
4199 err = transfer_in_do(oft->xfer, conn->fd, name, size); | |
4200 } | 4201 } |
4201 else { | 4202 else { |
4202 int offset = va_arg(ap, int); | 4203 err = transfer_out_do(oft->xfer, conn->fd, fh->nrecvd); |
4203 err = transfer_out_do(oft->xfer, conn->fd, offset); | 4204 } |
4204 } | |
4205 va_end(ap); | |
4206 | 4205 |
4207 if (err) { | 4206 if (err) { |
4208 /* There was an error; cancel the transfer. */ | 4207 /* There was an error; cancel the transfer. */ |
4209 struct oscar_data *od = (struct oscar_data *)gc->proto_data; | 4208 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
4210 aim_conn_t *bosconn = od->conn; | 4209 aim_conn_t *bosconn = od->conn; |
4723 ret->change_passwd = oscar_change_passwd; | 4722 ret->change_passwd = oscar_change_passwd; |
4724 ret->add_buddy = oscar_add_buddy; | 4723 ret->add_buddy = oscar_add_buddy; |
4725 ret->add_buddies = oscar_add_buddies; | 4724 ret->add_buddies = oscar_add_buddies; |
4726 ret->group_buddy = oscar_move_buddy; | 4725 ret->group_buddy = oscar_move_buddy; |
4727 ret->rename_group = oscar_rename_group; | 4726 ret->rename_group = oscar_rename_group; |
4728 ret->file_transfer_cancel = oscar_cancel_transfer; | 4727 ret->file_transfer_cancel = oscar_file_transfer_cancel; |
4729 ret->file_transfer_in = oscar_start_transfer_in; | 4728 ret->file_transfer_in = oscar_file_transfer_in; |
4730 ret->file_transfer_out = oscar_start_transfer_out; | 4729 ret->file_transfer_out = oscar_file_transfer_out; |
4731 ret->file_transfer_data_chunk = oscar_transfer_data_chunk; | 4730 ret->file_transfer_data_chunk = oscar_file_transfer_data_chunk; |
4732 ret->file_transfer_nextfile = oscar_transfer_nextfile; | 4731 ret->file_transfer_nextfile = oscar_file_transfer_nextfile; |
4733 ret->file_transfer_done = oscar_transfer_done; | 4732 ret->file_transfer_done = oscar_file_transfer_done; |
4734 ret->remove_buddy = oscar_remove_buddy; | 4733 ret->remove_buddy = oscar_remove_buddy; |
4735 ret->remove_buddies = oscar_remove_buddies; | 4734 ret->remove_buddies = oscar_remove_buddies; |
4736 ret->add_permit = oscar_add_permit; | 4735 ret->add_permit = oscar_add_permit; |
4737 ret->add_deny = oscar_add_deny; | 4736 ret->add_deny = oscar_add_deny; |
4738 ret->rem_permit = oscar_rem_permit; | 4737 ret->rem_permit = oscar_rem_permit; |