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; }
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 } } }
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); } }
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);
internal void Update(SipResponseEvent responseEvent) { }
protected abstract void ProcessResponseOverride(DialogResult result, SipResponseEvent responseEvent);
public void ProcessResponse(SipResponseEvent responseEvent) { //_txtLog.Text += SipFormatter.FormatMessageEnvelope(responseEvent); }
public void ProcessResponse(SipResponseEvent responseEvent) { EventAggregator.Instance.Publish(new LogEvent("<<<< [RECEIVED RESPONSE]" + SipFormatter.FormatMessageEnvelope(responseEvent.Response))); _listener.ProcessResponse(responseEvent); }
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()); } } }
private void OnProcessResponse(SipResponseEvent sipResponseEvent) { _onProcessResponseCount++; _sipResponseEvent = sipResponseEvent; }
private bool IsMatchByFirstTransaction(SipResponseEvent responseEvent) { return responseEvent.ClientTransaction != null && responseEvent.ClientTransaction.GetId() == _firstTransaction.GetId(); }
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); } } }
public void ProcessResponse(SipResponseEvent responseEvent) { //_txtLog.Text += SipFormatter.FormatMessageEnvelope(responseEvent); }
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; } }
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>(); }
public void ProcessResponse(IInternalSoftPhone softPhone, SipResponseEvent responseEvent) { }
private bool IsMatchByFirstTransaction(SipResponseEvent responseEvent) { return(responseEvent.ClientTransaction != null && responseEvent.ClientTransaction.GetId() == _firstTransaction.GetId()); }
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) { }
protected abstract void ProcessResponseOverride(DialogResult result, SipResponseEvent responseEvent);
protected override void ProcessResponseOverride(DialogResult result, SipResponseEvent responseEvent) { }
protected override void ProcessResponseOverride(DialogResult result, SipResponseEvent responseEvent) { }
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(); } }
public abstract void ProcessResponse(SipResponseEvent responseEvent);
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); } }