/// <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); } }
/// <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); }
/// <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; } }
/// <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); } } }