1 /*
2 ServiceLocationException.java
3
4 (C) Copyright IBM Corp. 2005, 2009
5
6 THIS FILE IS PROVIDED UNDER THE TERMS OF THE ECLIPSE PUBLIC LICENSE
7 ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THIS FILE
8 CONSTITUTES RECIPIENTS ACCEPTANCE OF THE AGREEMENT.
9
10 You can obtain a current copy of the Eclipse Public License from
11 http://www.opensource.org/licenses/eclipse-1.0.php
12
13 @author : Roberto Pineiro, IBM, roberto.pineiro@us.ibm.com
14 * @author : Chung-hao Tan, IBM, chungtan@us.ibm.com
15 *
16 * Change History
17 * Flag Date Prog Description
18 *-------------------------------------------------------------------------------
19 * 1516246 2006-07-22 lupusalex Integrate SLP client code
20 * 2003590 2008-06-30 blaschke-oss Change licensing from CPL to EPL
21 * 2524131 2009-01-21 raman_arora Upgrade client to JDK 1.5 (Phase 1)
22 */
23
24 package org.metricshub.wbem.sblim.slp;
25
26 /*-
27 * ╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲
28 * WBEM Java Client
29 * ჻჻჻჻჻჻
30 * Copyright 2023 - 2025 MetricsHub
31 * ჻჻჻჻჻჻
32 * Licensed under the Apache License, Version 2.0 (the "License");
33 * you may not use this file except in compliance with the License.
34 * You may obtain a copy of the License at
35 *
36 * http://www.apache.org/licenses/LICENSE-2.0
37 *
38 * Unless required by applicable law or agreed to in writing, software
39 * distributed under the License is distributed on an "AS IS" BASIS,
40 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
41 * See the License for the specific language governing permissions and
42 * limitations under the License.
43 * ╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱
44 */
45
46 /**
47 * The ServiceLocationException class is thrown by all methods when exceptional
48 * conditions occur in the SLP framework. The error code property determines the
49 * exact nature of the condition, and an optional message may provide more
50 * information.
51 */
52 public class ServiceLocationException extends Exception {
53 private static final long serialVersionUID = 6414188770647750627L;
54
55 /**
56 * OK
57 */
58 public static final short OK = 0;
59
60 /**
61 * There is data for the service type in the scope in the AttrRqst or
62 * SrvRqst, but not in the requested language.
63 */
64 public static final short LANGUAGE_NOT_SUPPORTED = 1;
65
66 /**
67 * The message fails to obey SLP syntax.
68 */
69 public static final short PARSE_ERROR = 2;
70
71 /**
72 * The SrvReg has problems -- e.g., a zero lifetime or an omitted Language
73 * Tag.
74 */
75 public static final short INVALID_REGISTRATION = 3;
76
77 /**
78 * The SLP message did not include a scope in its <scope-list> supported by
79 * the SA or DA.
80 */
81 public static final short SCOPE_NOT_SUPPORTED = 4;
82
83 /**
84 * The DA or SA receives a request for an unsupported SLP SPI.
85 */
86 public static final short AUTHENTICATION_UNKNOWN = 5;
87
88 /**
89 * The DA expected URL and ATTR authentication in the SrvReg and did not
90 * receive it.
91 */
92 public static final short AUTHENTICATION_ABSENT = 6;
93
94 /**
95 * The DA detected an authentication error in an Authentication block.
96 */
97 public static final short AUTHENTICATION_FAILED = 7;
98
99 /**
100 * Unsupported version number in message header.
101 */
102 public static final short VERSION_NOT_SUPPORTED = 9;
103
104 /**
105 * The DA (or SA) is too sick to respond.
106 */
107 public static final short INTERNAL_ERROR = 10;
108
109 /**
110 * UA or SA SHOULD retry, using exponential back off.
111 */
112 public static final short DA_BUSY = 11;
113
114 /**
115 * The DA (or SA) received an unknown option from the mandatory range (see
116 * section 9.1).
117 */
118 public static final short OPTION_NOT_SUPPORTED = 12;
119
120 /**
121 * The DA received a SrvReg without FRESH set, for an unregistered service
122 * or with inconsistent Service Types.
123 */
124 public static final short INVALID_UPDATE = 13;
125
126 /**
127 * The SA received an AttrRqst or SrvTypeRqst and does not support it.
128 */
129 public static final short REQUEST_NOT_SUPPORTED = 14;
130
131 /**
132 * The SA sent a SrvReg or partial SrvDereg to a DA more frequently than the
133 * DA's min-refresh-interval.
134 */
135 public static final short REFRESH_REJECTED = 15;
136
137 /**
138 * NOT_IMPLEMENTED
139 */
140 public static final short NOT_IMPLEMENTED = 16;
141
142 /**
143 * NETWORK_INIT_FAILED
144 */
145 public static final short NETWORK_INIT_FAILED = 17;
146
147 /**
148 * NETWORK_TIMED_OUT
149 */
150 public static final short NETWORK_TIMED_OUT = 18;
151
152 /**
153 * NETWORK_ERROR
154 */
155 public static final short NETWORK_ERROR = 19;
156
157 /**
158 * INTERNAL_SYSTEM_ERROR
159 */
160 public static final short INTERNAL_SYSTEM_ERROR = 20;
161
162 /**
163 * TYPE_ERROR
164 */
165 public static final short TYPE_ERROR = 21;
166
167 /**
168 * BUFFER_OVERFLOW
169 */
170 public static final short BUFFER_OVERFLOW = 22;
171
172 /**
173 * PREVIOUS_RESPONDER_OVERFLOW
174 */
175 public static final short PREVIOUS_RESPONDER_OVERFLOW = 100;
176
177 private static final String[] ERROR_MESSAGES = {
178 "OK",
179 "LANGUAGE_NOT_SUPPORTED",
180 "PARSE_ERROR",
181 "INVALID_REGISTRATION",
182 "SCOPE_NOT_SUPPORTED",
183 "AUTHENTICATION_UNKNOWN",
184 "AUTHENTICATION_ABSENT",
185 "AUTHENTICATION_FAILED",
186 "",
187 "VERSION_NOT_SUPPORTED",
188 "INTERNAL_ERROR",
189 "DA_BUSY",
190 "OPTION_NOT_SUPPORTED",
191 "INVALID_UPDATE",
192 "REQUEST_NOT_SUPPORTED",
193 "REFRESH_REJECTED",
194 "NOT_IMPLEMENTED",
195 "NETWORK_INIT_FAILED",
196 "NETWORK_TIMED_OUT",
197 "NETWORK_ERROR",
198 "INTERNAL_SYSTEM_ERROR",
199 "TYPE_ERROR",
200 "BUFFER_OVERFLOW"
201 };
202
203 private short iErrorCode;
204
205 /**
206 * Ctor.
207 *
208 * @param pErrorCode
209 * One of the ec constants in this class
210 */
211 public ServiceLocationException(short pErrorCode) {
212 super(ERROR_MESSAGES[pErrorCode]);
213 this.iErrorCode = pErrorCode;
214 }
215
216 /**
217 * Ctor.
218 *
219 * @param pErrorCode
220 * One of the ec constants in this class
221 * @param pCause
222 * The cause
223 */
224 public ServiceLocationException(short pErrorCode, Throwable pCause) {
225 super(ERROR_MESSAGES[pErrorCode], pCause);
226 this.iErrorCode = pErrorCode;
227 }
228
229 /**
230 * Ctor.
231 *
232 * @param pErrorCode
233 * One of the ec constants in this class
234 * @param pMessage
235 * A more specific message
236 * @param pCause
237 *
238 */
239 public ServiceLocationException(short pErrorCode, String pMessage, Throwable pCause) {
240 super(ERROR_MESSAGES[pErrorCode] + "(" + pMessage + ")", pCause);
241 this.iErrorCode = pErrorCode;
242 }
243
244 /**
245 * Ctor.
246 *
247 * @param pErrorCode
248 * One of the error code constants in this class
249 * @param pMessage
250 * A more specific message
251 */
252 public ServiceLocationException(short pErrorCode, String pMessage) {
253 this(pErrorCode, pMessage, null);
254 }
255
256 /**
257 * Return the error code. The error code takes on one of the static field
258 * values.
259 *
260 * @return The error code
261 */
262 public short getErrorCode() {
263 return this.iErrorCode;
264 }
265
266 /**
267 * Gets the message associated to this exception.
268 *
269 * @return The message
270 */
271 @Override
272 public String getMessage() {
273 if (getCause() == null) {
274 return super.getMessage();
275 }
276 return super.getMessage() + "; nested exception is: \n\t" + getCause().toString();
277 }
278 }