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()); }
internal override StateResult ProcessRequest(SipNonInviteServerTransaction ctx, SipRequestEvent request) { /*17.2.2. : While in the "Completed" state, the server transaction MUST pass the final response to the transport * layer for retransmission whenever a retransmission of the request is received. */ ctx.SendResponseInternal(); return(new StateResult()); }
internal override StateResult ProcessRequest(SipNonInviteServerTransaction ctx, SipRequestEvent request) { /*17.2.2. : While in the "Completed" state, the server transaction MUST pass the final response to the transport layer for retransmission whenever a retransmission of the request is received. */ ctx.SendResponseInternal(); return new StateResult(); }
internal override void HandleSendingResponse(SipNonInviteServerTransaction tx, SipResponse response) { var statusCode = response.StatusLine.StatusCode; if (statusCode >= 100 && statusCode < 200) { tx.SendResponseInternal(response); } else if (statusCode >= 200 && statusCode < 700) { tx.SendResponseInternal(response); tx.ChangeState(SipNonInviteServerTransaction.CompletedState); } }
internal abstract void Initialize(SipNonInviteServerTransaction transaction);
internal override StateResult ProcessRequest(SipNonInviteServerTransaction tx, SipRequestEvent request) { tx.SendResponseInternal(); return new StateResult(); }
internal override void Initialize(SipNonInviteServerTransaction transaction) { }
protected override void Given() { _ctx = new SipNonInviteServerTransaction(TxTable, Request, Listener.Object, Sender.Object, TimerFactory); _ctx.Initialize(); GivenOverride(); }
internal abstract StateResult ProcessRequest(SipNonInviteServerTransaction ctx, SipRequestEvent request);
internal abstract void HandleSendingResponse(SipNonInviteServerTransaction transaction, SipResponse response);
internal override StateResult ProcessRequest(SipNonInviteServerTransaction ctx, SipRequestEvent request) { /*17.2.2.: retransmitted requests in the trying state should be discarded.*/ return(new StateResult()); }
public ISipServerTransaction CreateServerTransaction(SipRequest request) { Check.Require(request, "request"); Check.IsTrue(SipMethods.IsMethod(request.RequestLine.Method), "Request method is not supported"); ISipServerTransaction tx; if (request.RequestLine.Method == SipMethods.Ack) { throw new ArgumentException("Can not create a transaction for the 'ACK' request"); } ISipListener txListener = _sipListener; SipAbstractDialog dialog; if (_dialogTable.TryGetValue(GetDialogId(request, true), out dialog)) { txListener = dialog; } if (request.RequestLine.Method == SipMethods.Invite) { var istx = new SipInviteServerTransaction( ServerTransactionTable, this, txListener, request, _stack.GetTimerFactory()); //istx.Start(); tx = istx; } else { var nistx = new SipNonInviteServerTransaction( ServerTransactionTable, request, txListener, this, _stack.GetTimerFactory()); //nistx.Start(); tx = nistx; } return tx; }
protected override void Given() { Stx = new SipNonInviteServerTransaction(TxTable, Request, Listener.Object, Sender.Object, TimerFactory); }
internal override StateResult ProcessRequest(SipNonInviteServerTransaction tx, SipRequestEvent request) { tx.SendResponseInternal(); return(new StateResult()); }
internal override StateResult ProcessRequest(SipNonInviteServerTransaction ctx, SipRequestEvent request) { /*17.2.2.: retransmitted requests in the trying state should be discarded.*/ return new StateResult(); }
internal override void HandleSendingResponse(SipNonInviteServerTransaction transaction, SipResponse response) { /*Final responses passed by the TU to the server transaction MUST be discarded while in the "Completed" state.*/ }
internal override void Initialize(SipNonInviteServerTransaction ctx) { ctx.EndCompletedTimer.Start(); }