powered by Jive Software

File Transfer question

I have jive 2.3.0 running, and spark clients in different LANs(remote).

All goes fine…except when I want to transfer files betwen them.

I know there are several methods for this…but I dont want to install a proxy, I just want my client share files betwen them without a proxy.

Now…what do i need? is it possible?


Most clients provide Peer-To-Peer file transfer. You just have to find how to configure your clients to use such a setup.

I don’‘t use the client you mentioned but through out the forums, if you’'ll search you might find reference to your client for configuration needs.

Hey, Spark, I knew I saw that somewhere before. duh. jivesoftware… (commentary directed at me).


According to the links in that search I provided previously, it would appear that nothing need be configured in Spark for file transfers to work. it can work with p2p, proxy or IBB transfers.

It will use the best method available. That might mean P2P or proxy, but at the worst it will use in-band transfer. So, file transfer should always work if you’‘re talking to another client that supports IBB. IBB also works fine with Jive Messenger and there’‘s nothing to configure. In the future, Jive Messenger will support the more efficient proxy method of file transfer, but that’'s really just about optimization.

/quote Matt

I’'m downloading Spark now and see if i run into any issues transferring files with spark.

Hey cocas:

If I can get a little more information about your specific use case maybe we can together determine a solution for your needs.

Why don’'t you want to setup a proxy service?

The difficulty of sharing files between users on seperate LANs is that the address’'s, unless operating under a VPN, need to internet addressable. In other words one user needs to be able to see the other user to directly connect to them. When a user is on a LAN their address is generally translated to match one internet address.

That is the power of the proxy service as both users connect directly to the proxy and the proxy mediates the file transfer. In this case, you only need one internet addressable node, the file transfer proxy.

Jabber file transfer, and in this case Spark, also provide a fall back mechanism which is known as IBB. Which transfer’'s the file over the same XML stream used by Jabber. The problem with IBB is that there is quite a bit of overhead. Each packet of data is encoded in Base64… the addressing information is added… the packet has to be routed through your server and any remote servers. So, if you are transfering large files, or even a fair amount of files it can be problematic as it creates a huge burden on the server. In fact, several sever implementations I have heard have out-right banned IBB because of the congestion it creates. It really does have the potential to slow down and cripple a server. So my question in this case would be, how many files are you planning to transfer and how large are they?

The user’'s on seperate LANs, would there be a way to setup a NAT for them to route from a specific port to a specific computer? How many clients do you have behind each LAN?

If we can figure some of these things out, it should be easier to determine what you need and if it is possible.


I wonder how to determine which mechanism is used by client (p2p or IBB)? Something in debug maybe?


You can open up the packet window and follow the trace of packets to determine which service is being used. In the case of Spark this is the “traffic window”.

Most clients nowadays will utilize the File Transfer and Stream Initiation JEPs http://www.jabber.org/jeps/jep-0096.html and http://www.jabber.org/jeps/jep-0095.html respectivly to negotiate the protocol. Generally speaking, at least according to the JEPs, clients are supposed to offer both types of transfers. Though, IBB is only supposed to be used as a fall-back mechanism, there is nothing in the JEPs to indicate how, when, and it what situations it should be called upon. And if p2p or SOCKS5 via proxy fails there is no generally agreed upon way to fallback to IBB.

So, to answer your question, when transfering a file look for the file transfer negotiation packets:


in this packet the two options are being offered to the recipient. bytestreams is where direct p2p or transfer through a proxy can occur, and ibb was discussed early. The key packet to recognize is the recipients response:


In this case, bytestreams has been choosen by the file transfer recipient. The method of bytestreams either p2p or through a proxy is determined in the stream negotiation process detailed in this JEP: http://www.jabber.org/jeps/jep-0065.html

And for good measure the IBB negotiation and transfer process is detailed here:


If you want me to go into more detail on either of the mechanisms, please ask


Thanks for your reply. I will check that tomorrow. We are not using File Transfers currently, but i just wanted to find out if that could impact server’'s productivity. This is on LAN, so i assume p2p must be in use. Will check it with Exodus and Spark.