From: Christopher (s. O'B. <tal...@us...> - 2006-02-09 19:04:44
|
Update of /cvsroot/gaim/gaim/src/protocols/sametime In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26304/src/protocols/sametime Modified Files: sametime.c Log Message: 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. Index: sametime.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/protocols/sametime/sametime.c,v retrieving revision 1.65 retrieving revision 1.66 diff -u -d -p -r1.65 -r1.66 --- sametime.c 9 Feb 2006 07:47:32 -0000 1.65 +++ sametime.c 9 Feb 2006 19:04:36 -0000 1.66 @@ -393,7 +393,6 @@ static int mw_session_io_write(struct mw 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 @@ static struct mwServiceConference *mw_sr } +/** 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 mw_ft_offered(struct mwFileT 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; + gaim_xfer_update_progress(xfer); - /* ... send data second */ 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 void ft_send(struct mwFileTransfe } -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 @@ static void mw_ft_opened(struct mwFileTr 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 @@ static void mw_ft_closed(struct mwFileTr 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 @@ static void mw_ft_ack(struct mwFileTrans g_return_if_fail(xfer != NULL); g_return_if_fail(xfer->watcher == 0); - gaim_xfer_update_progress(xfer); + if(! mwFileTransfer_getRemaining(ft)) { + gaim_xfer_set_completed(xfer, TRUE); + gaim_xfer_end(xfer); - if(mwFileTransfer_isOpen(ft)) - xfer->watcher = g_idle_add((GSourceFunc)ft_idle_cb, ft); + } else if(mwFileTransfer_isOpen(ft)) { + ft_send(ft, xfer->dest_fp); + } } @@ -4943,6 +4936,8 @@ static void ft_outgoing_init(GaimXfer *x 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_init(GaimXfer *x 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 @@ static GaimXfer *mw_prpl_new_xfer(GaimCo 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; } |