| 137 xmlnode_set_attrib(iq->node, "to", xfer->who); |
137 xmlnode_set_attrib(iq->node, "to", xfer->who); |
| 138 error = xmlnode_new_child(iq->node, "error"); |
138 error = xmlnode_new_child(iq->node, "error"); |
| 139 xmlnode_set_attrib(error, "code", "404"); |
139 xmlnode_set_attrib(error, "code", "404"); |
| 140 xmlnode_set_attrib(error, "type", "cancel"); |
140 xmlnode_set_attrib(error, "type", "cancel"); |
| 141 condition = xmlnode_new_child(error, "condition"); |
141 condition = xmlnode_new_child(error, "condition"); |
| 142 xmlnode_set_attrib(condition, "xmlns", "urn:ietf:params:xml:ns:xmpp-stanzas"); |
142 xmlnode_set_namespace(condition, "urn:ietf:params:xml:ns:xmpp-stanzas"); |
| 143 xmlnode_new_child(condition, "item-not-found"); |
143 xmlnode_new_child(condition, "item-not-found"); |
| 144 |
144 |
| 145 jabber_iq_send(iq); |
145 jabber_iq_send(iq); |
| 146 |
146 |
| 147 gaim_xfer_cancel_local(xfer); |
147 gaim_xfer_cancel_local(xfer); |
| 635 xfer->filename = g_path_get_basename(xfer->local_filename); |
635 xfer->filename = g_path_get_basename(xfer->local_filename); |
| 636 |
636 |
| 637 iq = jabber_iq_new(jsx->js, JABBER_IQ_SET); |
637 iq = jabber_iq_new(jsx->js, JABBER_IQ_SET); |
| 638 xmlnode_set_attrib(iq->node, "to", xfer->who); |
638 xmlnode_set_attrib(iq->node, "to", xfer->who); |
| 639 si = xmlnode_new_child(iq->node, "si"); |
639 si = xmlnode_new_child(iq->node, "si"); |
| 640 xmlnode_set_attrib(si, "xmlns", "http://jabber.org/protocol/si"); |
640 xmlnode_set_namespace(si, "http://jabber.org/protocol/si"); |
| 641 jsx->stream_id = jabber_get_next_id(jsx->js); |
641 jsx->stream_id = jabber_get_next_id(jsx->js); |
| 642 xmlnode_set_attrib(si, "id", jsx->stream_id); |
642 xmlnode_set_attrib(si, "id", jsx->stream_id); |
| 643 xmlnode_set_attrib(si, "profile", |
643 xmlnode_set_attrib(si, "profile", |
| 644 "http://jabber.org/protocol/si/profile/file-transfer"); |
644 "http://jabber.org/protocol/si/profile/file-transfer"); |
| 645 |
645 |
| 646 file = xmlnode_new_child(si, "file"); |
646 file = xmlnode_new_child(si, "file"); |
| 647 xmlnode_set_attrib(file, "xmlns", |
647 xmlnode_set_namespace(file, |
| 648 "http://jabber.org/protocol/si/profile/file-transfer"); |
648 "http://jabber.org/protocol/si/profile/file-transfer"); |
| 649 xmlnode_set_attrib(file, "name", xfer->filename); |
649 xmlnode_set_attrib(file, "name", xfer->filename); |
| 650 g_snprintf(buf, sizeof(buf), "%" G_GSIZE_FORMAT, xfer->size); |
650 g_snprintf(buf, sizeof(buf), "%" G_GSIZE_FORMAT, xfer->size); |
| 651 xmlnode_set_attrib(file, "size", buf); |
651 xmlnode_set_attrib(file, "size", buf); |
| 652 /* maybe later we'll do hash and date attribs */ |
652 /* maybe later we'll do hash and date attribs */ |
| 653 |
653 |
| 654 feature = xmlnode_new_child(si, "feature"); |
654 feature = xmlnode_new_child(si, "feature"); |
| 655 xmlnode_set_attrib(feature, "xmlns", |
655 xmlnode_set_namespace(feature, |
| 656 "http://jabber.org/protocol/feature-neg"); |
656 "http://jabber.org/protocol/feature-neg"); |
| 657 x = xmlnode_new_child(feature, "x"); |
657 x = xmlnode_new_child(feature, "x"); |
| 658 xmlnode_set_attrib(x, "xmlns", "jabber:x:data"); |
658 xmlnode_set_namespace(x, "jabber:x:data"); |
| 659 xmlnode_set_attrib(x, "type", "form"); |
659 xmlnode_set_attrib(x, "type", "form"); |
| 660 field = xmlnode_new_child(x, "field"); |
660 field = xmlnode_new_child(x, "field"); |
| 661 xmlnode_set_attrib(field, "var", "stream-method"); |
661 xmlnode_set_attrib(field, "var", "stream-method"); |
| 662 xmlnode_set_attrib(field, "type", "list-single"); |
662 xmlnode_set_attrib(field, "type", "list-single"); |
| 663 option = xmlnode_new_child(field, "option"); |
663 option = xmlnode_new_child(field, "option"); |
| 769 jabber_iq_set_id(iq, jsx->iq_id); |
769 jabber_iq_set_id(iq, jsx->iq_id); |
| 770 |
770 |
| 771 jsx->accepted = TRUE; |
771 jsx->accepted = TRUE; |
| 772 |
772 |
| 773 si = xmlnode_new_child(iq->node, "si"); |
773 si = xmlnode_new_child(iq->node, "si"); |
| 774 xmlnode_set_attrib(si, "xmlns", "http://jabber.org/protocol/si"); |
774 xmlnode_set_namespace(si, "http://jabber.org/protocol/si"); |
| 775 |
775 |
| 776 feature = xmlnode_new_child(si, "feature"); |
776 feature = xmlnode_new_child(si, "feature"); |
| 777 xmlnode_set_attrib(feature, "xmlns", "http://jabber.org/protocol/feature-neg"); |
777 xmlnode_set_namespace(feature, "http://jabber.org/protocol/feature-neg"); |
| 778 |
778 |
| 779 x = xmlnode_new_child(feature, "x"); |
779 x = xmlnode_new_child(feature, "x"); |
| 780 xmlnode_set_attrib(x, "xmlns", "jabber:x:data"); |
780 xmlnode_set_namespace(x, "jabber:x:data"); |
| 781 xmlnode_set_attrib(x, "type", "submit"); |
781 xmlnode_set_attrib(x, "type", "submit"); |
| 782 |
782 |
| 783 field = xmlnode_new_child(x, "field"); |
783 field = xmlnode_new_child(x, "field"); |
| 784 xmlnode_set_attrib(field, "var", "stream-method"); |
784 xmlnode_set_attrib(field, "var", "stream-method"); |
| 785 |
785 |