0
votes

I have an openfire server with monitoring service plugin installed to archived chat messages. From the link provided here XMPP Message Archiving

i've send following stanza:

<iq type='get' id='juliet1'>
<list xmlns='urn:xmpp:archive'
    with='[email protected]'>
<set xmlns='http://jabber.org/protocol/rsm'>
  <max>30</max>
</set>
</list>
</iq>

Using this command on my android service:

Packet packet = new Packet() {
        @Override
        public String toXML() {
            String xExtension = "<iq type=\"get\" id=\"juliet1\">"+
            "<list xmlns=\"urn:xmpp:archive\""+
                    " with=\"[email protected]\">"+
            "<set xmlns=\"http://jabber.org/protocol/rsm\"><max>10</max></set></list></iq>";
            return xExtension;
        }
    };
    clientApplication.getXmppConnection().sendPacket(packet);

But, unfortunately the server reply with:

<iq type="error" to="[email protected]/Smack"><error code="501" type="cancel"><feature-not-implemented xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></iq>

hmmmm, so how can I retrieve chat messages correctly?

2

2 Answers

1
votes

Try this for sending & receiving packets try this

if (connection.isConnected()) { 
                 connection.login("username", "password");              
                 CustomIQ  myIQ = new CustomIQ();
                 myIQ. setType(IQ.Type.SET); 
                 myIQ.setTo("[email protected]/Smack");
                 connection.sendPacket(myIQ);

//The listener for receiving all the packets from the peer device
connection.addPacketListener( new PacketListener() {
                @Override
                public void processPacket(Packet packet) {
                    if( packet.getClass() == JingleIQ.class ) {
                        JingleIQ j = (JingleIQ) packet;
                        System.out.println("packet details"+packet.toXML()+" <---- : [jingle packet] " + j.getSID() + " : " + j.getAction() + " : " + packet.toXML() );
                        System.out.println(" <---- : [jingle packet] " + j.getXmlns()+ " : " + j.getFrom() + " : " + j.getTo() );
                    } 
                }},
                new PacketFilter() {
                @Override
                public boolean accept(Packet packet) {
                    System.out.println(" <---- : [jingle packet] " + packet.toXML() );                  
                    return true;
                }} );


//My custom IQ class
class CustomIQ extends IQ {

          public String getChildElementXML() {                        
                        String request =  "<jingle initiator='[email protected]/Smack' sid='1' xmlns='urn:xmpp:jingle:1' action='session-initiate' compatibility='RFC5245'>" 
                       +"<content name='video' creator='initiator'>" +
                       "<description xmlns='urn:xmpp:jingle:apps:rtp:1' media='type of file'</description>" +
                       "<transport pwd='fcX/0ZyOQNCBMs6c8H3ZIM' ufrag='L8Y0' xmlns='urn:xmpp:jingle:transports:ice-udp:1'>" +                       
                       "</transport>" +
                       "</content>" +
                       "</jingle>";
                        return request;
         } 
   }

Hope this will help you...!!

0
votes

I am working on a chat project using also asmack and openfire but I get also error 501 when I try to send a file.. I read on many posts that the Provider isen't loaded. Try this I hope it helps. I resolved my error 501 problem just now. It was a server problem. Proxy port.

     configureProvider(ProviderManager.getInstance());

     public void configureProvider(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's 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 OpenIQProvider());
    pm.addIQProvider("close", "http://jabber.org/protocol/ibb", new CloseIQProvider());
    pm.addExtensionProvider("data", "http://jabber.org/protocol/ibb", new DataPacketProvider());

    // 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());
}