About Spark file transfer speed

## Hi there,

Computer no1 IP is 192.168.1.123

Computer no2 IP is 192.168.1.124

Computer no3 IP is 192.168.18.222

while transfering file to no2 from no1 it’s ok as the speed over 1M/s.

while transfering file to no3 from no1 or no2 the speed only 10k/s.

why? anyone can help me?

R&B,

Mr.D

How can we know about your network setup just from these IP addresses? First, make sure that you can achieve wanted speed between these computers with some other programs or measurement tools, like simple copying of files with Explorer.

make sure that you can achieve wanted speed between these computers with some other programs

Yes I tried lots of software, it’s all fine.

But Spark cant!!!

anyone know it?

I dont have two subnets to test this. Are you sure it is related to different subnets? Can you try with more computers?

Yes, I am sure.

and i tried more than 50 computers to test it.

Oh My god!!!

Computer no2 IP is 192.168.1.124

**Computer no3 IP is **192.168.18.222

If i send RAR file to no3 from no2 , speed will be very slow.

But if I send EXE(Look at here!!! It’s exe format file) file to no3 from no2 , speed will be very very very fast.

And once I send EXE file, the follows sending files(RAR or any format) will be fast as send EXE file.

And If you reboot your computer again, then first time you send RAR file, speed still will be slow until you send any EXE format file.

Anyone tell me why? how could it happen?

I’m reading all your messages. I just dont have enough free time to test this and then file in a bug tracker (i have work and real life you know). Anyway, it won’t be fixed in a day if there is some bug. Be patient.

thank u

get back to me please if you guys fixed this bug, thank you very much

I have filed a couple of tickets: http://www.igniterealtime.org/issues/browse/SPARK-1075, http://www.igniterealtime.org/issues/browse/SPARK-1074. But… this is only tickets. Cant say when this can be fixed or at least investigated by someone, as it seems it can be a complex task.

What XMPP server are you using? It may depend on that.

For example if you use Openfire, you need to enable openfire proxy on port 7777, open port 7777 in firewall, and add the following xmpp property:

xmpp.proxy.externalip to match your openfire external ip or hostname

(from here: http://community.igniterealtime.org/thread/35901)

Another glitch that I found is in situation when you edit the Login Dialog/General/Resource text input entry, and you accidentaly add a trailing space at the end, the openfire proxy transfer fails because client DIGEST value does not match the server DIGEST value

the digest is SHA-1 hash of: sessionId+node+@+domain+/+resource. the resource trim() is not similar in smack and openfire and this causes digest missmatch and proxy transfer to fail and falling to IBB transfer type which is the slowest

I think this is what you experience: IBB transfer type.

Plese try enabling openfire proxy as outlined above and make sure client resource does not have trailing spaces.

Also make sure that you don’t have firewals or anything on your computer/laptop that may obstruct acces to port 7777 on openfire

I tested and it looks fine, no problems.

Here is a doc regarding file transfer in general in openfire:

http://www.igniterealtime.org/support/articles/filetransfer.jsp

if computer2 is sending a file to computer3

if Computer 2 can communicate with computer 3, a socket will be opened on computer2_ip:7777 (case 1)

if not, a socket will be opened on openfire.external.ip (whatever is in xmpp.proxy.externalip):7777 (case 2)

If openfire proxy is not set up, will fallback to IBB transfer type

hope this helps

I noticed that when user is in the same network as the server (NOT behind NAT), and xmpp.proxy.externalip contains the external address always falls back to IBB

xmpp.proxy.externalip has to contain the openfire server fqdn for the transfer to work both inside / outside the network

Hi Mircea,

if you go into this code, please check with Tim Jentz. We have spend quite some time to understand this and any changes/fixes should be reviewed carefully.

Thanks

Walter

Hi Walter,

Sure, will do so.

I made it working fine with no changes in SMACK, just making the above settings in openfire server, and make sure that you don’t have trailing spaces in resource name.

Spark does not add trailing spaces so we are good on this (resource name is used in SMACK/Openfire digest computation and trailing spaces causes SMACK digest to be different from Openfire digest and transfer to fall back to IBB even if OF proxy is correctly configured).

The thing here is that the user resource is editable (login screen/Advanced/general tab/Resource field) and users may accidentaly add trailing spaces, so I trim() the resource value when this is used in user login

in LoginDialog.java

this line:

connection.login(getLoginUsername(), getLoginPassword(),

org.jivesoftware.spark.util.StringUtils.modifyWildcards(resource));

i changed with:

connection.login(getLoginUsername(), getLoginPassword(),

org.jivesoftware.spark.util.StringUtils.modifyWildcards(resource).trim());

This is all, and I don’t think other changes are needed in Spark or Smack

Thanks,

Mircea