Initial source code
[oam/tr069-adapter.git] / acs / cpe / src / main / java / org / commscope / tr069adapter / acs / cpe / rpc / Fault.java
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/Fault.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/Fault.java
new file mode 100644 (file)
index 0000000..2ab2c97
--- /dev/null
@@ -0,0 +1,201 @@
+/*\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.rpc;\r
+\r
+import java.io.ByteArrayInputStream;\r
+import java.io.IOException;\r
+import java.io.OutputStream;\r
+import java.util.ArrayList;\r
+import java.util.Iterator;\r
+\r
+import javax.xml.soap.Detail;\r
+import javax.xml.soap.MessageFactory;\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+import javax.xml.soap.SOAPFault;\r
+import javax.xml.soap.SOAPHeaderElement;\r
+import javax.xml.soap.SOAPMessage;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class Fault extends TR069RPC {\r
+  private static final String FAULTSTRING = "FaultString";\r
+  private static final String FAULTCODE = "FaultCode";\r
+  private static final String FAULT_RPC = "Fault";\r
+  private static final long serialVersionUID = 1L;\r
+\r
+  public Fault() {\r
+    name = FAULT_RPC;\r
+  }\r
+\r
+  public Fault(String soapFaultCode, String soapFaultString, String id) {\r
+    name = FAULT_RPC;\r
+    this.faultCodeCwmp = this.soapFaultCode = soapFaultCode;\r
+    this.faultStringCwmp = this.soapFaultString = soapFaultString;\r
+    this.id = id;\r
+  }\r
+\r
+  @Override\r
+  public void writeTo(OutputStream out) {\r
+    try {\r
+      MessageFactory mf = MessageFactory.newInstance();\r
+      SOAPFactory spf = SOAPFactory.newInstance();\r
+\r
+      String s = "<soapenv:Envelope";\r
+      s += " xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"";\r
+      s += " xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\"";\r
+      s += " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"";\r
+      s += " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"";\r
+      s += " xmlns:cwmp=\"" + urnCWMP\r
+          + "\"><soapenv:Header></soapenv:Header><soapenv:Body></soapenv:Body></soapenv:Envelope>";\r
+      ByteArrayInputStream in = new ByteArrayInputStream(s.getBytes());\r
+      SOAPMessage msg = mf.createMessage(null, in);\r
+\r
+      SOAPHeaderElement elmntId =\r
+          msg.getSOAPHeader().addHeaderElement(spf.createName("ID", CWMP, urnCWMP));\r
+      elmntId.setValue(getId());\r
+      elmntId.setAttribute("soapenv:mustUnderstand", "1");\r
+      SOAPFault fault = msg.getSOAPBody().addFault();\r
+      fault.addChildElement(spf.createName("faultcode")).setValue(String.valueOf("Server"));\r
+      fault.addChildElement(spf.createName("faultstring")).setValue(String.valueOf("CWMP Fault"));\r
+\r
+      if (name == null || name.equals("")) {\r
+        name = this.getClass().getSimpleName();\r
+      }\r
+      msg.writeTo(out);\r
+    } catch (SOAPException ex) {\r
+      logger.error("Exception  : {}", ex.getMessage());\r
+    } catch (IOException e) {\r
+      logger.error("Exception  : {}", e.getMessage());\r
+    }\r
+  }\r
+\r
+  @Override\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+\r
+  protected void createBody(Detail body, SOAPFactory spf) throws SOAPException {\r
+\r
+    SOAPElement element = spf.createElement(FAULT_RPC, CWMP, urnCWMP);\r
+    element.addChildElement(spf.createName(FAULTCODE)).setValue(String.valueOf(this.faultCodeCwmp));\r
+    element.addChildElement(spf.createName(FAULTSTRING))\r
+        .setValue(String.valueOf(this.faultStringCwmp));\r
+    body.addChildElement(element);\r
+  }\r
+\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    try {\r
+      soapFaultCode = getRequestElement(spf, body, "faultcode");\r
+    } catch (Exception e) {\r
+      logger.error("Exception while parseBody faultcode {}", e.toString());\r
+    }\r
+    try {\r
+      soapFaultString = getRequestElement(spf, body, "faultstring");\r
+    } catch (Exception e) {\r
+      logger.error("Exception while parseBody faultstring {}", e.toString());\r
+    }\r
+    SOAPElement detail = null;\r
+    try {\r
+      detail = getRequestChildElement(spf, body, "detail");\r
+    } catch (Exception e) {\r
+      logger.error("Exception while parseBody detail {}", e.toString());\r
+    }\r
+    if (detail == null) {\r
+      detail = body; // for one broken cpe\r
+    }\r
+    SOAPElement cwmpfault = getRequestChildElement2(spf, detail, FAULT_RPC);\r
+    faultCodeCwmp = getRequestElement(spf, cwmpfault, FAULTCODE);\r
+    faultStringCwmp = getRequestElement(spf, cwmpfault, FAULTSTRING);\r
+\r
+    Iterator<?> i = cwmpfault.getChildElements(spf.createName("SetParameterValuesFault"));\r
+    if (i.hasNext()) {\r
+      setParameterValuesFaults = new ArrayList<>();\r
+    }\r
+    while (i.hasNext()) {\r
+      SOAPElement f = (SOAPElement) i.next();\r
+      SetParameterValueFault vf =\r
+          new SetParameterValueFault(getRequestElement(spf, f, "ParameterName"),\r
+              getRequestElement(spf, f, FAULTCODE), getRequestElement(spf, f, FAULTSTRING));\r
+      setParameterValuesFaults.add(vf);\r
+    }\r
+    if (setParameterValuesFaults != null) {\r
+      for (SetParameterValueFault f : setParameterValuesFaults) {\r
+        logger.error("n={} c={} s={}", f.getParameterName(), f.getFaultCode(), f.getFaultString());\r
+      }\r
+    }\r
+  }\r
+\r
+  @Override\r
+  public String toString() {\r
+    return "FAULT: code=" + soapFaultCode + " msg=" + soapFaultString + " code=" + faultCodeCwmp\r
+        + " cmsg=" + faultStringCwmp;\r
+  }\r
+\r
+  private String soapFaultCode;\r
+  private String soapFaultString;\r
+  private String faultCodeCwmp;\r
+  private String faultStringCwmp;\r
+  private ArrayList<SetParameterValueFault> setParameterValuesFaults;\r
+\r
+  public String getFaultString() {\r
+    return soapFaultString;\r
+  }\r
+\r
+  public String getFaultStringCwmp() {\r
+    return faultStringCwmp;\r
+  }\r
+\r
+  public String getFaultCode() {\r
+    return soapFaultCode;\r
+  }\r
+\r
+  public String getCwmpFaultCode() {\r
+    return faultCodeCwmp;\r
+  }\r
+\r
+  public static final String FCODE_REQUEST_DENIED = "9001";\r
+  public static final String FCODE_INTERNAL = "9002";\r
+  public static final String FCODE_INVALID_ARGS = "9003";\r
+  public static final String FCODE_RESOURCE_EXCEEDED = "9004";\r
+  public static final String FCODE_INVALID_PARAMETER_NAME = "9005";\r
+  public static final String FCODE_INVALID_PARAMETER_TYPE = "9006";\r
+  public static final String FCODE_INVALID_PARAMETER_VALUE = "9007";\r
+  public static final String FCODE_PARAMETER_READONLY = "9008";\r
+  public static final String FCODE_NOTIFICATION_REJECTED = "9009";\r
+  public static final String FCODE_DOWNLOAD_FAILURE = "9010";\r
+  public static final String FCODE_UPLOAD_FAILURE = "9011";\r
+  public static final String FCODE_FILE_TRANSFER_AUTHENTICATION_FAILURE = "9012";\r
+  public static final String FCODE_PROTOCOL_NOT_SUPPORTED = "9013";\r
+  public static final String FCODE_DLF_MULTICAST = "9014";\r
+  public static final String FCODE_DLF_NO_CONTACT = "9015";\r
+  public static final String FCODE_DLF_FILE_ACCESS = "9016";\r
+  public static final String FCODE_DLF_UNABLE_TO_COMPLETE = "9017";\r
+  public static final String FCODE_DLF_FILE_CORRUPTED = "9018";\r
+  public static final String FCODE_DLF_FILE_AUTHENTICATION = "9019";\r
+  public static final String FCODE_ACS_METHOD_NOT_SUPPORTED = "8000";\r
+  public static final String FCODE_ACS_REQUEST_DENIED = "8001";\r
+  public static final String FCODE_ACS_INTERNAL_ERROR = "8002";\r
+  public static final String FCODE_ACS_INVALID_ARGS = "8003";\r
+  public static final String FCODE_ACS_RESOURCE_EXCEEDED = "8004";\r
+  public static final String FCODE_ACS_RETRY = "8005";\r
+\r
+}\r