private Dictionary <string, SIPUserAgentConfiguration> ParseSIPUserAgentConfigurations(XmlNode userAgentConifgNode) { try { Dictionary <string, SIPUserAgentConfiguration> userAgentConfigs = new Dictionary <string, SIPUserAgentConfiguration>(); if (userAgentConifgNode != null && userAgentConifgNode.ChildNodes.Count != 0) { foreach (XmlNode userAgentNode in userAgentConifgNode.SelectNodes("useragent")) { //if (userAgentNode.InnerText != null && userAgentNode.InnerText.Trim().Length > 0) { int expiry = Convert.ToInt32(userAgentNode.Attributes.GetNamedItem("expiry").Value); bool contactListSupported = (userAgentNode.Attributes.GetNamedItem("contactlists") != null) ? Convert.ToBoolean(userAgentNode.Attributes.GetNamedItem("contactlists").Value) : true; string userAgent = userAgentNode.Attributes.GetNamedItem("agent").Value; SIPUserAgentConfiguration userAgentConfig = new SIPUserAgentConfiguration(expiry, contactListSupported, userAgent); if (userAgentConfig.UserAgentRegex != null && userAgentConfig.UserAgentRegex.Trim().Length > 0 && !userAgentConfigs.ContainsKey(userAgentConfig.UserAgentRegex)) { logger.Debug("Added useragent config, useragent=" + userAgentConfig.UserAgentRegex + ", expiry=" + userAgentConfig.MaxAllowedExpiryTime + "s, contact lists=" + userAgentConfig.ContactListSupported + "."); userAgentConfigs.Add(userAgentConfig.UserAgentRegex, userAgentConfig); } //} } } return(userAgentConfigs); } catch (Exception excp) { logger.Error("Exception ParseSIPUserAgentConfigurations. " + excp.Message); return(null); } }
/// <summary> /// Makes a decision on what the maximum allowed expiry is for a REGISTER request. Allows different expiry values to be accepted from different user agents. /// This is useful as some user agents ignore the expiry value set by the server and setting a higher value for that user agent can stop the registrar /// expiring it. /// </summary> /// <param name="userAgent">The useragent to get the maximum expiry for.</param> /// <returns>The maximum expiry value that will be accepted.</returns> private SIPUserAgentConfiguration GetUserAgentConfig(string userAgent) { SIPUserAgentConfiguration matchingUAConfig = null; try { if (m_userAgentConfigs != null && m_userAgentConfigs.Count > 0) { if (userAgent != null && userAgent.Trim().Length > 0) { foreach (string userAgentPattern in m_userAgentConfigs.Keys) { if (Regex.Match(userAgent, userAgentPattern, RegexOptions.IgnoreCase).Success) { matchingUAConfig = m_userAgentConfigs[userAgentPattern]; break; } } } } return(matchingUAConfig); } catch (Exception excp) { logger.Error("Exception GetUserAgentConfig. " + excp); return(null); } }
public void GetCiscoExpiryUnitTest() { Console.WriteLine("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name); string registrarExpiryNode = "<useragentconfigs>" + " <useragent expiry='3600'>fring</useragent>" + " <useragent expiry='300'>Cisco-CP7960G/8.0</useragent>" + " <useragent expiry='113'>*</useragent>" + " </useragentconfigs>"; XmlDocument regExpiryDom = new XmlDocument(); regExpiryDom.LoadXml(registrarExpiryNode); SIPUserAgentConfigurationManager uaConfigManager = new SIPUserAgentConfigurationManager(regExpiryDom.DocumentElement); SIPUserAgentConfiguration matchingUA = uaConfigManager.GetUserAgentConfig("Cisco-CP7960G/8.0"); Assert.IsNotNull(matchingUA, "A matching user agent entry was not found."); Assert.IsTrue(matchingUA.MaxAllowedExpiryTime == 300, "The expiry value for the Cisco ua was incorrect."); Console.WriteLine("---------------------------------"); }
public bool GetUserAgentContactListSupport(string userAgent) { SIPUserAgentConfiguration matchingConfig = GetUserAgentConfig(userAgent); return((matchingConfig != null) ? matchingConfig.ContactListSupported : m_defaultContactListSupported); }
public int GetMaxAllowedExpiry(string userAgent) { SIPUserAgentConfiguration matchingConfig = GetUserAgentConfig(userAgent); return((matchingConfig != null) ? matchingConfig.MaxAllowedExpiryTime : m_defaultMaxExpiry); }