package es.tid.pce.computingEngine;
/**
* Class made for managing report messages from PCCs. It only adds them to
* the database
*
* @author jimbo
*/
import java.net.Inet4Address;
import java.util.concurrent.LinkedBlockingQueue;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import es.tid.pce.pcep.messages.PCEPReport;
import es.tid.pce.server.PCEServerParameters;
import es.tid.pce.server.lspdb.ReportDB_Handler;
public class ReportProcessorThread extends Thread
{
boolean running;
LinkedBlockingQueue<PCEPReport> reportMessageQueue;
ReportDB_Handler lspDB;
Logger log;
public ReportProcessorThread( LinkedBlockingQueue<PCEPReport> reportMessageQueue, ReportDB_Handler lspDB)
{
log=LoggerFactory.getLogger("PCEServer");
running = true;
this.lspDB = lspDB;
this.reportMessageQueue = reportMessageQueue;
}
public void run()
{
PCEPReport report_m;
while (running)
{
try
{
report_m=reportMessageQueue.take();
effectivelyDispatch(report_m);
}
catch(InterruptedException e)
{
log.warn("Interrupted Exception Captured in ReportProcessorThread");
e.printStackTrace();
break;
}
}
}
public void effectivelyDispatch(PCEPReport pcepReport)
{
log.info("Received new report message: "+pcepReport.toString());
log.info("whith ID :"+pcepReport.getStateReportList().get(0).getLSP().getLspId());
Inet4Address addres = pcepReport.getStateReportList().get(0).getLSP().getLspIdentifiers_tlv().getTunnelSenderIPAddress();
Boolean isSyncOver = false;
log.info("Size LSP:"+pcepReport.getStateReportList().size());
//isSyncOver = lspDB.isPCCSyncOver(pcepReport.getStateReportList().get(0).getLSP().getLspIdentifiers_tlv().getTunnelSenderIPAddress());
log.info("Package received from adress: "+pcepReport.getStateReportList().get(0).getLSP().getLspIdentifiers_tlv().getTunnelSenderIPAddress());
if (!isSyncOver)
{
boolean syncFlag;
int numLSPs = pcepReport.getStateReportList().size();
for (int j = 0; j < numLSPs ; j++)
{
syncFlag = pcepReport.getStateReportList().get(j).getLSP().issFlag();
if ((!syncFlag)&&(pcepReport.getStateReportList().get(j).getLSP().getLspId()==0))
{
isSyncOver = true;
log.info("Sync is over");
// lspDB.setPCCSyncOver(addres);
}
}
}
for (int i = 0; i < pcepReport.getStateReportList().size(); i++)
{
lspDB.processReport(pcepReport);
}
}
}