Transferring files using smack in Android apps.

This error is logged.

from=' kutbi1@360degree /Smack' to=' akash@360degree /Smack' type='error' id='hK1L6-5'> <si xmlns='http://jabber.org/protocol/si' id='jsi_191216212994140179' mime-type='image/png' profile='http://jabber.org/protocol/si/profile/file-transfer'> <file xmlns='http://jabber.org/protocol/si/profile/file-transfer' name='this_old_house.png' size='12623'> <desc>You won&apos;t believe this!</desc></file> <feature xmlns='http://jabber.org/protocol/feature-neg'> <x xmlns='jabber:x:data' type='form'><field var='stream-method' type='list-multi'> <option><value>http://jabber.org/protocol/bytestreams</value></option> <option><value>http://jabber.org/protocol/ibb</value></option> </field> </x> </feature> </si> <error code='503' type='cancel'> <service-unavailable xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/> </error></iq> 

I use the following code here

  ServiceDiscoveryManager sdm = ServiceDiscoveryManager.getInstanceFor(Main.connection); if (sdm == null) sdm = new ServiceDiscoveryManager(Main.connection); sdm.addFeature("http://jabber.org/protocol/disco#info"); sdm.addFeature("jabber:iq:privacy"); FileTransferNegotiator.setServiceEnabled(Main.connection, true); FileTransferManager manager = new FileTransferManager(Main.connection); OutgoingFileTransfer transfer = manager.createOutgoingFileTransfer(id + "/Smack"); Log.i("transfere file", "outgoingfiletransfere is created"); try{ //OutgoingFileTransfer.setResponseTimeout(60000); transfer.sendFile(new File(txt_file.getText().toString()), "You won't believe this!"); if (transfer.getStatus().equals(Status.cancelled) || transfer.getStatus().equals(Status.refused)) { Log.d("Cancel", ""+transfer.getError()); System.out.println("Cancelled!!! " + transfer.getError()); } Log.i("transfere file", "sending file"); Log.d("FTTRY", "m in ft TRY"); btn_transfer.setText("Browse"); txt_file.setText("click on browse n Select File"); send_flag = true; }catch (Exception e) { Log.d("FTCATCH", "m in ft catch"); btn_transfer.setText("BrowseC"); send_flag = true; } while(!transfer.isDone()) { try{ Thread.sleep(1000); }catch (Exception e) { } Log.i("transfere file", "sending file status " + transfer.getStatus() + "progress: " + transfer.getProgress()); if(transfer.getStatus().equals(Status.error)) { System.out.println("ERROR!!! " + transfer.getError()); } else { System.out.println(transfer.getStatus()); System.out.println(transfer.getProgress()); Log.d("PROG", "m in ft progress"); } try{ Thread.sleep(1000); }catch (Exception e) { } } 
+6
source share
2 answers

I solved the same problem by following the procedure below.

I am using asmack-2010.05.07-source in eclipse for android-2.2.

Go to the ProviderManager class in asmack. Replace the following code

 Enumeration providerEnum = classLoader.getResources( "/META-INF/smack.providers"); 

with this

 Enumeration providerEnum = classLoader.getResources( "/data/smack.providers"); 

After that you need to make a patch. Add the following function before creating a new XMPPConnection . You can call this function with

  configure(ProviderManager.getInstance()); 

This is the method.

 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", new ChatStateExtension.Provider()); pm.addExtensionProvider("composing","http://jabber.org/protocol/chatstates", new ChatStateExtension.Provider()); pm.addExtensionProvider("paused","http://jabber.org/protocol/chatstates", new ChatStateExtension.Provider()); pm.addExtensionProvider("inactive","http://jabber.org/protocol/chatstates", new ChatStateExtension.Provider()); pm.addExtensionProvider("gone","http://jabber.org/protocol/chatstates", new ChatStateExtension.Provider()); // XHTML pm.addExtensionProvider("html","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", new DiscoverItemsProvider()); // Service Discovery # Info pm.addIQProvider("query","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", new MUCUserProvider()); // MUC Admin pm.addIQProvider("query","http://jabber.org/protocol/muc#admin", new MUCAdminProvider()); // MUC Owner pm.addIQProvider("query","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 happening here. } // VCard pm.addIQProvider("vCard","vcard-temp", new VCardProvider()); // Offline Message Requests pm.addIQProvider("offline","http://jabber.org/protocol/offline", new OfflineMessageRequest.Provider()); // Offline Message Indicator pm.addExtensionProvider("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", new SharedGroupsInfo.Provider()); // JEP-33: Extended Stanza Addressing pm.addExtensionProvider("addresses","http://jabber.org/protocol/address", new MultipleAddressesProvider()); // FileTransfer pm.addIQProvider("si","http://jabber.org/protocol/si", new StreamInitiationProvider()); pm.addIQProvider("query","http://jabber.org/protocol/bytestreams", new BytestreamsProvider()); pm.addIQProvider("open","http://jabber.org/protocol/ibb", new IBBProviders.Open()); pm.addIQProvider("close","http://jabber.org/protocol/ibb", new IBBProviders.Close()); pm.addExtensionProvider("data","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", new AdHocCommandDataProvider()); pm.addExtensionProvider("malformed-action", "http://jabber.org/protocol/commands", new AdHocCommandDataProvider.MalformedActionError()); pm.addExtensionProvider("bad-locale", "http://jabber.org/protocol/commands", new AdHocCommandDataProvider.BadLocaleError()); pm.addExtensionProvider("bad-payload", "http://jabber.org/protocol/commands", new AdHocCommandDataProvider.BadPayloadError()); pm.addExtensionProvider("bad-sessionid", "http://jabber.org/protocol/commands", new AdHocCommandDataProvider.BadSessionIDError()); pm.addExtensionProvider("session-expired", "http://jabber.org/protocol/commands", new AdHocCommandDataProvider.SessionExpiredError()); } 

I got the solution at the following link http://code.google.com/p/asmack/issues/detail?id=23

+1
source

Thanks, But I solved my problems. The problem is that the opposite user is not logged in. So I just installed the sparkx clip form form http://www.igniterealtime.org/downloads/download-landing.jsp?file=spark/spark_2_6_3.exe and logged in using another user and that he is.

Below is the full working code. you need to configure your server and port in General.java also I have fixed users in action, so you need to change it according to your configuration.

https://sites.google.com/site/fancifulandroid/android-projects/FiletransfarXMPP.rar?attredirects=0&d=1

+1
source

Source: https://habr.com/ru/post/911175/


All Articles