# HG changeset patch # User Christopher O'Brien # Date 1139511876 0 # Node ID 8facf33a528ab9d70466f07eb6d9b7ee38926570 # Parent 0c4db52c6a3d239a260af4189f6ac7857681cd12 [gaim-migrate @ 15571] quiet some debugging. fixes in outgoing file transfers so that they'll show as complete (this is actualy a bug in Meanwhile, but I'm in the middle of a large rewrite right now). hopefully this will speed up sametime ft for some people, too. Or it could just consume more server resources and make everyone hate me, I dunno. committer: Tailor Script diff -r 0c4db52c6a3d -r 8facf33a528a src/protocols/sametime/sametime.c --- a/src/protocols/sametime/sametime.c Thu Feb 09 14:06:10 2006 +0000 +++ b/src/protocols/sametime/sametime.c Thu Feb 09 19:04:36 2006 +0000 @@ -393,7 +393,6 @@ while(len) { ret = write(pd->socket, buf, (len > BUF_LEN)? BUF_LEN: len); - DEBUG_INFO("wrote %i bytes in one turn\n", ret); if(ret <= 0) break; @@ -2025,6 +2024,10 @@ } +/** size of an outgoing file transfer chunk */ +#define MW_FT_LEN (BUF_LONG * 2) + + static void ft_incoming_cancel(GaimXfer *xfer) { /* incoming transfer rejected or canceled in-progress */ struct mwFileTransfer *ft = xfer->data; @@ -2104,28 +2107,28 @@ static void ft_send(struct mwFileTransfer *ft, FILE *fp) { - guchar buf[BUF_LONG]; - struct mwOpaque o = { .data = buf, .len = BUF_LONG }; + guchar buf[MW_FT_LEN]; + struct mwOpaque o = { .data = buf, .len = MW_FT_LEN }; guint32 rem; GaimXfer *xfer; xfer = mwFileTransfer_getClientData(ft); rem = mwFileTransfer_getRemaining(ft); - if(rem < BUF_LONG) o.len = rem; + if(rem < MW_FT_LEN) o.len = rem; if(fread(buf, (size_t) o.len, 1, fp)) { - /* calculate progress first. update is displayed upon ack */ + /* calculate progress and display it */ xfer->bytes_sent += o.len; xfer->bytes_remaining -= o.len; - - /* ... send data second */ + gaim_xfer_update_progress(xfer); + mwFileTransfer_send(ft, &o); } else { int err = errno; - DEBUG_WARN("problem reading from file %s: %s", + DEBUG_WARN("problem reading from file %s: %s\n", NSTR(mwFileTransfer_getFileName(ft)), strerror(err)); mwFileTransfer_cancel(ft); @@ -2133,17 +2136,6 @@ } -static gboolean ft_idle_cb(struct mwFileTransfer *ft) { - GaimXfer *xfer = mwFileTransfer_getClientData(ft); - g_return_val_if_fail(xfer != NULL, FALSE); - - xfer->watcher = 0; - ft_send(ft, xfer->dest_fp); - - return FALSE; -} - - static void mw_ft_opened(struct mwFileTransfer *ft) { /* - get gaim ft from client data in ft @@ -2160,11 +2152,9 @@ g_return_if_reached(); } - gaim_xfer_update_progress(xfer); - if(gaim_xfer_get_type(xfer) == GAIM_XFER_SEND) { - xfer->watcher = g_idle_add((GSourceFunc)ft_idle_cb, ft); xfer->dest_fp = g_fopen(xfer->local_filename, "rb"); + ft_send(ft, xfer->dest_fp); } } @@ -2182,7 +2172,7 @@ if(xfer) { xfer->data = NULL; - if(mwFileTransfer_isDone(ft)) { + if(! mwFileTransfer_getRemaining(ft)) { gaim_xfer_set_completed(xfer, TRUE); gaim_xfer_end(xfer); @@ -2243,10 +2233,13 @@ g_return_if_fail(xfer != NULL); g_return_if_fail(xfer->watcher == 0); - gaim_xfer_update_progress(xfer); - - if(mwFileTransfer_isOpen(ft)) - xfer->watcher = g_idle_add((GSourceFunc)ft_idle_cb, ft); + if(! mwFileTransfer_getRemaining(ft)) { + gaim_xfer_set_completed(xfer, TRUE); + gaim_xfer_end(xfer); + + } else if(mwFileTransfer_isOpen(ft)) { + ft_send(ft, xfer->dest_fp); + } } @@ -4943,6 +4936,8 @@ filesize = gaim_xfer_get_size(xfer); idb.user = xfer->who; + gaim_xfer_update_progress(xfer); + /* test that we can actually send the file */ fp = g_fopen(filename, "rb"); if(! fp) { @@ -4971,6 +4966,9 @@ static void ft_outgoing_cancel(GaimXfer *xfer) { struct mwFileTransfer *ft = xfer->data; + + DEBUG_INFO("ft_outgoing_cancel called\n"); + if(ft) mwFileTransfer_cancel(ft); } @@ -4984,7 +4982,7 @@ xfer = gaim_xfer_new(acct, GAIM_XFER_SEND, who); gaim_xfer_set_init_fnc(xfer, ft_outgoing_init); gaim_xfer_set_cancel_send_fnc(xfer, ft_outgoing_cancel); - + return xfer; }