Пример #1
0
        /// <summary>
        /// Requests a new copy of the roster.
        /// </summary>
        public void GetRoster()
        {
            if (IsAuthenticated)
            {
                if (this.SupportNestedGroups && String.IsNullOrEmpty(this.NestedGroupDelimiter))
                {
                    PrivateIQ privIq = new PrivateIQ(this.Document);

                    RosterDelimiter rosterDelim = new RosterDelimiter(privIq.OwnerDocument);
                    privIq.Instruction.AddChild(rosterDelim);

                    this.Write(privIq);
                }
                else
                {
                    RosterIQ riq = new RosterIQ(this.Document);
                    riq.Type = IQType.get;

                    this.Write(riq);
                }
            }
            else
            {
                throw new InvalidOperationException("Client must be authenticated before getting roster.");
            }
        }
Пример #2
0
        private void FireOnIQ(object sender, IQ iq)
        {
            // We know we're on the GUI thread.
            if (OnIQ != null)
            {
                OnIQ(this, iq);
            }

            if (this.SupportNestedGroups && !iq.Handled &&
                iq.Query != null && iq.Type == IQType.result &&
                iq.Query.NamespaceURI == URI.PRIVATE &&
                iq.GetChildElement <Private>().GetChildElement <RosterDelimiter>() != null)
            {
                RosterDelimiter rosterDelimiter = iq.GetChildElement <Private>().GetChildElement <RosterDelimiter>();

                if (String.IsNullOrEmpty(rosterDelimiter.InnerText))
                {
                    this.NestedGroupDelimiter = this.NestedGroupDefaultDelimiter;

                    if (this.AutoStoreNestedGroupsDelimiter)
                    {
                        PrivateIQ privIq = new PrivateIQ(this.Document);

                        RosterDelimiter rosterDelim = new RosterDelimiter(privIq.OwnerDocument);
                        rosterDelim.InnerText = this.NestedGroupDelimiter;
                        privIq.Instruction.AddChild(rosterDelim);
                        privIq.Type = IQType.set;

                        this.Write(privIq);
                    }
                }
                else
                {
                    this.NestedGroupDelimiter = rosterDelimiter.InnerText;
                }

                this.GetRoster();
            }

            if (AutoIQErrors)
            {
                if (!iq.Handled && iq.HasAttribute("from") &&   // Belt.  Suspenders.  Don't respond to roster pushes.
                    (iq.Type == IQType.get || iq.Type == IQType.set))
                {
                    Write(iq.GetErrorResponse(this.Document, Error.FEATURE_NOT_IMPLEMENTED));
                }
            }
        }
Пример #3
0
        private void FireOnIQ(object sender, IQ iq)
        {
            // We know we're on the GUI thread.
            if (OnIQ != null)
                OnIQ(this, iq);

            if (this.SupportNestedGroups && !iq.Handled &&
                iq.Query != null && iq.Type == IQType.result &&
                iq.Query.NamespaceURI == URI.PRIVATE &&
                iq.GetChildElement<Private>().GetChildElement<RosterDelimiter>() != null)
            {
                RosterDelimiter rosterDelimiter = iq.GetChildElement<Private>().GetChildElement<RosterDelimiter>();

                if (String.IsNullOrEmpty(rosterDelimiter.InnerText))
                {
                    this.NestedGroupDelimiter = this.NestedGroupDefaultDelimiter;

                    if (this.AutoStoreNestedGroupsDelimiter)
                    {
                        PrivateIQ privIq = new PrivateIQ(this.Document);

                        RosterDelimiter rosterDelim = new RosterDelimiter(privIq.OwnerDocument);
                        rosterDelim.InnerText = this.NestedGroupDelimiter;
                        privIq.Instruction.AddChild(rosterDelim);
                        privIq.Type = IQType.set;

                        this.Write(privIq);
                    }

                }
                else
                {
                    this.NestedGroupDelimiter = rosterDelimiter.InnerText;
                }

                this.GetRoster();
            }

            if (AutoIQErrors)
            {
                if (!iq.Handled && iq.HasAttribute("from") &&   // Belt.  Suspenders.  Don't respond to roster pushes.
                    (iq.Type == IQType.get || iq.Type == IQType.set))
                {
                    Write(iq.GetErrorResponse(this.Document, Error.FEATURE_NOT_IMPLEMENTED));
                }
            }
        }
Пример #4
0
        /// <summary>
        /// Requests a new copy of the roster.
        /// </summary>
        public void GetRoster()
        {
            if (IsAuthenticated)
            {
                if (this.SupportNestedGroups && String.IsNullOrEmpty(this.NestedGroupDelimiter))
                {
                    PrivateIQ privIq = new PrivateIQ(this.Document);

                    RosterDelimiter rosterDelim = new RosterDelimiter(privIq.OwnerDocument);
                    privIq.Instruction.AddChild(rosterDelim);

                    this.Write(privIq);
                }
                else
                {
                    RosterIQ riq = new RosterIQ(this.Document);
                    riq.Type = IQType.get;

                    this.Write(riq);
                }
            }
            else
            {
                throw new InvalidOperationException("Client must be authenticated before getting roster.");
            }
        }