package org.mobicents.slee.resource.diameter.base;
import java.io.IOException;
import javax.slee.resource.SleeEndpoint;
import org.jdiameter.api.Answer;
import org.jdiameter.api.EventListener;
import org.jdiameter.api.Request;
import org.jdiameter.api.Session;
import org.jdiameter.api.auth.ClientAuthSession;
import org.jdiameter.client.impl.app.auth.ClientAuthSessionImpl;
import org.jdiameter.common.api.app.auth.ClientAuthSessionState;
import org.jdiameter.common.impl.app.AppRequestEventImpl;
import org.jdiameter.common.impl.app.auth.AbortSessionAnswerImpl;
import org.jdiameter.common.impl.app.auth.ReAuthAnswerImpl;
import org.jdiameter.common.impl.app.auth.SessionTermRequestImpl;
import org.jdiameter.common.impl.validation.JAvpNotAllowedException;
import org.mobicents.slee.resource.diameter.base.events.DiameterMessageImpl;
import net.java.slee.resource.diameter.base.AccountingSessionState;
import net.java.slee.resource.diameter.base.AuthClientSessionActivity;
import net.java.slee.resource.diameter.base.AuthSessionState;
import net.java.slee.resource.diameter.base.events.AbortSessionAnswer;
import net.java.slee.resource.diameter.base.events.DiameterMessage;
import net.java.slee.resource.diameter.base.events.ReAuthAnswer;
import net.java.slee.resource.diameter.base.events.SessionTerminationRequest;
import net.java.slee.resource.diameter.base.events.avp.AvpNotAllowedException;
import net.java.slee.resource.diameter.base.events.avp.DiameterIdentity;
public class AuthClientSessionActivityImpl extends AuthSessionActivityImpl
implements AuthClientSessionActivity {
protected ClientAuthSession clientSession=null;
public AuthClientSessionActivityImpl(
DiameterMessageFactoryImpl messageFactory,
DiameterAvpFactoryImpl avpFactory, ClientAuthSession clientSession,
long timeout,
DiameterIdentity destinationHost,
DiameterIdentity destinationRealm,SleeEndpoint endpoint) {
super(messageFactory, avpFactory, null, (EventListener<Request, Answer>) clientSession, timeout,
destinationHost, destinationRealm,endpoint);
this.clientSession=clientSession;
//this.clientSession.addStateChangeNotification(this);
super.setCurrentWorkingSession(clientSession.getSessions().get(0));
}
public void sendAbortSessionAnswer(AbortSessionAnswer answer) throws IOException {
try {
// super.sendMessage(answer);
DiameterMessageImpl asa = (DiameterMessageImpl) answer;
this.clientSession.sendAbortSessionAnswer(new AbortSessionAnswerImpl((Answer) asa.getGenericData()));
} catch (JAvpNotAllowedException e) {
AvpNotAllowedException anae = new AvpNotAllowedException("Message validation failed.", e, e.getAvpCode(), e.getVendorId());
throw anae;
} catch (Exception e) {
e.printStackTrace();
IOException ioe = new IOException("Failed to send message, due to: " + e);
throw ioe;
}
}
public void sendAuthRequest(DiameterMessage request) throws IOException {
if(!request.getCommand().isRequest())
{
throw new IOException("Message is not a request.");
}
try {
this.clientSession.sendAuthRequest(new AppRequestEventImpl(((DiameterMessageImpl)request).getGenericData()));
//super.sendMessage(request);
} catch (JAvpNotAllowedException e) {
AvpNotAllowedException anae = new AvpNotAllowedException("Message validation failed.", e, e.getAvpCode(), e.getVendorId());
throw anae;
} catch (Exception e) {
e.printStackTrace();
IOException ioe = new IOException("Failed to send message, due to: " + e);
throw ioe;
}
}
public void sendReAuthAnswer(ReAuthAnswer answer) throws IOException {
try {
//super.sendMessage(answer);
DiameterMessageImpl msg = (DiameterMessageImpl) answer;
this.clientSession.sendReAuthAnswer(new ReAuthAnswerImpl(msg.getGenericData()));
} catch (JAvpNotAllowedException e) {
AvpNotAllowedException anae = new AvpNotAllowedException("Message validation failed.", e, e.getAvpCode(), e.getVendorId());
throw anae;
} catch (Exception e) {
e.printStackTrace();
IOException ioe = new IOException("Failed to send message, due to: " + e);
throw ioe;
}
}
public void sendSessionTerminationRequest(SessionTerminationRequest request) throws IOException {
try {
//super.sendMessage(request);
DiameterMessageImpl msg = (DiameterMessageImpl) request;
this.clientSession.sendSessionTerminationRequest(new SessionTermRequestImpl(msg.getGenericData()));
} catch (JAvpNotAllowedException e) {
AvpNotAllowedException anae = new AvpNotAllowedException("Message validation failed.", e, e.getAvpCode(), e.getVendorId());
throw anae;
} catch (Exception e) {
e.printStackTrace();
IOException ioe = new IOException("Failed to send message, due to: " + e);
throw ioe;
}
}
public void stateChanged(Enum oldState, Enum newState) {
ClientAuthSessionState state=(ClientAuthSessionState) newState;
switch(state)
{
case IDLE:
super.state=AuthSessionState.Idle;
break;
case OPEN:
super.state=AuthSessionState.Open;
break;
case PENDING:
super.state=AuthSessionState.Pending;
break;
case DISCONNECTED:
super.state=AuthSessionState.Disconnected;
String sessionId = this.clientSession.getSessions().get(0)
.getSessionId();
this.clientSession.release();
this.baseListener.sessionDestroyed(sessionId, this.clientSession);
break;
}
}
public ClientAuthSession getSession() {
return this.clientSession;
}
}