Ejemplo n.º 1
0
 public override bool Handle(XmppConnection sender, XMPPIq element)
 {
     if (Stanza.Parse <DiscoItems>(element.Elements().FirstOrDefault()) != null)
     {
         sender.Send(element.Reply());
         return(true);
     }
     return(false);
 }
Ejemplo n.º 2
0
        public override bool Handle(XmppConnection connection, XMPPIq element)
        {
            var info = Stanza.Parse <DiscoInfo>(element.Elements().FirstOrDefault());

            if (info != null)
            {
                if (info.Node == string.Empty || info.Node == string.Format("{0}#{1}", _capabilities.Node, _capabilities.OurHash))
                {
                    info.Identity = _capabilities.Identity;
                    info.Features = _capabilities.Features;
                    info.Node     = _capabilities.Node;
                    var reply = element.Reply();
                    reply.RemoveNodes();
                    reply.Add(info);
                    connection.Send(reply);
                    return(true);
                }
            }
            return(false);
        }
Ejemplo n.º 3
0
        public override bool Handle(XmppConnection sender, XMPPIq element)
        {
            var type = element.Attribute("type");

            if (type == null)
            {
                return(false);
            }
            if (type.Equals("get"))
            {
                var query = element.Element("query");
                if (query != null)
                {
                    var ns  = query.Attribute("xmlns");
                    var num = Array.IndexOf(Features, ns);
                    switch (num)
                    {
                    case 0:
                        var from = new JID(element.Attribute("from").Value);
                        _fields = _regHandler.GetCredentials(from);

                        var reply = element.Reply();
                        var instr = new Stanza("instructions")
                        {
                            Value = _regHandler.GetInstructions()
                        };
                        query.Add(instr);
                        foreach (string field in _fields.Keys)
                        {
                            var f = new Stanza(field)
                            {
                                Value = _fields[field]
                            };
                            query.Add(f);
                        }
                        sender.Send(reply);
                        return(true);
                    }
                }
            }
            if (type.Equals("set"))
            {
                var query = element.Element("query");
                if (query != null)
                {
                    var ns  = query.Attribute("xmlns");
                    var num = Array.IndexOf(Features, ns);
                    switch (num)
                    {
                    case 0:
                        var queryFields   = FilterFields((Stanza)query, _fields);
                        var from          = new JID(element.Attribute("from").Value);
                        var requestResult = queryFields.ContainsKey("remove") ? _regHandler.OnRegistrationRemove(from) : _regHandler.OnRegistrationRequest(from, queryFields);

                        if (requestResult)
                        {
                            var reply = element.Reply();
                            sender.Send(reply);
                            var subscribe = new XMPPPresence();
                            subscribe.SetAttributeValue("to", from.BareJid);
                            subscribe.SetAttributeValue("from", sender.Jid.BareJid);
                            if (queryFields.ContainsKey("remove"))
                            {
                                subscribe.SetAttributeValue("type", "unsubscribed");
                                sender.Send(subscribe);
                                subscribe.SetAttributeValue("type", "unsubscribe");
                                sender.Send(subscribe);
                            }
                            else
                            {
                                subscribe.SetAttributeValue("type", "subscribe");
                                sender.Send(subscribe);
                            }
                        }
                        else
                        {
                            sender.Send(element.Error());
                        }
                        return(true);
                    }
                }
            }
            return(false);
        }