protected void SendRequest(ISipClientTransaction transaction, int sequenceNr) { Check.Require(transaction, "tx"); Check.Require(transaction.Request, "tx.Request"); if (transaction.Request.RequestLine.Method == SipMethods.Bye) { if (_state != DialogState.Confirmed) { throw new SipCoreException("'BYE' request can not be sent. Only dialogs in 'CONFIRMED' state can send 'BYE' requests."); } } transaction.Request.CSeq.Sequence = sequenceNr; transaction.SendRequest(); //leave terminate up to dialog user. //if (method == SipMethods.Bye) //{ // if (_logger.IsDebugEnabled) _logger.Debug("Dialog[Id={0}] has send '{1}' request. Terminating dialog...", GetId(), method); // Terminate(); //} }
public override void SendRequest(ISipClientTransaction transaction) { Check.Require(transaction, "tx"); Check.Require(transaction.Request, "tx.Request"); var method = transaction.Request.RequestLine.Method; if (method == SipMethods.Cancel || method == SipMethods.Ack) { /*throw exception*/ throw new SipCoreException("The dialog can not send a '{0}' request. '{0}' requests can only be send by ClientDialogs"); } lock (_lock) ++_localSequenceNr; SendRequest(transaction, _localSequenceNr); }
public override void SendRequest(ISipClientTransaction transaction) { Check.Require(transaction, "tx"); Check.Require(transaction.Request, "tx.Request"); var method = transaction.Request.RequestLine.Method; if (method == SipMethods.Ack) { throw new SipCoreException("'ACK' requests can not be send statefull. All 'ACK' requests must be send statelessly. Use the SendAck method instead."); } if (method == SipMethods.Cancel) { if (_state != DialogState.Early) { throw new SipCoreException("'CANCEL' request can not be sent. Only dialogs in 'EARLY' state can send 'CANCEL' requests."); } } var seqNrToUse = 0; /*CSeq are incremented in each direction, excepting ACK and CANCEL, whose numbers equal the requests being acknowledged or cancelled*/ if (method == SipMethods.Cancel) { seqNrToUse = _firstRequest.CSeq.Sequence; } else { lock (_lock) ++_localSequenceNr; seqNrToUse = _localSequenceNr; } SendRequest(transaction, seqNrToUse); if (method == SipMethods.Cancel) { if (_logger.IsDebugEnabled) { _logger.Debug("Dialog[Id={0}] has send '{1}' request. Terminating dialog...", GetId(), method); } Terminate(); } }
public SipInviteClientDialog CreateClientDialog(ISipClientTransaction transaction) { var inviteTx = transaction as SipInviteClientTransaction; Check.Require(transaction, "transaction"); Check.IsTrue(inviteTx != null, "The transaction must be of type 'SipInviteClientTransaction'"); Check.Require(inviteTx.Request, "The request can not be null"); Check.Require(inviteTx.Request.From, "The From header can not be null"); Check.NotNullOrEmpty(inviteTx.Request.From.Tag, "From tag"); var dialog = new SipInviteClientDialog( inviteTx, _dialogTable, _stack.CreateHeaderFactory(), _stack.CreateMessageFactory(), _stack.CreateAddressFactory(), this, _sipListener, _contextSource.ListeningPoint); inviteTx.SetDialog(dialog); return(dialog); }
public abstract void SendRequest(ISipClientTransaction transaction);
public override void SendRequest(ISipClientTransaction transaction) { Check.Require(transaction, "tx"); Check.Require(transaction.Request, "tx.Request"); var method = transaction.Request.RequestLine.Method; if (method == SipMethods.Ack) { throw new SipCoreException("'ACK' requests can not be send statefull. All 'ACK' requests must be send statelessly. Use the SendAck method instead."); } if (method == SipMethods.Cancel) { if (_state != DialogState.Early) throw new SipCoreException("'CANCEL' request can not be sent. Only dialogs in 'EARLY' state can send 'CANCEL' requests."); } var seqNrToUse = 0; /*CSeq are incremented in each direction, excepting ACK and CANCEL, whose numbers equal the requests being acknowledged or cancelled*/ if (method == SipMethods.Cancel) { seqNrToUse = _firstRequest.CSeq.Sequence; } else { lock (_lock) ++_localSequenceNr; seqNrToUse = _localSequenceNr; } SendRequest(transaction, seqNrToUse); if (method == SipMethods.Cancel) { if (_logger.IsDebugEnabled) _logger.Debug("Dialog[Id={0}] has send '{1}' request. Terminating dialog...", GetId(), method); Terminate(); } }
public SipResponseEventBuilder WithClientTx(ISipClientTransaction tx) { _tx = tx; return(this); }
public SipInviteClientDialog CreateClientDialog(ISipClientTransaction transaction) { var inviteTx = transaction as SipInviteClientTransaction; Check.Require(transaction, "transaction"); Check.IsTrue(inviteTx != null, "The transaction must be of type 'SipInviteClientTransaction'"); Check.Require(inviteTx.Request, "The request can not be null"); Check.Require(inviteTx.Request.From, "The From header can not be null"); Check.NotNullOrEmpty(inviteTx.Request.From.Tag, "From tag"); var dialog = new SipInviteClientDialog( inviteTx, _dialogTable, _stack.CreateHeaderFactory(), _stack.CreateMessageFactory(), _stack.CreateAddressFactory(), this, _sipListener, _contextSource.ListeningPoint); inviteTx.SetDialog(dialog); return dialog; }
protected void SendRequest(ISipClientTransaction transaction, int sequenceNr) { Check.Require(transaction, "tx"); Check.Require(transaction.Request, "tx.Request"); if (transaction.Request.RequestLine.Method == SipMethods.Bye) { if (_state != DialogState.Confirmed) throw new SipCoreException("'BYE' request can not be sent. Only dialogs in 'CONFIRMED' state can send 'BYE' requests."); } transaction.Request.CSeq.Sequence = sequenceNr; transaction.SendRequest(); //leave terminate up to dialog user. //if (method == SipMethods.Bye) //{ // if (_logger.IsDebugEnabled) _logger.Debug("Dialog[Id={0}] has send '{1}' request. Terminating dialog...", GetId(), method); // Terminate(); //} }