Esempio n. 1
0
        private void Dispose(bool disposing)
        {
            if (!_disposed)
            {
                _disposed = true;

                if (_timerAlive != null)
                {
                    _timerAlive.Change(Timeout.Infinite, Timeout.Infinite);
                    _timerAlive.Dispose();
                    _timerAlive = null;
                }
                if (_timerRegi != null)
                {
                    _timerRegi.Change(Timeout.Infinite, Timeout.Infinite);
                    _timerRegi.Dispose();
                    _timerRegi = null;
                }

                if (disposing)
                {
                    if (_registered)
                    {
                        BeginUnregister();
                    }
                }
                if (_regi != null)
                {
                    _regi.Dispose();
                    _regi = null;
                }
            }
        }
Esempio n. 2
0
        public void BeginRegister()
        {
            if (_disposed)
            {
                throw new ObjectDisposedException(this.GetType().Name, "不能执行注册操作。");
            }
            if (_regi != null)
            {
                _regi.Dispose();
            }

            string localSn   = _gateway.SipNumber;
            int    localPort = _gateway.Port;

            string remoteSn   = _platform.SipNumber;
            int    remotePort = _platform.Port;
            string remoteIP   = _platform.Ip;


            string user  = _platform.UserName;
            string pwd   = _platform.Password;
            string realm = _platform.Realm;

            SIP_Stack         stack = SipProxyWrapper.Instance.Stack;
            SIP_t_NameAddress from  = new SIP_t_NameAddress($"sip:{localSn}@{_localIp}:{localPort}");
            SIP_t_NameAddress to    = new SIP_t_NameAddress($"sip:{localSn}@{_localIp}:{localPort}");

            SIP_Uri server = new SIP_Uri()
            {
                Host = remoteIP,
                Port = remotePort,
                User = remoteSn
            };
            string              aor     = $"{localSn}@{_localIp}:{localPort}";
            AbsoluteUri         contact = AbsoluteUri.Parse($"sip:{localSn}@" + stack.BindInfo[0].EndPoint.ToString());
            SIP_UA_Registration regi    = stack.CreateRegistration(server, aor, contact, 7200);

            _regi = regi; //记录

            regi.Credential    = new NetworkCredential(user, pwd, realm);
            regi.Registered   += Regi_Registered;
            regi.StateChanged += Regi_StateChanged;

            if (_timerRegi == null)
            {
                _timerRegi = new Timer(timerRegi_Callback, null, 21000, Timeout.Infinite);
            }
            else
            {
                _timerRegi.Change(21000, Timeout.Infinite);
            }
            regi.BeginRegister(true);
        }
Esempio n. 3
0
        private void Regi_StateChanged(object sender, EventArgs e)
        {
            SIP_UA_Registration reg = sender as SIP_UA_Registration;

            if (reg != null && (reg.State == SIP_UA_RegistrationState.Registered || reg.State == SIP_UA_RegistrationState.Unregistered))
            {
                if (_timerRegi != null)
                {
                    _timerRegi.Change(Timeout.Infinite, Timeout.Infinite);
                }
            }
        }
Esempio n. 4
0
        public void BeginUnregister()
        {
            if (_regi != null)
            {
                _regi.BeginUnregister(true);
                _regi.Registered   -= Regi_Registered;
                _regi.StateChanged -= Regi_StateChanged;
                _regi.Dispose();
                _regi = null;

                if (_timerAlive != null)
                {
                    _timerAlive.Change(Timeout.Infinite, Timeout.Infinite); //关闭心跳定时器。
                }
                _registered = false;
                _alive      = false;
            }
        }