Initial source code
[oam/tr069-adapter.git] / acs / cpe / src / main / java / org / commscope / tr069adapter / acs / cpe / utils / DeviceConnector.java
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/utils/DeviceConnector.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/utils/DeviceConnector.java
new file mode 100644 (file)
index 0000000..9e02a65
--- /dev/null
@@ -0,0 +1,123 @@
+/*\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