Exemple #1
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);

            }