コード例 #1
0
        /// <summary>
        /// Prepends a name/value pair to the collection, handling multi-value and
        /// special headers.
        /// </summary>
        /// <param name="name">The header name.</param>
        /// <param name="value">The header value.</param>
        /// <returns>
        /// The <see cref="SipHeader" /> instance that actually is actually present collection.
        /// </returns>
        /// <remarks>
        /// <note>The value added will be inserted <b>before</b> any existing values for this header.</note>
        /// </remarks>
        public SipHeader Prepend(string name, string value)
        {
            SipHeader header;
            string    longForm;

            longForm = SipHelper.GetLongHeader(name);
            if (longForm != null)
            {
                hasCompactHeaders = true;
                name = longForm;
            }

            if (specialHeaders.ContainsKey(name))
            {
                if (this.ContainsKey(name))
                {
                    throw new NotImplementedException("LillTek SIP stack does not currently support multiple instances of special headers.");
                }

                this.Add(name, header = new SipHeader(name, value, true));
                return(header);
            }

            if (this.TryGetValue(name, out header))
            {
                header.Prepend(value);
                return(header);
            }
            else
            {
                this.Add(name, header = new SipHeader(name, value));
                return(header);
            }
        }
コード例 #2
0
        /// <summary>
        /// Adds a name/header pair to the collection.
        /// </summary>
        /// <param name="name">The header name.</param>
        /// <param name="header">The header.</param>
        /// <remarks>
        /// <note>
        /// This method will convert the header's name property
        /// to its long form if necessary.
        /// </note>
        /// </remarks>
        public new void Add(string name, SipHeader header)
        {
            string longForm;

            longForm = SipHelper.GetLongHeader(name);
            if (longForm != null)
            {
                hasCompactHeaders = true;
                name        = longForm;
                header.Name = longForm;
            }

            base.Add(name, header);
        }
コード例 #3
0
        /// <summary>
        /// References the named <see cref="SipHeader" /> if it's present in the collection.
        /// </summary>
        /// <param name="name">Case insensitive name of the desired header.</param>
        /// <returns>The header instance if one exists, <c>null</c> otherwise.</returns>
        public new SipHeader this[string name]
        {
            get
            {
                SipHeader header;
                string    longForm;

                longForm = SipHelper.GetLongHeader(name);
                if (longForm != null)
                {
                    name = longForm;
                }

                if (this.TryGetValue(name, out header))
                {
                    return(header);
                }
                else
                {
                    return(null);
                }
            }

            set
            {
                string longForm;

                longForm = SipHelper.GetLongHeader(name);
                if (longForm != null)
                {
                    name = longForm;
                    if (!base.ContainsKey(name))
                    {
                        hasCompactHeaders = true;
                    }
                }

                base[name] = value;
            }
        }
コード例 #4
0
        /// <summary>
        /// Adds a name/value pair to the collection, handling multi-value and
        /// special headers.
        /// </summary>
        /// <param name="name">The header name.</param>
        /// <param name="value">The header value.</param>
        /// <returns>
        /// The <see cref="SipHeader" /> instance that actually is actually present collection.
        /// </returns>
        public SipHeader Add(string name, string value)
        {
            SipHeader header;
            string    longForm;

            longForm = SipHelper.GetLongHeader(name);
            if (longForm != null)
            {
                hasCompactHeaders = true;
                name = longForm;
            }

            if (specialHeaders.ContainsKey(name))
            {
                if (this.ContainsKey(name))
                {
                    throw new NotImplementedException(string.Format("LillTek SIP stack does not support multiple instances of the header [{0}].", name));
                }

                this.Add(name, header = new SipHeader(name, value, true));
                return(header);
            }

            if (value.IndexOf(',') != -1)
            {
                // We have a multi-valued header.

                var values = value.Split(',');

                for (int i = 0; i < values.Length; i++)
                {
                    values[i] = values[i].Trim();
                }

                if (this.TryGetValue(name, out header))
                {
                    for (int i = 0; i < values.Length; i++)
                    {
                        header.Append(values[i]);
                    }

                    return(header);
                }
                else
                {
                    this.Add(name, header = new SipHeader(name, values));
                    return(header);
                }
            }
            else
            {
                // Single value header.

                if (this.TryGetValue(name, out header))
                {
                    header.Append(value);
                    return(header);
                }
                else
                {
                    this.Add(name, header = new SipHeader(name, value));
                    return(header);
                }
            }
        }