Exemple #1
0
        private Element CreateNode(XmlNodeResult nd, Element parent)
        {
            string ens;
            if (nd.Prefix != null)
            {
                RemObjects.InternetPack.XMPP.Elements.Attribute at = nd.Attribute.FirstOrDefault(a => a.Prefix == "xmlns" && a.Name == nd.Prefix);
                if (at == null)
                {
                    Element el = parent;
                    ens = string.Empty;
                    while (el != null)
                    {
                        RemObjects.InternetPack.XMPP.Elements.Attribute els = el.Attributes.Where(a => a.Prefix == "xmlns" && a.Name == nd.Prefix).FirstOrDefault();
                        if (els != null)
                        {
                            ens = els.Value;
                            break;
                        }
                        el = el.Parent;
                    }
                }
                else
                    ens = at.Value;
            }
            else
            {
                RemObjects.InternetPack.XMPP.Elements.Attribute at = nd.Attribute.FirstOrDefault(a => a.Prefix == null && a.Name == "xmlns");
                if (at == null)
                    ens = string.Empty;
                else
                    ens = at.Value;
            }
            Element res = null;
            switch (ens)
            {
                case Namespaces.ClientStreamNamespace:
                case Namespaces.ServerStreamNamespace:
                case "":
                    if (ens == null && parent != null && parent.Type == ElementType.IQ && nd.Name == "error")
                        res = new IQError();
                    else
                        switch (nd.Name)
                        {
                            case "iq":
                                res = new IQ();
                                break;
                            case "presence":
                                res = new Presence();
                                break;
                            case "message":
                                res = new Message();
                                break;
                        }
                    break;
                case Namespaces.StreamNamespace:
                    switch (nd.Name)
                    {
                        case "stream":

                            RemObjects.InternetPack.XMPP.Elements.Attribute att = nd.Attribute.FirstOrDefault(a => a.Prefix == null && a.Name == "xmlns");
                            if (att == null || att.Value == Namespaces.ClientStreamNamespace)
                                res = new ClientStream();
                            else
                                res = new ServerStream();
                            break;
                        case "features":
                            res = new StreamFeatures();
                            break;
                        case "error":
                            res = new StreamError();
                            break;
                    }
                    break;
                case Namespaces.StartTLSNamespace:
                    switch (nd.Name)
                    {
                        case "starttls":
                            res = new StartTLS();
                            break;
                        case "failure":
                            res = new StartTLSFailure();
                            break;
                        case "proceed":
                            res = new StartTLSProceed();
                            break;
                    }

                    break;
                case Namespaces.SaslNamespace:
                    switch (nd.Name) {
                        case "mechanisms":
                            res = new Mechanisms();
                            break;
                        case "auth":
                            res = new SaslAuth();
                            break;
                        case "challenge":
                            res = new SaslChallenge();
                            break;
                        case "response":
                            res = new SaslResponse();
                            break;
                        case "abort":
                            res = new SaslAbort();
                            break;
                        case "success":
                            res = new SaslSuccess();
                            break;
                        case "failure":
                            res = new SaslFailure();
                            break;
                    }
                    break;
            }
            if (res == null)
            {
                res = new UnknownElement();
            }
            else
                res.Attributes.Clear(); // default ones shouldn't be here during the reading process
            if (parent != null)
            {
                res.Parent = parent;
                if (parent != fServerRoot)
                    parent.Elements.Add(res);
            }
            res.Prefix = nd.Prefix;
            res.Name = nd.Name;
            foreach (var el in nd.Attribute)
                res.Attributes.Add(el);
            return res;
        }
Exemple #2
0
 protected void OnPresence(Presence aPresence)
 {
     if (Presence != null)
     {
         PresenceEventArgs args = new PresenceEventArgs(aPresence);
         Presence(this, args);
     }
 }
Exemple #3
0
 public void SendPresence(Presence presence)
 {
     if (fState != XMPP.State.Active) throw new InvalidOperationException();
     BeginSend(presence, WriteMode.None, null);
 }
Exemple #4
0
 public PresenceEventArgs(Presence aPresence)
     : base()
 {
     fPresence = aPresence;
 }
Exemple #5
0
        private void SendCreateSession()
        {
            fState = XMPP.State.CreatingSession;
            OnCreateSession();
            var iq = new IQ();
            iq.To = new JID(Domain);
            iq.IQType = IQType.set;
            iq.Elements.Add(new UnknownElement {
                NamespaceURI = Namespaces.SessionNamespace,
                Name = "sesion"});
            SendIQ(iq, a => {
                if (a == null)
                {
                    OnError(new TimeoutException("CreateSession"));
                    Close();
                    return;
                }
                if (a.IQType != IQType.result)
                {
                    OnError(new XMPPException("Error creating session: " + a));
                    Close();
                    return;
                }
                fState = XMPP.State.Active;
                OnActive();

                if (SendPresenceAndPriority)
                {
                    var pres = new Presence();
                    pres.Priority = Priority;
                    SendPresence(pres);
                }
            });
        }
Exemple #6
0
 private void GotPresence(Elements.Presence presence)
 {
     OnPresence(presence);
 }