protected override void GivenOverride()
        {
            /*force it to go into confirmed state*/
            _okResponse = CreateOkResponse();
            _rer        = new SipResponseEventBuilder().WithResponse(CreateRingingResponse()).WithClientTx(InviteCtx.Object).Build();
            _reo        = new SipResponseEventBuilder().WithResponse(_okResponse).WithClientTx(InviteCtx.Object).Build();
            ClientDialog.ProcessResponse(_rer);
            ClientDialog.ProcessResponse(_reo);
            ClientDialog.State.Should().Be(DialogState.Confirmed); /*required assertion*/

            _ackRequest = ClientDialog.CreateAck();
            ClientDialog.SendAck(_ackRequest);  /*sent an ack*/
            _beforeSentSeqNr = ClientDialog.LocalSequenceNr;
        }
Exemplo n.º 2
0
 public void ProcessResponse(SipResponseEvent responseEvent)
 {
     if (responseEvent.Response.CSeq.Command == SipMethods.Invite)
     {
         if (responseEvent.Response.StatusLine.ResponseCode == SipResponseCodes.x180_Ringing)
         {
             /*the callee party sends a ring tone. Play ringing tone locally*/
         }
         else if (responseEvent.Response.StatusLine.StatusCode / 100 == 2)
         {
             var inviteTransaction = (SipInviteClientTransaction)responseEvent.ClientTransaction;
             var dialog            = (SipInviteClientDialog)inviteTransaction.GetDialog();
             var ackRequest        = dialog.CreateAck();
             dialog.SendAck(ackRequest);
             //TODO: inform user that the remote party has picked up de phone
         }
     }
 }
Exemplo n.º 3
0
        public void ProcessResponse(SipResponseEvent responseEvent)
        {
            var statusCode = responseEvent.Response.StatusLine.StatusCode;

            if (_logger.IsDebugEnabled)
            {
                _logger.Debug("Dialog[Id={0}] received a response[StatusCode={1}]. Verifying if response is targetted to this Dialog...", GetId(), statusCode);
            }

            var match = State == DialogState.Null ? IsMatchByFirstTransaction(responseEvent) : IsMatchByDialogId(responseEvent.Response);

            if (_logger.IsDebugEnabled)
            {
                _logger.Debug("Response does {0} match.", match ? "" : "NOT");
            }

            var r = new DialogResult();

            r.InformToUser = true;

            if (match)
            {
                if (_logger.IsDebugEnabled)
                {
                    _logger.Debug("Setting the Dialog on responseEvent.");
                }

                responseEvent.Dialog = this;

                /*moved invocation out of ctx, to here. ctx now invokes ProcessResponse*/
                SetLastResponse(responseEvent.Response);

                ProcessResponseOverride(r, responseEvent);
            }

            if (r.InformToUser)
            {
                /*forward TODO: check rfc*/
                _listener.ProcessResponse(responseEvent);
            }
        }
Exemplo n.º 4
0
        protected override void ProcessResponseOverride(DialogResult result, SipResponseEvent responseEvent)
        {
            if (responseEvent.Response.StatusLine.StatusCode / 100 == 2)
            {
                _lastOKSequenceNr = responseEvent.Response.CSeq.Sequence;

                if (HasSentAck)
                {
                    if (_logger.IsDebugEnabled)
                    {
                        _logger.Debug("ClientDialog[Id={0}]. Received retransmitted OK. Resending ACK...", GetId());
                    }

                    /*it's an ok retransmit. Resend ack*/
                    result.InformToUser = false;
                    var acKRequest = CreateAck();
                    SendAck(acKRequest);
                    if (_logger.IsDebugEnabled)
                    {
                        _logger.Debug("ClientDialog[Id={0}]. ACK sent.", GetId());
                    }
                }
            }
        }
 public abstract void ProcessResponse(SipResponseEvent responseEvent);
Exemplo n.º 6
0
 internal void Update(SipResponseEvent responseEvent)
 {
 }
Exemplo n.º 7
0
 protected abstract void ProcessResponseOverride(DialogResult result, SipResponseEvent responseEvent);
Exemplo n.º 8
0
 public void ProcessResponse(SipResponseEvent responseEvent)
 {
     //_txtLog.Text += SipFormatter.FormatMessageEnvelope(responseEvent);
 }
Exemplo n.º 9
0
        public void ProcessResponse(SipResponseEvent responseEvent)
        {
            EventAggregator.Instance.Publish(new LogEvent("<<<< [RECEIVED RESPONSE]" + SipFormatter.FormatMessageEnvelope(responseEvent.Response)));

            _listener.ProcessResponse(responseEvent);
        }
Exemplo n.º 10
0
        protected override void ProcessResponseOverride(DialogResult result, SipResponseEvent responseEvent)
        {
            if(responseEvent.Response.StatusLine.StatusCode / 100 == 2)
            {
                _lastOKSequenceNr = responseEvent.Response.CSeq.Sequence;

                if(HasSentAck)
                {
                    if (_logger.IsDebugEnabled) _logger.Debug("ClientDialog[Id={0}]. Received retransmitted OK. Resending ACK...", GetId());

                    /*it's an ok retransmit. Resend ack*/
                    result.InformToUser = false;
                    var acKRequest = CreateAck();
                    SendAck(acKRequest);
                    if (_logger.IsDebugEnabled) _logger.Debug("ClientDialog[Id={0}]. ACK sent.", GetId());
                }
            }
        }
Exemplo n.º 11
0
 private void OnProcessResponse(SipResponseEvent sipResponseEvent)
 {
     _onProcessResponseCount++;
     _sipResponseEvent = sipResponseEvent;
 }
Exemplo n.º 12
0
 private bool IsMatchByFirstTransaction(SipResponseEvent responseEvent)
 {
     return responseEvent.ClientTransaction != null &&
            responseEvent.ClientTransaction.GetId() == _firstTransaction.GetId();
 }
Exemplo n.º 13
0
        public override void ProcessResponse(SipResponseEvent responseEvent)
        {
            if (_logger.IsDebugEnabled)
            {
                _logger.Debug("InviteCtx[Id={0}]. Processing reponse[StatusCode:'{1}']", GetId(), responseEvent.Response.StatusLine.StatusCode);
            }

            if (_logger.IsDebugEnabled)
            {
                _logger.Debug("InviteCtx[Id={0}]. State '{1}' is handling response...", GetId(), State.Name);
            }


            responseEvent.ClientTransaction = this;
            StateResult result;

            lock (_lock)
            {
                LatestResponse = responseEvent.Response;
                result         = State.HandleResponse(this, responseEvent.Response);
            }

            if (_logger.IsDebugEnabled)
            {
                _logger.Debug("InviteCtx[Id={0}]. Response handled by state. CurrentState:'{1}', InformToUser:'******', Dispose:'{3}'", GetId(), State.Name, result.InformToUser, result.Dispose);
            }

            if (result.InformToUser)
            {
                if (GetDialog() != null)
                {
                    if (_logger.IsDebugEnabled)
                    {
                        _logger.Debug("Tx is holding a dialog. Invoking ProcessResponse on Dialog.");
                    }

                    GetDialog().ProcessResponse(responseEvent);
                }
                else
                {
                    if (_logger.IsDebugEnabled)
                    {
                        _logger.Debug("Passing response to listener: '{0}'", _listener.GetType().Name);
                    }

                    _listener.ProcessResponse(responseEvent);
                }
            }
            if (result.Dispose)
            {
                if (_logger.IsDebugEnabled)
                {
                    _logger.Debug("InviteCtx[Id={0}]. Disposing...", GetId());
                }

                Dispose();

                if (_logger.IsDebugEnabled)
                {
                    _logger.Debug("InviteCtx[Id={0}]. Disposed.", GetId());
                }
            }
        }
 public void ProcessResponse(SipResponseEvent responseEvent)
 {
     throw new NotImplementedException();
 }
        public override void ProcessResponse(SipResponseEvent responseEvent)
        {
            StateResult result;
            lock (_lock)
            {
                result = State.HandleResponse(this, responseEvent.Response);
            }

            responseEvent.ClientTransaction = this;

            if (result.InformToUser)
            {
                if (GetDialog() != null)
                {
                    if (_logger.IsDebugEnabled) _logger.Debug("Tx is holding a dialog. Invoking ProcessResponse on Dialog.");

                    GetDialog().ProcessResponse(responseEvent);
                }
                else
                {
                    if (_logger.IsDebugEnabled) _logger.Debug("Passing response to listener: '{0}'", _listener.GetType().Name);

                    _listener.ProcessResponse(responseEvent);
                }
            }
        }
Exemplo n.º 16
0
 public void ProcessResponse(SipResponseEvent responseEvent)
 {
     //_txtLog.Text += SipFormatter.FormatMessageEnvelope(responseEvent);
 }
Exemplo n.º 17
0
        private void OnIncomingResponseContext(SipContext context)
        {
            if (_responseReceivedObserver != null)
            {
                _responseReceivedObserver.OnNext(context.Response);
            }

            ISipResponseProcessor sipResponseProcessor = _sipListener;

            var responseEvent = new SipResponseEvent(context);

            //get dialog. if dialog found, the listener for the tx is the dialog.
            SipAbstractClientTransaction ctx;

            if (_logger.IsDebugEnabled)
            {
                _logger.Debug("Searching the table for a matching tx..");
            }

            if (_ctxTable.TryGetValue(GetClientTransactionId(responseEvent.Response), out ctx))
            {
                if (_logger.IsTraceEnabled)
                {
                    _logger.Trace("Found a matching tx. Setting it as the responseProcessor.");
                }

                sipResponseProcessor = ctx;

                SipAbstractDialog found;

                if (ctx.GetDialog() == null)
                {
                    if (_logger.IsDebugEnabled)
                    {
                        _logger.Debug("Searching the table for a matching dialog...");
                    }
                    if (_dialogTable.TryGetValue(GetDialogId(responseEvent.Response, false), out found))
                    {
                        if (_logger.IsDebugEnabled)
                        {
                            _logger.Debug("Found a matching dialog.");
                        }

                        ctx.SetDialog(found);
                    }
                    else
                    {
                        if (_logger.IsDebugEnabled)
                        {
                            _logger.Debug("A matching dialog could not be found.");
                        }
                    }
                }
            }
            else
            {
                if (_logger.IsDebugEnabled)
                {
                    _logger.Debug("Could not find a matching tx..");
                }

                if (_logger.IsDebugEnabled)
                {
                    _logger.Debug("Searching the table for a matching dialog...");
                }

                /*try dialog as processor*/
                SipAbstractDialog dialog;
                if (_dialogTable.TryGetValue(GetDialogId(responseEvent.Response, false), out dialog))
                {
                    if (_logger.IsTraceEnabled)
                    {
                        _logger.Trace("Found a matching dialog. Setting it as the responseProcessor.");
                    }

                    sipResponseProcessor = dialog;
                }
                else
                {
                    if (_logger.IsTraceEnabled)
                    {
                        _logger.Trace("Could not find a matching dialog. Using the SipProvider's SipListener as the responseProcessor.");
                    }
                }
            }

            try
            {
                sipResponseProcessor.ProcessResponse(responseEvent);
            }
            catch (Exception err)
            {
                _logger.ErrorException("Response failed.", err);
                throw;
            }
        }
Exemplo n.º 18
0
 public void ProcessResponse(SipResponseEvent responseEvent)
 {
     Console.WriteLine("Received '{0}' response, from '{1}' request", responseEvent.Response.StatusLine.ResponseCode, responseEvent.Response.CSeq.Command);
 }
 private void OnProcessResponse(SipResponseEvent sipResponseEvent)
 {
     _onProcessResponseCount++;
     _sipResponseEvent = sipResponseEvent;
     _transaction      = sipResponseEvent.ClientTransaction.As <SipInviteClientTransaction>();
 }
Exemplo n.º 20
0
 public void ProcessResponse(IInternalSoftPhone softPhone, SipResponseEvent responseEvent)
 {
 }
Exemplo n.º 21
0
 private bool IsMatchByFirstTransaction(SipResponseEvent responseEvent)
 {
     return(responseEvent.ClientTransaction != null &&
            responseEvent.ClientTransaction.GetId() == _firstTransaction.GetId());
 }
Exemplo n.º 22
0
        public override void ProcessResponse(SipResponseEvent responseEvent)
        {
            if (_logger.IsDebugEnabled) _logger.Debug("InviteCtx[Id={0}]. Processing reponse[StatusCode:'{1}']", GetId(), responseEvent.Response.StatusLine.StatusCode);

            if (_logger.IsDebugEnabled) _logger.Debug("InviteCtx[Id={0}]. State '{1}' is handling response...", GetId(), State.Name);

            responseEvent.ClientTransaction = this;
            StateResult result;
            lock (_lock)
            {
                LatestResponse = responseEvent.Response;
                result = State.HandleResponse(this, responseEvent.Response);
            }

            if (_logger.IsDebugEnabled) _logger.Debug("InviteCtx[Id={0}]. Response handled by state. CurrentState:'{1}', InformToUser:'******', Dispose:'{3}'", GetId(), State.Name, result.InformToUser, result.Dispose);

            if (result.InformToUser)
            {
                if (GetDialog() != null)
                {
                    if (_logger.IsDebugEnabled) _logger.Debug("Tx is holding a dialog. Invoking ProcessResponse on Dialog.");

                    GetDialog().ProcessResponse(responseEvent);
                }
                else
                {
                    if (_logger.IsDebugEnabled) _logger.Debug("Passing response to listener: '{0}'", _listener.GetType().Name);

                    _listener.ProcessResponse(responseEvent);
                }
            }
            if(result.Dispose)
            {
                if (_logger.IsDebugEnabled) _logger.Debug("InviteCtx[Id={0}]. Disposing...", GetId());

                Dispose();

                if (_logger.IsDebugEnabled) _logger.Debug("InviteCtx[Id={0}]. Disposed.", GetId());
            }
        }
Exemplo n.º 23
0
 public void ProcessResponse(SipResponseEvent responseEvent)
 {
 }
Exemplo n.º 24
0
 protected abstract void ProcessResponseOverride(DialogResult result, SipResponseEvent responseEvent);
Exemplo n.º 25
0
 protected override void ProcessResponseOverride(DialogResult result, SipResponseEvent responseEvent)
 {
 }
Exemplo n.º 26
0
 protected override void ProcessResponseOverride(DialogResult result, SipResponseEvent responseEvent)
 {
 }
Exemplo n.º 27
0
 protected virtual void AfterPhoneProcessedResponse(IInternalSoftPhone softPhone, SipResponseEvent responseEvent)
 {
 }
 protected override void AfterPhoneProcessedResponse(IInternalSoftPhone softPhone, SipResponseEvent responseEvent)
 {
     if (responseEvent.Response.StatusLine.StatusCode == 200 && responseEvent.Response.CSeq.Command == SipMethods.Bye)
     {
         _waitForOkByeProcessed.Set();
     }
 }
Exemplo n.º 29
0
 public abstract void ProcessResponse(SipResponseEvent responseEvent);
Exemplo n.º 30
0
        public void ProcessResponse(SipResponseEvent responseEvent)
        {
            var statusCode = responseEvent.Response.StatusLine.StatusCode;

            if (_logger.IsDebugEnabled) _logger.Debug("Dialog[Id={0}] received a response[StatusCode={1}]. Verifying if response is targetted to this Dialog...", GetId(), statusCode);

            var match = State == DialogState.Null ? IsMatchByFirstTransaction(responseEvent) : IsMatchByDialogId(responseEvent.Response);

            if (_logger.IsDebugEnabled) _logger.Debug("Response does {0} match.", match ? "" : "NOT");

            var r = new DialogResult();
            r.InformToUser = true;

            if (match)
            {
                if (_logger.IsDebugEnabled) _logger.Debug("Setting the Dialog on responseEvent.");

                responseEvent.Dialog = this;

                /*moved invocation out of ctx, to here. ctx now invokes ProcessResponse*/
                SetLastResponse(responseEvent.Response);

                ProcessResponseOverride(r, responseEvent);
            }

            if (r.InformToUser)
            {
                /*forward TODO: check rfc*/
                _listener.ProcessResponse(responseEvent);
            }
        }