--- /dev/null
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.utils;\r
+\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.DEFAULT_CONNECTION_TIMEOUT;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.HTTP_CONNECTION_IDLE_TIMEOUT;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.HTTP_OP_FAILED;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.HTTP_OP_SUCCESS;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.HTTP_STATUS_OK;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.HTTP_STATUS_OK_WITH_NO_CONTENT;\r
+\r
+import java.io.IOException;\r
+\r
+import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;\r
+import org.apache.commons.httpclient.HttpClient;\r
+import org.apache.commons.httpclient.HttpConnectionManager;\r
+import org.apache.commons.httpclient.HttpException;\r
+import org.apache.commons.httpclient.UsernamePasswordCredentials;\r
+import org.apache.commons.httpclient.auth.AuthScope;\r
+import org.apache.commons.httpclient.methods.GetMethod;\r
+import org.apache.commons.httpclient.params.HttpConnectionManagerParams;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.common.OperationResponse;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class DeviceConnector {\r
+\r
+ private static final Logger logger = LoggerFactory.getLogger(DeviceConnector.class);\r
+\r
+ /**\r
+ * Performs HTTP get on the connection request URL for the device.\r
+ * \r
+ * @param deviceDetails\r
+ * @return\r
+ * @throws IOException\r
+ * @throws Exception\r
+ */\r
+ public DeviceRPCResponse requestConnectionHttp(TR069DeviceDetails deviceDetails)\r
+ throws IOException {\r
+\r
+ HttpClient client = new HttpClient();\r
+ HttpConnectionManager hcm = client.getHttpConnectionManager();\r
+ HttpConnectionManagerParams hcmParam = hcm.getParams();\r
+ hcmParam.setConnectionTimeout(DEFAULT_CONNECTION_TIMEOUT);\r
+ hcmParam.setSoTimeout(DEFAULT_CONNECTION_TIMEOUT);\r
+ hcm.setParams(hcmParam);\r
+ client.setHttpConnectionManager(hcm);\r
+\r
+ if (deviceDetails.getUsername() != null && deviceDetails.getPassword() != null) {\r
+ client.getState().setCredentials(new AuthScope(null, -1), new UsernamePasswordCredentials(\r
+ deviceDetails.getUsername(), deviceDetails.getPassword()));\r
+ } else {\r
+ logger.error("Insufficient HTTP arguments: UserName or password is null");\r
+ throw new HttpException("Insufficient HTTP arguments: UserName or password is null");\r
+ }\r
+\r
+ DefaultHttpMethodRetryHandler retryhandler = new DefaultHttpMethodRetryHandler(1, true);\r
+ client.getParams().setParameter("http.method.retry-handler", retryhandler);\r
+ GetMethod get = new GetMethod(deviceDetails.getConnectionRequestURL());\r
+ get.setDoAuthentication(true);\r
+\r
+ try {\r
+ int status = client.executeMethod(get);\r
+ return populateOperationResult(deviceDetails, get.getResponseBodyAsString(), status);\r
+ } finally {\r
+ get.releaseConnection();\r
+ hcm.closeIdleConnections(HTTP_CONNECTION_IDLE_TIMEOUT);\r
+ }\r
+ }\r
+\r
+ /**\r
+ * @param deviceDtails\r
+ * @param message\r
+ * @param httpStatus\r
+ * @return\r
+ */\r
+ private DeviceRPCResponse populateOperationResult(TR069DeviceDetails deviceDtails, String message,\r
+ int httpStatus) {\r
+\r
+ DeviceRPCResponse deviceRPCResponse = new DeviceRPCResponse();\r
+ OperationResponse operationResponse = new OperationResponse();\r
+\r
+ operationResponse.setOperationCode(TR069OperationCode.INITIATE_CR);\r
+\r
+ // HTTP status for successful connection can be 200=Ok, 204=No Content)\r
+ if (httpStatus != HTTP_STATUS_OK && httpStatus != HTTP_STATUS_OK_WITH_NO_CONTENT) {\r
+ operationResponse.setStatus(HTTP_OP_FAILED);\r
+ deviceRPCResponse.setFaultKey(httpStatus + "");\r
+ deviceRPCResponse.setFaultString(message);\r
+ } else {\r
+ operationResponse.setStatus(HTTP_OP_SUCCESS);\r
+ }\r
+\r
+ deviceRPCResponse.setOperationResponse(operationResponse);\r
+ deviceRPCResponse.setDeviceDetails(deviceDtails);\r
+\r
+ // nBIOperationResult.setOperationId(operationId);// why operation id is here ?\r
+\r
+ return deviceRPCResponse;\r
+ }\r
+\r
+}\r