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;