Exemplo n.º 1
0
        public void ProcessStreamStart(Node node, string ns, XmppStream xmppStream)
        {
            try
            {
                var stream = node as Stream;
                if (stream == null)
                {
                    sender.SendToAndClose(xmppStream, XmppStreamError.BadFormat);
                    return;
                }
                if (!stream.HasTo)
                {
                    sender.SendToAndClose(xmppStream, XmppStreamError.ImproperAddressing);//TODO: Return something more correct^)
                    return;
                }
                // for migration from teamlab.com to onlyoffice.com
                if (JabberConfiguration.ReplaceDomain && stream.To.Server.EndsWith(JabberConfiguration.ReplaceToDomain))
                {
                    sender.SendToAndClose(xmppStream, XmppStreamError.HostGone);
                    return;
                }
                if (!stream.To.IsServer)
                {
                    sender.SendToAndClose(xmppStream, XmppStreamError.ImproperAddressing);
                    return;
                }
                var handlers = HandlerStorage.GetStreamStartHandlers(stream.To);
                if (handlers.Count == 0)
                {
                    sender.SendToAndClose(xmppStream, XmppStreamError.HostUnknown);
                    return;
                }

                var handler = handlers.Find(h => h.Namespace == ns);
                if (handler == null)
                {
                    sender.SendToAndClose(xmppStream, XmppStreamError.BadNamespacePrefix);
                    return;
                }

                xmppStream.Namespace = ns;
                xmppStream.Domain    = stream.To.Server;
                xmppStream.Language  = stream.Language;

                handler.StreamStartHandle(xmppStream, stream, context);
            }
            catch (Exception ex)
            {
                ProcessException(ex, node, xmppStream);
            }
        }