--- /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.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