Skip to content

Commit faeb9de

Browse files
committed
Missing bits & fixes for Session Idle Timeout (RestComm#85)
1 parent a719ece commit faeb9de

File tree

3 files changed

+30
-11
lines changed

3 files changed

+30
-11
lines changed

core/jdiameter-ha/impl/src/main/java/org/mobicents/diameter/impl/ha/timer/ReplicatedTimerFacilityImpl.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646

4747
import org.jdiameter.api.BaseSession;
4848
import org.jdiameter.client.api.IContainer;
49+
import org.jdiameter.client.impl.BaseSessionImpl;
4950
import org.jdiameter.common.api.data.ISessionDatasource;
5051
import org.jdiameter.common.api.timer.ITimerFacility;
5152
import org.jdiameter.common.impl.app.AppSessionImpl;
@@ -129,13 +130,25 @@ public void runTask() {
129130
try {
130131
DiameterTimerTaskData data = (DiameterTimerTaskData) getData();
131132
BaseSession bSession = sessionDataSource.getSession(data.getSessionId());
132-
if (bSession == null || !bSession.isAppSession()) {
133+
if (bSession == null) {
133134
// FIXME: error ?
135+
logger.error("Base Session is null for sessionId: {}", data.getSessionId());
134136
return;
135137
}
136138
else {
137-
AppSessionImpl impl = (AppSessionImpl) bSession;
138-
impl.onTimer(data.getTimerName());
139+
try {
140+
if (!bSession.isAppSession()) {
141+
BaseSessionImpl impl = (BaseSessionImpl) bSession;
142+
impl.onTimer(data.getTimerName());
143+
}
144+
else {
145+
AppSessionImpl impl = (AppSessionImpl) bSession;
146+
impl.onTimer(data.getTimerName());
147+
}
148+
}
149+
catch (Exception e) {
150+
logger.error("Caught exception from session object!", e);
151+
}
139152
}
140153
}
141154
catch (Exception e) {

core/jdiameter/impl/src/main/java/org/jdiameter/client/impl/BaseSessionImpl.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ public abstract class BaseSessionImpl implements BaseSession {
9898
protected transient IMessageParser parser;
9999
protected NetworkReqListener reqListener;
100100

101-
private Serializable istTimerId;
101+
protected Serializable istTimerId;
102102

103103
@Override
104104
public long getCreationTime() {
@@ -112,14 +112,16 @@ public long getLastAccessedTime() {
112112

113113
protected long setLastAccessTime() {
114114
lastAccessedTime = System.currentTimeMillis();
115-
maxIdleTime = container.getConfiguration().getLongValue(SessionTimeOut.ordinal(), (Long) SessionTimeOut.defValue());
116-
if (maxIdleTime > 0) {
117-
IAssembler assembler = container.getAssemblerFacility();
118-
ITimerFacility timerFacility = assembler.getComponentInstance(ITimerFacility.class);
119-
if (istTimerId != null) {
120-
timerFacility.cancel(istTimerId);
115+
if (sessionId != null) {
116+
maxIdleTime = container.getConfiguration().getLongValue(SessionTimeOut.ordinal(), (Long) SessionTimeOut.defValue());
117+
if (maxIdleTime > 0) {
118+
IAssembler assembler = container.getAssemblerFacility();
119+
ITimerFacility timerFacility = assembler.getComponentInstance(ITimerFacility.class);
120+
if (istTimerId != null) {
121+
timerFacility.cancel(istTimerId);
122+
}
123+
istTimerId = timerFacility.schedule(this.getSessionId(), IDLE_SESSION_TIMER_NAME, maxIdleTime);
121124
}
122-
istTimerId = timerFacility.schedule(this.getSessionId(), IDLE_SESSION_TIMER_NAME, maxIdleTime);
123125
}
124126
return lastAccessedTime;
125127
}

core/jdiameter/impl/src/main/java/org/jdiameter/client/impl/SessionImpl.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
import org.jdiameter.client.api.ISession;
6363
import org.jdiameter.client.api.parser.IMessageParser;
6464
import org.jdiameter.common.api.data.ISessionDatasource;
65+
import org.jdiameter.common.api.timer.ITimerFacility;
6566

6667
/**
6768
* Implementation for {@link ISession}
@@ -174,6 +175,9 @@ public Request createRequest(Request prevRequest) {
174175
public void release() {
175176
isValid = false;
176177
if (container != null) {
178+
if (istTimerId != null) {
179+
container.getAssemblerFacility().getComponentInstance(ITimerFacility.class).cancel(istTimerId);
180+
}
177181
container.removeSessionListener(sessionId);
178182
// FIXME
179183
container.getAssemblerFacility().getComponentInstance(ISessionDatasource.class).removeSession(sessionId);

0 commit comments

Comments
 (0)