public void DiscoverInformation(Jid to, Jid from, string node, IqCB cb, object cbArgs) { /* * * Example 9. Querying a specific JID and node combination * * <iq type='get' * from='[email protected]/orchard' * to='mim.shakespeare.lit' * id='info3'> * <query xmlns='http://jabber.org/protocol/disco#info' * node='http://jabber.org/protocol/commands'/> * </iq> * * * Example 10. JID+node result * * <iq type='result' * from='mim.shakespeare.lit' * to='[email protected]/orchard' * id='info3'> * <query xmlns='http://jabber.org/protocol/disco#info' * node='http://jabber.org/protocol/commands'> * <identity * category='automation' * type='command-list'/> * </query> * </iq> */ var discoIq = new DiscoInfoIq(IqType.get); discoIq.To = to; if (from != null) { discoIq.From = from; } if (node != null && node.Length > 0) { discoIq.Query.Node = node; } xmppConnection.IqGrabber.SendIq(discoIq, cb, cbArgs); }
public void RequestFeatures(CapsSource source, CapsInfo info) { if (_pendingRequests.Contains(info)) { return; } _pendingRequests.Add(info); var connection = GetConnection(source.Client); var requestId = Guid.NewGuid().ToString("N"); _requestIdToCapsInfo.Add(requestId, info); var iq = new DiscoInfoIq(IqType.get); iq.Id = requestId; iq.From = connection.MyJID; iq.To = new Jid(source.EntityJid); if (info.Hash != null && info.Node != null && info.Version != null) { iq.Query.Node = string.Format("{0}#{1}", info.Node, info.Version); } connection.Send(iq); }
internal Disco() { /* <iq from='[email protected]/orchard' id='disco1' to='[email protected]/balcony' type='result'> <query xmlns='http://jabber.org/protocol/disco#info'/> <identity category='client' type='pc'/> <feature var='http://jabber.org/protocol/disco#info'/> <feature var='http://jabber.org/protocol/disco#items'/> <feature var='http://jabber.org/protocol/muc'/> </query> </iq> */ DiscoInfoIq diiq = new DiscoInfoIq(); diiq.Id = "disco1"; diiq.To = new agsXMPP.Jid("[email protected]/balcony"); diiq.Type = agsXMPP.protocol.client.IqType.result; diiq.Query.AddIdentity(new DiscoIdentity("pc", "client")); diiq.Query.AddFeature(new DiscoFeature(agsXMPP.Uri.DISCO_INFO)); diiq.Query.AddFeature(new DiscoFeature(agsXMPP.Uri.DISCO_ITEMS)); diiq.Query.AddFeature(new DiscoFeature(agsXMPP.Uri.MUC)); Program.Print(diiq); // Build caps from this disco info Capabilities caps = new Capabilities(); caps.Node = "http://www.ag-software.de/miniclient/caps"; caps.SetVersion(diiq.Query); Program.Print(caps); }
public void DiscoverInformation(Jid to, Jid from, string node, IqCB cb, object cbArgs) { /* Example 9. Querying a specific JID and node combination <iq type='get' from='[email protected]/orchard' to='mim.shakespeare.lit' id='info3'> <query xmlns='http://jabber.org/protocol/disco#info' node='http://jabber.org/protocol/commands'/> </iq> Example 10. JID+node result <iq type='result' from='mim.shakespeare.lit' to='[email protected]/orchard' id='info3'> <query xmlns='http://jabber.org/protocol/disco#info' node='http://jabber.org/protocol/commands'> <identity category='automation' type='command-list'/> </query> </iq> */ DiscoInfoIq discoIq = new DiscoInfoIq(IqType.get); discoIq.To = to; if (from != null) discoIq.From = from; if (node != null && node.Length > 0) discoIq.Query.Node = node; xmppConnection.IqGrabber.SendIq(discoIq, cb, cbArgs); }
//SEND: //<iq xmlns="jabber:client" id="agsXMPP_11" type="get" to="users.localhost"> // <query xmlns="http://jabber.org/protocol/disco#info" /> //</iq> // //RECV: //<iq xmlns="jabber:client" from="users.localhost" to="test@localhost/MF" type="result" id="agsXMPP_11"> // <query xmlns="http://jabber.org/protocol/disco#info"> // <feature var="jabber:iq:time" /> // <feature var="jabber:iq:search" /> // <feature var="http://jabber.org/protocol/disco#info" /> // <feature var="jabber:iq:version" /> // <feature var="soapbox:limits" /> // <feature var="http://jabber.org/protocol/disco#items" /> // <identity name="SoapBox User Directory" category="directory" type="user" /> // </query> //</iq> private void ProcessDiscoInfoIQ(IQ iq) { agsXMPP.protocol.iq.disco.DiscoInfoIq discoInfoIq = new DiscoInfoIq(IqType.result); discoInfoIq.Namespace = agsXMPP.Uri.CLIENT; discoInfoIq.Id = iq.Id; discoInfoIq.From = iq.To; discoInfoIq.To = this.m_ClientAccount.JID; ///*******此处为配置扩展****************** ///当前仅实现服务查找 ///*************************************** //RECV: //<iq xmlns="jabber:client" id="agsXMPP_8" type="get" to="[email protected]"> // <query xmlns="http://jabber.org/protocol/disco#info" /> //</iq> //SEND: //<iq xmlns="jabber:client" type="result" id="agsXMPP_6" from="Search.SiteView.com" to="[email protected]:SiteView"> // <query xmlns="http://jabber.org/protocol/disco#info"> // <feature var="jabber:iq:time"/> // <feature var="jabber:iq:search"/> // <feature var="http://jabber.org/protocol/disco#info"/> // <feature var="jabber:iq:version"/> // <feature var="http://jabber.org/protocol/disco#items"/> // <identity type="user" name="Site View MF Directory" category="Search"/> // </query> //</iq> // <iq from='proxy.cachet.myjabber.net' to='[email protected]/Exodus' type='result' id='jcl_19'> // <query xmlns='http://jabber.org/protocol/disco#info'> // <identity category='proxy' name='SOCKS5 Bytestreams Service' type='bytestreams'/> // <feature var='http://jabber.org/protocol/bytestreams'/> // <feature var='http://jabber.org/protocol/disco#info'/> // </query> // </iq> System.Collections.Generic.List<string> vars = new System.Collections.Generic.List<string>(); DiscoIdentity identity = null; foreach (BaseService service in this.m_Server.ServiceList) { if (!iq.To.Bare.ToLower().Contains(service.JID.Bare.ToLower())) { continue; } identity = new DiscoIdentity(service.ServiceType.ToString(), service.Name, service.ServiceType.ToString()); if (service.ServiceType == ServiceType.ContactSearch) { vars.Add(agsXMPP.Uri.IQ_SEARCH); } else if (service.ServiceType == ServiceType.GroupChat) { vars.Add(agsXMPP.Uri.MUC); } else if (service.ServiceType == ServiceType.FileTransfer) { vars.Add(agsXMPP.Uri.BYTESTREAMS); } else { } break; } DiscoFeature feature = null; foreach (string var in vars) { feature = new DiscoFeature(var); discoInfoIq.Query.AddFeature(feature); } discoInfoIq.Query.AddIdentity(identity); Send(discoInfoIq); }