XMPP Stream difference between smack 4.1.0 and 4.0.3

Hello,

I’m trying to update my smack client from 4.0.3 to 4.1.0, however I’m seeing some difference in the XMPP stream when trying to re-authenticate (i.e. login again without disconnecting the subscriber):

The older version of smack has this stream (I’ve bolded the difference with the new stream):

  • Accepted connection server:port -> xmpp_server:5222
  • Received XML on stream = <<"<stream:stream to=“server” xmlns=“jabber:client” xmlns:stream=“http://etherx.jabber.org/streams” version=“1.0”>">>
  • Send XML on stream = <<"<?xml version='1.0'?><stream:stream xmlns=‘jabber:client’ xmlns:stream=‘http://etherx.jabber.org/streams’ id=‘fake_id’ from=‘server’ version=‘1.0’ xml:lang=‘en’>">>
  • Send XML on stream = <<“stream:featuresPLAIN</mechanis ms></stream:features>”>>
  • Received XML on stream = <<"<starttls xmlns=“urn:ietf:params:xml:ns:xmpp-tls”/>">>
  • Received XML on stream = <<"<stream:stream to=“server” xmlns=“jabber:client” xmlns:stream=“http://etherx.jabber.org/streams” version=“1.0”>">>
  • Send XML on stream = <<"<?xml version='1.0'?><stream:stream xmlns=‘jabber:client’ xmlns:stream=‘http://etherx.jabber.org/streams’ id=‘1432685044’ from=‘server’ version=‘1.0’ xml:lang=‘en’>">>
  • Send XML on stream = <<“stream:featuresPLAIN</mechanis ms></stream:features>”>>
  • Received XML on stream = <<"</stream:stream>">>
  • Send XML on stream = <<"</stream:stream>">>
  • Accepted connection server:port -> xmpp_server:5222
  • Received XML on stream = <<"<stream:stream to=“server” xmlns=“jabber:client” xmlns:stream=“http://etherx.jabber.org/streams” version=“1.0”>">>
  • Send XML on stream = <<"<?xml version='1.0'?><stream:stream xmlns=‘jabber:client’ xmlns:stream=‘http://etherx.jabber.org/streams’ id=‘fake_id’ from=‘server’ version=‘1.0’ xml:lang=‘en’>">>
  • Send XML on stream = <<“stream:featuresPLAIN</mechanis ms></stream:features>”>>
  • Received XML on stream = <<"<starttls xmlns=“urn:ietf:params:xml:ns:xmpp-tls”/>">>
  • Received XML on stream = <<"<stream:stream to=“server” xmlns=“jabber:client” xmlns:stream=“http://etherx.jabber.org/streams” version=“1.0”>">>
  • Send XML on stream = <<"<?xml version='1.0'?><stream:stream xmlns=‘jabber:client’ xmlns:stream=‘http://etherx.jabber.org/streams’ id=‘3939343755’ from=‘server’ version=‘1.0’ xml:lang=‘en’>">>
  • Send XML on stream = <<“stream:featuresPLAIN</mechanis ms></stream:features>”>>
  • Received XML on stream = <<"<auth mechanism=“PLAIN” xmlns=“urn:ietf:params:xml:ns:xmpp-sasl”>MjM0NTU1MzAxMgAyMzQ1NTUzMDEyADcyODQ= ">>
  • Send XML on stream = <<"">>
  • Received XML on stream = <<"<stream:stream to=“server” xmlns=“jabber:client” xmlns:stream=“http://etherx.jabber.org/streams” version=“1.0”>">>
  • Send XML on stream = <<"<?xml version='1.0'?><stream:stream xmlns=‘jabber:client’ xmlns:stream=‘http://etherx.jabber.org/streams’ id=‘fake_id’ from=‘server’ version=‘1.0’ xml:lang=‘en’>">>
  • Send XML on stream = <<“stream:features</stream:features>”>>
  • Closing former stream of resumed session for number2@server/resource2
  • Send XML on stream = <<"">>
  • Send XML on stream = <<"">>
  • Resumed session for number2@server/resource2
  • Received XML on stream = <<"<a xmlns=“urn:xmpp:sm:2” h=“1”/>">>

New stream using smack 4.1.0:

  • Received XML on stream = <<"<stream:stream xmlns=‘jabber:client’ to=‘server’ xmlns:stream=‘http://etherx.jabber.org/streams’ version=‘1.0’ from=‘number1@server’ xml:lang=‘en’>">>
  • Send XML on stream = <<"<?xml version='1.0'?><stream:stream xmlns=‘jabber:client’ xmlns:stream=‘http://etherx.jabber.org/streams’ id=‘2395068889’ from=‘server’ version=‘1.0’ xml:lang=‘en’>">>
  • Send XML on stream = <<“stream:featuresPLAIN</mechanis ms></stream:features>”>>
  • Received XML on stream = <<"">>
  • Received XML on stream = <<"<stream:stream xmlns=‘jabber:client’ to=‘server’ xmlns:stream=‘http://etherx.jabber.org/streams’ version=‘1.0’ from=‘number1@server’ xml:lang=‘en’>">>
  • Send XML on stream = <<"<?xml version='1.0'?><stream:stream xmlns=‘jabber:client’ xmlns:stream=‘http://etherx.jabber.org/streams’ id=‘3615464713’ from=‘server’ version=‘1.0’ xml:lang=‘en’>">>
  • Send XML on stream = <<“stream:featuresPLAIN</mechanis ms></stream:features>”>>
  • Received XML on stream = <<“ADIzNDU1NTUwMDAAc2Vzc2lvbi5hY2Nlc3Npb24ubWV0YXN3aXRjaC5jb209M jg3MDJiMzZjZGZkYmI5Zg==”>>
  • Send XML on stream = <<"">>
  • Received XML on stream = <<"<stream:stream xmlns=‘jabber:client’ to=‘server’ xmlns:stream=‘http://etherx.jabber.org/streams’ version=‘1.0’ from=‘number1@server’ id=‘3615464713’ xml:lang=‘en’>">>
  • Send XML on stream = <<"<?xml version='1.0'?><stream:stream xmlns=‘jabber:client’ xmlns:stream=‘http://etherx.jabber.org/streams’ id=‘1353794583’ from=‘server’ version=‘1.0’ xml:lang=‘en’>">>
  • Send XML on stream = <<“stream:features</stream:features>”>>
  • Received XML on stream = <<"Smack ">>
  • Send XML on stream = <<“number1@server/Smack”>>
  • Received XML on stream = <<"">>
  • Send XML on stream = <<"">>
  • Send XML on stream = <<“stream:errorReplaced by new connection</stream:error>”>>
  • Send XML on stream = <<"</stream:stream>">>
  • Received XML on stream = <<"">>
  • Send XML on stream = <<"">>
  • Received XML on stream = <<"">>
  • Send XML on stream = [<<"">>,<<"">>]
  • Send XML on stream = [<<"">>,<<"">>]
  • Received XML on stream = <<"">>
  • Send XML on stream = [<<"">>,<<"">>]
  • Received XML on stream = <<"">>
  • Received XML on stream = <<"">>

Does anyone know why I’m getting this difference? Are there any parameters I can set so that I get the same flow as before when re-authenticating the subscriber? Any help you can provide will be greatly appreciated.

Since when had Smack 4.0 support for Stream Management? Are you running a modified version of Smack 4.0?

The trace is also incomplete, e.g. there is no ‘proceed’ to ‘starttls’. And, it’s terrible to read and comprehend since angle brackets are used together with a quote sign (<<") to quote the XML. If you would just write

RECV: <message …>

SEND: <iq …>

it would be far easier to follow.

Also please describe the difference in simple english, as I’m unable to read anything like that out of the XMPP trace.

Hi Flow,

My apologies for the formatting, I’ve fixed it up a bit.

Yes, I was running a modified version of smack which had stream management implemented separately, I don’t know the details of it as I wasn’t the one who implemented it. I’m just posting here in case you’d know how to achieve the same stream with smack 4.1.0 since it nows supports stream management.

I’ve bolded the actual difference in the flow itself now so that it should be easier to see. In the new smack we get a stream replaced error.

For the missing bits I’m not sure yet, I will try to get the complete logs and respond here.

Accepted connection server:port -> xmpp_server:5222

RECV: <stream:stream to=“server” xmlns=“jabber:client” xmlns:stream=“http://etherx.jabber.org/streams” version=“1.0”>

SEND: <?xml version='1.0'?><stream:stream xmlns=‘jabber:client’ xmlns:stream=‘http://etherx.jabber.org/streams’ id=‘fake_id’ from=‘server’ version=‘1.0’ xml:lang=‘en’>

SEND: stream:featuresPLAIN</mechanis ms></stream:features>

RECV: <starttls xmlns=“urn:ietf:params:xml:ns:xmpp-tls”/>

RECV: <stream:stream to=“server” xmlns=“jabber:client” xmlns:stream=“http://etherx.jabber.org/streams” version=“1.0”>

SEND: <?xml version='1.0'?><stream:stream xmlns=‘jabber:client’ xmlns:stream=‘http://etherx.jabber.org/streams’ id=‘1432685044’ from=‘server’ version=‘1.0’ xml:lang=‘en’>

SEND: stream:featuresPLAIN</mechanis ms></stream:features>

RECV: </stream:stream>

SEND: </stream:stream>

Accepted connection server:port -> xmpp_server:5222

RECV: <stream:stream to=“server” xmlns=“jabber:client” xmlns:stream=“http://etherx.jabber.org/streams” version=“1.0”>

SEND: <?xml version='1.0'?><stream:stream xmlns=‘jabber:client’ xmlns:stream=‘http://etherx.jabber.org/streams’ id=‘fake_id’ from=‘server’ version=‘1.0’ xml:lang=‘en’>

SEND: stream:featuresPLAIN</mechanis ms></stream:features>

RECV: <starttls xmlns=“urn:ietf:params:xml:ns:xmpp-tls”/>

RECV: <stream:stream to=“server” xmlns=“jabber:client” xmlns:stream=“http://etherx.jabber.org/streams” version=“1.0”>

SEND: <?xml version='1.0'?><stream:stream xmlns=‘jabber:client’ xmlns:stream=‘http://etherx.jabber.org/streams’ id=‘3939343755’ from=‘server’ version=‘1.0’ xml:lang=‘en’>

SEND: stream:featuresPLAIN</mechanis ms></stream:features>

RECV: <auth mechanism=“PLAIN” xmlns=“urn:ietf:params:xml:ns:xmpp-sasl”>MjM0NTU1MzAxMgAyMzQ1NTUzMDEyADcyODQ=

SEND:

RECV: <stream:stream to=“server” xmlns=“jabber:client” xmlns:stream=“http://etherx.jabber.org/streams” version=“1.0”>

SEND: <?xml version='1.0'?><stream:stream xmlns=‘jabber:client’ xmlns:stream=‘http://etherx.jabber.org/streams’ id=‘fake_id’ from=‘server’ version=‘1.0’ xml:lang=‘en’>

SEND: stream:features</stream:features>

Closing former stream of resumed session for number2@server/resource2

SEND:

SEND:

Resumed session for number2@server/resource2

RECV: <a xmlns=“urn:xmpp:sm:2” h=“1”/>

New stream using smack 4.1.0:

RECV: <stream:stream xmlns=‘jabber:client’ to=‘server’ xmlns:stream=‘http://etherx.jabber.org/streams’ version=‘1.0’ from=‘number1@server’ xml:lang=‘en’>

SEND: <?xml version='1.0'?><stream:stream xmlns=‘jabber:client’ xmlns:stream=‘http://etherx.jabber.org/streams’ id=‘2395068889’ from=‘server’ version=‘1.0’ xml:lang=‘en’>

SEND: stream:featuresPLAIN</mechanis ms></stream:features>

RECV:

RECV: <stream:stream xmlns=‘jabber:client’ to=‘server’ xmlns:stream=‘http://etherx.jabber.org/streams’ version=‘1.0’ from=‘number1@server’ xml:lang=‘en’>

SEND: <?xml version='1.0'?><stream:stream xmlns=‘jabber:client’ xmlns:stream=‘http://etherx.jabber.org/streams’ id=‘3615464713’ from=‘server’ version=‘1.0’ xml:lang=‘en’>

SEND: stream:featuresPLAIN</mechanis ms></stream:features>

RECV: ADIzNDU1NTUwMDAAc2Vzc2lvbi5hY2Nlc3Npb24ubWV0YXN3aXRjaC5jb209M jg3MDJiMzZjZGZkYmI5Zg==

SEND:

RECV: <stream:stream xmlns=‘jabber:client’ to=‘server’ xmlns:stream=‘http://etherx.jabber.org/streams’ version=‘1.0’ from=‘number1@server’ id=‘3615464713’ xml:lang=‘en’>

SEND: <?xml version='1.0'?><stream:stream xmlns=‘jabber:client’ xmlns:stream=‘http://etherx.jabber.org/streams’ id=‘1353794583’ from=‘server’ version=‘1.0’ xml:lang=‘en’>

SEND: stream:features</stream:features>

**RECV: Smack **

SEND: number1@server/Smack

RECV:

SEND:

SEND: stream:errorReplaced by new connection</stream:error>

SEND: </stream:stream>

RECV:

SEND:

RECV:

SEND: [,]

SEND: [,]

RECV:

SEND: [,]

RECV:

RECV:

which version of 4.1 do you use?

I’m currently using 4.1.0-rc1

Use rc3!