Example #1
0
 /// <summary>
 /// Parses the specified string into an header object.
 /// </summary>
 /// <param name="name">The header name.</param>
 /// <param name="value">The header value.</param>
 public void Parse(string name, string value)
 {
     string rest = "";
     int index = 0;
     if (Address.Contains(name.ToLower()))
     {
         HeaderType = "address";
         Address addr = new Address {MustQuote = true};
         int count = addr.Parse(value);
         Value = addr;
         if (count < value.Length)
             rest = value.Substring(count, value.Length - count);
         if (rest.Length > 0)
         {
             foreach (string parm in rest.Split(';'))
             {
                 if (parm.Contains('='))
                 {
                     index = parm.IndexOf('=');
                     string parmName = parm.Substring(0, index);
                     string parmValue = parm.Substring(index + 1);
                     Attributes.Add(parmName, parmValue);
                 }
             }
         }
     }
     else if (!(Comma.Contains(name.ToLower())) && !(Unstructured.Contains(name.ToLower())))
     {
         HeaderType = "standard";
         if (!value.Contains(";lr>"))
         {
             if (value.Contains(';'))
             {
                 index = value.IndexOf(';');
                 Value = value.Substring(0, index);
                 string tempStr = value.Substring(index + 1).Trim();
                 foreach (string parm in tempStr.Split(';'))
                 {
                     if (parm.Contains('='))
                     {
                         index = parm.IndexOf('=');
                         string parmName = parm.Substring(0, index);
                         string parmValue = parm.Substring(index + 1);
                         Attributes.Add(parmName, parmValue);
                     }
                 }
             }
             else
             {
                 Value = value;
             }
         }
         else
         {
             Value = value;
         }
     }
     if (Comma.Contains(name.ToLower()))
     {
         HeaderType = "comma";
         if (value.Contains(' '))
         {
             index = value.IndexOf(' ');
             AuthMethod = value.Substring(0, index).Trim();
             Value = value.Substring(0, index).Trim();
             string values = value.Substring(index + 1);
             foreach (string parm in values.Split(','))
             {
                 if (parm.Contains('='))
                 {
                     index = parm.IndexOf('=');
                     string parmName = parm.Substring(0, index);
                     string parmValue = parm.Substring(index + 1);
                     Attributes.Add(parmName, parmValue);
                 }
             }
         }
     }
     else if (name.ToLower() == "cseq")
     {
         HeaderType = "unstructured";
         string[] parts = value.Trim().Split(' ');
         int tempNumber = -1;
         int.TryParse(parts[0], out tempNumber);
         Number = tempNumber;
         Method = parts[1];
     }
     if (Unstructured.Contains(name.ToLower()) && name.ToLower() != "cseq")
     {
         HeaderType = "unstructured";
         Value = value;
     }
     if (name.ToLower() == "via")
     {
         string[] parts = value.Split(' ');
         string proto = parts[0];
         string addr = parts[1].Split(';')[0];
         string type = proto.Split('/')[2].ToLower();
         ViaUri = new SIPURI("sip:" + addr + ";transport=" + type);
         if (ViaUri.Port == 0)
         {
             ViaUri.Port = 5060;
         }
         if (Attributes.Keys.Contains("rport"))
         {
             int tempPort = 5060;
             int.TryParse(Attributes["rport"], out tempPort);
             ViaUri.Port = tempPort;
         }
         if ((type != "tcp") && (type != "sctp") && (type != "tls"))
         {
             if (Attributes.Keys.Contains("maddr"))
             {
                 ViaUri.Host = Attributes["maddr"];
             }
             else if (Attributes.Keys.Contains("received"))
             {
                 ViaUri.Host = Attributes["received"];
             }
         }
     }
 }
Example #2
0
        /// <summary>
        /// Parses the specified string into an header object.
        /// </summary>
        /// <param name="name">The header name.</param>
        /// <param name="value">The header value.</param>
        public void Parse(string name, string value)
        {
            string rest  = "";
            int    index = 0;

            if (Address.Contains(name.ToLower()))
            {
                HeaderType = "address";
                Address addr = new Address {
                    MustQuote = true
                };
                int count = addr.Parse(value);
                Value = addr;
                if (count < value.Length)
                {
                    rest = value.Substring(count, value.Length - count);
                }
                if (rest.Length > 0)
                {
                    foreach (string parm in rest.Split(';'))
                    {
                        if (parm.Contains('='))
                        {
                            index = parm.IndexOf('=');
                            string parmName  = parm.Substring(0, index);
                            string parmValue = parm.Substring(index + 1);
                            Attributes.Add(parmName, parmValue);
                        }
                    }
                }
            }
            else if (!(Comma.Contains(name.ToLower())) && !(Unstructured.Contains(name.ToLower())))
            {
                HeaderType = "standard";
                if (!value.Contains(";lr>"))
                {
                    if (value.Contains(';'))
                    {
                        index = value.IndexOf(';');
                        Value = value.Substring(0, index);
                        string tempStr = value.Substring(index + 1).Trim();
                        foreach (string parm in tempStr.Split(';'))
                        {
                            if (parm.Contains('='))
                            {
                                index = parm.IndexOf('=');
                                string parmName  = parm.Substring(0, index);
                                string parmValue = parm.Substring(index + 1);
                                Attributes.Add(parmName, parmValue);
                            }
                        }
                    }
                    else
                    {
                        Value = value;
                    }
                }
                else
                {
                    Value = value;
                }
            }
            if (Comma.Contains(name.ToLower()))
            {
                HeaderType = "comma";
                if (value.Contains(' '))
                {
                    index      = value.IndexOf(' ');
                    AuthMethod = value.Substring(0, index).Trim();
                    Value      = value.Substring(0, index).Trim();
                    string values = value.Substring(index + 1);
                    foreach (string parm in values.Split(','))
                    {
                        if (parm.Contains('='))
                        {
                            index = parm.IndexOf('=');
                            string parmName  = parm.Substring(0, index);
                            string parmValue = parm.Substring(index + 1);
                            Attributes.Add(parmName, parmValue);
                        }
                    }
                }
            }
            else if (name.ToLower() == "cseq")
            {
                HeaderType = "unstructured";
                string[] parts      = value.Trim().Split(' ');
                int      tempNumber = -1;
                int.TryParse(parts[0], out tempNumber);
                Number = tempNumber;
                Method = parts[1];
            }
            if (Unstructured.Contains(name.ToLower()) && name.ToLower() != "cseq")
            {
                HeaderType = "unstructured";
                Value      = value;
            }
            if (name.ToLower() == "via")
            {
                string[] parts = value.Split(' ');
                string   proto = parts[0];
                string   addr  = parts[1].Split(';')[0];
                string   type  = proto.Split('/')[2].ToLower();
                ViaUri = new SIPURI("sip:" + addr + ";transport=" + type);
                if (ViaUri.Port == 0)
                {
                    ViaUri.Port = 5060;
                }
                if (Attributes.Keys.Contains("rport"))
                {
                    int tempPort = 5060;
                    int.TryParse(Attributes["rport"], out tempPort);
                    ViaUri.Port = tempPort;
                }
                if ((type != "tcp") && (type != "sctp") && (type != "tls"))
                {
                    if (Attributes.Keys.Contains("maddr"))
                    {
                        ViaUri.Host = Attributes["maddr"];
                    }
                    else if (Attributes.Keys.Contains("received"))
                    {
                        ViaUri.Host = Attributes["received"];
                    }
                }
            }
        }