public void SIPProviderDeleted(SIPProvider sipProvider)
        {
            try
            {
                logger.Debug("SIPProviderBindingSynchroniser SIPProviderDeleted for " + sipProvider.Owner + " and " + sipProvider.ProviderName + ".");

                SIPProviderBinding existingBinding = m_bindingPersistor.Get(b => b.ProviderId == sipProvider.Id);
                if (existingBinding != null)
                {
                    if (existingBinding.IsRegistered)
                    {
                        // Let the registration agent know the existing binding should be expired.
                        existingBinding.BindingExpiry        = 0;
                        existingBinding.NextRegistrationTime = DateTime.UtcNow;
                        m_bindingPersistor.Update(existingBinding);
                    }
                    else
                    {
                        m_bindingPersistor.Delete(existingBinding);
                    }
                }
            }
            catch (Exception excp)
            {
                logger.Error("Exception SIPProviderBindingSynchroniser SIPProviderDeleted. " + excp.Message);
            }
        }
        public SIPProviderBinding(SIPProvider sipProvider)
        {
            SetProviderFields(sipProvider);

            m_id = Guid.NewGuid();

            // All set, let the Registration Agent know the binding is ready to be processed.
            NextRegistrationTime = DateTimeOffset.UtcNow;
        }
        public void SIPProviderAdded(SIPProvider sipProvider)
        {
            try
            {
                logger.Debug("SIPProviderBindingSynchroniser SIPProviderAdded for " + sipProvider.Owner + " and " + sipProvider.ProviderName + ".");

                if (sipProvider.RegisterEnabled)
                {
                    SIPProviderBinding binding = new SIPProviderBinding(sipProvider);
                    m_bindingPersistor.Add(binding);
                }
            }
            catch (Exception excp)
            {
                logger.Error("Exception SIPProviderBindingSynchroniser SIPProviderAdded. " + excp.Message);
            }
        }
        //public Dictionary<Guid, object> Load(XmlDocument dom)
        //{
        //    return SIPAssetXMLPersistor<SIPProviderBinding>.LoadAssetsFromXMLRecordSet(dom);
        //}
#endif

        public void SetProviderFields(SIPProvider sipProvider)
        {
            m_providerId          = sipProvider.Id;
            m_owner               = sipProvider.Owner;
            AdminMemberId         = sipProvider.AdminMemberId;
            ProviderName          = sipProvider.ProviderName;
            ProviderAuthUsername  = (!sipProvider.ProviderAuthUsername.IsNullOrBlank()) ? sipProvider.ProviderAuthUsername : sipProvider.ProviderUsername;
            ProviderPassword      = sipProvider.ProviderPassword;
            RegistrarServer       = sipProvider.Registrar.CopyOf();
            RegistrarRealm        = (!sipProvider.RegisterRealm.IsNullOrBlank()) ? sipProvider.RegisterRealm : RegistrarServer.Host;
            ProviderOutboundProxy = sipProvider.ProviderOutboundProxy;
            SendMWISubscribe      = sipProvider.SendMWISubscribe;

            if (sipProvider.RegisterEnabled)
            {
                BindingExpiry = sipProvider.RegisterExpiry;
            }
            else
            {
                BindingExpiry = 0;
            }

            string bindingId = null;

            if (m_bindingURI != null && m_bindingURI.Parameters.Has(REGAGENT_CONTACT_ID_KEY))
            {
                bindingId = m_bindingURI.Parameters.Get(REGAGENT_CONTACT_ID_KEY);
            }

            if (!sipProvider.RegisterContact.IsNullOrBlank())
            {
                m_bindingURI = SIPURI.ParseSIPURI(sipProvider.RegisterContact);
                if (!bindingId.IsNullOrBlank())
                {
                    m_bindingURI.Parameters.Set(REGAGENT_CONTACT_ID_KEY, bindingId);
                }
            }
            else
            {
                // The register contact field on the SIP Provider is empty.
                // This condition needs to be trearted as the binding being disabled and it needs to be removed.
                BindingExpiry = 0;
            }
        }
Пример #5
0
        public static string ValidateAndClean(SIPProvider sipProvider)
        {
            if (sipProvider.ProviderName.IsNullOrBlank())
            {
                return("A value for Provider Name must be specified.");
            }
            else if (sipProvider.ProviderName.Contains("."))
            {
                return("The Provider Name cannot contain a full stop '.' in order to avoid ambiguity with DNS host names, please remove the '.'.");
            }

            if (sipProvider.ProviderType == ProviderTypes.SIP)
            {
                if (sipProvider.ProviderServer.IsNullOrBlank())
                {
                    return("A value for Server must be specified.");
                }
                if (sipProvider.RegisterEnabled && sipProvider.m_registerContact == null)
                {
                    return("A valid contact must be supplied to enable a provider registration.");
                }
                else if (sipProvider.m_providerServer.Host.IndexOf('.') == -1)
                {
                    return("Your provider server entry appears to be invalid. A valid hostname or IP address should contain at least one '.'.");
                }
                else if (sipProvider.m_registerServer != null && sipProvider.m_registerServer.Host.IndexOf('.') == -1)
                {
                    return("Your register server entry appears to be invalid. A valid hostname or IP address should contain at least one '.'.");
                }
                else if (sipProvider.m_registerContact != null && sipProvider.m_registerContact.Host.IndexOf('.') == -1)
                {
                    return("Your register contact entry appears to be invalid. A valid hostname or IP address should contain at least one '.'.");
                }
                else if (sipProvider.m_registerContact != null && sipProvider.m_registerContact.User.IsNullOrBlank())
                {
                    return("Your register contact entry appears to be invalid, the user portion was missing. Contacts must be of the form [email protected], e.g. [email protected].");
                }
                else if (DisallowedServerPatterns != null && Regex.Match(sipProvider.m_providerServer.Host, DisallowedServerPatterns).Success)
                {
                    return("The Provider Server contains a disallowed string. If you are trying to create a Provider entry pointing to sipsorcery.com it is not permitted.");
                }
                else if (DisallowedServerPatterns != null && sipProvider.m_registerServer != null && Regex.Match(sipProvider.m_registerServer.Host, DisallowedServerPatterns).Success)
                {
                    return("The Provider Register Server contains a disallowed string. If you are trying to create a Provider entry pointing to sipsorcery.com it is not permitted.");
                }
            }
            else
            {
                if (sipProvider.ProviderUsername.IsNullOrBlank())
                {
                    return("A username is required for Google Voice entries.");
                }
                else if (sipProvider.ProviderPassword.IsNullOrBlank())
                {
                    return("A password is required for Google Voice entries.");
                }
                else if (sipProvider.GVCallbackNumber.IsNullOrBlank())
                {
                    return("A callback number is required for Google Voice entries.");
                }
                else if (Regex.Match(sipProvider.GVCallbackNumber, @"\D").Success)
                {
                    return("The callback number contains an invalid character. Only digits are permitted.");
                }
            }

            return(null);
        }