Initial source code
[oam/tr069-adapter.git] / acs / cpe / src / main / java / org / commscope / tr069adapter / acs / cpe / rpc / Fault.java
1 /*\r
2  * ============LICENSE_START========================================================================\r
3  * ONAP : tr-069-adapter\r
4  * =================================================================================================\r
5  * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
6  * =================================================================================================\r
7  * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
8  * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
9  * may obtain a copy of the License at\r
10  *\r
11  * http://www.apache.org/licenses/LICENSE-2.0\r
12  *\r
13  * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
14  * either express or implied. See the License for the specific language governing permissions and\r
15  * limitations under the License.\r
16  * ===============LICENSE_END=======================================================================\r
17  */\r
18 \r
19 package org.commscope.tr069adapter.acs.cpe.rpc;\r
20 \r
21 import java.io.ByteArrayInputStream;\r
22 import java.io.IOException;\r
23 import java.io.OutputStream;\r
24 import java.util.ArrayList;\r
25 import java.util.Iterator;\r
26 \r
27 import javax.xml.soap.Detail;\r
28 import javax.xml.soap.MessageFactory;\r
29 import javax.xml.soap.SOAPBodyElement;\r
30 import javax.xml.soap.SOAPElement;\r
31 import javax.xml.soap.SOAPException;\r
32 import javax.xml.soap.SOAPFactory;\r
33 import javax.xml.soap.SOAPFault;\r
34 import javax.xml.soap.SOAPHeaderElement;\r
35 import javax.xml.soap.SOAPMessage;\r
36 \r
37 import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
38 \r
39 public class Fault extends TR069RPC {\r
40   private static final String FAULTSTRING = "FaultString";\r
41   private static final String FAULTCODE = "FaultCode";\r
42   private static final String FAULT_RPC = "Fault";\r
43   private static final long serialVersionUID = 1L;\r
44 \r
45   public Fault() {\r
46     name = FAULT_RPC;\r
47   }\r
48 \r
49   public Fault(String soapFaultCode, String soapFaultString, String id) {\r
50     name = FAULT_RPC;\r
51     this.faultCodeCwmp = this.soapFaultCode = soapFaultCode;\r
52     this.faultStringCwmp = this.soapFaultString = soapFaultString;\r
53     this.id = id;\r
54   }\r
55 \r
56   @Override\r
57   public void writeTo(OutputStream out) {\r
58     try {\r
59       MessageFactory mf = MessageFactory.newInstance();\r
60       SOAPFactory spf = SOAPFactory.newInstance();\r
61 \r
62       String s = "<soapenv:Envelope";\r
63       s += " xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"";\r
64       s += " xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\"";\r
65       s += " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"";\r
66       s += " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"";\r
67       s += " xmlns:cwmp=\"" + urnCWMP\r
68           + "\"><soapenv:Header></soapenv:Header><soapenv:Body></soapenv:Body></soapenv:Envelope>";\r
69       ByteArrayInputStream in = new ByteArrayInputStream(s.getBytes());\r
70       SOAPMessage msg = mf.createMessage(null, in);\r
71 \r
72       SOAPHeaderElement elmntId =\r
73           msg.getSOAPHeader().addHeaderElement(spf.createName("ID", CWMP, urnCWMP));\r
74       elmntId.setValue(getId());\r
75       elmntId.setAttribute("soapenv:mustUnderstand", "1");\r
76       SOAPFault fault = msg.getSOAPBody().addFault();\r
77       fault.addChildElement(spf.createName("faultcode")).setValue(String.valueOf("Server"));\r
78       fault.addChildElement(spf.createName("faultstring")).setValue(String.valueOf("CWMP Fault"));\r
79 \r
80       if (name == null || name.equals("")) {\r
81         name = this.getClass().getSimpleName();\r
82       }\r
83       msg.writeTo(out);\r
84     } catch (SOAPException ex) {\r
85       logger.error("Exception  : {}", ex.getMessage());\r
86     } catch (IOException e) {\r
87       logger.error("Exception  : {}", e.getMessage());\r
88     }\r
89   }\r
90 \r
91   @Override\r
92   protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
93     logger.isDebugEnabled();\r
94   }\r
95 \r
96   protected void createBody(Detail body, SOAPFactory spf) throws SOAPException {\r
97 \r
98     SOAPElement element = spf.createElement(FAULT_RPC, CWMP, urnCWMP);\r
99     element.addChildElement(spf.createName(FAULTCODE)).setValue(String.valueOf(this.faultCodeCwmp));\r
100     element.addChildElement(spf.createName(FAULTSTRING))\r
101         .setValue(String.valueOf(this.faultStringCwmp));\r
102     body.addChildElement(element);\r
103   }\r
104 \r
105   protected void parseBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
106     try {\r
107       soapFaultCode = getRequestElement(spf, body, "faultcode");\r
108     } catch (Exception e) {\r
109       logger.error("Exception while parseBody faultcode {}", e.toString());\r
110     }\r
111     try {\r
112       soapFaultString = getRequestElement(spf, body, "faultstring");\r
113     } catch (Exception e) {\r
114       logger.error("Exception while parseBody faultstring {}", e.toString());\r
115     }\r
116     SOAPElement detail = null;\r
117     try {\r
118       detail = getRequestChildElement(spf, body, "detail");\r
119     } catch (Exception e) {\r
120       logger.error("Exception while parseBody detail {}", e.toString());\r
121     }\r
122     if (detail == null) {\r
123       detail = body; // for one broken cpe\r
124     }\r
125     SOAPElement cwmpfault = getRequestChildElement2(spf, detail, FAULT_RPC);\r
126     faultCodeCwmp = getRequestElement(spf, cwmpfault, FAULTCODE);\r
127     faultStringCwmp = getRequestElement(spf, cwmpfault, FAULTSTRING);\r
128 \r
129     Iterator<?> i = cwmpfault.getChildElements(spf.createName("SetParameterValuesFault"));\r
130     if (i.hasNext()) {\r
131       setParameterValuesFaults = new ArrayList<>();\r
132     }\r
133     while (i.hasNext()) {\r
134       SOAPElement f = (SOAPElement) i.next();\r
135       SetParameterValueFault vf =\r
136           new SetParameterValueFault(getRequestElement(spf, f, "ParameterName"),\r
137               getRequestElement(spf, f, FAULTCODE), getRequestElement(spf, f, FAULTSTRING));\r
138       setParameterValuesFaults.add(vf);\r
139     }\r
140     if (setParameterValuesFaults != null) {\r
141       for (SetParameterValueFault f : setParameterValuesFaults) {\r
142         logger.error("n={} c={} s={}", f.getParameterName(), f.getFaultCode(), f.getFaultString());\r
143       }\r
144     }\r
145   }\r
146 \r
147   @Override\r
148   public String toString() {\r
149     return "FAULT: code=" + soapFaultCode + " msg=" + soapFaultString + " code=" + faultCodeCwmp\r
150         + " cmsg=" + faultStringCwmp;\r
151   }\r
152 \r
153   private String soapFaultCode;\r
154   private String soapFaultString;\r
155   private String faultCodeCwmp;\r
156   private String faultStringCwmp;\r
157   private ArrayList<SetParameterValueFault> setParameterValuesFaults;\r
158 \r
159   public String getFaultString() {\r
160     return soapFaultString;\r
161   }\r
162 \r
163   public String getFaultStringCwmp() {\r
164     return faultStringCwmp;\r
165   }\r
166 \r
167   public String getFaultCode() {\r
168     return soapFaultCode;\r
169   }\r
170 \r
171   public String getCwmpFaultCode() {\r
172     return faultCodeCwmp;\r
173   }\r
174 \r
175   public static final String FCODE_REQUEST_DENIED = "9001";\r
176   public static final String FCODE_INTERNAL = "9002";\r
177   public static final String FCODE_INVALID_ARGS = "9003";\r
178   public static final String FCODE_RESOURCE_EXCEEDED = "9004";\r
179   public static final String FCODE_INVALID_PARAMETER_NAME = "9005";\r
180   public static final String FCODE_INVALID_PARAMETER_TYPE = "9006";\r
181   public static final String FCODE_INVALID_PARAMETER_VALUE = "9007";\r
182   public static final String FCODE_PARAMETER_READONLY = "9008";\r
183   public static final String FCODE_NOTIFICATION_REJECTED = "9009";\r
184   public static final String FCODE_DOWNLOAD_FAILURE = "9010";\r
185   public static final String FCODE_UPLOAD_FAILURE = "9011";\r
186   public static final String FCODE_FILE_TRANSFER_AUTHENTICATION_FAILURE = "9012";\r
187   public static final String FCODE_PROTOCOL_NOT_SUPPORTED = "9013";\r
188   public static final String FCODE_DLF_MULTICAST = "9014";\r
189   public static final String FCODE_DLF_NO_CONTACT = "9015";\r
190   public static final String FCODE_DLF_FILE_ACCESS = "9016";\r
191   public static final String FCODE_DLF_UNABLE_TO_COMPLETE = "9017";\r
192   public static final String FCODE_DLF_FILE_CORRUPTED = "9018";\r
193   public static final String FCODE_DLF_FILE_AUTHENTICATION = "9019";\r
194   public static final String FCODE_ACS_METHOD_NOT_SUPPORTED = "8000";\r
195   public static final String FCODE_ACS_REQUEST_DENIED = "8001";\r
196   public static final String FCODE_ACS_INTERNAL_ERROR = "8002";\r
197   public static final String FCODE_ACS_INVALID_ARGS = "8003";\r
198   public static final String FCODE_ACS_RESOURCE_EXCEEDED = "8004";\r
199   public static final String FCODE_ACS_RETRY = "8005";\r
200 \r
201 }\r