public void HandleError(XMPPIq element) { if (element.IqType == XMPPIq.IqTypes.get || element.IqType == XMPPIq.IqTypes.set) { Connection.Send(element.Error()); } }
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); }