Mercurial > pidgin
changeset 30675:a4c45a92938d
propagate from branch 'im.pidgin.pidgin' (head 780ee14f6ced21de7257b3149c186223ab446d57)
to branch 'im.pidgin.cpw.qulogic.msnp16' (head 040f73ee06fdd19f6321c3dbd2ab760a9be3feef)
author | Elliott Sales de Andrade <qulogic@pidgin.im> |
---|---|
date | Mon, 14 Dec 2009 07:11:03 +0000 |
parents | 88a3135c5a23 (current diff) 139aa186e8cc (diff) |
children | 43cf75e21702 |
files | |
diffstat | 3 files changed, 43 insertions(+), 26 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Mon Dec 14 03:26:44 2009 +0000 +++ b/ChangeLog Mon Dec 14 07:11:03 2009 +0000 @@ -8,6 +8,12 @@ * Messages from some mobile clients are no longer displayed as Chinese characters (broken in 2.6.4) + MSN: + * File transfer requests will no longer cause a crash if you delete the file + before the other side accepts. + * Recieved files will no longer hold an extra lock after completion, meaning + they can be moved or deleted without complaints from your OS. + XMPP: * Added support for the SCRAM-SHA-1 SASL mechanism. This is only available when built without Cyrus SASL support.
--- a/libpurple/protocols/msn/slp.c Mon Dec 14 03:26:44 2009 +0000 +++ b/libpurple/protocols/msn/slp.c Mon Dec 14 07:11:03 2009 +0000 @@ -96,8 +96,6 @@ g_free(content); msn_slplink_send_queued_slpmsgs(slpcall->slplink); - - purple_xfer_start(xfer, -1, NULL, 0); } void @@ -128,7 +126,10 @@ g_free(content); msn_slplink_send_queued_slpmsgs(slpcall->slplink); - msn_slpcall_destroy(slpcall); + if (purple_xfer_get_type(xfer) == PURPLE_XFER_SEND) + slpcall->wasted = TRUE; + else + msn_slpcall_destroy(slpcall); } } }
--- a/libpurple/protocols/msn/slplink.c Mon Dec 14 03:26:44 2009 +0000 +++ b/libpurple/protocols/msn/slplink.c Mon Dec 14 07:11:03 2009 +0000 @@ -454,20 +454,22 @@ send_file_cb(MsnSlpCall *slpcall) { MsnSlpMessage *slpmsg; - struct stat st; PurpleXfer *xfer; + xfer = (PurpleXfer *)slpcall->xfer; + purple_xfer_ref(xfer); + purple_xfer_start(xfer, -1, NULL, 0); + if (purple_xfer_get_status(xfer) != PURPLE_XFER_STATUS_STARTED) { + purple_xfer_unref(xfer); + return; + } + purple_xfer_unref(xfer); + slpmsg = msn_slpmsg_new(slpcall->slplink); slpmsg->slpcall = slpcall; slpmsg->flags = 0x1000030; slpmsg->info = "SLP FILE"; - - xfer = (PurpleXfer *)slpcall->xfer; - purple_xfer_start(slpcall->xfer, -1, NULL, 0); - if (g_stat(purple_xfer_get_local_filename(xfer), &st) == 0) - slpmsg->size = st.st_size; - else if (purple_xfer_get_size(xfer)) - slpmsg->size = purple_xfer_get_size(xfer); + slpmsg->size = purple_xfer_get_size(xfer); msn_slplink_send_slpmsg(slpcall->slplink, slpmsg); } @@ -620,29 +622,37 @@ slpcall = msn_slp_process_msg(slplink, slpmsg); - if (slpmsg->flags == 0x100) - { - MsnDirectConn *directconn; + if (slpcall == NULL) { + msn_slpmsg_destroy(slpmsg); + return; + } - directconn = slplink->directconn; + if (!slpcall->wasted) { + if (slpmsg->flags == 0x100) + { + MsnDirectConn *directconn; + + directconn = slplink->directconn; #if 0 - if (!directconn->acked) - msn_directconn_send_handshake(directconn); + if (!directconn->acked) + msn_directconn_send_handshake(directconn); #endif - } - else if (slpmsg->flags == 0x00 || slpmsg->flags == 0x1000000 || - slpmsg->flags == 0x20 || slpmsg->flags == 0x1000020 || - slpmsg->flags == 0x1000030) - { - /* Release all the messages and send the ACK */ + } + else if (slpmsg->flags == 0x00 || slpmsg->flags == 0x1000000 || + slpmsg->flags == 0x20 || slpmsg->flags == 0x1000020 || + slpmsg->flags == 0x1000030) + { + /* Release all the messages and send the ACK */ - msn_slplink_send_ack(slplink, msg); - msn_slplink_send_queued_slpmsgs(slplink); + msn_slplink_send_ack(slplink, msg); + msn_slplink_send_queued_slpmsgs(slplink); + } + } msn_slpmsg_destroy(slpmsg); - if (slpcall != NULL && slpcall->wasted) + if (slpcall->wasted) msn_slpcall_destroy(slpcall); } }