From d29b33863b3dbe7a02bb885351a0a550634446ec Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Mon, 7 Mar 2022 10:10:55 -0500 Subject: [PATCH] Fetch jabber:iq:gateway prompt --- .../services/XmppConnectionService.java | 18 ++++++++++++++++++ .../xmpp/OnGatewayPromptResult.java | 7 +++++++ 2 files changed, 25 insertions(+) create mode 100644 src/main/java/eu/siacs/conversations/xmpp/OnGatewayPromptResult.java diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index 1b2cc7a26..9c177f23a 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -145,6 +145,7 @@ import eu.siacs.conversations.xml.Namespace; import eu.siacs.conversations.xmpp.Jid; import eu.siacs.conversations.xmpp.OnBindListener; import eu.siacs.conversations.xmpp.OnContactStatusChanged; +import eu.siacs.conversations.xmpp.OnGatewayPromptResult; import eu.siacs.conversations.xmpp.OnIqPacketReceived; import eu.siacs.conversations.xmpp.OnKeyStatusUpdated; import eu.siacs.conversations.xmpp.OnMessageAcknowledged; @@ -4655,6 +4656,23 @@ public class XmppConnectionService extends Service { } } + public void fetchGatewayPrompt(Account account, final Jid jid, final OnGatewayPromptResult callback) { + IqPacket request = new IqPacket(IqPacket.TYPE.GET); + request.setTo(jid); + request.query("jabber:iq:gateway"); + sendIqPacket(account, request, new OnIqPacketReceived() { + @Override + public void onIqPacketReceived(Account account, IqPacket packet) { + if (packet.getType() == IqPacket.TYPE.RESULT) { + callback.onGatewayPromptResult(packet.query().findChildContent("prompt"), null); + } else { + Element error = packet.findChild("error"); + callback.onGatewayPromptResult(null, error == null ? null : error.findChildContent("text")); + } + } + }); + } + public void fetchCaps(Account account, final Jid jid, final Presence presence) { final Pair key = new Pair<>(presence.getHash(), presence.getVer()); final ServiceDiscoveryResult disco = getCachedServiceDiscoveryResult(key); diff --git a/src/main/java/eu/siacs/conversations/xmpp/OnGatewayPromptResult.java b/src/main/java/eu/siacs/conversations/xmpp/OnGatewayPromptResult.java new file mode 100644 index 000000000..7c903021c --- /dev/null +++ b/src/main/java/eu/siacs/conversations/xmpp/OnGatewayPromptResult.java @@ -0,0 +1,7 @@ +package eu.siacs.conversations.xmpp; + +public interface OnGatewayPromptResult { + // if prompt is null, there was an error + // errorText may or may not be set + public void onGatewayPromptResult(String prompt, String errorText); +}