From a7500914ee676858383811f8bc7da72ddd94dde0 Mon Sep 17 00:00:00 2001 From: Jonathan Agaliotis Date: Fri, 9 Jun 2017 14:51:39 -0400 Subject: [PATCH] made the terminate dialog on transaction termination optional. Related to issue usnistgov #8 --- .../javax/sip/stack/SIPClientTransaction.java | 7 +++++++ .../sip/stack/SIPClientTransactionImpl.java | 19 +++++++++++++++---- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/gov/nist/javax/sip/stack/SIPClientTransaction.java b/src/gov/nist/javax/sip/stack/SIPClientTransaction.java index f214f0a51..9a03962e9 100755 --- a/src/gov/nist/javax/sip/stack/SIPClientTransaction.java +++ b/src/gov/nist/javax/sip/stack/SIPClientTransaction.java @@ -226,4 +226,11 @@ public abstract void processResponse(SIPResponse transactionResponse, * @return the originalRequestFromTag */ public abstract String getOriginalRequestScheme(); + + /** + * will terminate a null state dialog when the transaction terminates + * Default: true + * @param enabled + */ + public abstract void setTerminateDialogOnCleanUp(boolean enabled); } diff --git a/src/gov/nist/javax/sip/stack/SIPClientTransactionImpl.java b/src/gov/nist/javax/sip/stack/SIPClientTransactionImpl.java index 1ca9ffbc5..3e379d34a 100644 --- a/src/gov/nist/javax/sip/stack/SIPClientTransactionImpl.java +++ b/src/gov/nist/javax/sip/stack/SIPClientTransactionImpl.java @@ -230,6 +230,8 @@ public class SIPClientTransactionImpl extends SIPTransactionImpl implements SIPC private AtomicBoolean timerKStarted = new AtomicBoolean(false); private boolean transactionTimerCancelled = false; private Set responsesReceived = new CopyOnWriteArraySet(); + + private boolean terminateDialogOnCleanUp = true; public class TransactionTimer extends SIPStackTimerTask { @@ -1966,10 +1968,12 @@ protected void cleanUpOnTerminated() { // } } - // If dialog is null state, no response is received and we should clean it up now, - // it's hopeless to recover. Refers to this issue https://github.com/usnistgov/jsip/issues/8 - if(this.defaultDialog != null && this.defaultDialog.getState() == null) { - this.defaultDialog.setState(SIPDialog.TERMINATED_STATE); + if (terminateDialogOnCleanUp) { + // If dialog is null state, no response is received and we should clean it up now, + // it's hopeless to recover. Refers to this issue https://github.com/usnistgov/jsip/issues/8 + if(this.defaultDialog != null && this.defaultDialog.getState() == null) { + this.defaultDialog.setState(SIPDialog.TERMINATED_STATE); + } } } @@ -2029,4 +2033,11 @@ public String getOriginalRequestScheme() { return originalRequest.getRequestURI().getScheme(); } + /** + * @see gov.nist.javax.sip.stack.SIPClientTransaction#setTerminateDialogOnCleanUp(boolean) + */ + public void setTerminateDialogOnCleanUp(boolean enabled) { + terminateDialogOnCleanUp = enabled; + } + }