/// <summary> /// Sends a <seealso cref="DiscoRequestMessage"/> to the given target. /// </summary> /// <param name="target">The target e.g. '*****@*****.**'.</param> /// <param name="type">The disco type</param> /// <param name="onMessage">The method that should get executed once the helper receives a new valid message.</param> /// <param name="onTimeout">The method that should get executed once the helper timeout gets triggered.</param> /// <returns>Returns a <seealso cref="MessageResponseHelperResult"/> listening for <seealso cref="DiscoRequestMessage"/> answers.</returns> public MessageResponseHelper<IQMessage> createDisco(string target, DiscoType type, MessageResponseHelper<IQMessage>.OnMessageHandler onMessage, MessageResponseHelper<IQMessage>.OnTimeoutHandler onTimeout) { MessageResponseHelper<IQMessage> helper = new MessageResponseHelper<IQMessage>(CONNECTION, onMessage, onTimeout); DiscoRequestMessage disco = new DiscoRequestMessage(CONNECTION.account.getFullJid(), target, type); helper.start(disco); return helper; }
public async Task <string> createDiscoAsync(string target, DiscoType type) { XMPPAccount account = connection.account; DiscoRequestMessage disco = new DiscoRequestMessage(account.getIdDomainAndResource(), target, type); await connection.sendAsync(disco, false, false); return(disco.ID); }
public DiscoRequestMessage(XmlNode n) : base(n) { XmlNode query = XMLUtils.getChildNode(n, "query"); if (!(query is null)) { switch (query.NamespaceURI) { case Consts.XML_XEP_0030_INFO_NAMESPACE: DISCO_TYPE = DiscoType.INFO; break; case Consts.XML_XEP_0030_ITEMS_NAMESPACE: DISCO_TYPE = DiscoType.ITEMS; break; default: Logging.Logger.Warn("Invalid disco result message received! " + n.ToString().Replace('\n', ' ')); DISCO_TYPE = DiscoType.UNKNOWN; break; } } }
private async Task <bool> DiscoAsync(string discoTarget, CheckDiscoResponseAsync action, DiscoType discoType) { MessageResponseHelperResult <IQMessage> result = await CONNECTION.GENERAL_COMMAND_HELPER.discoAsync(discoTarget, discoType); if (result.STATE != MessageResponseHelperResultState.SUCCESS) { Logger.Error($"Failed to perform server DISCO#{discoType} for '{CONNECTION.account.getBareJid()}' - {result.STATE}"); return(false); } if (result.RESULT is IQErrorMessage errorMessage) { Logger.Error($"Failed to perform server DISCO#{discoType} for '{CONNECTION.account.getBareJid()}' - {errorMessage.ERROR_OBJ}"); return(false); } // Success: if (result.RESULT is DiscoResponseMessage disco) { await OnDiscoResponseMessage(disco, action, discoTarget); return(true); } Logger.Error($"Failed to perform server DISCO#{discoType} for '{CONNECTION.account.getBareJid()}' - invalid response."); return(false); }
//--------------------------------------------------------Constructor:----------------------------------------------------------------\\ #region --Constructors-- /// <summary> /// Basic Constructor /// </summary> /// <history> /// 10/11/2017 Created [Fabian Sauter] /// </history> public DiscoResponseMessage(XmlNode n) : base(n) { IDENTITIES = new List <DiscoIdentity>(); FEATURES = new List <DiscoFeature>(); ITEMS = new List <DiscoItem>(); ERROR_RESULT = null; XmlNode qNode = XMLUtils.getChildNode(n, "query", Consts.XML_XMLNS, "http://jabber.org/protocol/disco#info"); if (qNode == null) { qNode = XMLUtils.getChildNode(n, "query", Consts.XML_XMLNS, "http://jabber.org/protocol/disco#items"); if (qNode == null) { Logging.Logger.Warn("Invalid disco result message received! " + n.ToString().Replace('\n', ' ')); DISCO_TYPE = DiscoType.UNKNOWN; return; } DISCO_TYPE = DiscoType.ITEMS; } else { DISCO_TYPE = DiscoType.INFO; } // Load content: if (qNode != null) { foreach (XmlNode n1 in qNode.ChildNodes) { switch (n1.Name) { case "feature": FEATURES.Add(new DiscoFeature(n1)); break; case "identity": IDENTITIES.Add(new DiscoIdentity(n1)); break; case "item": ITEMS.Add(new DiscoItem(n1)); break; case "error": ERROR_RESULT = new StreamErrorMessage(n1); break; } } isPartialList = doesNodeContainPartialList(qNode); } // Sort disco items alphabetically: ITEMS.Sort((a, b) => { if (a == null || a.NAME == null) { if (b == null || b.NAME == null) { return(0); } return(-1); } if (b == null || b.NAME == null) { return(1); } return(a.NAME.CompareTo(b.NAME)); }); }
//--------------------------------------------------------Constructor:----------------------------------------------------------------\\ #region --Constructors-- public DiscoRequestMessage(string from, string to, DiscoType discoType) : base(from, to, GET, getRandomId()) { DISCO_TYPE = discoType; }
/// <summary> /// Sends a <seealso cref="DiscoRequestMessage"/> to the given target. /// </summary> /// <param name="target">The target e.g. '*****@*****.**'.</param> /// <param name="type">The disco type</param> /// <returns>Returns a <seealso cref="MessageResponseHelperResult"/> listening for <seealso cref="DiscoRequestMessage"/> answers.</returns> public async Task<MessageResponseHelperResult<IQMessage>> discoAsync(string target, DiscoType type) { Predicate<IQMessage> predicate = (x) => { return true; }; AsyncMessageResponseHelper<IQMessage> helper = new AsyncMessageResponseHelper<IQMessage>(CONNECTION, predicate); DiscoRequestMessage msg = new DiscoRequestMessage(CONNECTION.account.getFullJid(), target, type); return await helper.startAsync(msg); }