package es.tid.pce.pcepsession;
import java.io.DataOutputStream;
import java.net.Inet4Address;
import java.util.Enumeration;
import java.util.Hashtable;
import es.tid.pce.management.PcepCapability;
import es.tid.pce.management.PcepPeer;
public class PCEPSessionsInformation {
/**
* Local Capabilities of the PCEP Entity
*/
private PcepCapability localPcepCapability;
/**
* List of Active PCEP Sessions
*/
public Hashtable<Long,GenericPCEPSession> sessionList;
/**
* List of known peers (active or not)
*/
private Hashtable<Inet4Address,PcepPeer> peerList;
//FIXME: mover a capabilities
private boolean isSRCapable = false;
private int MSD = 0;
private boolean statefulDFlag =false;
private boolean statefulTFlag = false;
private boolean statefulSFlag = false;
private boolean isActive = false;
//FIXME:
int rollSession;//PCEBackup,
//Datos de la sesion que nos interesen
//FIXME: ya lo tenemos a traves de la lista de sesiones
DataOutputStream out;
public PCEPSessionsInformation(){
sessionList=new Hashtable<Long,GenericPCEPSession>();
localPcepCapability=new PcepCapability();
peerList = new Hashtable<Inet4Address,PcepPeer>();
}
public void addSession(long sessionId, GenericPCEPSession session){
sessionList.put(new Long(sessionId),session);
}
public void deleteSession(long sessionId){
sessionList.remove(new Long(sessionId));
}
public String toString(){
StringBuffer sb=new StringBuffer(20+sessionList.size()*100);
sb.append(sessionList.size());
sb.append(" active sessions\n");
Enumeration<GenericPCEPSession> enumSessionList=sessionList.elements();
while (enumSessionList.hasMoreElements()){
sb.append(enumSessionList.nextElement().shortInfo());
sb.append("\r\n");
}
return sb.toString();
}
public String printSession(long sessionId){
GenericPCEPSession ses=sessionList.get(new Long(sessionId));
if (ses!=null){
return ses.toString();
}else {
return "session "+sessionId+" does not exist";
}
}
public DataOutputStream getOut() {
return out;
}
public void setOut(DataOutputStream out) {
this.out = out;
}
public int getRollSession() {
return rollSession;
}
public void setRollSession(int rollSession) {
this.rollSession = rollSession;
}
public boolean isStateful() {
return localPcepCapability.isStateful();
}
public boolean isSRCapable() {
return isSRCapable;
}
public int getMSD()
{
return MSD;
}
public void setStateful(boolean isStateful) {
//FIXME: TEMPORAL, QUITAR DESPUES Y MOVER TODO A PCEPCAPABILITIES
this.localPcepCapability.setStateful(isStateful);
}
public void setSRCapable(boolean isSRCapable) {
this.isSRCapable = isSRCapable;
}
public void setSRCapable(int MSD) {
this.isSRCapable = (MSD>=0);
this.MSD = MSD;
}
public void setMSD(int MSD) {
this.MSD = MSD;
}
public boolean isActive() {
return isActive;
}
public void setActive(boolean isActive) {
this.isActive = isActive;
}
public boolean isStatefulDFlag() {
return statefulDFlag;
}
public void setStatefulDFlag(boolean statefulDFlag) {
this.statefulDFlag = statefulDFlag;
}
public boolean isStatefulTFlag() {
return statefulTFlag;
}
public void setStatefulTFlag(boolean statefulTFlag) {
this.statefulTFlag = statefulTFlag;
}
public boolean isStatefulSFlag() {
return statefulSFlag;
}
public void setStatefulSFlag(boolean statefulSFlag) {
this.statefulSFlag = statefulSFlag;
}
public PcepCapability getLocalPcepCapability() {
return localPcepCapability;
}
public void setLocalPcepCapability(PcepCapability localPcepCapability) {
this.localPcepCapability = localPcepCapability;
}
public void notifyPeer(Inet4Address addr){
if (!peerList.containsKey(addr)){
PcepPeer peer = new PcepPeer();
peer.setAddr(addr);
peerList.put(addr, peer);
}
}
public void notifyPeerSessionOK(Inet4Address addr){
peerList.get(addr).notifyNewSessSetupOK();
}
public void notifyPeerSessionFail(Inet4Address addr){
peerList.get(addr).notifyNewSessSetupFail();
}
public void notifyPeerSessionActive(Inet4Address addr){
peerList.get(addr).setSessionExists(true);
}
public void notifyPeerSessionInactive(Inet4Address addr){
peerList.get(addr).setSessionExists(false);
}
public String printPeersInfo(){
StringBuffer sb=new StringBuffer(200);
Enumeration<PcepPeer> peers= peerList.elements();
sb.append("Peers: ");
while (peers.hasMoreElements()) {
sb.append(peers.nextElement().toString());
}
return sb.toString();
}
public String printFullPeersInfo(){
StringBuffer sb=new StringBuffer(200);
Enumeration<PcepPeer> peers= peerList.elements();
sb.append("Peers: ");
while (peers.hasMoreElements()) {
sb.append(peers.nextElement().fullInfo());
}
return sb.toString();
}
}