Hi,
I am not able to tranfer file using smack3.2.1 client from Android. Please help I am struck here.
Here is the code that I am using :
FileTransfer.java code
package com.testchat;
import java.io.File;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.provider.PrivacyProvider;
import org.jivesoftware.smack.provider.ProviderManager;
import org.jivesoftware.smackx.GroupChatInvitation;
import org.jivesoftware.smackx.PrivateDataManager;
import org.jivesoftware.smackx.ServiceDiscoveryManager;
import org.jivesoftware.smackx.bytestreams.socks5.provider.BytestreamsProvider;
import org.jivesoftware.smackx.filetransfer.FileTransfer.Status;
import org.jivesoftware.smackx.filetransfer.FileTransferListener;
import org.jivesoftware.smackx.filetransfer.FileTransferManager;
import org.jivesoftware.smackx.filetransfer.FileTransferNegotiator;
import org.jivesoftware.smackx.filetransfer.FileTransferRequest;
import org.jivesoftware.smackx.filetransfer.IncomingFileTransfer;
import org.jivesoftware.smackx.filetransfer.OutgoingFileTransfer;
import org.jivesoftware.smackx.packet.ChatStateExtension;
import org.jivesoftware.smackx.packet.LastActivity;
import org.jivesoftware.smackx.packet.OfflineMessageInfo;
import org.jivesoftware.smackx.packet.OfflineMessageRequest;
import org.jivesoftware.smackx.packet.SharedGroupsInfo;
import org.jivesoftware.smackx.provider.AdHocCommandDataProvider;
import org.jivesoftware.smackx.provider.DataFormProvider;
import org.jivesoftware.smackx.provider.DelayInformationProvider;
import org.jivesoftware.smackx.provider.DiscoverInfoProvider;
import org.jivesoftware.smackx.provider.DiscoverItemsProvider;
import org.jivesoftware.smackx.provider.MUCAdminProvider;
import org.jivesoftware.smackx.provider.MUCOwnerProvider;
import org.jivesoftware.smackx.provider.MUCUserProvider;
import org.jivesoftware.smackx.provider.MessageEventProvider;
import org.jivesoftware.smackx.provider.MultipleAddressesProvider;
import org.jivesoftware.smackx.provider.RosterExchangeProvider;
import org.jivesoftware.smackx.provider.StreamInitiationProvider;
import org.jivesoftware.smackx.provider.VCardProvider;
import org.jivesoftware.smackx.provider.XHTMLExtensionProvider;
import org.jivesoftware.smackx.search.UserSearch;
import android.util.Log;
public class FileTransfer {
/*public void configure(ProviderManager pm){
pm.addIQProvider(“query”,“jabber:iq:private”, new PrivateDataManager.PrivateDataIQProvider());
// Time
try {
pm.addIQProvider(“query”,“jabber:iq:time”, Class.forName(“org.jivesoftware.smackx.packet.Time”));
} catch (ClassNotFoundException e) {
StackTraceElement(e);
//Log.w(Tools.LOG_TAG, “Can’t load class for org.jivesoftware.smackx.packet.Time”);
}
// XHTML
pm.addExtensionProvider("html","[http://jabber.org/protocol/xhtml-im](http://jabber.org/protocol/xhtml-im)", new XHTMLExtensionProvider());
// Roster Exchange
pm.addExtensionProvider(“x”,“jabber:x:roster”, new RosterExchangeProvider());
// Message Events
pm.addExtensionProvider(“x”,“jabber:x:event”, new MessageEventProvider());
// Chat State
pm.addExtensionProvider("active","[http://jabber.org/protocol/chatstates](http://jabber.org/protocol/chatstates)", new ChatStateExtension.Provider());
pm.addExtensionProvider("composing","[http://jabber.org/protocol/chatstates](http://jabber.org/protocol/chatstates)", new ChatStateExtension.Provider());
pm.addExtensionProvider("paused","[http://jabber.org/protocol/chatstates](http://jabber.org/protocol/chatstates)", new ChatStateExtension.Provider());
pm.addExtensionProvider("inactive","[http://jabber.org/protocol/chatstates](http://jabber.org/protocol/chatstates)", new ChatStateExtension.Provider());
pm.addExtensionProvider("gone","[http://jabber.org/protocol/chatstates](http://jabber.org/protocol/chatstates)", new ChatStateExtension.Provider());
// FileTransfer
pm.addIQProvider("si","[http://jabber.org/protocol/si](http://jabber.org/protocol/si)", new StreamInitiationProvider());
pm.addIQProvider("query","[http://jabber.org/protocol/bytestreams](http://jabber.org/protocol/bytestreams)", new BytestreamsProvider());
pm.addIQProvider("open","[http://jabber.org/protocol/ibb](http://jabber.org/protocol/ibb)", new OpenIQProvider());
pm.addIQProvider("close","[http://jabber.org/protocol/ibb](http://jabber.org/protocol/ibb)", new CloseIQProvider());
pm.addExtensionProvider("data","[http://jabber.org/protocol/ibb](http://jabber.org/protocol/ibb)", new DataPacketProvider());
// Group Chat Invitations
pm.addExtensionProvider(“x”,“jabber:x:conference”, new GroupChatInvitation.Provider());
// Service Discovery # Items
pm.addIQProvider("query","[http://jabber.org/protocol/disco#items](http://jabber.org/protocol/disco#items)", new DiscoverItemsProvider());
// Service Discovery # Info
pm.addIQProvider("query","[http://jabber.org/protocol/disco#info](http://jabber.org/protocol/disco#info)", new DiscoverInfoProvider());
// Data Forms
pm.addExtensionProvider(“x”,“jabber:x:data”, new DataFormProvider());
// MUC User
pm.addExtensionProvider("x","[http://jabber.org/protocol/muc#user](http://jabber.org/protocol/muc#user)", new MUCUserProvider());
// MUC Admin
pm.addIQProvider("query","[http://jabber.org/protocol/muc#admin](http://jabber.org/protocol/muc#admin)", new MUCAdminProvider());
// MUC Owner
pm.addIQProvider("query","[http://jabber.org/protocol/muc#owner](http://jabber.org/protocol/muc#owner)", new MUCOwnerProvider());
// Delayed Delivery
pm.addExtensionProvider(“x”,“jabber:x:delay”, new DelayInformationProvider());
// Version
try {
pm.addIQProvider(“query”,“jabber:iq:version”, Class.forName(“org.jivesoftware.smackx.packet.Version”));
} catch (ClassNotFoundException e) {
//Log.w(Tools.LOG_TAG, “Can’t load class for org.jivesoftware.smackx.packet.Version”);
}
// VCard
pm.addIQProvider(“vCard”,“vcard-temp”, new VCardProvider());
// Offline Message Requests
pm.addIQProvider("offline","[http://jabber.org/protocol/offline](http://jabber.org/protocol/offline)", new OfflineMessageRequest.Provider());
// Offline Message Indicator
pm.addExtensionProvider("offline","[http://jabber.org/protocol/offline](http://jabber.org/protocol/offline)", new OfflineMessageInfo.Provider());
// Last Activity
pm.addIQProvider(“query”,“jabber:iq:last”, new LastActivity.Provider());
// User Search
pm.addIQProvider(“query”,“jabber:iq:search”, new UserSearch.Provider());
// SharedGroupsInfo
pm.addIQProvider("sharedgroup","[http://www.jivesoftware.org/protocol/sharedgroup](http://www.jivesoftware.org/protocol/sharedgroup)", new SharedGroupsInfo.Provider());
// JEP-33: Extended Stanza Addressing
pm.addExtensionProvider("addresses","[http://jabber.org/protocol/address](http://jabber.org/protocol/address)", new MultipleAddressesProvider());
}
private void StackTraceElement(ClassNotFoundException e) {
// TODO Auto-generated method stub
}*/
public void configure(ProviderManager pm) {
// Private Data Storage
pm.addIQProvider(“query”, “jabber:iq:private”,new PrivateDataManager.PrivateDataIQProvider());
// Time
try {
pm.addIQProvider(“query”, “jabber:iq:time”,
Class.forName(“org.jivesoftware.smackx.packet.Time”));
} catch (ClassNotFoundException e) {
Log.w(“TestClient”,
“Can’t load class for org.jivesoftware.smackx.packet.Time”);
}
// Roster Exchange
pm.addExtensionProvider(“x”, “jabber:x:roster”,
new RosterExchangeProvider());
// Message Events
pm.addExtensionProvider(“x”, “jabber:x:event”,
new MessageEventProvider());
// Chat State
pm.addExtensionProvider(“active”,
"[http://jabber.org/protocol/chatstates](http://jabber.org/protocol/chatstates)",
new ChatStateExtension.Provider());
pm.addExtensionProvider(“composing”,
"[http://jabber.org/protocol/chatstates](http://jabber.org/protocol/chatstates)",
new ChatStateExtension.Provider());
pm.addExtensionProvider(“paused”,
"[http://jabber.org/protocol/chatstates](http://jabber.org/protocol/chatstates)",
new ChatStateExtension.Provider());
pm.addExtensionProvider(“inactive”,
"[http://jabber.org/protocol/chatstates](http://jabber.org/protocol/chatstates)",
new ChatStateExtension.Provider());
pm.addExtensionProvider(“gone”,
"[http://jabber.org/protocol/chatstates](http://jabber.org/protocol/chatstates)",
new ChatStateExtension.Provider());
// XHTML
pm.addExtensionProvider("html", "[http://jabber.org/protocol/xhtml-im](http://jabber.org/protocol/xhtml-im)",
new XHTMLExtensionProvider());
// Group Chat Invitations
pm.addExtensionProvider(“x”, “jabber:x:conference”,
new GroupChatInvitation.Provider());
// Service Discovery # Items
pm.addIQProvider("query", "[http://jabber.org/protocol/disco#items](http://jabber.org/protocol/disco#items)",
new DiscoverItemsProvider());
// Service Discovery # Info
pm.addIQProvider("query", "[http://jabber.org/protocol/disco#info](http://jabber.org/protocol/disco#info)",
new DiscoverInfoProvider());
// Data Forms
pm.addExtensionProvider(“x”, “jabber:x:data”, new DataFormProvider());
// MUC User
pm.addExtensionProvider("x", "[http://jabber.org/protocol/muc#user](http://jabber.org/protocol/muc#user)",
new MUCUserProvider());
// MUC Admin
pm.addIQProvider("query", "[http://jabber.org/protocol/muc#admin](http://jabber.org/protocol/muc#admin)",
new MUCAdminProvider());
// MUC Owner
pm.addIQProvider("query", "[http://jabber.org/protocol/muc#owner](http://jabber.org/protocol/muc#owner)",
new MUCOwnerProvider());
// Delayed Delivery
pm.addExtensionProvider(“x”, “jabber:x:delay”,
new DelayInformationProvider());
// Version
try {
pm.addIQProvider(“query”, “jabber:iq:version”,
Class.forName(“org.jivesoftware.smackx.packet.Version”));
} catch (ClassNotFoundException e) {
// Not sure what’s happening here.
}
// VCard
pm.addIQProvider(“vCard”, “vcard-temp”, new VCardProvider());
// Offline Message Requests
pm.addIQProvider("offline", "[http://jabber.org/protocol/offline](http://jabber.org/protocol/offline)",
new OfflineMessageRequest.Provider());
// Offline Message Indicator
pm.addExtensionProvider(“offline”,
"[http://jabber.org/protocol/offline](http://jabber.org/protocol/offline)",
new OfflineMessageInfo.Provider());
// Last Activity
pm.addIQProvider(“query”, “jabber:iq:last”, new LastActivity.Provider());
// User Search
pm.addIQProvider(“query”, “jabber:iq:search”, new UserSearch.Provider());
// SharedGroupsInfo
pm.addIQProvider(“sharedgroup”,
"[http://www.jivesoftware.org/protocol/sharedgroup](http://www.jivesoftware.org/protocol/sharedgroup)",
new SharedGroupsInfo.Provider());
// JEP-33: Extended Stanza Addressing
pm.addExtensionProvider(“addresses”,
"[http://jabber.org/protocol/address](http://jabber.org/protocol/address)",
new MultipleAddressesProvider());
// FileTransfer
pm.addIQProvider("si", "[http://jabber.org/protocol/si](http://jabber.org/protocol/si)",
new StreamInitiationProvider());
pm.addIQProvider("query", "[http://jabber.org/protocol/bytestreams](http://jabber.org/protocol/bytestreams)",
new BytestreamsProvider());
// pm.addIQProvider("open","[http://jabber.org/protocol/ibb](http://jabber.org/protocol/ibb)", new
// IBBProviders.Open());
//
// pm.addIQProvider("close","[http://jabber.org/protocol/ibb](http://jabber.org/protocol/ibb)", new
// IBBProviders.Close());
//
// pm.addExtensionProvider("data","[http://jabber.org/protocol/ibb](http://jabber.org/protocol/ibb)", new
// IBBProviders.Data());
//
// Privacy
pm.addIQProvider(“query”, “jabber:iq:privacy”, new PrivacyProvider());
pm.addIQProvider("command", "[http://jabber.org/protocol/commands](http://jabber.org/protocol/commands)",
new AdHocCommandDataProvider());
pm.addExtensionProvider(“malformed-action”,
"[http://jabber.org/protocol/commands](http://jabber.org/protocol/commands)",
new AdHocCommandDataProvider.MalformedActionError());
pm.addExtensionProvider(“bad-locale”,
"[http://jabber.org/protocol/commands](http://jabber.org/protocol/commands)",
new AdHocCommandDataProvider.BadLocaleError());
pm.addExtensionProvider(“bad-payload”,
"[http://jabber.org/protocol/commands](http://jabber.org/protocol/commands)",
new AdHocCommandDataProvider.BadPayloadError());
pm.addExtensionProvider(“bad-sessionid”,
"[http://jabber.org/protocol/commands](http://jabber.org/protocol/commands)",
new AdHocCommandDataProvider.BadSessionIDError());
pm.addExtensionProvider(“session-expired”,
"[http://jabber.org/protocol/commands](http://jabber.org/protocol/commands)",
new AdHocCommandDataProvider.SessionExpiredError());
}
public void SendFile(final String Receiver, final String Directory,
final XMPPConnection connection) {
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 + "@domain.com"
- “/Smack”);
Log.i(“transfere file”, “outgoingfiletransfere is created”);
try {
OutgoingFileTransfer.setResponseTimeout(30000);
transfer.sendFile(new File(Directory), “Description”);
Log.i(“transfere file”, “sending file”);
while (!transfer.isDone()) {
try {
Thread.sleep(1000);
Log.i(“transfere file”, "sending file status "
-
transfer.getStatus() + "progress: "
-
transfer.getProgress());
if (transfer.getStatus() == Status.error) {
transfer.cancel();
break;
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} catch (XMPPException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.i(“transfere file”, “sending file done”);
}
};
thread.start();
}
public void ReceiveFile() {
Thread thread = new Thread() {
public void run(XMPPConnection connection) {
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 {
transfer.recieveFile(new File("/sdcard/"
- request.getFileName()));
while (!transfer.isDone()
|| (transfer.getProgress() < 1)) {
Thread.sleep(1000);
Log.i(“Recieve File alert dialog”,
"still receiving : "
- (transfer
.getProgress())
-
" status "
-
transfer.getStatus());
if (transfer.getStatus().equals(
Status.error)) {
Log.i(“Recieve File alert dialog”,
"cancelling still receiving : "
- (transfer
.getProgress())
-
" status "
-
transfer
.getStatus());
transfer.cancel();
break;
}
}
} catch (XMPPException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
};
thread.start();
}
}
Android Code:
package com.testchat;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.provider.ProviderManager;
import android.app.Dialog;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
/**
- Gather the xmpp settings and create an XMPPConnection
*/
public class SettingsDialog extends Dialog implements
android.view.View.OnClickListener {
private XMPPClient xmppClient;
private XMPPConnection connection;
private FileTransfer fileTransfer;
public SettingsDialog(XMPPClient xmppClient) {
super(xmppClient);
this.xmppClient = xmppClient;
}
protected void onStart() {
super.onStart();
setContentView(R.layout.settings);
getWindow().setFlags(4, 4);
setTitle(“XMPP Settings”);
Button ok = (Button) findViewById(R.id.ok);
EditText hostEditText = (EditText) findViewById(R.id.host);
// hostEditText.setText(“talk.google.com”);
hostEditText.setText(“192.168.1.14”);
EditText portText = (EditText) findViewById(R.id.port);
// portText.setText(“5222”);
portText.setText(“5222”);
EditText serviceText = (EditText) findViewById(R.id.service);
// serviceText.setText(“gmail.com”);
serviceText.setText(“192.168.1.14”);
EditText usernameText = (EditText) findViewById(R.id.userid);
// usernameText.setText("vakn.app@gmail.com");
usernameText.setText(“admin”);
EditText passwordText = (EditText) findViewById(R.id.password);
// passwordText.setText(“y13029264”);
passwordText.setText(“admin”);
ok.setOnClickListener(this);
}
public void onClick(View v) {
String host = getText(R.id.host);
String port = getText(R.id.port);
String service = getText(R.id.service);
String username = getText(R.id.userid);
String password = getText(R.id.password);
// Create a connection
ConnectionConfiguration connConfig = new ConnectionConfiguration(host, Integer.parseInt(port), service);
connConfig.setReconnectionAllowed(true);
connConfig.setSASLAuthenticationEnabled(false);
// connConfig.setDebuggerEnabled(true);
ProviderManager pm = ProviderManager.getInstance();
fileTransfer.configure(pm);
XMPPConnection connection = new XMPPConnection(connConfig);
try {
connection.connect();
Log.i(“XMPPClient”,
"[SettingsDialog] Connected to " + connection.getHost());
} catch (XMPPException ex) {
Log.e(“XMPPClient”, "[SettingsDialog] Failed to connect to "
- connection.getHost());
Log.e(“XMPPClient”, ex.toString());
xmppClient.setConnection(null);
}
try {
connection.login(username, password);
Log.i(“XMPPClient”, "Logged in as " + connection.getUser());
// Set the status to available
Presence presence = new Presence(Presence.Type.available);
connection.sendPacket(presence);
xmppClient.setConnection(connection);
} catch (XMPPException ex) {
Log.e(“XMPPClient”, "[SettingsDialog] Failed to log in as "
- username);
Log.e(“XMPPClient”, ex.toString());
xmppClient.setConnection(null);
}
dismiss();
}
private String getText(int id) {
EditText widget = (EditText) this.findViewById(id);
return widget.getText().toString();
}
}
Regards,
Vikash