package com.owera.xaps.tr069;
import java.util.Map;
import java.util.Map.Entry;
import com.owera.common.log.Logger;
import com.owera.xaps.base.DownloadLogic;
import com.owera.xaps.base.Log;
import com.owera.xaps.base.OweraParameters;
import com.owera.xaps.dbi.File;
import com.owera.xaps.dbi.FileType;
import com.owera.xaps.dbi.Job;
import com.owera.xaps.dbi.JobParameter;
import com.owera.xaps.dbi.util.SystemParameters;
import com.owera.xaps.dbi.util.SystemParameters.TR069ScriptType;
import com.owera.xaps.tr069.SessionData.Download;
import com.owera.xaps.tr069.xml.ParameterValueStruct;
public class DownloadLogicTR069 {
// public static boolean download(RequestResponseData reqRes) {
// String softwareUrl = getSoftwareURL(reqRes);
// String scriptUrl = getScriptURL(reqRes);
// if (softwareUrl != null) {
// reqRes.getResponse().setDownloadURL(softwareUrl);
// reqRes.getResponse().setDownloadType(DOreq.FILE_TYPE_FIRMWARE);
// return true;
// } else if (scriptUrl != null) {
// reqRes.getResponse().setDownloadURL(scriptUrl);
// reqRes.getResponse().setDownloadType(DOreq.FILE_TYPE_CONFIG);
// return true;
// } else {
// return false;
// }
// }
private static Logger logger = new Logger();
public static boolean isScriptDownloadSetup(HTTPReqResData reqRes, Job job) {
SessionData sessionData = reqRes.getSessionData();
OweraParameters oweraParams = sessionData.getOweraParameters();
CPEParameters cpeParams = sessionData.getCpeParameters();
String scriptVersionFromDB = null;
String scriptName = null;
if (job != null) { // retrieve desired-script-version from Job-parameters
Map<String, JobParameter> jobParams = sessionData.getJobParams();
for (Entry<String, JobParameter> entry : jobParams.entrySet()) {
if (SystemParameters.isTR069ScriptVersionParameter(entry.getKey())) {
scriptName = SystemParameters.getTR069ScriptName(entry.getKey());
scriptVersionFromDB = entry.getValue().getParameter().getValue();
// If a job is set to upgrade/upload a script, it should be done, even
// if
// the CPE already has been upgraded to the same version. This is done
// both to avoid creating more logic to handle a job which is
// "completed, but not
// executed" and because sometimes two files/script/software can have
// the same
// version number AND still be different! We a job we can then force
// an
// upgrade to the same version - that is considered a feature!
break;
}
}
} else {
Map<String, ParameterValueStruct> opMap = oweraParams.getOweraParams();
for (Entry<String, ParameterValueStruct> entry : opMap.entrySet()) {
if (SystemParameters.isTR069ScriptVersionParameter(entry.getKey())) {
String svDB = entry.getValue().getValue();
// The config-file-name is the same as the script-name retrieved from
// the system-parameter
String name = SystemParameters.getTR069ScriptName(entry.getKey());
String scriptVersionFromCPE = cpeParams.getConfigFileMap().get(name);
if (svDB != null && !svDB.equals(scriptVersionFromCPE)) {
// upgrade
scriptVersionFromDB = svDB;
scriptName = name;
break;
}
}
}
}
if (scriptVersionFromDB != null) {
// scriptVersionFromDB has been found and we must find/build the
// download-URL
File file = sessionData.getUnittype().getFiles().getByVersionType(scriptVersionFromDB, FileType.TR069_SCRIPT);
if (file == null) {
logger.error("File-type " + FileType.TR069_SCRIPT + " and version " + scriptVersionFromDB + " does not exists - indicate wrong setup of version number");
return false;
}
String downloadURL = null;
String scriptURLName = SystemParameters.getTR069ScriptParameterName(scriptName, TR069ScriptType.URL);
if (oweraParams.getValue(scriptURLName) != null)
downloadURL = oweraParams.getValue(scriptURLName);
else {
StringBuffer reqURL = reqRes.getReq().getRequestURL();
int port = reqRes.getReq().getLocalPort();
String contextPath = reqRes.getReq().getContextPath();
int hostEndPos = reqURL.indexOf(contextPath);
downloadURL = reqURL.substring(0, hostEndPos);
if (downloadURL.lastIndexOf(":") <= 6)
downloadURL += ":" + port;
downloadURL += contextPath;
downloadURL += "/file/" + FileType.TR069_SCRIPT + "/" + scriptVersionFromDB + "/" + sessionData.getUnittype().getName();
if (sessionData.getUnitId() != null)
downloadURL += "/" + sessionData.getUnitId();
downloadURL += "/" + file.getName();
downloadURL = downloadURL.replaceAll(" ", "--");
}
Log.debug(DownloadLogic.class, "Download script/config URL found (" + downloadURL + "), may trigger a Download");
sessionData.getUnit().toWriteQueue(SystemParameters.JOB_CURRENT_KEY, scriptVersionFromDB);
sessionData.setDownload(new Download(downloadURL, file));
return true;
}
return false;
}
public static boolean isSoftwareDownloadSetup(HTTPReqResData reqRes, Job job) {
SessionData sessionData = reqRes.getSessionData();
CPEParameters cpeParams = sessionData.getCpeParameters();
String softwareVersionFromCPE = cpeParams.getValue(cpeParams.SOFTWARE_VERSION);
String softwareVersionFromDB = null;
String downloadURL = null;
if (job == null) {
OweraParameters oweraParams = sessionData.getOweraParameters();
softwareVersionFromDB = oweraParams.getValue(SystemParameters.DESIRED_SOFTWARE_VERSION);
if (oweraParams.getValue(SystemParameters.SOFTWARE_URL) != null)
downloadURL = oweraParams.getValue(SystemParameters.SOFTWARE_URL);
} else {
Map<String, JobParameter> jobParams = job.getDefaultParameters();
if (jobParams.get(SystemParameters.DESIRED_SOFTWARE_VERSION) != null)
softwareVersionFromDB = jobParams.get(SystemParameters.DESIRED_SOFTWARE_VERSION).getParameter().getValue();
else {
Log.error(DownloadLogic.class, "No desired software version found in job " + job.getId() + " aborting the job");
return false;
}
if (jobParams.get(SystemParameters.SOFTWARE_URL) != null)
downloadURL = jobParams.get(SystemParameters.SOFTWARE_URL).getParameter().getValue();
}
if (downloadURL == null) {
StringBuffer reqURL = reqRes.getReq().getRequestURL();
int port = reqRes.getReq().getLocalPort();
String contextPath = reqRes.getReq().getContextPath();
int hostEndPos = reqURL.indexOf(contextPath);
downloadURL = reqURL.substring(0, hostEndPos);
if (downloadURL.lastIndexOf(":") <= 6)
downloadURL += ":" + port;
downloadURL += contextPath;
downloadURL += "/file/" + FileType.SOFTWARE + "/" + softwareVersionFromDB + "/" + sessionData.getUnittype().getName();
if (sessionData.getUnitId() != null)
downloadURL += "/" + sessionData.getUnitId();
downloadURL = downloadURL.replaceAll(" ", "--");
}
if (softwareVersionFromDB != null && !softwareVersionFromDB.trim().equals("") && !softwareVersionFromDB.equals(softwareVersionFromCPE)) {
Log.debug(DownloadLogic.class, "Download software URL found (" + downloadURL + "), may trigger a Download");
File file = sessionData.getUnittype().getFiles().getByVersionType(softwareVersionFromDB, FileType.SOFTWARE);
if (file == null) {
logger.error("File-type " + FileType.SOFTWARE + " and version " + softwareVersionFromDB + " does not exists - indicate wrong setup of version number");
return false;
}
sessionData.setDownload(new Download(downloadURL, file));
return true;
} else if (job != null && softwareVersionFromDB != null && !softwareVersionFromDB.trim().equals("") && softwareVersionFromDB.equals(softwareVersionFromCPE)) {
logger.warn("Software is already upgraded to " + softwareVersionFromCPE + " - will not issue an software job");
}
return false;
}
}