Android File Transfer not working via XMPP and OpenFire
Asked Answered
B

2

8

Problem : Can't receive a file sent to my android app via XMPP and OpenFire Server. I can successfully send a file though. The asmack jar I am using is asmack-jse-buddycloud-2010.12.11.jar

Code :

    connConfig = new ConnectionConfiguration("beta.myCompany.co.uk", 5222);
    connConfig.setSASLAuthenticationEnabled(true);
    try {
        connect("username", "password");
    } catch (Exception e) {
        e.printStackTrace();
    }

    ServiceDiscoveryManager sdm = ServiceDiscoveryManager.getInstanceFor(connection);
    if(sdm == null)
        sdm = new ServiceDiscoveryManager(connection);

    fileTransferManager = new FileTransferManager(connection);
    FileTransferNegotiator.setServiceEnabled(connection, true);

fileTransferManager.addFileTransferListener(new FileTransferListener() {
    @Override
    public void fileTransferRequest(FileTransferRequest request) {
        IncomingFileTransfer transfer = request.accept();
        try {
            FileOutputStream fos = openFileOutput(request.getFileName(), Context.MODE_PRIVATE);
            InputStream stream = transfer.recieveFile();//THIS FAILS!
            fos.write(IOUtils.toByteArray(stream));
            fos.close();    
        } catch (Exception e) {
            e.printStackTrace();
        }
}

Error (If file is sent via Spark) :

Error in execution: -- caused by: java.util.concurrent.ExecutionException: No response from file transfer initiator:

Error (If file is sent via Adium) :

java.util.concurrent.ExecutionException: Could not establish socket with any provided host: item-not-found(404) Could not establish socket with any provided host

Error (If file is sent via another instance of my app) :

Error in execution: -- caused by: java.util.concurrent.ExecutionException: -- caused by: No response from remote client:

My logs: (When attempting to receive file from Spark)

It appears that I am SENDING this error! (Not receiving it). Why would this be?

> 05-01 12:49:36.013: I/System.out(1000): 12:49:35 PM SENT (1093411736):
> <iq id="791-6222" to="beta.myCompany.co.uk"
> from="[email protected]/BAM-1918973529" type="error"><error
> code="501" type="CANCEL"><feature-not-implemented
> xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></iq>

Extra Logs :

05-01 14:46:06.133: I/System.out(1370): 02:46:06 PM RCV  (1093401112): <iq id="eRi5A-72" to="[email protected]/BAM-1755858011" from="[email protected]/Spark 2.6.3" type="set"><si xmlns="http://jabber.org/protocol/si" id="jsi_5991130279184702850" profile="http://jabber.org/protocol/si/profile/file-transfer"><file xmlns="http://jabber.org/protocol/si/profile/file-transfer" name="Test.rtf" size="318"><desc>Sending file</desc></file><feature xmlns="http://jabber.org/protocol/feature-neg"><x xmlns="jabber:x:data" type="form"><field var="stream-method" type="list-single"><option><value>http://jabber.org/protocol/bytestreams</value></option><option><value>http://jabber.org/protocol/ibb</value></option></field></x></feature></si></iq>
05-01 14:46:08.283: I/System.out(1370): 02:46:08 PM SENT (1093401112): <iq id="eRi5A-72" to="[email protected]/Spark 2.6.3" from="[email protected]/BAM-1755858011" type="result"><si xmlns="http://jabber.org/protocol/si"><feature xmlns="http://jabber.org/protocol/feature-neg"><x xmlns="jabber:x:data" type="submit"><field var="stream-method"><value>http://jabber.org/protocol/bytestreams</value></field></x></feature></si></iq>
05-01 14:46:08.312: I/System.out(1370): 02:46:08 PM RCV  (1093401112): <iq id="eRi5A-73" to="[email protected]/BAM-1755858011" type="get" from="[email protected]/Spark 2.6.3"><query xmlns="http://jabber.org/protocol/disco#info"/></iq>
05-01 14:46:14.352: W/System.err(1370): Error in execution: 
05-01 14:46:14.352: W/System.err(1370):   -- caused by: java.util.concurrent.ExecutionException: No response from file transfer initiator:[
[ERROR LOG IS HERE]
05-01 14:46:14.732: I/System.out(1370): 02:46:14 PM SENT (1093401112): <iq id="eRi5A-73" to="[email protected]/Spark 2.6.3" type="result"><query xmlns="http://jabber.org/protocol/disco#info"><identity category="client" name="Smack" type="pc"/><feature var="http://jabber.org/protocol/caps"/><feature var="http://jabber.org/protocol/bytestreams"/><feature var="http://jabber.org/protocol/si/profile/file-transfer"/><feature var="http://jabber.org/protocol/si"/><feature var="http://jabber.org/protocol/ibb"/></query></iq>
05-01 14:46:14.773: I/System.out(1370): 02:46:14 PM RCV  (1093401112): <iq id="eRi5A-77" to="[email protected]/BAM-1755858011" type="set" from="[email protected]/Spark 2.6.3"><query xmlns="http://jabber.org/protocol/bytestreams" sid="jsi_5991130279184702850" mode="tcp"><streamhost jid="[email protected]/Spark 2.6.3" host="10.95.104.25" port="7777"/><streamhost jid="proxy.beta.myCompany.co.uk" host="127.0.1.1" port="7777"/></query></iq>
05-01 14:46:29.783: I/System.out(1370): 02:46:29 PM RCV  (1093401112): <iq type="get" id="537-7113" from="beta.myCompany.co.uk" to="[email protected]/BAM-1755858011"><ping xmlns="urn:xmpp:ping"/></iq>
05-01 14:46:29.843: I/System.out(1370): 02:46:29 PM SENT (1093401112): <iq id="537-7113" to="beta.myCompany.co.uk" from="[email protected]/BAM-1755858011" type="error"><error code="501" type="CANCEL"><feature-not-implemented xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></iq>
Bandage answered 1/5, 2012 at 11:33 Comment(4)
The XMPP stanzas before the 501 error from both sides would be interesting.Selfpossessed
Thanks for your response Flow. I've added more logs from my app from before the 501.Bandage
hi @AndyA can you help me on this #11667463Kabyle
@AndyA I am facing the same problem, can you see over this link and help in solving the issuePrescriptive
S
3

Use

transfer.receiveFile(myLocalFile);

instead of

InputStream stream = transfer.receive();

You are blocking the PacketReader thread. The first method will spawn it's own thread to read the specific packets that make up the parts of the file being transferred. If you use the second method you have to spawn a thread of your own to do the actual file reading and writing.

Strasser answered 1/5, 2012 at 13:47 Comment(3)
This works. The following code can be used to read the file. IncomingFileTransfer transfer = request.accept(); transfer.recieveFile(new File(getExternalFilesDir(null), transfer.getFileName())); String line; BufferedReader br = new BufferedReader(new FileReader(new File(getExternalFilesDir(null), transfer.getFileName()))); while ((line = br.readLine()) != null) System.out.println(line);Bandage
And also you need the following permission in your manifest file ... <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />Bandage
I am facing the same problem, can you see over this link and help in solving the issuePrescriptive
U
0

I have created a simple program of Java , with some copy_paste of other users code , but the +point is that it is working , i have tried this b/w LocalHost - SPark client - javaProgram

you can send txt.file to other user , created in openFile User Section .

Note : please change any thing if you want any details in Xmpp.test class .

Download Xmpp File Transfer "Java Code" From Here

Unsex answered 7/8, 2014 at 7:35 Comment(1)
I've tried this but this line always excutes: if (transfer.getStatus().equals(Status.refused) || transfer.getStatus().equals(Status.error) || transfer.getStatus().equals(Status.cancelled)) { System.out .println("refused cancelled error " + transfer.getError());, meaning even thought it is done, the file sending failed. I don't get why I keep getting this error.Sphenic

© 2022 - 2024 — McMap. All rights reserved.