/** * Compare two cseq headers for equality. * @param other Object to compare against. * @return true if the two cseq headers are equals, false * otherwise. */ public boolean equals(Object other) { if (other instanceof CSeqHeader) { final CSeqHeader o = (CSeqHeader) other; return this.getSeqNumber() == o.getSeqNumber() && this.getMethod().equals( o.getMethod() ); } return false; }
private static int generateNcFromMessage(Message message) { int nc = 1; CSeqHeader cseq = (CSeqHeader) message.getHeader(CSeqHeader.NAME); if (cseq != null) { nc = (int) (cseq.getSeqNumber() % Integer.MAX_VALUE); } return nc; }
cSeqHeader.setSeqNumber(cSeqHeader.getSeqNumber() + 1l); cSeqHeader.setMethod(method); } catch (InvalidArgumentException e) { logger.error("Cannot increment the Cseq header to the new " + method + " on the susbequent request to create on session " + key,e); fromHeader.getTag()); final Request request = ((Request)sipServletRequest.getMessage()); sipServletRequest.getSipSession().setCseq(((CSeqHeader)request.getHeader(CSeqHeader.NAME)).getSeqNumber()); final Map<String, String> fromParameters = new HashMap<String, String>(); final Iterator<String> fromParameterNames = fromHeader.getParameterNames();
cSeq.setSeqNumber(cSeq.getSeqNumber() + 1l); } catch (InvalidArgumentException ex) { throw new SipException("Invalid CSeq -- could not increment : " + cSeq.getSeqNumber());
cancel.setHeader((Header) cSeqHeader.clone()); try { cancel.getCSeq().setMethod(Request.CANCEL); } catch (ParseException e) {
/** * Return true if this request can be consumed by the dialog. * * @param dialogRequest * is the request to check with the dialog. * @return true if the dialogRequest sequence number matches the next * consumable seqno. */ public synchronized boolean isRequestConsumable(SIPRequest dialogRequest) { // have not yet set remote seqno - this is a fresh if (dialogRequest.getMethod().equals(Request.ACK)) throw new RuntimeException("Illegal method"); // For loose validation this function is delegated to the application if (!this.isSequenceNumberValidation()) { return true; } // JvB: Acceptable iff remoteCSeq < cseq. remoteCSeq==-1 // when not defined yet, so that works too return remoteSequenceNumber < dialogRequest.getCSeq().getSeqNumber(); }
public final String getMethod() { if(method == null) { method = message instanceof Request ? ((Request) message).getMethod() : ((CSeqHeader) message.getHeader(CSeqHeader.NAME)).getMethod(); } return method; }
long cseqNumber = dialogRequest.getCSeq() == null?getLocalSeqNumber():dialogRequest.getCSeq().getSeqNumber(); if(cseqNumber > getLocalSeqNumber()) { setLocalSequenceNumber(cseqNumber); dialogRequest.getCSeq().setSeqNumber(getLocalSeqNumber()); } catch (InvalidArgumentException ex) { logger.logFatalError(ex.getMessage());
newRequest.getCSeq().setMethod(Request.ACK); } catch (ParseException e) {
public void checkRetransmissionForForking(SIPResponse response) { final int statusCode = response.getStatusCode(); final String responseMethod = response.getCSeqHeader().getMethod(); final long responseCSeqNumber = response.getCSeq().getSeqNumber(); boolean isRetransmission = !responsesReceivedInForkingCase.add(statusCode + "/" + responseCSeqNumber + "/" + responseMethod); response.setRetransmission(isRetransmission); if (logger.isLoggingEnabled(LogWriter.TRACE_DEBUG)) { logger.logDebug( "marking response as retransmission " + isRetransmission + " for dialog " + this); } }
public void setOriginalRequest(MobicentsSipServletRequest originalRequest) { // Determine the direction of the request. Either it's from the dialog initiator (the caller) // or from the callee if(storeTerminationInfo) { if(((MessageExt)originalRequest.getMessage()).getFromHeader().getTag().equals(callerFromTag)) { terminationInfo.setCallerCSeq((((MessageExt)originalRequest.getMessage()).getCSeqHeader().getSeqNumber())); } else { // If it's from the callee we should send it in the other direction terminationInfo.setCalleeCSeq((((MessageExt)originalRequest.getMessage()).getCSeqHeader().getSeqNumber())); } } this.originalRequest = (SipServletRequestImpl) originalRequest; }
newRequest.addFirst((Header) this.getTopmostVia().clone()); newRequest.setHeader((Header) cSeqHeader.clone()); newRequest.getCSeq().setMethod(Request.ACK);
public void on2xxResponse(ResponseEvent event, ActivityContextInterface aci) { final CSeqHeader cseq = (CSeqHeader) event.getResponse().getHeader( CSeqHeader.NAME); if (cseq.getMethod().equals(Request.INVITE)) { // lets ack it ourselves to avoid UAS retransmissions due to // forwarding of this response and further UAC Ack // note that the app does not handles UAC ACKs try { final Request ack = event.getDialog().createAck( cseq.getSeqNumber()); event.getDialog().sendAck(ack); } catch (Exception e) { tracer.severe("Unable to ack INVITE's 200 ok from UAS", e); } } else if (cseq.getMethod().equals(Request.BYE) || cseq.getMethod().equals(Request.CANCEL)) { // not forwarded to the other dialog return; } processResponse(event, aci); }
if(logger.isDebugEnabled()) { logger.debug("trying to cleanup message "+ sipServletMessage + " and related dialog app data " + dialogAppData); logger.debug("is dialog established " + (Request.INVITE.equalsIgnoreCase(sipServletMessage.getMethod()) && isAckReceived(((MessageExt)sipServletMessage.getMessage()).getCSeqHeader().getSeqNumber()))); logger.debug("is dialog creating method " + JainSipUtils.DIALOG_CREATING_METHODS.contains(sipServletMessage.getMethod())); logger.debug("is dialog terminating method " + JainSipUtils.DIALOG_TERMINATING_METHODS.contains(sipServletMessage.getMethod())); if((Request.INVITE.equalsIgnoreCase(sipServletMessage.getMethod()) && isAckReceived(((MessageExt)sipServletMessage.getMessage()).getCSeqHeader().getSeqNumber()))) { if(logger.isDebugEnabled()) { logger.debug("cleaning INVITE and ack received for it for dialog "+ sessionCreatingDialog);
/** * create a sip dialog with a response ( no tx) */ public SIPDialog(SipProviderImpl sipProvider, SIPResponse sipResponse) { this(sipProvider); this.sipStack = (SIPTransactionStack) sipProvider.getSipStack(); this.setLastResponse(null, sipResponse); this.localSequenceNumber = sipResponse.getCSeq().getSeqNumber(); this.originalLocalSequenceNumber = localSequenceNumber; this.localParty = sipResponse.getFrom().getAddress(); this.remoteParty = sipResponse.getTo().getAddress(); this.method = sipResponse.getCSeq().getMethod(); this.callIdHeader = sipResponse.getCallId(); this.serverTransactionFlag = false; this.setLocalTag(sipResponse.getFrom().getTag()); this.setRemoteTag(sipResponse.getTo().getTag()); if (logger.isLoggingEnabled(LogWriter.TRACE_DEBUG)) { logger.logDebug("Creating a dialog : " + this); logger.logStackTrace(); } this.isBackToBackUserAgent = sipStack.isBackToBackUserAgent; addEventListener(sipStack); releaseReferencesStrategy = sipStack.getReleaseReferencesStrategy(); }
public boolean validateCSeq(MobicentsSipServletRequest sipServletRequest) { final Request request = (Request) sipServletRequest.getMessage(); final long localCseq = cseq; final long remoteCSeq = ((CSeqHeader) request.getHeader(CSeqHeader.NAME)).getSeqNumber(); final String method = request.getMethod(); final boolean isAck = Request.ACK.equalsIgnoreCase(method);
if(Request.CANCEL.equalsIgnoreCase(cSeqHeader.getMethod())) { if(logger.isDebugEnabled()) { logger.debug("the response is dropped accordingly to JSR 289 " +