pidgin: 815271fc: Use Entity Caps for determining file tra...
darkrain42 at pidgin.im
darkrain42 at pidgin.im
Wed Jul 15 22:26:05 EDT 2009
-----------------------------------------------------------------
Revision: 815271fc2711a7da97c54f6d049c6f434632fe38
Ancestor: 026ccc0ef6d947f94ee74ac372e89e13d787e9e5
Author: darkrain42 at pidgin.im
Date: 2009-07-15T17:57:08
Branch: im.pidgin.pidgin
URL: http://d.pidgin.im/viewmtn/revision/info/815271fc2711a7da97c54f6d049c6f434632fe38
Modified files:
libpurple/protocols/jabber/si.c
ChangeLog:
Use Entity Caps for determining file transfer abilities, if possible.
Also, fix a leak of the PurpleXfer.
-------------- next part --------------
============================================================
--- libpurple/protocols/jabber/si.c 439ed38edcc5e128fc7deaadbf0e6139d7614020
+++ libpurple/protocols/jabber/si.c 636a46ac9b0bd11397007a979e14d842ed3dfaee
@@ -51,9 +51,9 @@ typedef struct _JabberSIXfer {
char *iq_id;
enum {
- STREAM_METHOD_UNKNOWN = 0,
+ STREAM_METHOD_UNKNOWN = 0,
STREAM_METHOD_BYTESTREAMS = 2 << 1,
- STREAM_METHOD_IBB = 2 << 2,
+ STREAM_METHOD_IBB = 2 << 2,
STREAM_METHOD_UNSUPPORTED = 2 << 31
} stream_method;
@@ -1421,6 +1421,7 @@ static void jabber_si_xfer_send_disco_cb
purple_notify_error(js->gc, _("File Send Failed"),
_("File Send Failed"), msg);
g_free(msg);
+ purple_xfer_cancel_local(xfer);
}
}
@@ -1434,13 +1435,38 @@ static void do_transfer_send(PurpleXfer
JabberSIXfer *jsx = xfer->data;
char **who_v = g_strsplit(xfer->who, "/", 2);
char *who;
+ JabberBuddy *jb;
+ JabberBuddyResource *jbr = NULL;
+ jb = jabber_buddy_find(jsx->js, who_v[0], FALSE);
+ if (jb) {
+ jbr = jabber_buddy_find_resource(jb, resource);
+ }
+
who = g_strdup_printf("%s/%s", who_v[0], resource);
g_strfreev(who_v);
g_free(xfer->who);
xfer->who = who;
- jabber_disco_info_do(jsx->js, who,
- jabber_si_xfer_send_disco_cb, xfer);
+
+ if (jbr) {
+ char *msg;
+
+ if (jabber_resource_has_capability(jbr, XEP_0047_NAMESPACE))
+ jsx->stream_method |= STREAM_METHOD_IBB;
+ if (jabber_resource_has_capability(jbr, "http://jabber.org/protocol/si/profile/file-transfer")) {
+ jabber_si_xfer_send_request(xfer);
+ return;
+ }
+
+ msg = g_strdup_printf(_("Unable to send file to %s, user does not support file transfers"), who);
+ purple_notify_error(jsx->js->gc, _("File Send Failed"),
+ _("File Send Failed"), msg);
+ g_free(msg);
+ purple_xfer_cancel_local(xfer);
+ } else {
+ jabber_disco_info_do(jsx->js, who,
+ jabber_si_xfer_send_disco_cb, xfer);
+ }
}
static void resource_select_ok_cb(PurpleXfer *xfer, PurpleRequestFields *fields)
More information about the Commits
mailing list