Пример #1
0
            public void FullTraceSIPSwitchUnitTest()
            {
                Console.WriteLine("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);

                SIPMonitorFilter filter = new SIPMonitorFilter("event full and regex :test@");

                Console.WriteLine(filter.GetFilterDescription());

                Assert.IsTrue(filter != null, "The filter was not correctly instantiated.");
                //Assert.AreEqual(filter.Username, "test", "The filter username was not correctly set.");
                Assert.AreEqual(filter.EventFilterDescr, "full", "The filter event full was not correctly set.");
                Assert.AreEqual(filter.RegexFilter, ":test@", "The regex was not correctly set.");

                string inviteRequest =
                    "INVITE sip:213.200.94.181 SIP/2.0" + m_CRLF +
                    "Via: SIP/2.0/UDP 192.168.1.32:10254;branch=z9hG4bK-d87543-eb7c9f44883c5955-1--d87543-;rport;received=89.100.104.191" + m_CRLF +
                    "To: aaronxten <sip:[email protected]>" + m_CRLF +
                    "From: test <sip:[email protected]>;tag=774d2561" + m_CRLF +
                    "Call-ID: MTBhNGZjZmQ2OTc3MWU5MTZjNWUxMDYxOTk1MjdmYzk." + m_CRLF +
                    "CSeq: 2 REGISTER" + m_CRLF +
                    "Contact: <sip:[email protected]:10254;rinstance=6d2bbd8014ca7a76>;expires=0" + m_CRLF +
                    "Max-Forwards: 69" + m_CRLF +
                    "User-Agent: X-Lite release 1006e stamp 34025" + m_CRLF +
                    "Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO" + m_CRLF + m_CRLF;

                SIPMonitorEvent monitorEvent    = new SIPMonitorConsoleEvent(SIPMonitorServerTypesEnum.AppServer, SIPMonitorEventTypesEnum.FullSIPTrace, inviteRequest, null);
                bool            showEventResult = filter.ShowSIPMonitorEvent(monitorEvent);

                Assert.IsTrue(showEventResult, "The filter should have shown this event.");
            }
Пример #2
0
            public void UsernameWithAndFilterUnitTest()
            {
                Console.WriteLine("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);

                SIPMonitorFilter filter = new SIPMonitorFilter("user testandtest   and  event full");

                Console.WriteLine(filter.GetFilterDescription());

                Assert.IsTrue(filter != null, "The filter was not correctly instantiated.");
                Assert.AreEqual(filter.Username, "testandtest", "The filter username was not correctly set.");
                Assert.AreEqual(filter.EventFilterDescr, "full", "The filter event full was not correctly set.");
            }
Пример #3
0
            public void BlockIPAddressUnitTest()
            {
                Console.WriteLine("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);

                SIPMonitorFilter filter = new SIPMonitorFilter("ipaddress 127.0.0.1 and event full");

                Console.WriteLine(filter.GetFilterDescription());

                Assert.IsTrue(filter != null, "The filter was not correctly instantiated.");
                Assert.AreEqual(filter.IPAddress, "127.0.0.1", "The filter ip address was not correctly set.");

                SIPMonitorEvent monitorEvent    = new SIPMonitorConsoleEvent(SIPMonitorServerTypesEnum.AppServer, SIPMonitorEventTypesEnum.FullSIPTrace, "blah blah", String.Empty, SIPEndPoint.ParseSIPEndPoint("127.0.0.2"), null);
                bool            showEventResult = filter.ShowSIPMonitorEvent(monitorEvent);

                Assert.IsFalse(showEventResult, "The filter should not have shown this event.");
            }
        public string SetFilter(string subject, string filter)
        {
            if (subject.IsNullOrBlank())
            {
                throw new ArgumentException("SetFilter must have a valid non-empty subject", "subject");
            }

            SessionType     = SIPMonitorClientTypes.GetSIPMonitorClientType(subject);
            Filter          = new SIPMonitorFilter(filter);
            Filter.BaseType = SessionType.ToString().ToLower();

            if (Filter != null)
            {
                // If the filter request is for a full SIP trace the user field must not be used since it's
                // tricky to decide which user a SIP message belongs to prior to authentication. If a full SIP
                // trace is requested instead of a user filter a regex will be set that matches the username in
                // the From or To header. If a full SIP trace is not specified then the user filer will be set.
                if (AdminId != m_topLevelAdminId)
                {
                    // If this user is not the top level admin there are tight restrictions on what filter can be set.
                    if (Filter.EventFilterDescr == "full")
                    {
                        Filter.RegexFilter = ":" + CustomerUsername + "@";
                        Filter.Username    = m_filterWildcard;
                    }
                    else
                    {
                        Filter.Username = CustomerUsername;
                    }
                }
                else
                {
                    // If the administrator has not requested a filter on a specific user set the wildcard.
                    if (Filter.Username == null)
                    {
                        Filter.Username = m_filterWildcard;
                    }
                }

                return(SessionID);
            }
            else
            {
                throw new ApplicationException("SetFilter did not understand the subject type of " + subject + ".");
            }
        }
        public string SetFilter(string subject, string filter)
        {
            if (subject.IsNullOrBlank())
            {
                throw new ArgumentException("SetFilter must have a valid non-empty subject", "subject");
            }

            SessionType = SIPMonitorClientTypes.GetSIPMonitorClientType(subject);
            Filter = new SIPMonitorFilter(filter);
            Filter.BaseType = SessionType.ToString().ToLower();

            if (Filter != null)
            {
                // If the filter request is for a full SIP trace the user field must not be used since it's
                // tricky to decide which user a SIP message belongs to prior to authentication. If a full SIP
                // trace is requested instead of a user filter a regex will be set that matches the username in
                // the From or To header. If a full SIP trace is not specified then the user filer will be set.
                if (AdminId != m_topLevelAdminId)
                {
                    // If this user is not the top level admin there are tight restrictions on what filter can be set.
                    if (Filter.EventFilterDescr == "full")
                    {
                        Filter.RegexFilter = ":" + CustomerUsername + "@";
                        Filter.Username = m_filterWildcard;
                    }
                    else
                    {
                        Filter.Username = CustomerUsername;
                    }
                }
                else
                {
                    // If the administrator has not requested a filter on a specific user set the wildcard.
                    if (Filter.Username == null)
                    {
                        Filter.Username = m_filterWildcard;
                    }
                }

                return SessionID;
            }
            else
            {
                throw new ApplicationException("SetFilter did not understand the subject type of " + subject + ".");
            }
        }
        private void ConnectConsole(string filterText)
        {
            try
            {
                if (filterText.IsNullOrBlank())
                {
                    filterText = m_defaultFilter;
                }

                SIPMonitorFilter filter = new SIPMonitorFilter(filterText);
                m_controlfilter = filterText.Trim();
                UIHelper.SetIsEnabled(m_commandEntryTextBox, false);
                LogActivityMessage_External(MessageLevelsEnum.Monitor, "Requesting notifications with filter=" + filterText.Trim() + " at " + DateTime.Now.ToString("dd MMM yyyy HH:mm:ss") + ".");

                UIHelper.SetVisibility(m_connectSocketButton, Visibility.Collapsed);
                UIHelper.SetVisibility(m_closeSocketButton, Visibility.Visible);
                m_sipNotifierClient.SetControlFilter(m_controlfilter);
            }
            catch (Exception filterExp)
            {
                LogActivityMessage_External(MessageLevelsEnum.Warn, "Invalid filter. " + filterExp.Message);
                ConsoleNotificationsClosed();
            }
        }
            public void UsernameWithAndFilterUnitTest()
            {
                Console.WriteLine("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);

                SIPMonitorFilter filter = new SIPMonitorFilter("user testandtest   and  event full");
                Console.WriteLine(filter.GetFilterDescription());

                Assert.IsTrue(filter != null, "The filter was not correctly instantiated.");
                Assert.AreEqual(filter.Username, "testandtest", "The filter username was not correctly set.");
                Assert.AreEqual(filter.EventFilterDescr, "full", "The filter event full was not correctly set.");
            }
            public void FullTraceSIPSwitchUnitTest()
            {
                Console.WriteLine("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);

                SIPMonitorFilter filter = new SIPMonitorFilter("event full and regex :test@");
                Console.WriteLine(filter.GetFilterDescription());

                Assert.IsTrue(filter != null, "The filter was not correctly instantiated.");
                //Assert.AreEqual(filter.Username, "test", "The filter username was not correctly set.");
                Assert.AreEqual(filter.EventFilterDescr, "full", "The filter event full was not correctly set.");
                Assert.AreEqual(filter.RegexFilter, ":test@", "The regex was not correctly set.");

                string inviteRequest =
                    "INVITE sip:213.200.94.181 SIP/2.0" + m_CRLF +
                    "Via: SIP/2.0/UDP 192.168.1.32:10254;branch=z9hG4bK-d87543-eb7c9f44883c5955-1--d87543-;rport;received=89.100.104.191" + m_CRLF +
                    "To: aaronxten <sip:[email protected]>" + m_CRLF +
                    "From: test <sip:[email protected]>;tag=774d2561" + m_CRLF +
                    "Call-ID: MTBhNGZjZmQ2OTc3MWU5MTZjNWUxMDYxOTk1MjdmYzk." + m_CRLF +
                    "CSeq: 2 REGISTER" + m_CRLF +
                    "Contact: <sip:[email protected]:10254;rinstance=6d2bbd8014ca7a76>;expires=0" + m_CRLF +
                    "Max-Forwards: 69" + m_CRLF +
                    "User-Agent: X-Lite release 1006e stamp 34025" + m_CRLF +
                    "Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO" + m_CRLF + m_CRLF;

                SIPMonitorEvent monitorEvent = new SIPMonitorConsoleEvent(SIPMonitorServerTypesEnum.AppServer, SIPMonitorEventTypesEnum.FullSIPTrace, inviteRequest, null);
                bool showEventResult = filter.ShowSIPMonitorEvent(monitorEvent);

                Assert.IsTrue(showEventResult, "The filter should have shown this event.");
            }
            public void BlockIPAddressUnitTest()
            {
                Console.WriteLine("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);

                SIPMonitorFilter filter = new SIPMonitorFilter("ipaddress 127.0.0.1 and event full");
                Console.WriteLine(filter.GetFilterDescription());

                Assert.IsTrue(filter != null, "The filter was not correctly instantiated.");
                Assert.AreEqual(filter.IPAddress, "127.0.0.1", "The filter ip address was not correctly set.");

                SIPMonitorEvent monitorEvent = new SIPMonitorConsoleEvent(SIPMonitorServerTypesEnum.AppServer, SIPMonitorEventTypesEnum.FullSIPTrace, "blah blah", String.Empty, SIPEndPoint.ParseSIPEndPoint("127.0.0.2"), null);
                bool showEventResult = filter.ShowSIPMonitorEvent(monitorEvent);

                Assert.IsFalse(showEventResult, "The filter should not have shown this event.");
            }
        /// <summary>
        /// Simple state machine that processes commands from the client.
        /// </summary>
        private void ProcessCommand(string command)
        {
            try
            {
                if (command.IsNullOrBlank())
                {
                    command = DEFAULT_FILTER;
                }

                string subscribeError = null;
                m_notificationsSessionID = Guid.NewGuid().ToString();
                m_publisher.Subscribe(Username, AdminId, m_notificationsAddress, m_notificationsSessionID, SIPMonitorClientTypesEnum.Console.ToString(), command, DEFAULT_SESSION_LENGTH, null, out subscribeError);

                if (subscribeError != null)
                {
                    throw new ApplicationException(subscribeError);
                }
                else
                {
                    m_lastMonitorSessionRenewal = DateTime.Now;
                    ThreadPool.QueueUserWorkItem(delegate { RenewSession(); });
                    SIPMonitorFilter filter = new SIPMonitorFilter(command);
                    WriteFilterDescription(filter.GetFilterDescription());

                    /*if (m_publisher is SIPSorcery.Servers.SIPMonitorClientManager)
                    {
                        logger.Debug("VT100Server is connected to a publisher that fires an event when a notification is ready.");
                        // The publisher will fire an event when a new notification is ready.
                        m_publisher.NotificationReady += (address) => { GetNotifications(); };
                    }
                    else
                    {
                        logger.Debug("VT100Server is connected to a publisher that needs to be polled for events.");

                        // The publisher does not supply an event when a notification is ready and must be polled instead.
                        StopPolling = false;
                        ThreadPool.QueueUserWorkItem(delegate
                        {
                            try
                            {
                                while (!HasClosed && !StopPolling)
                                {
                                    GetNotifications();
                                    Thread.Sleep(POLL_FOR_NOTIFICATIONS_PERIOD);
                                }

                                logger.Debug("Stopped polling for events for address " + m_notificationsAddress + ".");
                            }
                            catch (ApplicationException appExcp)
                            {
                                WriteError(appExcp.Message);
                            }
                            catch (Exception excp)
                            {
                                logger.Error("Exception SIPSorceryVT100Server ProcessCommand on GetNotifications. " + excp.Message);
                            }
                        });
                    }*/
                }
            }
            catch (ApplicationException appExcp)
            {
                WriteError(appExcp.Message);
            }
            catch (Exception excp)
            {
                logger.Error("Exception SIPSorceryVT100Server ProcessCommand. " + excp.Message);
            }
        }