Separate File Transfer Proxy Problems

Hello,

I have set up Wildfire 3.1.1 to run as a separate file transfer proxy. Basically, I’'m trying to off load all file transfer traffic to a separate jabber server. For instance, all Jabber users are registered on JabberServer1 on domain1 (public IP address 1). JabberServer2 is running on domain2 (public IP address 2). Each Jabber user connects to JabberServer1@domain1 with all IM, presence, MUC, and file transfer stanzas passing through this server.

But, in the case of file transfer, all socks 5 negotiation will use proxy.JabberServer2@domain2. I know this configuration works, as I’‘ve tested against other public jabber servers (ejabberd) with enabled socks 5 proxies. However, I want to implement my own solution and not be constrained by some one else’‘s file transfer proxy. So, I’'m trying Wildfire 3.1.1.

But with Wildfire as the socks proxy, I can’'t get file transfer to work between two clients. The initial xml handshaking works fine (get the request, accept the request, correct streamhost values). The transfer fails during socks 5 handshaking because of exceptions raised on Wildfire.

Here are my Wildfire properties:

xmpp.auth.anonymous true

xmpp.domain JabberServer2@domain2

xmpp.proxy.enabled true

xmpp.proxy.externalip proxy.JabberServer2@domain2

xmpp.proxy.port 7777

xmpp.server.socket.active true

xmpp.session.conflict-limit 0

xmpp.socket.ssl.active true

From the Wildfire logs:

Error log:

2006.08.30 06:48:44 org.jivesoftware.wildfire.filetransfer.proxy.ProxyConnectionManager$1$1.run(Prox yConnectionManager.java:110) Error processing file transfer proxy connection

java.io.IOException: Illegal proxy transfer

at org.jivesoftware.wildfire.filetransfer.proxy.ProxyConnectionManager.processConn ection(ProxyConnectionManager.java:187)

at org.jivesoftware.wildfire.filetransfer.proxy.ProxyConnectionManager.access$100( ProxyConnectionManager.java:39)

at org.jivesoftware.wildfire.filetransfer.proxy.ProxyConnectionManager$1$1.run(Pro xyConnectionManager.java:107)

at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)

at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)

at java.util.concurrent.FutureTask.run(FutureTask.java:138)

at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java: 885)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)

at java.lang.Thread.run(Thread.java:619)

2006.08.30 06:48:44 org.jivesoftware.wildfire.filetransfer.proxy.ProxyConnectionManager$1$1.run(Prox yConnectionManager.java:110) Error processing file transfer proxy connection

java.io.IOException: Illegal proxy transfer

at org.jivesoftware.wildfire.filetransfer.proxy.ProxyConnectionManager.processConn ection(ProxyConnectionManager.java:187)

at org.jivesoftware.wildfire.filetransfer.proxy.ProxyConnectionManager.access$100( ProxyConnectionManager.java:39)

at org.jivesoftware.wildfire.filetransfer.proxy.ProxyConnectionManager$1$1.run(Pro xyConnectionManager.java:107)

at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)

at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)

at java.util.concurrent.FutureTask.run(FutureTask.java:138)

at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java: 885)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)

at java.lang.Thread.run(Thread.java:619)

2006.08.30 06:48:44 org.jivesoftware.wildfire.filetransfer.proxy.FileTransferProxy.handleIQ(FileTran sferProxy.java:140) Error activating connection

java.lang.IllegalArgumentException: Transfer doesn’'t exist or is missing parameters

at org.jivesoftware.wildfire.filetransfer.proxy.ProxyConnectionManager.activate(Pr oxyConnectionManager.java:277)

at org.jivesoftware.wildfire.filetransfer.proxy.FileTransferProxy.handleIQ(FileTra nsferProxy.java:137)

at org.jivesoftware.wildfire.filetransfer.proxy.FileTransferProxy.process(FileTran sferProxy.java:356)

at org.jivesoftware.wildfire.IQRouter.handle(IQRouter.java:218)

at org.jivesoftware.wildfire.IQRouter.route(IQRouter.java:96)

at org.jivesoftware.wildfire.spi.PacketRouterImpl.route(PacketRouterImpl.java:67)

at org.jivesoftware.wildfire.net.SocketReader.processIQ(SocketReader.java:250)

at org.jivesoftware.wildfire.net.ServerSocketReader.access$001(ServerSocketReader. java:46)

at org.jivesoftware.wildfire.net.ServerSocketReader$1.run(ServerSocketReader.java: 79)

at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java: 885)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)

at java.lang.Thread.run(Thread.java:619)

Warning log:

2006.08.30 09:00:36 Error creating secured outgoing session to remote server: JabberServer1@domain1(DNS lookup: JabberServer1@domain1:5269)

org.xmlpull.v1.XmlPullParserException: could not determine namespace bound to element prefix stream (position: START_DOCUMENT seen stream:error@1:14)

at org.xmlpull.mxp1.MXParser.parseStartTag(MXParser.java:1816)

at org.xmlpull.mxp1.MXParser.parseProlog(MXParser.java:1479)

at org.jivesoftware.wildfire.net.MXParser.nextImpl(MXParser.java:331)

at org.xmlpull.mxp1.MXParser.next(MXParser.java:1093)

at org.jivesoftware.wildfire.server.OutgoingServerSession.createOutgoingSession(Ou tgoingServerSession.java:288)

at org.jivesoftware.wildfire.server.OutgoingServerSession.authenticateDomain(Outgo ingServerSession.java:140)

at org.jivesoftware.wildfire.server.OutgoingSessionPromise.createSessionAndSendPac ket(OutgoingSessionPromise.java:130)

at org.jivesoftware.wildfire.server.OutgoingSessionPromise.access$300(OutgoingSess ionPromise.java:40)

at org.jivesoftware.wildfire.server.OutgoingSessionPromise$1$1.run(OutgoingSession Promise.java:95)

at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java: 885)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)

at java.lang.Thread.run(Thread.java:619)

Any help is appreciated.

Thanks,

John

Im pretty sure you can do what you want by setting the following jiveProperty to false:

xmpp.proxy.transfer.required

Basically wildfire combs all packets going through the server for file transfer requests, with this property as true, which is the default, it is required to match this information to information that passed through the server. This would prevent someone from outside your server from using the file transfer proxy.

I believe your setup should work at that point, let me know how it goes.

Alex

Thanks Alex,

The xmpp.proxy.transfer.required = false worked.

Thanks again,

John