Does Smack 4.4.8 support 5223-Direct TLS?

The team requested 5223-Direct TLS and successfully connected using Gajim. When I implemented it using Smack 4.4.8,:

 val config = XMPPTCPConnectionConfiguration.builder()
                                .setUsernameAndPassword(username, pwd)
                                .setXmppDomain(domain)
                                .setHost("47.96.37.108") 
                                .setPort(5223)
                                .setSecurityMode(ConnectionConfiguration.SecurityMode.required) 
                                .setSocketFactory(sslContext.socketFactory)
                                .setDebuggerFactory(ConsoleDebugger.Factory.INSTANCE)
                                .build()
 val connection = XMPPTCPConnection(config)

the following occurred:

org.jivesoftware.smack.SmackException$SmackWrappedException: java.net.SocketException: Socket is closed

Connection XMPPTCPConnection[not-authenticated] (0) closed with error
    java.net.SocketException: Socket is closed
    	at com.android.org.conscrypt.ConscryptEngineSocket.waitForHandshake(ConscryptEngineSocket.java:624)
    	at com.android.org.conscrypt.ConscryptEngineSocket.-$$Nest$mwaitForHandshake(Unknown Source:0)
    	at com.android.org.conscrypt.ConscryptEngineSocket$SSLOutputStream.write(ConscryptEngineSocket.java:697)
    	at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:233)
    	at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:309)
    	at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:313)
    	at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:153)
    	at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:248)
    	at org.jivesoftware.smack.util.ObservableWriter.flush(ObservableWriter.java:51)
    	at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketWriter.writePackets(XMPPTCPConnection.java:1367)
    	at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketWriter.access$4200(XMPPTCPConnection.java:1172)
    	at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketWriter$1.run(XMPPTCPConnection.java:1222)
    	at java.lang.Thread.run(Thread.java:1019)

Connection was already disconnected when attempting to handle java.net.SocketException: Connection reset
    java.net.SocketException: Connection reset
    	at java.net.SocketInputStream.read(SocketInputStream.java:191)
    	at java.net.SocketInputStream.read(SocketInputStream.java:143)
    	at com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.readFromSocket(ConscryptEngineSocket.java:983)
    	at com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.processDataFromSocket(ConscryptEngineSocket.java:947)
    	at com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.-$$Nest$mprocessDataFromSocket(Unknown Source:0)
    	at com.android.org.conscrypt.ConscryptEngineSocket.doHandshake(ConscryptEngineSocket.java:236)
    	at com.android.org.conscrypt.ConscryptEngineSocket.startHandshake(ConscryptEngineSocket.java:218)
    	at com.android.org.conscrypt.ConscryptEngineSocket.waitForHandshake(ConscryptEngineSocket.java:609)
    	at com.android.org.conscrypt.ConscryptEngineSocket.-$$Nest$mwaitForHandshake(Unknown Source:0)
    	at com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.read(ConscryptEngineSocket.java:833)
    	at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:291)
    	at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:355)
    	at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:181)
    	at java.io.InputStreamReader.read(InputStreamReader.java:177)
    	at java.io.BufferedReader.read1(BufferedReader.java:221)
    	at java.io.BufferedReader.read(BufferedReader.java:298)
    	at org.jivesoftware.smack.util.ObservableReader.read(ObservableReader.java:42)
    	at com.android.org.kxml2.io.KXmlParser.fillBuffer(KXmlParser.java:1516)
    	at com.android.org.kxml2.io.KXmlParser.peekType(KXmlParser.java:993)
    	at com.android.org.kxml2.io.KXmlParser.next(KXmlParser.java:349)
    	at com.android.org.kxml2.io.KXmlParser.next(KXmlParser.java:313)
    	at org.jivesoftware.smack.xml.xpp3.Xpp3XmlPullParser.next(Xpp3XmlPullParser.java:228)
    	at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:1143)
    	at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$700(XMPPTCPConnection.java:916)
    	at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.java:939)
    	at java.lang.Thread.run(Thread.java:1019)

what shuould I do? Thank you.

No, it doesn’t support the Direct TLS yet. You can check source code here GitHub - igniterealtime/Spark: Cross-platform real-time collaboration client optimized for business and organizations. and even send a pull request with the feature implementation.
But before it would be good to create a feature request in the project’s JIRA
Spark - Issues - Ignite Realtime Jira

I think that you are correct that Spark doesn’t support directTLS. But i do think that Smack does support it.(Not 100% sure though).

Smack does not support DirectTLS yet. It’s scheduled for 4.5.0 but status of ticket Smack-877 is still ‘Open’ in Jira.

2 Likes

FWIW, I think it is possible to get direct TLS working with current Smack (ab)using the existing API. That said, it should be a first class citizen. However, this requires someone to put in the effort or to sponsor the work.

This topic was automatically closed 62 days after the last reply. New replies are no longer allowed.