AnsweredAssumed Answered

Smack android incoming onStanza is different from debugger

Question asked by JanDP on Jul 28, 2017
Latest reply on Jul 28, 2017 by Flow

The Gajim client on windows and smack debbuger return this kind of stanza, same as the one in the xmpp specs.

 

 

    <message id='aeb213' to='juliet@capulet.lit/chamber'>

      <result xmlns='urn:xmpp:mam:2' queryid='f27' id='28482-98726-73623'>

        <forwarded xmlns='urn:xmpp:forward:0'>

          <delay xmlns='urn:xmpp:delay' stamp='2010-07-10T23:08:25Z'/>

          <message xmlns='jabber:client' from="witch@shakespeare.lit" to="macbeth@shakespeare.lit">

            <body>Hail to thee</body>

          </message>

        </forwarded>

      </result>

    </message>

 

 

yet on smack in `onStanza` it returns this one:

 

 

    <message to="juliet@capulet.lit/chamber" from="juliet@capulet.lit/chamber">

      <result xmlns="urn:xmpp:mam:0">

        <body>Hail to thee</body>

        <stanza-id/>

        <delay/>

        <archived/>

        <data/>

      </result>

    </message>

 

 

How do you fix this? Here's some parts of the code.

 

 

    public class XmppServiceSmackImpl implements XmppService, StanzaListener, ConnectionListener {

        XmppServiceListener xmppServiceListener;

        Logger logger = Logger.getLogger(XmppServiceSmackImpl.class.getName());

   

        XMPPTCPConnection connection;

        String password;

   

        public XmppServiceSmackImpl(XmppServiceListener xmppServiceListener) {

            this.xmppServiceListener = xmppServiceListener;

        }

   

        @Override

        public void setup(String jid, String password, String authMethod, String hostname, Integer port) {

            final String[] jidParts = jid.split("@");

            String[] serviceNameParts = jidParts[1].split("/");

            String serviceName = serviceNameParts[0];

   

            XMPPTCPConnectionConfiguration.Builder confBuilder = XMPPTCPConnectionConfiguration.builder()

                    .setServiceName(serviceName)

                    .setUsernameAndPassword(jidParts[0], password)

                    .setConnectTimeout(3000)

                    //.setDebuggerEnabled(true)

                    .setSecurityMode(ConnectionConfiguration.SecurityMode.required);

   

            if (serviceNameParts.length>1){

                confBuilder.setResource(serviceNameParts[1]);

            } else {

                confBuilder.setResource(Long.toHexString(Double.doubleToLongBits(Math.random()) ));

            }

            if (hostname != null){

                confBuilder.setHost(hostname);

            }

            if (port != null){

                confBuilder.setPort(port);

            }

            if (trustedHosts.contains(hostname) || (hostname == null && trustedHosts.contains(serviceName))){

                confBuilder.setCustomSSLContext(UnsafeSSLContext.INSTANCE.getContext());

            }

            XMPPTCPConnectionConfiguration connectionConfiguration = confBuilder.build();

            XMPPTCPConnection.setUseStreamManagementDefault(true);

            XMPPTCPConnection.setUseStreamManagementResumptionDefault(true);

            connection = new XMPPTCPConnection(connectionConfiguration);

   

            // Disable automatic roster request

            Roster roster = Roster.getInstanceFor(connection);

            roster.setRosterLoadedAtLogin(false);

            roster.setSubscriptionMode(Roster.SubscriptionMode.manual);

   

            connection.addAsyncStanzaListener(this, null);

            connection.addConnectionListener(this);

            connection.addStanzaAcknowledgedListener(this);

        }

 

 

        @Override

        public void processPacket(Stanza packet) throws SmackException.NotConnectedException {

            logger.log(Level.WARNING, "Received stanza: " + packet);

            this.xmppServiceListener.onStanza(packet);

          }

    }

Outcomes