Example #1
0
        public void ExpectStxToDisposeThemselfWhenTheirEndTimerHasFired()
        {
            var s          = new Mock <ISipMessageSender>();
            var l          = new Mock <ISipListener>();
            var txTable    = new SipServerTransactionTable();
            var tfsBuilder = new TimerFactoryStubBuilder();

            tfsBuilder.WithNonInviteStxEndCompletedTimerInterceptor((a) => new TxTimerStub(a, 1000, false, AfterCallBack));
            tfs = tfsBuilder.Build();
            for (int i = 0; i < Number; i++)
            {
                var r   = new SipRequestBuilder().WithCSeq(new SipCSeqHeaderBuilder().WithSequence(i).Build()).Build();
                var stx = new SipNonInviteServerTransaction(txTable, r, l.Object, s.Object, tfs);

                /*go to completed state */
                stx.SendResponse(new SipResponseBuilder()
                                 .WithStatusLine(new SipStatusLineBuilder()
                                                 .WithStatusCode(200)
                                                 .WithReason("OK")
                                                 .Build())
                                 .Build());
            }

            /*wait for Number of timers to fire*/
            are.WaitOne();

            Assert.IsTrue(!txTable.AsEnumerable().Any());
        }
Example #2
0
        public void ExpectStxToDisposeThemselfWhenTheirEndTimerHasFired()
        {
            var s = new Mock<ISipMessageSender>();
            var l = new Mock<ISipListener>();
            var txTable = new SipServerTransactionTable();
            var tfsBuilder = new TimerFactoryStubBuilder();
            tfsBuilder.WithNonInviteStxEndCompletedTimerInterceptor((a) => new TxTimerStub(a, 1000, false, AfterCallBack));
            tfs = tfsBuilder.Build();
            for (int i = 0; i < Number; i++)
            {
                var r = new SipRequestBuilder().WithCSeq(new SipCSeqHeaderBuilder().WithSequence(i).Build()).Build();
                var stx = new SipNonInviteServerTransaction(txTable, r, l.Object, s.Object, tfs);

                /*go to completed state */
                stx.SendResponse(new SipResponseBuilder()
                    .WithStatusLine(new SipStatusLineBuilder()
                    .WithStatusCode(200)
                    .WithReason("OK")
                    .Build())
                    .Build());
            }

            /*wait for Number of timers to fire*/
            are.WaitOne();

            Assert.IsTrue(!txTable.AsEnumerable().Any());
        }
Example #3
0
 public TxSpecificationBase()
 {
     Sender = new Mock<ISipMessageSender>();
     Listener = new Mock<ISipListener>();
     TxTable = new SipServerTransactionTable();
     Request = new SipRequestBuilder().Build();
     var tf = new TimerFactoryStub();
     tf.CreateNonInviteStxEndCompletedTimerInterceptor = CreateDefaultNonInviteStxEndCompletedTimer;
     TimerFactory = tf;
 }
Example #4
0
        public TxSpecificationBase()
        {
            Sender   = new Mock <ISipMessageSender>();
            Listener = new Mock <ISipListener>();
            TxTable  = new SipServerTransactionTable();
            Request  = new SipRequestBuilder().Build();
            var tf = new TimerFactoryStub();

            tf.CreateNonInviteStxEndCompletedTimerInterceptor = CreateDefaultNonInviteStxEndCompletedTimer;
            TimerFactory = tf;
        }
        internal SipNonInviteServerTransaction(
            SipServerTransactionTable table,
            SipRequest request,
            ISipListener listener,
            ISipMessageSender messageSender,
            ITimerFactory timerFactory)
            : base(table, request, listener, messageSender, timerFactory)
        {
            Check.IsTrue(request.RequestLine.Method != SipMethods.Invite, "Request method can not be 'INVITE'.");
            Check.IsTrue(request.RequestLine.Method != SipMethods.Ack, "Request method can not be 'ACK'.");

            EndCompletedTimer = _timerFactory.CreateNonInviteStxEndCompletedTimer(OnCompletedEnded);
        }
        internal SipNonInviteServerTransaction(
            SipServerTransactionTable table, 
            SipRequest request, 
            ISipListener listener, 
            ISipMessageSender messageSender,
            ITimerFactory timerFactory)
            : base(table, request, listener, messageSender, timerFactory)
        {
            Check.IsTrue(request.RequestLine.Method != SipMethods.Invite, "Request method can not be 'INVITE'.");
            Check.IsTrue(request.RequestLine.Method != SipMethods.Ack, "Request method can not be 'ACK'.");

            EndCompletedTimer = _timerFactory.CreateNonInviteStxEndCompletedTimer(OnCompletedEnded);
        }
Example #7
0
 public TxSpecificationBase()
 {
     Sender   = new Mock <ISipMessageSender>();
     Listener = new Mock <ISipListener>();
     TxTable  = new SipServerTransactionTable();
     Request  = new SipRequestBuilder()
                .WithRequestLine
                (
         new SipRequestLineBuilder().WithMethod(SipMethods.Invite).Build()
                )
                .Build();
     TimerFactory = new TimerFactoryStubBuilder().Build();
 }
Example #8
0
 public TxSpecificationBase()
 {
     Sender = new Mock<ISipMessageSender>();
     Listener = new Mock<ISipListener>();
     TxTable = new SipServerTransactionTable();
     Request = new SipRequestBuilder()
         .WithRequestLine
         (
         new SipRequestLineBuilder().WithMethod(SipMethods.Invite).Build()
         )
         .Build();
     TimerFactory = new TimerFactoryStubBuilder().Build();
 }
Example #9
0
        //want follow the jain-sip implementation. I just use a guid. SipUtil.CreateCallId();
        //public SipCallIdHeader GetNewCallId()
        //{
        //    String callId = SipUtil.GenerateCallIdentifier(this.getListeningPoint()
        //            .getIPAddress());
        //    SipCallIdHeader callid = new SipCallIdHeader();

        //    return callid;
        //}

        internal SipProvider(SipStack stack, ISipContextSource contextSource)
        {
            Check.Require(stack, "stack");
            Check.Require(contextSource, "contextSource");

            _stack         = stack;
            _contextSource = contextSource;
            contextSource.NewContextReceived += (s, e) => OnNewContextReceived(e.Context);
            contextSource.UnhandledException += (s, e) => OnContextSourceUnhandledException(e.Exception);

            _ctxTable    = new SipClientTransactionTable();
            _stxTable    = new SipServerTransactionTable();
            _dialogTable = new SipDialogTable();
        }
        protected SipAbstractServerTransaction(SipServerTransactionTable table, SipRequest request, ISipListener listener, ISipMessageSender messageSender, ITimerFactory timerFactory)
        {
            Check.Require(table, "table");
            Check.Require(request, "request");
            Check.Require(listener, "listener");
            Check.Require(messageSender, "messageSender");
            Check.Require(timerFactory, "timerFactory");

            _table = table;
            _request = request;
            _listener = listener;
            _messageSender = messageSender;
            _timerFactory = timerFactory;
        }
Example #11
0
        //want follow the jain-sip implementation. I just use a guid. SipUtil.CreateCallId();
        //public SipCallIdHeader GetNewCallId()
        //{
        //    String callId = SipUtil.GenerateCallIdentifier(this.getListeningPoint()
        //            .getIPAddress());
        //    SipCallIdHeader callid = new SipCallIdHeader();
        //    return callid;
        //}
        internal SipProvider(SipStack stack, ISipContextSource contextSource)
        {
            Check.Require(stack, "stack");
            Check.Require(contextSource, "contextSource");

            _stack = stack;
            _contextSource = contextSource;
            contextSource.NewContextReceived +=(s,e) => OnNewContextReceived(e.Context);
            contextSource.UnhandledException += (s, e) => OnContextSourceUnhandledException(e.Exception);

            _ctxTable = new SipClientTransactionTable();
            _stxTable = new SipServerTransactionTable();
            _dialogTable = new SipDialogTable();
        }
        internal SipInviteServerTransaction(
            SipServerTransactionTable table,
            ISipMessageSender messageSender,
            ISipListener listener,
            SipRequest request,
            ITimerFactory timerFactory)
            : base(table, request, listener, messageSender, timerFactory)
        {
            Check.IsTrue(request.RequestLine.Method == SipMethods.Invite, "Method other then 'INVITE' is not allowed");

            _logger = NLog.LogManager.GetCurrentClassLogger();

            ReTransmitNonx200FinalResponseTimer = _timerFactory.CreateInviteStxRetransmitTimer(OnReTransmitNonx200FinalResponse);
            EndCompletedTimer = _timerFactory.CreateInviteStxEndCompletedTimer(OnCompletedEnded);
            EndConfirmedTimer = _timerFactory.CreateInviteStxEndConfirmed(OnConfirmedEnded);
            SendTryingTimer = _timerFactory.CreateInviteStxSendTryingTimer(OnSendTryingTimer);
        }
        internal SipInviteServerTransaction(
            SipServerTransactionTable table,
            ISipMessageSender messageSender,
            ISipListener listener,
            SipRequest request,
            ITimerFactory timerFactory)
            : base(table, request, listener, messageSender, timerFactory)
        {
            Check.IsTrue(request.RequestLine.Method == SipMethods.Invite, "Method other then 'INVITE' is not allowed");

            _logger = NLog.LogManager.GetCurrentClassLogger();

            ReTransmitNonx200FinalResponseTimer = _timerFactory.CreateInviteStxRetransmitTimer(OnReTransmitNonx200FinalResponse);
            EndCompletedTimer = _timerFactory.CreateInviteStxEndCompletedTimer(OnCompletedEnded);
            EndConfirmedTimer = _timerFactory.CreateInviteStxEndConfirmed(OnConfirmedEnded);
            SendTryingTimer   = _timerFactory.CreateInviteStxSendTryingTimer(OnSendTryingTimer);
        }