# HG changeset patch # User Paul Aurich # Date 1247682457 0 # Node ID 97eb110550ada5a755402c8dec504da6af89414d # Parent 636c3b6c9cc70826dfcb7a3af600dd72a085d01a Properly send rejection to initiator if we reject a transfer. diff -r 636c3b6c9cc7 -r 97eb110550ad libpurple/protocols/jabber/si.c --- a/libpurple/protocols/jabber/si.c Wed Jul 15 17:57:08 2009 +0000 +++ b/libpurple/protocols/jabber/si.c Wed Jul 15 18:27:37 2009 +0000 @@ -1379,6 +1379,31 @@ static void jabber_si_xfer_request_denied(PurpleXfer *xfer) { + JabberSIXfer *jsx = (JabberSIXfer *) xfer->data; + JabberStream *js = jsx->js; + + /* + * TODO: It's probably an error if jsx->iq_id == NULL. g_return_if_fail + * might be warranted. + */ + if (jsx->iq_id && !jsx->accepted) { + JabberIq *iq; + xmlnode *error, *child; + iq = jabber_iq_new(js, JABBER_IQ_ERROR); + xmlnode_set_attrib(iq->node, "to", xfer->who); + jabber_iq_set_id(iq, jsx->iq_id); + + error = xmlnode_new_child(iq->node, "error"); + xmlnode_set_attrib(error, "type", "cancel"); + child = xmlnode_new_child(error, "forbidden"); + xmlnode_set_namespace(child, "urn:ietf:params:xml:ns:xmpp-stanzas"); + child = xmlnode_new_child(error, "text"); + xmlnode_set_namespace(child, "urn:ietf:params:xml:ns:xmpp-stanzas"); + xmlnode_insert_data(child, "Offer Declined", -1); + + jabber_iq_send(iq); + } + jabber_si_xfer_free(xfer); purple_debug(PURPLE_DEBUG_INFO, "jabber", "in jabber_si_xfer_request_denied\n"); } @@ -1555,6 +1580,8 @@ xmlnode_set_attrib(iq->node, "to", xfer->who); if(jsx->iq_id) jabber_iq_set_id(iq, jsx->iq_id); + else + purple_debug_error("jabber", "Sending SI result with new IQ id.\n"); jsx->accepted = TRUE;