\r
import java.util.ArrayList;\r
import java.util.List;\r
+import java.util.Map;\r
\r
import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.common.OperationOptions;\r
import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
-import org.commscope.tr069adapter.mapper.ErrorCodeMetaData;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationDetails;\r
import org.commscope.tr069adapter.mapper.MOMetaData;\r
+import org.commscope.tr069adapter.mapper.dao.DeviceOperationsDAO;\r
+import org.commscope.tr069adapter.mapper.entity.DeviceOperationDetails;\r
import org.commscope.tr069adapter.mapper.model.ErrorCodeDetails;\r
import org.commscope.tr069adapter.mapper.model.NetConfRequest;\r
import org.commscope.tr069adapter.mapper.model.NetConfResponse;\r
import org.commscope.tr069adapter.mapper.netconf.NetConfRequestHandler;\r
import org.commscope.tr069adapter.mapper.sync.SynchronizedRequestHandler;\r
import org.commscope.tr069adapter.mapper.util.ErrorCodeUtil;\r
+import org.commscope.tr069adapter.mapper.util.FirwareUpgradeStatus;\r
import org.commscope.tr069adapter.mapper.util.MOMetaDataUtil;\r
+import org.commscope.tr069adapter.mapper.util.MapperConstants;\r
+import org.commscope.tr069adapter.mapper.util.MapperValidator;\r
import org.commscope.tr069adapter.mapper.util.NetconfToTr069MapperUtil;\r
import org.commscope.tr069adapter.mapper.ves.VESNotificationSender;\r
import org.slf4j.Logger;\r
import org.springframework.beans.factory.annotation.Autowired;\r
import org.springframework.stereotype.Component;\r
import org.springframework.util.StringUtils;\r
+import org.w3c.dom.Document;\r
import org.w3c.dom.Element;\r
\r
@Component\r
@Autowired\r
VESNotificationSender vesnotiSender;\r
\r
+ @Autowired\r
+ DeviceOperationsDAO deviceOperDAO;\r
+\r
@Override\r
public NetConfResponse handleSetConfigRequest(NetConfRequest netConfRequest) {\r
Element el = NetconfToTr069MapperUtil.convertStringToDocument(netConfRequest.getRequestXml());\r
}\r
List<ParameterDTO> requestParams = deviceRPCRequest.getOpDetails().getParmeters();\r
List<ParameterDTO> filteredParams = new ArrayList<>();\r
+ List<ParameterDTO> vesRequestParams = new ArrayList<>();\r
+\r
if (null != requestParams) {\r
for (ParameterDTO param : requestParams) {\r
if (null == param.getParamValue() || StringUtils.isEmpty(param.getParamValue())) {\r
continue;\r
}\r
+ if (isVesNotificationRequest(param)) {\r
+ vesRequestParams.add(param);\r
+ }\r
filteredParams.add(param);\r
}\r
deviceRPCRequest.getOpDetails().setParmeters(filteredParams);\r
handleBooleanParametersReverse(deviceRPCRequest.getOpDetails().getParmeters());\r
LOG.debug("Prepared NBI request for edit-config {}", deviceRPCRequest);\r
\r
- DeviceRPCResponse deviceRPCResponse;\r
- deviceRPCResponse = syncHandler.performDeviceOperation(deviceRPCRequest);\r
+ DeviceRPCResponse deviceRPCResponseVes = null;\r
+ List<ParameterDTO> allParamList = deviceRPCRequest.getOpDetails().getParmeters();\r
+\r
+ if (!vesRequestParams.isEmpty()) {\r
+ if (!MapperValidator.isCountDownTimerValid(vesRequestParams)) {\r
+ return getErrorResponse(MapperConstants.INVALID_PARAM_VAL_ERROR_CODE,\r
+ MapperConstants.INVALID_COUNT_DOWN_TIMER_MSG);\r
+ }\r
+\r
+ deviceRPCRequest.getOpDetails().setParmeters(vesRequestParams);\r
+ deviceRPCResponseVes = vesnotiSender.sendEditConfigNotification(deviceRPCRequest);\r
+\r
+ if (null == deviceRPCResponseVes) {\r
+ return getTimeOutResponse();\r
+ }\r
+ }\r
+\r
+ allParamList.removeAll(vesRequestParams);\r
+\r
+ DeviceRPCResponse deviceRPCResponseDevice = null;\r
+ if (null != allParamList && !allParamList.isEmpty()) {\r
+ deviceRPCRequest.getOpDetails().setParmeters(allParamList);\r
+ deviceRPCResponseDevice = syncHandler.performDeviceOperation(deviceRPCRequest);\r
+\r
+ if (null == deviceRPCResponseDevice) {\r
+ return getTimeOutResponse();\r
+ }\r
+ }\r
+\r
+ DeviceRPCResponse deviceRPCResponse =\r
+ mergeSetConfigDeviceRPCResponse(deviceRPCResponseVes, deviceRPCResponseDevice);\r
if (null == deviceRPCResponse) {\r
return getTimeOutResponse();\r
}\r
- response = mapperUtil.getNetconfResponse(deviceRPCResponse);\r
+ response = mapperUtil.getNetconfResponse(deviceRPCResponse, false);\r
return response;\r
}\r
\r
if (null == opResult) {\r
return getTimeOutResponse();\r
}\r
- response = mapperUtil.getNetconfResponse(opResult);\r
+ response = mapperUtil.getNetconfResponse(opResult, false);\r
return response;\r
}\r
\r
if (null == opResult) {\r
return getTimeOutResponse();\r
}\r
- response = mapperUtil.getNetconfResponse(opResult);\r
+ response = mapperUtil.getNetconfResponse(opResult, false);\r
return response;\r
}\r
\r
public NetConfResponse handleGetConfigRequest(NetConfRequest netConfRequest) {\r
Element el = NetconfToTr069MapperUtil.convertStringToDocument(netConfRequest.getRequestXml());\r
NetConfResponse response = null;\r
+ List<ParameterDTO> vesRequestParams = new ArrayList<>();\r
+\r
+ boolean isSoftwareInventory = false;\r
+ if (netConfRequest.getRequestXml().contains("software-inventory")) {\r
+ LOG.info("XML Contains software-inventory");\r
+ isSoftwareInventory = true;\r
+ }\r
+\r
DeviceRPCRequest request = NetconfToTr069MapperUtil.prepareTR069Request(\r
netConfRequest.getDeviceId(), el, "filter", TR069OperationCode.GET_PARAMETER_VALUES);\r
\r
LOG.debug("There are no supported device parameters found for get-config.");\r
return getEmptyResponse();\r
}\r
+ for (ParameterDTO param : request.getOpDetails().getParmeters()) {\r
+ if (isVesNotificationRequest(param)) {\r
+ vesRequestParams.add(param);\r
+ }\r
+ }\r
}\r
LOG.debug("Prepared NBI request for get-config {}", request);\r
\r
- DeviceRPCResponse opResult;\r
- opResult = syncHandler.performDeviceOperation(request);\r
+ DeviceRPCResponse opResultVes = null;\r
+ List<ParameterDTO> allParamList = request.getOpDetails().getParmeters();\r
+\r
+ if (!vesRequestParams.isEmpty()) {\r
+ request.getOpDetails().setParmeters(vesRequestParams);\r
+ opResultVes = vesnotiSender.sendGetConfigNotification(request);\r
+\r
+ if (null == opResultVes) {\r
+ return getTimeOutResponse();\r
+ }\r
+ }\r
+\r
+\r
+ allParamList.removeAll(vesRequestParams);\r
+\r
+ DeviceRPCResponse opResultDevice = null;\r
+ if (!allParamList.isEmpty()) {\r
+ request.getOpDetails().setParmeters(allParamList);\r
+ opResultDevice = syncHandler.performDeviceOperation(request);\r
+\r
+ if (null == opResultDevice) {\r
+ return getTimeOutResponse();\r
+ }\r
+ }\r
+\r
+ DeviceRPCResponse opResult = mergeGetConfigDeviceRPCResponse(opResultVes, opResultDevice);\r
+\r
if (null == opResult) {\r
return getTimeOutResponse();\r
}\r
- LOG.debug("Received GPV response : FaultKey = {} FaultString = {} Parameters : {}",\r
- opResult.getFaultKey(), opResult.getFaultString(),\r
- opResult.getOperationResponse().getParameterDTOs());\r
+ LOG.debug("Received GPV response : FaultKey = " + opResult.getFaultKey() + ", FaultString = "\r
+ + opResult.getFaultString() + ", Parameters :"\r
+ + opResult.getOperationResponse().getParameterDTOs());\r
if (null != opResult.getOperationResponse().getParameterDTOs())\r
handleBooleanParameters(opResult.getOperationResponse().getParameterDTOs());\r
- response = mapperUtil.getNetconfResponse(opResult);\r
+\r
+ if (isSoftwareInventory) {\r
+ response = mapperUtil.getNetconfResponseForSoftwareInventory(opResult);\r
+ } else {\r
+ response = mapperUtil.getNetconfResponse(opResult, false);\r
+ }\r
\r
if (opResult.getFaultKey() != null && opResult.getFaultKey().equalsIgnoreCase("9005")) {\r
// check for tabular\r
- LOG.debug("Tabular Entry not exist in the device; we need to add it now");\r
+ LOG.debug("Tabualr Entry not exist in the device; we need to add it now");\r
MOMetaData data = metaDataUtil\r
.getMetaDataByTR69Name(request.getOpDetails().getParmeters().get(0).getParamName());\r
if (data.isTabluarObj()) {\r
return response;\r
}\r
\r
+ @Override\r
+ public NetConfResponse handleSWDownloadRequest(NetConfRequest request) {\r
+ LOG.debug("request received fro sw-download");\r
+ Document d1 = NetconfToTr069MapperUtil.convertStringToDocumentXml(request.getRequestXml());\r
+ NetConfResponse response = null;\r
+ Map<String, String> map =\r
+ NetconfToTr069MapperUtil.extractRequestParamters(d1, "rpc", "software-download");\r
+ if (map == null || map.size() <= 0) {\r
+ LOG.debug("There are no device parameters found for get.");\r
+ return getEmptyResponse();\r
+ }\r
+\r
+ TR069OperationDetails opDetails = new TR069OperationDetails();\r
+ DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();\r
+ TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();\r
+ tr069DeviceDetails.setDeviceId(request.getDeviceId());\r
+ deviceRPCRequest.setOpDetails(opDetails);\r
+ deviceRPCRequest.setDeviceDetails(tr069DeviceDetails);\r
+ OperationOptions options = new OperationOptions();\r
+ options.setExecutionTimeout(60l);\r
+ deviceRPCRequest.setOptions(options);\r
+ String fileName = map.get("rpc.software-download.remote-file-path");\r
+ String password = map.get("rpc.software-download.password.password");\r
+\r
+ if (fileName == null || password == null || getDownloadFileURI(fileName) == null\r
+ || getDownloadUserName(fileName) == null) {\r
+ LOG.error(\r
+ "remote-file-path value is not as per yang model reference. Allowed pattern sftp://<username>@<host>[:<port>]/path");\r
+ return getOperationAbortedResponse(\r
+ "remote-file-path value is not as per yang model reference. Allowed pattern sftp://<username>@<host>[:<port>]/path");\r
+ }\r
+\r
+ List<ParameterDTO> paramDTOList = new ArrayList<>();\r
+ paramDTOList.add(new ParameterDTO("FileType", "1 Firmware Upgrade Image"));\r
+ paramDTOList.add(new ParameterDTO("URL", getDownloadFileURI(fileName)));\r
+ paramDTOList.add(new ParameterDTO("Username", getDownloadUserName(fileName)));\r
+ paramDTOList.add(new ParameterDTO("Password", password));\r
+ paramDTOList.add(new ParameterDTO("FileSize", "0"));\r
+ paramDTOList.add(new ParameterDTO("TargetFileName", ""));\r
+ paramDTOList.add(new ParameterDTO("DelaySeconds", "1"));\r
+ paramDTOList.add(new ParameterDTO("SuccessURL", ""));\r
+ paramDTOList.add(new ParameterDTO("FailureURL", ""));\r
+\r
+ deviceRPCRequest.getOpDetails().setParmeters(paramDTOList);\r
+ deviceRPCRequest.getOpDetails().setOpCode(TR069OperationCode.DOWNLOAD);\r
+\r
+ LOG.debug("Prepared NBI request for download " + deviceRPCRequest);\r
+\r
+ DeviceOperationDetails fwDetails = deviceOperDAO.findByDeviceId(request.getDeviceId());\r
+ if (fwDetails == null) {\r
+ String errorMsg = "TR069 device request has been aborted,due to device not identified";\r
+ return getOperationAbortedResponse(errorMsg);\r
+ }\r
+\r
+ if (fwDetails.getDownLoadStatus() != FirwareUpgradeStatus.DOWNLOAD_INTIATED.getStatus()\r
+ && fwDetails.getDownLoadStatus() != FirwareUpgradeStatus.DOWNLOAD_COMPLETED.getStatus()) {\r
+\r
+ LOG.debug("persisting the fw details " + fwDetails.toString());\r
+\r
+ DeviceRPCResponse opResult;\r
+ opResult = syncHandler.performDeviceOperation(deviceRPCRequest);\r
+ if (null == opResult) {\r
+ return getTimeOutResponse();\r
+ }\r
+ fwDetails.setFileName(fileName);\r
+ fwDetails.setDownLoadStatus(FirwareUpgradeStatus.DOWNLOAD_INTIATED.getStatus());\r
+ deviceOperDAO.save(fwDetails);\r
+ ArrayList<ParameterDTO> responseParamDTOList = new ArrayList<>();\r
+\r
+ if (opResult.getOperationResponse().getStatus() == 1) {\r
+ responseParamDTOList.add(new ParameterDTO("rpc-reply.ns1:status", "STARTED"));\r
+ } else {\r
+ responseParamDTOList.add(new ParameterDTO("rpc-reply.ns1:status", "FAILED"));\r
+ responseParamDTOList\r
+ .add(new ParameterDTO("rpc-reply.ns1:error-message", opResult.getFaultString()));\r
+ }\r
+ responseParamDTOList.add(new ParameterDTO("rpc-reply.ns1:notification-timeout", "1200"));\r
+\r
+ opResult.getOperationResponse().setParameterDTOs(responseParamDTOList);\r
+ response = mapperUtil.getNetconfResponse(opResult, true);\r
+\r
+ LOG.debug("update the status for fw details " + fwDetails.toString());\r
+ } else {\r
+ LOG.debug("FirmWare Upgrade is in progress");\r
+ String errorMsg = "TR069 device request has been aborted as Firmware Upgrade is inProgress";\r
+ return getOperationAbortedResponse(errorMsg);\r
+ }\r
+\r
+ return response;\r
+ }\r
+\r
+ private DeviceRPCResponse mergeGetConfigDeviceRPCResponse(DeviceRPCResponse opResultVes,\r
+ DeviceRPCResponse opResultDevice) {\r
+ if (null == opResultVes) {\r
+ return opResultDevice;\r
+ }\r
+\r
+ if (null == opResultDevice) {\r
+ return opResultVes;\r
+ }\r
+\r
+ if (null != opResultVes.getFaultKey()\r
+ && !opResultVes.getFaultKey().equals(MapperConstants.RPC_SUCCESS)) {\r
+ return opResultVes;\r
+ } else if (null != opResultDevice.getFaultKey()\r
+ && !opResultDevice.getFaultKey().equals(MapperConstants.RPC_SUCCESS)) {\r
+ return opResultDevice;\r
+ }\r
+\r
+ opResultDevice.getOperationResponse().getParameterDTOs()\r
+ .addAll(opResultVes.getOperationResponse().getParameterDTOs());\r
+ return opResultDevice;\r
+ }\r
+\r
+ private DeviceRPCResponse mergeSetConfigDeviceRPCResponse(DeviceRPCResponse opResultVes,\r
+ DeviceRPCResponse opResultDevice) {\r
+ if (null == opResultVes) {\r
+ return opResultDevice;\r
+ }\r
+\r
+ if (null == opResultDevice) {\r
+ return opResultVes;\r
+ }\r
+\r
+ return opResultDevice;\r
+ }\r
+\r
+ private boolean isVesNotificationRequest(ParameterDTO param) {\r
+ if (null == param.getParamName() || param.getParamName().isEmpty()) {\r
+ return false;\r
+ }\r
+\r
+ if (param.getParamName().toLowerCase().contains(MapperConstants.HEART_BEAT_PERIOD.toLowerCase())\r
+ || param.getParamName().toLowerCase()\r
+ .contains(MapperConstants.COUNT_DOWN_TIMER.toLowerCase())\r
+ || param.getParamName().toLowerCase().contains(MapperConstants.HEART_BEAT.toLowerCase())) {\r
+ return true;\r
+ }\r
+\r
+ return false;\r
+ }\r
+\r
private void handleBooleanParameters(List<ParameterDTO> parameterDTOs) {\r
\r
for (ParameterDTO param : parameterDTOs) {\r
\r
private NetConfResponse getEmptyResponse() {\r
NetConfResponse response = new NetConfResponse();\r
- ErrorCodeMetaData errorCodeMetaData = errorCodeUtil.getErrorCodeMetaData("0");\r
+ ErrorCodeDetails errorCodeMetaData = errorCodeUtil.getErrorCodeMetaData("0");\r
ErrorCodeDetails errorCode = new ErrorCodeDetails();\r
errorCode.setFaultCode("0");\r
errorCode.setErrorMessage(errorCodeMetaData.getErrorMessage());\r
// prepare timeout error response\r
NetConfResponse timeOutErrorResponse = new NetConfResponse();\r
ErrorCodeDetails errorCode = new ErrorCodeDetails();\r
- ErrorCodeMetaData errorCodeMetaData = errorCodeUtil.getErrorCodeMetaData("8006");\r
+ ErrorCodeDetails errorCodeMetaData = errorCodeUtil.getErrorCodeMetaData("8006");\r
\r
errorCode.setFaultCode("8006");\r
errorCode.setErrorMessage(errorCodeMetaData.getErrorMessage());\r
return timeOutErrorResponse;\r
}\r
\r
+ private NetConfResponse getErrorResponse(String errCode, String errorMsg) {\r
+ NetConfResponse errorResponse = new NetConfResponse();\r
+ ErrorCodeDetails errorCode = new ErrorCodeDetails();\r
+ ErrorCodeDetails errorCodeMetaData = errorCodeUtil.getErrorCodeMetaData("8006");\r
+ if (errorCodeMetaData != null) {\r
+ errorCode.setFaultCode(errCode);\r
+ errorCode.setErrorMessage(errorCodeMetaData.getErrorMessage());\r
+ errorCode.setErrorType(errorCodeMetaData.getErrorType());\r
+ errorCode.setErrorTag(errorCodeMetaData.getErrorTag());\r
+ errorCode.setErrorSeverity(errorCodeMetaData.getErrorSeverity());\r
+ }\r
+ errorResponse.setErrorCode(errorCode);\r
+ errorResponse.setErrorMessage(errorMsg);\r
+ return errorResponse;\r
+ }\r
+\r
+ private NetConfResponse getOperationAbortedResponse(String errorMessage) {\r
+ // prepare timeout error response\r
+ NetConfResponse timeOutErrorResponse = new NetConfResponse();\r
+ ErrorCodeDetails errorCode = new ErrorCodeDetails();\r
+ ErrorCodeDetails errorCodeMetaData = errorCodeUtil.getErrorCodeMetaData("8006");\r
+ if (errorCode != null) {\r
+ errorCode.setFaultCode("8002");\r
+ errorCode.setErrorMessage(errorCodeMetaData.getErrorMessage());\r
+ errorCode.setErrorType(errorCodeMetaData.getErrorType());\r
+ errorCode.setErrorTag(errorCodeMetaData.getErrorTag());\r
+ errorCode.setErrorSeverity(errorCodeMetaData.getErrorSeverity());\r
+ }\r
+ timeOutErrorResponse.setErrorCode(errorCode);\r
+ timeOutErrorResponse.setErrorMessage(errorMessage);\r
+ return timeOutErrorResponse;\r
+ }\r
+\r
public List<ParameterDTO> filteredSetParameters(List<ParameterDTO> parameters) {\r
List<ParameterDTO> result = new ArrayList<>();\r
for (ParameterDTO param : parameters) {\r
LOG.debug("processing the handelRegisterEvent completed");\r
return result;\r
}\r
+\r
+ private static String getDownloadFileURI(String filepath) {\r
+\r
+ if (filepath.contains("@") && filepath.contains("//")) {\r
+ String[] str = filepath.split("@");\r
+ String[] strForUserName = str[0].split("//");\r
+ if (str.length > 1) {\r
+ String Url = strForUserName[0] + "//" + str[1];\r
+ return Url;\r
+ }\r
+ }\r
+ return null;\r
+ }\r
+\r
+ private static String getDownloadUserName(String filepath) {\r
+\r
+ if (filepath.contains("@") && filepath.contains("//")) {\r
+ String[] str = filepath.split("@");\r
+ String[] strForUserName = str[0].split("//");\r
+ if (strForUserName.length > 1)\r
+ return strForUserName[1];\r
+ }\r
+ return null;\r
+ }\r
}\r