1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 /*
22  * Copyright (c) 1999 by Sun Microsystems, Inc.
23  * All rights reserved.
24  *
25  */
26 
27 //  ServiceLocationException.java : All SLP exceptions are derived from
28 //                                  this base class.
29 //  Author:           Erik Guttman
30 //
31 
32 package com.sun.slp;
33 
34 import java.util.*;
35 import java.text.*;
36 
37 /**
38  * The ServiceLocationException class is thrown when an error occurs
39  * during SLP operation. The exact nature of the error is indicated
40  * by the integer error codes.
41  *
42  * @author  Erik Guttman
43  */
44 
45 public class ServiceLocationException extends Exception {
46 
47     // Error codes.
48 
49     /**
50      * No error.
51      */
52 
53     static final short OK                     = 0;
54 
55     /**
56      * The DA did not have a registration in the language locale of
57      * the request, although it did have one in another language locale.
58      */
59 
60     public static final short LANGUAGE_NOT_SUPPORTED     = 1;
61 
62     /**
63      * An error occured while parsing a URL, attribute list, or a
64      * service location template document. This error is also returned
65      * from DA's when an otherwise unclassifiable internal error occurs.
66      */
67 
68     public static final short PARSE_ERROR            = 2;
69 
70     /**
71      * Upon registration, this error is returned if the URL is invalid or
72      * if some other problem occurs with the registration. Upon deregistration
73      * it is also returned if the URL is not registered.
74      */
75 
76 
77     public static final short INVALID_REGISTRATION   = 3;
78 
79     /**
80      * An attempt was made to register in a scope not supported by the DA.
81      * This error is also returned if an attempt is made to perform a
82      * registration or deregistration on a machine where a DA is running,
83      * since DA machines don't support SA functionality.
84      */
85 
86     public static final short SCOPE_NOT_SUPPORTED    = 4;
87 
88     /**
89      * The DA or SA receives a request for an unsupported SLP SPI.
90      */
91     public static final short AUTHENTICATION_UNKNOWN = 5;
92 
93     /**
94      * A message for which an signature block was required is missing
95      * the block.
96      */
97 
98     public static final short AUTHENTICATION_ABSENT  = 6;
99 
100     /**
101      * A signature block failed to authenticate.
102      */
103 
104     public static final short AUTHENTICATION_FAILED  = 7;
105 
106     /**
107      * The version was not supported. This is surfaced to the client as a
108      * no results.
109      */
110 
111     static final short VERSION_NOT_SUPPORTED  = 9;
112 
113     /**
114      * The DA encountered an internal error.
115      */
116 
117     static final short INTERNAL_ERROR	   = 10;
118 
119     /**
120      * The DA was busy. This is not surfaced to the client.
121      */
122 
123 
124     static final short DA_BUSY		   = 11;
125 
126     /**
127      * An option was received by the DA that wasn't supported. This is
128      * surfaced to the client as no results.
129      */
130 
131     static final short OPTION_NOT_SUPPORTED   = 12;
132 
133 
134     /**
135      * An attempt was made to update a nonexisting registration.
136      */
137 
138     public static final short INVALID_UPDATE	   = 13;
139 
140     /**
141      * The remote agent doesn't support the request. Not surfaced to
142      * the client.
143      */
144 
145     static final short REQUEST_NOT_SUPPORTED = 14;
146 
147     /**
148      * For SA, the DA valid lifetime intervals for
149      * different DAs do not overlap.
150      */
151 
152     public static final short INVALID_LIFETIME = 15;
153 
154     // Internal error codes.
155 
156     /**
157      * Operation isn't implemented.
158      */
159 
160     public static final short NOT_IMPLEMENTED = 16;
161 
162     /**
163      * Initialization of the network failed.
164      */
165 
166     public static final short NETWORK_INIT_FAILED = 17;
167 
168     /**
169      * A TCP connection timed out.
170      */
171 
172     public static final short NETWORK_TIMED_OUT = 18;
173 
174     /**
175      * An error occured during networking.
176      */
177 
178     public static final short NETWORK_ERROR 	= 19;
179 
180     /**
181      * An error occured in the client-side code.
182      */
183 
184     public static final short INTERNAL_SYSTEM_ERROR	= 20;
185 
186     /*
187      * Registration failed to match the service type template.
188      */
189 
190     public static final short TYPE_ERROR			= 21;
191 
192     /**
193      * Packet size overflow.
194      */
195 
196     public static final short BUFFER_OVERFLOW 		= 22;
197 
198     /**
199      * Overflow due to previous responder list being too long.
200      */
201 
202     static final short PREVIOUS_RESPONDER_OVERFLOW = 100;
203 
204     // The error code for this exception.
205 
206     private short errorCode = OK;
207 
208     // The message arguments.
209 
210     private Object[] params = null;
211 
212     // allows additional information to be added to the message
213 
214     private String addendum = "";
215 
ServiceLocationException(short errorCode, String msgTag, Object[] params)216     ServiceLocationException(short errorCode, String msgTag, Object[] params) {
217 	super(msgTag);
218 
219 	this.params = params;
220 	this.errorCode = errorCode;
221     }
222 
223     // Return true if this is a vaild on-the-wire error code.
224 
validWireErrorCode(int code)225     static boolean validWireErrorCode(int code) {
226 	return ((code >= OK) && (code <= REQUEST_NOT_SUPPORTED));
227 
228     }
229 
230     /**
231      * Return the error code.
232      *
233      * @return The integer error code.
234      */
235 
getErrorCode()236     public short getErrorCode() {
237 	return errorCode;
238 
239     }
240 
241     /**
242      * Return the localized message, in the default locale.
243      *
244      * @return The localized message.
245      */
246 
getMessage()247     public String getMessage() {
248 	return getLocalizedMessage(SLPConfig.getSLPConfig().getLocale()) +
249 	    addendum;
250 
251     }
252 
getLocalizedMessage(Locale locale)253     public String getLocalizedMessage(Locale locale) {
254 	SLPConfig conf = SLPConfig.getSLPConfig();
255 	return conf.formatMessage(super.getMessage(), params);
256 
257     }
258 
makeAddendum(String addendum)259     void makeAddendum(String addendum) {
260 	this.addendum = addendum;
261     }
262 
263 }
264