Mercurial > pidgin.yaz
comparison libpurple/protocols/jabber/si.c @ 27634:636c3b6c9cc7
Use Entity Caps for determining file transfer abilities, if possible.
Also, fix a leak of the PurpleXfer.
author | Paul Aurich <paul@darkrain42.org> |
---|---|
date | Wed, 15 Jul 2009 17:57:08 +0000 |
parents | 73c8e1964eef |
children | 97eb110550ad |
comparison
equal
deleted
inserted
replaced
27633:d5018f25d7a2 | 27634:636c3b6c9cc7 |
---|---|
49 | 49 |
50 char *stream_id; | 50 char *stream_id; |
51 char *iq_id; | 51 char *iq_id; |
52 | 52 |
53 enum { | 53 enum { |
54 STREAM_METHOD_UNKNOWN = 0, | 54 STREAM_METHOD_UNKNOWN = 0, |
55 STREAM_METHOD_BYTESTREAMS = 2 << 1, | 55 STREAM_METHOD_BYTESTREAMS = 2 << 1, |
56 STREAM_METHOD_IBB = 2 << 2, | 56 STREAM_METHOD_IBB = 2 << 2, |
57 STREAM_METHOD_UNSUPPORTED = 2 << 31 | 57 STREAM_METHOD_UNSUPPORTED = 2 << 31 |
58 } stream_method; | 58 } stream_method; |
59 | 59 |
60 GList *streamhosts; | 60 GList *streamhosts; |
61 PurpleProxyInfo *gpi; | 61 PurpleProxyInfo *gpi; |
1419 } else { | 1419 } else { |
1420 char *msg = g_strdup_printf(_("Unable to send file to %s, user does not support file transfers"), who); | 1420 char *msg = g_strdup_printf(_("Unable to send file to %s, user does not support file transfers"), who); |
1421 purple_notify_error(js->gc, _("File Send Failed"), | 1421 purple_notify_error(js->gc, _("File Send Failed"), |
1422 _("File Send Failed"), msg); | 1422 _("File Send Failed"), msg); |
1423 g_free(msg); | 1423 g_free(msg); |
1424 purple_xfer_cancel_local(xfer); | |
1424 } | 1425 } |
1425 } | 1426 } |
1426 | 1427 |
1427 static void resource_select_cancel_cb(PurpleXfer *xfer, PurpleRequestFields *fields) | 1428 static void resource_select_cancel_cb(PurpleXfer *xfer, PurpleRequestFields *fields) |
1428 { | 1429 { |
1432 static void do_transfer_send(PurpleXfer *xfer, const char *resource) | 1433 static void do_transfer_send(PurpleXfer *xfer, const char *resource) |
1433 { | 1434 { |
1434 JabberSIXfer *jsx = xfer->data; | 1435 JabberSIXfer *jsx = xfer->data; |
1435 char **who_v = g_strsplit(xfer->who, "/", 2); | 1436 char **who_v = g_strsplit(xfer->who, "/", 2); |
1436 char *who; | 1437 char *who; |
1438 JabberBuddy *jb; | |
1439 JabberBuddyResource *jbr = NULL; | |
1440 | |
1441 jb = jabber_buddy_find(jsx->js, who_v[0], FALSE); | |
1442 if (jb) { | |
1443 jbr = jabber_buddy_find_resource(jb, resource); | |
1444 } | |
1437 | 1445 |
1438 who = g_strdup_printf("%s/%s", who_v[0], resource); | 1446 who = g_strdup_printf("%s/%s", who_v[0], resource); |
1439 g_strfreev(who_v); | 1447 g_strfreev(who_v); |
1440 g_free(xfer->who); | 1448 g_free(xfer->who); |
1441 xfer->who = who; | 1449 xfer->who = who; |
1442 jabber_disco_info_do(jsx->js, who, | 1450 |
1443 jabber_si_xfer_send_disco_cb, xfer); | 1451 if (jbr) { |
1452 char *msg; | |
1453 | |
1454 if (jabber_resource_has_capability(jbr, XEP_0047_NAMESPACE)) | |
1455 jsx->stream_method |= STREAM_METHOD_IBB; | |
1456 if (jabber_resource_has_capability(jbr, "http://jabber.org/protocol/si/profile/file-transfer")) { | |
1457 jabber_si_xfer_send_request(xfer); | |
1458 return; | |
1459 } | |
1460 | |
1461 msg = g_strdup_printf(_("Unable to send file to %s, user does not support file transfers"), who); | |
1462 purple_notify_error(jsx->js->gc, _("File Send Failed"), | |
1463 _("File Send Failed"), msg); | |
1464 g_free(msg); | |
1465 purple_xfer_cancel_local(xfer); | |
1466 } else { | |
1467 jabber_disco_info_do(jsx->js, who, | |
1468 jabber_si_xfer_send_disco_cb, xfer); | |
1469 } | |
1444 } | 1470 } |
1445 | 1471 |
1446 static void resource_select_ok_cb(PurpleXfer *xfer, PurpleRequestFields *fields) | 1472 static void resource_select_ok_cb(PurpleXfer *xfer, PurpleRequestFields *fields) |
1447 { | 1473 { |
1448 PurpleRequestField *field = purple_request_fields_get_field(fields, "resource"); | 1474 PurpleRequestField *field = purple_request_fields_get_field(fields, "resource"); |