Here's the latest update. Using a debugger, I dove into the code for IncomingFileTransfer.receiveFile() and OutgoingFileTransfer.sendFile(). Everything seems to be going as it should. I finally came upon a realization: The IQ
<iq to="receiver@smack_server/Smack" id="NK8Lh-26" type="set" from="sender@smack_server/Smack">
<open xmlns="http://jabber.org/protocol/ibb" block-size="4096" sid="jsi_3077759398544954943" stanza="iq"/>
</iq>
showed up in the receiver's "Raw Received Packets", but not "All Packets." This means it received the IQ but didn't know how to parse it. Sure enough, there was not an IQProvider for the open element or "http://jabber.org/protocol/ibb" namespace. So I added one (ProviderManager.addIQProvider()) and while I was at it, added Providers for "data" and "close" as well. I restarted the application and verified that the Providers were added. However, the open IQ is still not being parsed by the receiver. I made sure to use the constants defined for the element and namespace (i.e., Open.ELEMENT, Open.NAMESPACE, etc.) in order to avoid a typo. This is the root cause of the issue. The sender actually times out, but for some reason doesn't have an Error or Exception status, and the receiver times out and does have an Exception status, all because the open IQ is never parsed by the receiver. Is this possibly a known bug or is there something else I can look into to verify that all the Providers were added correctly? Thanks!