Not able to recive File if i send a file First with Asmack and Openfire

My service is able to send and recive File… (By this i mean when i send a file from one Android client to another the other client is able to recive the File) the problem is Once a client sends a file It is unable to recive files… (Like let Client A sends a file to Client B … Client B recives What client A sends… Now if Client B or Client C Sends any file to Client A, Client A is Not able to Recive File… But Client B can send a file to Client C…) the Log Client a is Showing While Reciving File is

07-16 13:06:34.221: I/System.out(13374): Trying to receive file

07-16 13:06:34.221: I/Recieve File alert dialog(13374): still receiving : 0.0 status Negotiating Stream

07-16 13:06:34.221: I/System.out(13374): Trying to receive file

07-16 13:06:34.221: I/Recieve File alert dialog(13374): still receiving : 0.0 status Negotiating Stream

07-16 13:06:34.221: I/System.out(13374): Trying to receive file

07-16 13:06:34.221: I/Recieve File alert dialog(13374): still receiving : 0.0 status Negotiating Stream

07-16 13:06:34.221: I/System.out(13374): Trying to receive file

07-16 13:06:34.221: I/Recieve File alert dialog(13374): still receiving : 0.0 status Negotiating Stream

07-16 13:06:34.221: I/System.out(13374): Trying to receive file

07-16 13:06:34.221: D/dalvikvm(13374): threadid=21: exiting

07-16 13:06:34.221: D/dalvikvm(13374): threadid=21: bye!

07-16 13:06:34.221: I/Recieve File alert dialog(13374): still receiving : 0.0 status Negotiating Stream

07-16 13:06:34.221: I/System.out(13374): Trying to receive file

07-16 13:06:34.221: I/Recieve File alert dialog(13374): cancelling still receiving : 0.0 status Error

07-16 13:06:34.221: I/System.out(13374): While Receiveing file

07-16 13:06:34.222: I/System.out(13374): Error transfer.getError() : null

07-16 13:06:34.222: I/System.out(13374): transfer.getException() : Error in execution:

07-16 13:06:34.222: I/System.out(13374): – caused by: java.util.concurrent.ExecutionException:

07-16 13:06:34.222: I/System.out(13374): – caused by: No response from remote client:

07-16 13:06:34.222: I/System.out(13374): Inside After File Recived

07-16 13:06:34.222: I/System.out(13374): fromName+919932497201@quipit.local/Smack

07-16 13:06:34.222: I/System.out(13374): fromName+919932497201@quipit.local

07-16 13:06:34.222: I/System.out(13374): Inside Add message when called from file recived

07-16 13:06:34.222: I/System.out(13374): Inside findTableName

07-16 13:06:34.222: I/System.out(13374): Inside presentInFrequentUsers

07-16 13:06:34.223: I/System.out(13374): Inside getTableName

07-16 13:06:34.224: I/System.out(13374): before updateLastMessage value of tableNameTABLENAME9932497201

07-16 13:06:34.224: I/System.out(13374): Inside Update last message

07-16 13:06:34.224: I/System.out(13374): messace count:1

07-16 13:06:34.247: I/System.out(13374): mediaTypeimage

07-16 13:06:34.247: I/System.out(13374): addMessageToMessageLog message.is_Text():false

07-16 13:06:34.265: I/System.out(13374): App running Broadcast sent

07-16 13:06:34.265: I/System.out(13374): broadcast recived

And the Error that The Sending Client Gets is:

**07-16 13:11:52.999: I/transfere file(6066): sending file status Negotiating Streamprogress: 0.0 07-16 13:11:52.999: I/System.out(6066): Trying to send file 07-16 13:11:52.999: I/transfere file(6066): sending file status Negotiating Streamprogress: 0.0 07-16 13:11:52.999: I/System.out(6066): Trying to send file 07-16 13:11:52.999: I/transfere file(6066): sending file status Negotiating Streamprogress: 0.0 07-16 13:11:52.999: I/System.out(6066): Trying to send file 07-16 13:11:53.009: I/transfere file(6066): sending file status Negotiating Streamprogress: 0.0 07-16 13:11:53.009: I/System.out(6066): while sending file 07-16 13:11:53.009: I/System.out(6066): transfer.getStatus() == Status.error then 07-16 13:11:53.009: I/System.out(6066): transfer.getError(): :null 07-16 13:11:53.009: I/System.out(6066): transfer.getException():Target returned an error: feature-not-implemented(501)
**

**
**

The Recive Function is Like :

public void ReceiveFile() {

Thread thread = new Thread() {
    public void run() {

        ServiceDiscoveryManager sdm = ServiceDiscoveryManager
                .getInstanceFor(connection);

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

        sdm.addFeature("[http://jabber.org/protocol/disco#info](http://jabber.org/protocol/disco#info)");

        sdm.addFeature("jabber:iq:privacy");

        // Create the file transfer manager
        final FileTransferManager managerListner = new FileTransferManager(
                connection);

        FileTransferNegotiator.setServiceEnabled(connection, true);

        Log.i("File transfere manager", "created");

        // Create the listener
        managerListner.addFileTransferListener(new FileTransferListener() {

        public void fileTransferRequest(final FileTransferRequest request) {

                Log.i("Recieve File","new file transfere request  new file transfere request   new file transfere request");

                Log.i("file request","from" + request.getRequestor());

                IncomingFileTransfer transfer = request.accept();

                Log.i("Recieve File alert dialog", "accepted");
                try {
                    System.out.println("Transfer File Name:" + transfer.getFileName());
                    System.out.println("Request File Name:"+request.getFileName());
                    System.out.println("Resquest desceiption"+ request.getDescription());
                    final String fileName = request.getFileName();
                    transfer.recieveFile(new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/QuipIt/" + request.getFileName()));
                    Log.e("Saving File ", "Saving fie recived from Xmpp");
                    System.out.println("Transfer Path File Name" + transfer.getFilePath());

                    while (!transfer.isDone() || (transfer.getProgress() < 1)) {

//                      Thread.sleep(1000);
                        Log.i("Recieve File alert dialog", "still receiving : " + (transfer.getProgress()) + " status " + transfer.getStatus());
                        System.out.println("Trying to receive file");
                        if (transfer.getStatus().equals(Status.error)) {
                            // Log.i("Error file",
                            // transfer.getError().getMessage());
                            Log.i("Recieve File alert dialog","cancelling still receiving : " + (transfer.getProgress()) + " status " + transfer.getStatus());
                            System.out.println("While Receiveing file");
                            System.out.println("Error transfer.getError() : "+transfer.getError());
                            System.out.println("transfer.getException() : "+transfer.getException());
                            transfer.cancel();

                            break;
                        }

                    }

                    /*********** work to do when the file receive is complete**************/

                    System.out.println("Inside After File Recived");
                    String pathName = Environment.getExternalStorageDirectory().getAbsolutePath()+"/QuipIt/" + fileName;
                    System.out.println("fromName"+request.getRequestor());
                    String from = request.getRequestor().substring(0, 26);
                    System.out.println("fromName"+from);
                    String action = request.getDescription();
                    DBAdapter.addMessage(false, from, pathName,from,false,action);
                    if(isAppRunning(context)) {
                        // send a broadcast message to the running activity with fromId
                        System.out.println("App running Broadcast sent");
                        Intent bIntent = new Intent("ChatActivity");
                        bIntent.putExtra("fromId", from);
                        bIntent.putExtra("message", pathName);
                        bIntent.putExtra("action", action);
                        LocalBroadcastManager.getInstance(context).sendBroadcast(bIntent);
                    }else {
                        // show a notification
                        String name = DBAdapter.getContactName(request.getRequestor());
                        if (name == null) {
                            name = "unknown";
                        }
                        sendNotification(context, name, "An Image has come from"+name, request.getRequestor());
                    }
                } catch (XMPPException e) {

                    e.printStackTrace();
                }

        }

        });

        }
    };
    thread.start();
    }

The Send File Funtion is like :

public void SendFile(final String Receiver, final String Directory , final String action) {
        System.out.println("Value in Directory:"+ Directory);
                Thread thread = new Thread() {

                    public void run() {

                        ServiceDiscoveryManager sdm = ServiceDiscoveryManager.getInstanceFor(connection);

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

                        sdm.addFeature("[http://jabber.org/protocol/disco#info](http://jabber.org/protocol/disco#info)");

                        sdm.addFeature("jabber:iq:privacy");

                        // Create the file transfer manager
                        FileTransferManager manager = new FileTransferManager(connection);
                        FileTransferNegotiator.setServiceEnabled(connection, true);

                        // Create the outgoing file transfer
                        OutgoingFileTransfer transfer = manager.createOutgoingFileTransfer(Receiver + "/Smack");
                        Log.i("transfere file", "outgoingfiletransfere is created");

                        try {

                            OutgoingFileTransfer.setResponseTimeout(30000);
                            System.out.println("Path of the File"+ Directory);

                            transfer.sendFile(new File(Directory),action);
                            System.out.println("Transfer File Name:" + transfer.getFileName() );
                            System.out.println("Transfer File Size:"+ transfer.getFileSize());

                            Log.i("transfere file", "sending file");

                            while (!transfer.isDone()) {

                                try {
//                                  Thread.sleep(1000);

                                    System.out.println("Trying to send file");
                                    Log.i("transfere file", "sending file status " + transfer.getStatus() + "progress: " + transfer.getProgress());
                                    if (transfer.getStatus() == Status.error) {
                                        System.out.println("while sending file \ntransfer.getStatus() == Status.error then \n transfer.getError(): :"+transfer.getError());
                                        System.out.println("\ntransfer.getException():"+transfer.getException());
                                        transfer.cancel();
                                        break;
                                    }
                                } catch (Exception e) {
                                    e.printStackTrace();
                                }
                            }

                        } catch (XMPPException e) {
                            e.printStackTrace();
                        }

                        Log.i("transfere file", "sending file done");

                    }
                };
                thread.start();

The Send funtion is called When the service recives a Broadcast to send a file...

And the Recive Funtion is called When the Connection is estabilish So that it can listen for any incoming File…

Thanks in Advance… Your help is much appriciated…

Hi.
I also have same issue.

Was you able to found solution?

No Marat i am reaching for a good solution …

As Soon i crack it will post it here…If you are able to find a good solution please help out.

i am using asmack 16 library. i am able to send files. but i am not able to receive. when i try send file from desktop client(pidgin) to my android client, i am getting log that FileNegotiation 0.0. and some percentage like 20% or 10% showing on desktop client… Please help me…

i am using asmack-android level7-3.1.1.jar. its working.

I also have same issue…Was you able to found solution?

but i have some different . when A send a File to B . B can receive it . Then B send a File to A . A can’t receive it .

It’s fantastic . I using asmack 4.0.3.