protected override void AfterPhoneProcessedResponse(IInternalSoftPhone softPhone, SipResponseEvent responseEvent)
 {
     if (responseEvent.Response.StatusLine.StatusCode == 200 && responseEvent.Response.CSeq.Command == SipMethods.Bye)
     {
         _waitForOkByeProcessed.Set();
     }
 }
 protected override void GivenOverride()
 {
     Ctx.SendRequest(); /*force it to go into calling state*/
     response = CreateFinalResponseEvent(500, "Internal Server error");
     Ctx.ProcessResponse(response);
     Ctx.State.Should().Be(SipInviteClientTransaction.CompletedState); /*required assertion*/
 }
示例#3
0
        public void ProcessResponse(IInternalSoftPhone softPhone, SipResponseEvent responseEvent)
        {
            ProcessResponseCounter++;

            _state.ProcessResponse(softPhone, responseEvent);

            _afterProcessResponse(softPhone, responseEvent);
        }
        private void OnProcessResponse(SipResponseEvent sipResponseEvent)
        {
            _onProcessResponseCount++;
            _sipResponseEvent = sipResponseEvent;

            if (sipResponseEvent.Dialog != null && sipResponseEvent.Response.StatusLine.StatusCode == 200)
            {
                var ack = sipResponseEvent.Dialog.As<SipInviteClientDialog>().CreateAck();
                sipResponseEvent.Dialog.As<SipInviteClientDialog>().SendAck(ack);
            }
        }
        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;
        }
示例#6
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
         }
     }
 }
 private void OnProcessResponse(SipResponseEvent sipResponseEvent)
 {
     _onProcessResponseCount++;
     _sipResponseEvent = sipResponseEvent;
 }
示例#8
0
 public void ProcessResponse(IInternalSoftPhone softPhone, SipResponseEvent responseEvent)
 {
 }
 protected override void When()
 {
     var cb = new SipContextBuilder().WithResponse(_okResponse).Build();
     var rEvent = new SipResponseEvent(cb);
     ClientDialog.ProcessResponse(rEvent);
 }
示例#10
0
        public void ProcessResponse(SipResponseEvent responseEvent)
        {
            Log("Received a response. Status:'{0}'", responseEvent.Response.StatusLine.FormatToString());

            var div100 = responseEvent.Response.StatusLine.StatusCode / 100;
            if (div100 == 1)
            {
                Log("Received a provisional response. Waiting for a final response");
                GoToState(PhoneState.WaitForFinal);;
                RefreshDialogForm(responseEvent.Dialog);
            }
            else if (div100 == 2)
            {
                Log("Received a OK response. Sending Ack...");
                SendAck(_dialog as SipInviteClientDialog);
                Log("Ack send. Call established.");
                GoToState(PhoneState.CallerEstablished);
                RefreshDialogForm(responseEvent.Dialog);
            }
            else if (div100 > 2)
            {
                Log("Received a final response other then OK. Terminating dialog...");
                if (responseEvent.Dialog != null)
                {
                    responseEvent.Dialog.Terminate();
                    GoToState(PhoneState.Idle);
                    Log("Dialog terminated. Phone in idle state");
                }

            }
        }
示例#11
0
 protected override void AfterPhoneProcessedResponse(IInternalSoftPhone softPhone, Hallo.Sip.Stack.SipResponseEvent responseEvent)
 {
 }
示例#12
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;
            }
        }
示例#13
0
        public void ProcessResponse(SipResponseEvent responseEvent)
        {
            string responseCode = responseEvent.Response.StatusLine.ResponseCode;

            _logger.Debug("Processing response: {0} ...", responseCode);

            InternalState.ProcessResponse(this, responseEvent);

            _logger.Debug("Response processed.");
        }
 public void ProcessResponse(SipResponseEvent responseEvent)
 {
     throw new NotImplementedException();
 }
 protected virtual void AfterPhoneProcessedResponse(IInternalSoftPhone softPhone, SipResponseEvent responseEvent)
 {
 }
示例#16
0
 public void ProcessResponse(SipResponseEvent responseEvent)
 {
     Console.WriteLine("Received '{0}' response, from '{1}' request", responseEvent.Response.StatusLine.ResponseCode, responseEvent.Response.CSeq.Command);
 }
示例#17
0
 public void ProcessResponse(SipResponseEvent responseEvent)
 {
     OnProcessResponse(responseEvent);
 }
示例#18
0
 internal void Update(SipResponseEvent responseEvent)
 {
 }
 private void OnProcessResponse(SipResponseEvent sipResponseEvent)
 {
     _onProcessResponseCount++;
     _sipResponseEvent = sipResponseEvent;
     _transaction = sipResponseEvent.ClientTransaction.As<SipInviteClientTransaction>();
 }
示例#20
0
        public void ProcessResponse(SipResponseEvent responseEvent)
        {
            EventAggregator.Instance.Publish(new LogEvent("<<<< [RECEIVED RESPONSE]" + SipFormatter.FormatMessageEnvelope(responseEvent.Response)));

            _listener.ProcessResponse(responseEvent);
        }