File transfer in Open fire

Hi Support,

I am using Openfire 3.7.1 and Smack3.2.1 versions.

I am trying to transfer a file from sender0 to receiver0 but file transfer is not happening even though I enabled file transfers settings in Openfire Admin Console.

Receiver0 is connected to the server started listening for file transfer request.

Sender0 send the file transfer request but on receiver side seems to be this request didn’t receive.

**Last packet in Sender0 side: **

Sending File [http://jabber.org/protocol/ibb](http://jabber.org/protocol/ibb)

Java console error message on sender0

Status is Negotiating Transfer and 0.0 is done!
Status is Error and 0.0 is done!
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Thanks,

Can you post the relevant code that is being used to send the file.

File transfer is not happened due to typo mistake of the service name in the below mentioned line.

OutgoingFileTransfer transfer = manager.createOutgoingFileTransfer(receiver0@myservice/Smack);

Now it’s working fine using regular XMPPConnection.

Hi Kristam,

Please post your code that you are using.

Thanks,

Vikash

OReceiver.java

import java.io.File;

import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.SASLAuthentication;
import org.jivesoftware.smack.SmackConfiguration;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smackx.filetransfer.FileTransferListener;
import org.jivesoftware.smackx.filetransfer.FileTransferManager;
import org.jivesoftware.smackx.filetransfer.FileTransferRequest;
import org.jivesoftware.smackx.filetransfer.IncomingFileTransfer;

public class OReceiver {
public static void main(String[] args) {
XMPPConnection.DEBUG_ENABLED = true;
XMPPConnection connection;
SmackConfiguration.setPacketReplyTimeout(45000);
System.out.println(“Starting IM client”);
ConnectionConfiguration config = new ConnectionConfiguration(
“myipadress”, 5222, “myservicename”);
connection = new XMPPConnection(config);

try {
connection.connect();
System.out.println("Connected to " + connection.getHost());
SASLAuthentication.supportSASLMechanism(“PLAIN”, 0);
connection.login(“receiver0”, “receiver0”);
System.out.println("Logged in as " + connection.getUser());
Presence presence = new Presence(Presence.Type.available);
connection.sendPacket(presence);

} catch (XMPPException ex) {
ex.printStackTrace();
System.out.println("Failed to log in as " + connection.getUser());
System.exit(1);
}

final FileTransferManager manager = new FileTransferManager(connection);

manager.addFileTransferListener(new FileTransferListener() {
public void fileTransferRequest(FileTransferRequest request) {
// Accept it
try {
System.out.println(“Receiving”);
IncomingFileTransfer transfer = request.accept();

transfer.recieveFile(new File(“D:\”+transfer.getFileName()));

System.out.println("File Received: "
+ transfer.getFileName());
} catch (XMPPException e) {
e.printStackTrace();
}
}
});

}
}

OSender.java

import java.io.File;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.SASLAuthentication;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smackx.bytestreams.ibb.InBandBytestreamManager;
import org.jivesoftware.smackx.filetransfer.FileTransferManager;
import org.jivesoftware.smackx.filetransfer.FileTransferNegotiator;
import org.jivesoftware.smackx.filetransfer.OutgoingFileTransfer;
import org.jivesoftware.smackx.filetransfer.FileTransfer.Status;

public class OSender {

private static String filePath = “D:\SmackReceiver\src\Test.java”;

public static void transferFile() {
XMPPConnection.DEBUG_ENABLED = true;
XMPPConnection connection = null;
System.out.println(“Starting IM client”);
if (connection == null || !connection.isConnected()) {

try {
ConnectionConfiguration config = new ConnectionConfiguration(
“myipadress”, 5222, “myservicename”);
connection = new XMPPConnection(config);
connection.connect();
System.out.println("Connected to " + connection.getHost());
SASLAuthentication.supportSASLMechanism(“PLAIN”, 0);
connection.login(“sender0”, “sender0”);
System.out.println("Logged in as " + connection.getUser());
} catch (XMPPException ex) {
ex.printStackTrace();
System.out.println(ex.getMessage());
System.out.println(ex.fillInStackTrace());
System.out.println("Failed to log in as "
+ connection.getUser());
System.exit(1);
}
}
try {
Thread.sleep(500);
} catch (InterruptedException e1) {
System.out.println(e1.getMessage());
System.out.println(e1);
}

try {
FileTransferManager manager = new FileTransferManager(connection);
FileTransferNegotiator.setServiceEnabled(connection, true);
InBandBytestreamManager ibm = InBandBytestreamManager
.getByteStreamManager(connection);
ibm.setMaximumBlockSize(26000);
FileTransferNegotiator.IBB_ONLY = true;
OutgoingFileTransfer transfer = manager
.createOutgoingFileTransfer(“receiver0@myservicename/Smack”);
transfer.sendFile(new File(filePath), “SampleBoardingPass”);
while (!transfer.isDone()) {
try {
Thread.sleep(50L);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
if (transfer.getStatus().equals(Status.complete)) {
System.out.println((new StringBuilder(" Status is “))
.append(transfer.getStatus())
.append(” and data size is !")
.append(transfer.getBytesSent()).toString());

} else {
System.out.println(“Inside else block…”
+ transfer.getStatus() + " : " + transfer.getError()
+ “:” + transfer.getException());
}
} catch (Exception e) {
System.out.println(e.getMessage());
System.out.println(e.fillInStackTrace());
}

}

public static void main(String args[]) {

try {
OSender.transferFile();
} catch (Exception e) {
e.printStackTrace();
}
}

}

Thanks a lot.