Esempio n. 1
0
        /// <summary>
        /// Parses parameters from specified reader. Reader position must be where parameters begin.
        /// </summary>
        /// <param name="reader">Reader from where to read parameters.</param>
        /// <exception cref="SIP_ParseException">Raised when invalid SIP message.</exception>
        protected void ParseParameters(StringReader reader)
        {
            // Remove all old parameters.
            m_pParameters.Clear();

            // Parse parameters
            while (reader.Available > 0)
            {
                reader.ReadToFirstChar();

                // We have parameter
                if (reader.SourceString.StartsWith(";"))
                {
                    reader.ReadSpecifiedLength(1);
                    string paramString = reader.QuotedReadToDelimiter(new char[] { ';', ',' }, false);
                    if (paramString != "")
                    {
                        string[] name_value = paramString.Split(new char[] { '=' }, 2);
                        if (name_value.Length == 2)
                        {
                            this.Parameters.Add(name_value[0], TextUtils.UnQuoteString(name_value[1]));
                        }
                        else
                        {
                            this.Parameters.Add(name_value[0], null);
                        }
                    }
                }
                // Next value
                else if (reader.SourceString.StartsWith(","))
                {
                    break;
                }
                // Unknown data
                else
                {
                    throw new SIP_ParseException("Unexpected value '" + reader.SourceString + "' !");
                }
            }
        }