How does Spark transfer files from a user to another?

I’'m studying the jabber tech. I think file transmission should not be the same as the message(delivered by server), it should be done by peer to peer.

If it’'s true, and how does spark implement it? How does spark solve the NAT&firewall issues?

Thanks.

Spark attempts to utilize several methods to complete a file transfer. Here is a good summary:

http://www.jivesoftware.org/community/thread.jspa?messageID=120906&#120906