aTalk is trying to add support for: XEP-0215: External Service Discovery
In the ExternalServiceDiscoveryManager, it attempts to use XMPPConnection.sendIqRequestAndWaitForResponse() to retrieve the IQ response for ExternalServiceDiscovery IQ request, but found that IQ result does not contain the expected Extension Element; instead it contains the last received stanza Extension Element.
Please advice the correct method of getting the desired result.
public void getExtServices(XMPPConnection connection)
{
DomainBareJid serviceName = connection().getXMPPServiceDomain();
ExternalServiceDiscovery extServiceDisco = new ExternalServiceDiscovery();
extServiceDisco.setType(IQ.Type.get);
extServiceDisco.setTo(serviceName);
// Discover the entity's external services
try {
IQ iq = connection.sendIqRequestAndWaitForResponse(extServiceDisco);
Timber.d("ExternalServiceDiscovery: %s", iq.toXML());
} catch (SmackException.NotConnectedException | InterruptedException | SmackException.NoResponseException | XMPPException.XMPPErrorException e) {
LOGGER.log(Level.SEVERE, "Could not get external services: " + e, e);
}
}
aTalk logcat
2022-10-29 12:45:53.347 13478-13634/org.atalk.android D/SMACK: SENT (0):
<iq to='atalk.sytes.net' id='L13ZT-16' type='get'>
<services xmlns='urn:xmpp:extdisco:2'/>
</iq>
2022-10-29 12:45:54.614 13478-13635/org.atalk.android D/SMACK: RECV (0):
<iq xml:lang='en-US' to='abc123@atalk.sytes.net/atalk' from='atalk.sytes.net' type='result' id='L13ZT-16'>
<services xmlns='urn:xmpp:extdisco:2'>
<service type='stun' transport='udp' restricted='false' port='3478' host='42.60.99.4'/>
<service username='1667061955:1074796f99cde8d3' type='turn' transport='udp' restricted='true' port='3478' password='nFdkBtLGV+ymucX5uVvYMcACSyw=' host='42.60.99.4' expires='2022-10-29T16:45:55Z'/>
<service type='stun' transport='udp' restricted='false' port='3478' host='fe80::a5e2:4bc8:f5ea:2560'/>
<service username='1667061955:1074796f99cde8d3' type='turn' transport='udp' restricted='true' port='3478' password='nFdkBtLGV+ymucX5uVvYMcACSyw=' host='fe80::a5e2:4bc8:f5ea:2560' expires='2022-10-29T16:45:55Z'/>
<service type='stun' transport='tcp' restricted='false' port='5349' host='42.60.99.4'/>
<service username='1667061955:1074796f99cde8d3' type='turn' transport='tcp' restricted='true' port='5349' password='nFdkBtLGV+ymucX5uVvYMcACSyw=' host='42.60.99.4' expires='2022-10-29T16:45:55Z'/>
<service type='stuns' transport='tcp' restricted='false' port='5349' host='atalk.sytes.net'/>
<service username='1667061955:1074796f99cde8d3' type='turns' transport='tcp' restricted='true' port='5349' password='nFdkBtLGV+ymucX5uVvYMcACSyw=' host='atalk.sytes.net' expires='2022-10-29T16:45:55Z'/>
</services>
</iq>
// Result of ExternalServiceDiscoveryProvider for verification:
2022-10-29 12:45:54.631 13478-13635/org.atalk.android D/(ExternalServiceDiscoveryProvider.java:64)#parse: ExternalServices: <services xmlns='urn:xmpp:extdisco:2'><service type='stun' transport='udp' restricted='false' port='3478' host='42.60.99.4'/><service username='1667061955:1074796f99cde8d3' type='turn' transport='udp' restricted='true' port='3478' password='nFdkBtLGV+ymucX5uVvYMcACSyw=' host='42.60.99.4' expires='2022-10-29T16:45:55Z'/><service type='stun' transport='udp' restricted='false' port='3478' host='fe80::a5e2:4bc8:f5ea:2560'/><service username='1667061955:1074796f99cde8d3' type='turn' transport='udp' restricted='true' port='3478' password='nFdkBtLGV+ymucX5uVvYMcACSyw=' host='fe80::a5e2:4bc8:f5ea:2560' expires='2022-10-29T16:45:55Z'/><service type='stun' transport='tcp' restricted='false' port='5349' host='42.60.99.4'/><service username='1667061955:1074796f99cde8d3' type='turn' transport='tcp' restricted='true' port='5349' password='nFdkBtLGV+ymucX5uVvYMcACSyw=' host='42.60.99.4' expires='2022-10-29T16:45:55Z'/><service type='stuns' transport='tcp' restricted='false' port='5349' host='atalk.sytes.net'/><service username='1667061955:1074796f99cde8d3' type='turns' transport='tcp' restricted='true' port='5349' password='nFdkBtLGV+ymucX5uVvYMcACSyw=' host='atalk.sytes.net' expires='2022-10-29T16:45:55Z'/></services>
2022-10-29 12:45:54.633 13478-13635/org.atalk.android D/SMACK: RECV (0):
<message to='abc123@atalk.sytes.net/atalk' from='abc123@atalk.sytes.net' type='headline'>
<event xmlns='http://jabber.org/protocol/pubsub#event'>
<items node='eu.siacs.conversations.axolotl.devicelist'>
<item id='682CF0BAE552B'>
<list xmlns='eu.siacs.conversations.axolotl'>
<device id='459141212'/>
<device id='660938212'/>
<device id='2028266418'/>
<device id='1605373784'/>
<device id='1201354019'/>
<device id='1312485350'/>
</list>
</item>
</items>
</event>
<addresses xmlns='http://jabber.org/protocol/address'>
<address jid='abc123@atalk.sytes.net/atalk' type='replyto'/>
</addresses>
</message>
// Result of connection.sendIqRequestAndWaitForResponse(ExternalServiceDiscovery)
2022-10-29 12:45:54.634 13478-13620/org.atalk.android D/(ExternalServiceDiscoveryManager.java:200)#getExtServices: ExternalServiceDiscovery: <iq xmlns='jabber:client' to='abc123@atalk.sytes.net/atalk' from='atalk.sytes.net' id='L13ZT-16' type='result'><addresses xmlns='http://jabber.org/protocol/address'<addresses xmlns='http://jabber.org/protocol/address'><address jid='abc123@atalk.sytes.net/atalk' type='replyto'/></addresses></addresses></iq>