0

我有一个安装了监控服务插件的 openfire 服务器来存档聊天消息。来自此处提供的链接XMPP Message Archiving

我已发送以下节:

<iq type='get' id='juliet1'>
<list xmlns='urn:xmpp:archive'
    with='juliet@myserver.com'>
<set xmlns='http://jabber.org/protocol/rsm'>
  <max>30</max>
</set>
</list>
</iq>

在我的 android 服务上使用这个命令:

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

但是,不幸的是,服务器回复:

<iq type="error" to="juliet@myserver.com/Smack"><error code="501" type="cancel"><feature-not-implemented xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></iq>

嗯,那么我怎样才能正确检索聊天消息?

4

2 回答 2

1

试试这个发送和接收数据包试试这个

if (connection.isConnected()) { 
                 connection.login("username", "password");              
                 CustomIQ  myIQ = new CustomIQ();
                 myIQ. setType(IQ.Type.SET); 
                 myIQ.setTo("juliet@myserver.com/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='juliet@myserver.com/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;
         } 
   }

希望对你有帮助...!!

于 2014-11-25T05:21:40.727 回答
0

我正在使用 asmack 和 openfire 进行聊天项目,但是当我尝试发送文件时也收到错误 501。我阅读了许多未加载提供程序的帖子。试试这个,我希望它有帮助。我刚刚解决了我的错误 501 问题。这是一个服务器问题。代理端口。

     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());
}
于 2013-08-13T08:44:17.163 回答