usr/src/lib/libslp/javalib/com/sun/slp/SLPConfig.java
author Mark J. Nelson <Mark.J.Nelson@Sun.COM>
Wed, 06 Aug 2008 16:29:39 -0600
changeset 7298 b69e27387f74
parent 0 68f95e015346
permissions -rw-r--r--
6733918 Teamware has retired, please welcome your new manager, Mercurial 4758439 some files use "current date" sccs keywords 6560843 asm sources should not rely on .file "%M%" for naming STT_FILE symbols 6560958 Solaris:: perl modules should not use SCCS keywords in version information 6729074 webrev doesn't deal well with remote ssh hg parents
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     1
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     2
 * CDDL HEADER START
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     3
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
7298
b69e27387f74 6733918 Teamware has retired, please welcome your new manager, Mercurial
Mark J. Nelson <Mark.J.Nelson@Sun.COM>
parents: 0
diff changeset
     5
 * Common Development and Distribution License (the "License").
b69e27387f74 6733918 Teamware has retired, please welcome your new manager, Mercurial
Mark J. Nelson <Mark.J.Nelson@Sun.COM>
parents: 0
diff changeset
     6
 * You may not use this file except in compliance with the License.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     7
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    11
 * and limitations under the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    12
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    18
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    19
 * CDDL HEADER END
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    20
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    21
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    22
 * Copyright 1999-2003 Sun Microsystems, Inc.  All rights reserved.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    23
 * Use is subject to license terms.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    24
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    25
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    26
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    27
//  SLPConfig.java
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    28
//
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    29
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    30
/**
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    31
 * This class is a singleton - it has the configuration which
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    32
 * is the default.  It reads from a configuration file and
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    33
 * this overrides the default.  If the config file does not
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    34
 * expressly forbid it, the ServiceLocationManager interface
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    35
 * allows some of these configuration options to be modified.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    36
 * This configuration is refered to by many points of the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    37
 * implementation. Note that the class itself is abstract,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    38
 * and is extended by two classes, one that allows slpd to
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    39
 * run as an SA server only, the other allows it to run
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    40
 * as a DA as well.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    41
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    42
 * @see com.sun.slp.ServiceLocationManager
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    43
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    44
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    45
package com.sun.slp;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    46
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    47
import java.net.*;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    48
import java.util.*;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    49
import java.text.*;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    50
import java.io.*;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    51
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    52
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    53
 * This class contains all configuration information.  It
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    54
 * is hard coded to know the defaults, and will read a config
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    55
 * file if it is present.  The config file will override the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    56
 * default values and policy.  If the config file allows it
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    57
 * the user may reset some of these values using the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    58
 * ServiceLocationManager interface.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    59
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    60
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    61
class SLPConfig {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    62
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    63
    /**
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    64
     * A Java properties file defines `\' as an escape character, which
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    65
     * conflicts with the SLP API escape convention. Therefore, we need
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    66
     * to subclass properties so we can parse in the file ourselves.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    67
     */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    68
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    69
    public static class SLPProperties extends Properties {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    70
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    71
	SLPProperties(Properties p) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    72
	    super(p);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    73
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    74
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    75
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    76
	// Parse the SLP properties file ourselves. Groan! We don't recognize
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    77
	//  backslash as an escape.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    78
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    79
	public synchronized void load(InputStream in) throws IOException {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    80
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    81
	    BufferedReader rd = new BufferedReader(new InputStreamReader(in));
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    82
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    83
	    while (rd.ready()) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    84
		String ln = rd.readLine();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    85
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    86
		// Throw out anything that begins with '#' or ';'.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    87
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    88
		if (ln.startsWith("#") ||
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    89
		    ln.startsWith(";") ||
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    90
		    ln.length() <= 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    91
		    continue;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    92
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    93
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    94
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    95
		// Parse out equals sign, if any. Note that we trim any
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    96
		//  white space preceding or following data strings.   
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    97
		//  Although the grammar doesn't allow it, users may 
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    98
		//  enter blanks in their configuration files.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    99
		// NOTE:  White space is not allowed in the data of
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   100
		//  property tag or values.  If included, according
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   101
		//  to RFC 2614, Section 2.1 these MUST be escaped, 
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   102
		//  ie. space would be represented with '\20'.  
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   103
		//  Therefore, it is *completely* safe to perform 
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   104
		//  these trim()s.  They will catch errors resulting 
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   105
		//  from sloppy data entry in slp.conf files and 
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   106
		//  never corrupt or alter correctly formatted 
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   107
		//  properties.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   108
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   109
		SLPTokenizer tk = new SLPTokenizer(ln, "=");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   110
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   111
		if (!tk.hasMoreTokens()) {// empty line...
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   112
		    continue;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   113
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   114
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   115
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   116
		String prop = tk.nextToken().trim();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   117
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   118
		if (prop.trim().length() <= 0) {// line has just spaces...
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   119
		    continue;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   120
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   121
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   122
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   123
		if (!tk.hasMoreTokens()) {// line has no definition...
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   124
		    continue;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   125
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   126
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   127
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   128
		// Register the property.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   129
		String def = tk.nextToken().trim();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   130
		this.setProperty(prop, def);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   131
	    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   132
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   133
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   134
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   135
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   136
    protected SLPConfig() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   137
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   138
	// Create a temporary, default log to report any errors during
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   139
	//  configuration.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   140
	log = new StderrLog();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   141
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   142
	// Initialize properties. Properties on command line override config
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   143
	//  file properties, and both override defaults.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   144
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   145
	Properties sysProps = (Properties)(System.getProperties().clone());
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   146
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   147
	// Load Defalts.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   148
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   149
	try {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   150
	    Class.forName("com.sun.slp.Defaults");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   151
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   152
	} catch (ClassNotFoundException ex) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   153
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   154
	    Assert.printMessageAndDie(this,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   155
				      "no_class",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   156
				      new Object[] {"com.sun.slp.Defaults"});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   157
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   158
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   159
	// System properties now contain Defaults
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   160
	Properties defaultProps = System.getProperties();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   161
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   162
	// Load config file.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   163
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   164
	SLPProperties slpProps = new SLPProperties(new Properties());
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   165
	try {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   166
	    InputStream fis = getConfigURLStream();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   167
	    if (fis != null) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   168
		slpProps.load(fis);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   169
		System.setProperties(slpProps);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   170
	    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   171
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   172
	} catch (IOException ex) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   173
	    writeLog("unparsable_config_file",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   174
		     new Object[] {ex.getMessage()});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   175
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   176
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   177
	// Add config properties to Defaults, overwritting any pre-existing
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   178
	//  entries
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   179
	defaultProps.putAll(slpProps);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   180
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   181
	// Now add in system props, overwritting any pre-existing entries
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   182
	defaultProps.putAll(sysProps);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   183
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   184
	System.setProperties(defaultProps);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   185
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   186
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   187
	// Initialize useScopes property. This is read-only after the file
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   188
	//  has been loaded.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   189
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   190
	configuredScopes = initializeScopes("net.slp.useScopes");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   191
	saConfiguredScopes = (Vector)configuredScopes.clone();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   192
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   193
	// Add default scope to scopes for SA.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   194
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   195
	if (saConfiguredScopes.size() <= 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   196
	    saConfiguredScopes.addElement(Defaults.DEFAULT_SCOPE);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   197
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   198
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   199
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   200
	// Initialize SA scopes. This uses a Sun specific property for
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   201
	//  scopes only used by the SA and adds in the DA scopes.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   202
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   203
	saOnlyScopes = initializeScopes(DATable.SA_ONLY_SCOPES_PROP);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   204
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   205
	// Initialized preconfigured DAs.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   206
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   207
	preconfiguredDAs = initializePreconfiguredDAs();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   208
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   209
	// Initialize broadcast flag.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   210
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   211
	broadcastOnly = Boolean.getBoolean("net.slp.isBroadcastOnly");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   212
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   213
	// Initialize logging. Default is stderr, first check for alternate.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   214
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   215
	String failed = null;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   216
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   217
	try {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   218
	    String loggerClassName =
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   219
		System.getProperty("sun.net.slp.loggerClass");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   220
	    if (loggerClassName != null) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   221
		Class loggerClass = Class.forName(loggerClassName);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   222
		// Protect against disastrous pilot error, such as trying
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   223
		// to use com.sun.slp.SLPConfig as the log class
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   224
		// (causes stack recursion)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   225
		if (Class.forName("java.io.Writer").isAssignableFrom(
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   226
							loggerClass)) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   227
		    Object logger = loggerClass.newInstance();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   228
		    log = (Writer) logger;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   229
		} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   230
		    failed = formatMessage(
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   231
					   "bad_log_class",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   232
					   new Object[] {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   233
			loggerClass.toString()}) + "\n";
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   234
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   235
	    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   236
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   237
	} catch (Throwable ex) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   238
	    log = null;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   239
	    failed = formatMessage(
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   240
				   "bad_log",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   241
				   new Object[] {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   242
		ex.toString()}) + "\n";
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   243
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   244
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   245
	// If no alternate log, revert to minimal default
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   246
	if (log == null) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   247
	    log = new StderrLog();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   248
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   249
	    // If the alternate log failed, log it through the default log
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   250
	    if (failed != null) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   251
		try {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   252
		    synchronized (log) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   253
			log.write(failed);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   254
			log.flush();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   255
		    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   256
		} catch (IOException giveUp) {}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   257
	    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   258
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   259
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   260
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   261
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   262
    private InputStream getConfigURLStream() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   263
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   264
	// Open a URL onto the configuration file.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   265
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   266
	String conf = System.getProperty("sun.net.slp.configURL");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   267
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   268
	if (conf == null) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   269
	    conf = Defaults.SOLARIS_CONF;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   270
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   271
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   272
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   273
	InputStream str = null;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   274
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   275
	try {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   276
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   277
	    URL confURL = new URL(conf);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   278
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   279
	    str = confURL.openStream();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   280
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   281
	} catch (MalformedURLException ex) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   282
	    writeLog("url_malformed",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   283
		     new Object[] {conf});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   284
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   285
	} catch (IOException ex) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   286
	    if (conf != Defaults.SOLARIS_CONF) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   287
		// don't complain if we can't find our own default
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   288
		writeLog("unparsable_config_file",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   289
			 new Object[] {ex.getMessage()});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   290
	    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   291
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   292
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   293
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   294
	return str;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   295
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   296
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   297
    // ------------------------------------------------------------
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   298
    // Property manipulation functions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   299
    //
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   300
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   301
    private boolean OKBound(int i, int lb, int ub) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   302
	if (i < lb || i > ub)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   303
	    return false;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   304
	else
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   305
	    return true;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   306
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   307
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   308
    int getIntProperty(String prop, int df, int lb, int ub) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   309
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   310
	int i = Integer.getInteger(prop, df).intValue();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   311
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   312
	if (OKBound(i, lb, ub)) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   313
	    return i;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   314
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   315
	} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   316
	    writeLog("bad_prop_tag", new Object[] {prop});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   317
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   318
	    return df;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   319
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   320
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   321
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   322
    // ------------------------------------------------------------
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   323
    // Multicast radius
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   324
    //
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   325
    private int iMinMCRadius = 1;   // link local scope
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   326
    private int iMaxMCRadius = 255; // universal scope
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   327
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   328
    int getMCRadius() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   329
	return getIntProperty("net.slp.multicastTTL",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   330
			      Defaults.iMulticastRadius,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   331
			      iMinMCRadius,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   332
			      iMaxMCRadius);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   333
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   334
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   335
    // ------------------------------------------------------------
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   336
    // Heartbeat interval, seconds.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   337
    //
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   338
    private final int iMinHeart = 2000;    // 10 minutes
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   339
    private final int iMaxHeart = 259200000; // 3 days
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   340
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   341
    int getAdvertHeartbeatTime() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   342
	return getIntProperty("net.slp.DAHeartBeat",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   343
			      Defaults.iHeartbeat,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   344
			      iMinHeart,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   345
			      iMaxHeart);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   346
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   347
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   348
    // ------------------------------------------------------------
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   349
    // Active discovery interval, seconds.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   350
    //
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   351
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   352
    private final int iMinDisc = 300;    // 5 minutes
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   353
    private final int iMaxDisc = 10800;  // 3 hours
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   354
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   355
    int getActiveDiscoveryInterval() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   356
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   357
	// We allow zero in order to turn active discovery off, but
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   358
	//  if 5 minutes is the smallest actual time.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   359
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   360
	int prop = getIntProperty("net.slp.DAActiveDiscoveryInterval",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   361
				  Defaults.iActiveDiscoveryInterval,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   362
				  0,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   363
				  iMaxDisc);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   364
	if (prop > 0 && prop < iMinDisc) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   365
	    writeLog("bad_prop_tag",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   366
		     new Object[] {"net.slp.DAActiveDiscoveryInterval"});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   367
	    return iMinDisc;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   368
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   369
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   370
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   371
	return prop;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   372
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   373
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   374
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   375
    // ------------------------------------------------------------
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   376
    // Active discovery granularity, seconds.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   377
    //
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   378
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   379
    private int iMaxDiscGran = iMaxDisc * 2;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   380
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   381
    int getActiveDiscoveryGranularity() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   382
	return getIntProperty("sun.net.slp.DAActiveDiscoveryGranularity",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   383
			      Defaults.iActiveDiscoveryGranularity,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   384
			      0,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   385
			      iMaxDiscGran);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   386
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   387
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   388
    // ------------------------------------------------------------
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   389
    // Bound for random wait, milliseconds.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   390
    //
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   391
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   392
    private final int iMinWait = 1000;  // 1 sec.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   393
    private final int iMaxWait = 3000;  // 3 sec.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   394
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   395
    int getRandomWaitBound() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   396
	return getIntProperty("net.slp.randomWaitBound",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   397
			      Defaults.iRandomWaitBound,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   398
			      iMinWait,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   399
			      iMaxWait);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   400
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   401
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   402
    private static Random randomWait = null;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   403
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   404
    long getRandomWait() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   405
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   406
	if (randomWait == null) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   407
	    randomWait = new Random();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   408
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   409
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   410
	double r = randomWait.nextDouble();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   411
	double max = (double)getRandomWaitBound();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   412
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   413
	return (long)(max * r);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   414
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   415
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   416
    // ------------------------------------------------------------
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   417
    // TCP timeout, milliseconds.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   418
    //
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   419
    final static private int iMinTimeout = 100;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   420
    final static private int iMaxTimeout = 360000;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   421
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   422
    int getTCPTimeout() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   423
	return getIntProperty("sun.net.slp.TCPTimeout",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   424
			      Defaults.iTCPTimeout,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   425
			      iMinTimeout,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   426
			      iMaxTimeout);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   427
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   428
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   429
    // ------------------------------------------------------------
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   430
    //  Path MTU
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   431
    //
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   432
    private final int iMinMTU = 128; // used for some ppp connections
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   433
    private final int iMaxMTU = 8192; // used on some LANs
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   434
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   435
    int getMTU() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   436
	return getIntProperty("net.slp.MTU",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   437
			      Defaults.iMTU,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   438
			      iMinMTU,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   439
			      iMaxMTU);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   440
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   441
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   442
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   443
    // ------------------------------------------------------------
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   444
    // Serialized registrations.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   445
    //
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   446
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   447
    String getSerializedRegURL() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   448
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   449
	return System.getProperty("net.slp.serializedRegURL", null);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   450
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   451
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   452
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   453
    // ------------------------------------------------------------
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   454
    // Are we running as a DA or SA server?
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   455
    //
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   456
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   457
    protected static boolean isSA = false;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   458
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   459
    boolean isDA() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   460
	return false;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   461
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   462
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   463
    boolean isSA() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   464
	return isSA;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   465
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   466
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   467
    // ------------------------------------------------------------
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   468
    // DA and SA attributes
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   469
    //
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   470
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   471
    Vector getDAAttributes() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   472
	return getAttributes("net.slp.DAAttributes",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   473
			     Defaults.defaultDAAttributes,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   474
			     true);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   475
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   476
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   477
    Vector getSAAttributes() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   478
	return getAttributes("net.slp.SAAttributes",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   479
			     Defaults.defaultSAAttributes,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   480
			     false);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   481
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   482
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   483
    private Vector getAttributes(String prop,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   484
				 Vector defaults,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   485
				 boolean daAttrs) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   486
	String attrList =
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   487
	    System.getProperty(prop);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   488
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   489
	if (attrList == null || attrList.length() <= 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   490
	    return (Vector)defaults.clone();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   491
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   492
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   493
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   494
	try {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   495
	    Vector sAttrs =
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   496
		SrvLocHeader.parseCommaSeparatedListIn(attrList, false);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   497
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   498
	    Vector attrs = new Vector();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   499
	    int i, n = sAttrs.size();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   500
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   501
	    // Create attribute objects.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   502
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   503
	    for (i = 0; i < n; i++) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   504
		String attrExp = (String)sAttrs.elementAt(i);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   505
		ServiceLocationAttribute attr =
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   506
		    new ServiceLocationAttribute(attrExp, false);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   507
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   508
		// If this is the min-refresh-interval, then check the value.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   509
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   510
		if (daAttrs &&
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   511
		    attr.getId().equals(
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   512
				Defaults.MIN_REFRESH_INTERVAL_ATTR_ID)) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   513
		    Vector values = attr.getValues();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   514
		    boolean errorp = true;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   515
	
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   516
		    if (values != null && values.size() == 1) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   517
			Object val = values.elementAt(0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   518
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   519
			if (val instanceof Integer) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   520
			    int ival = ((Integer)val).intValue();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   521
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   522
			    if (ival >= 0 &&
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   523
				ival <= ServiceURL.LIFETIME_MAXIMUM) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   524
				errorp = false;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   525
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   526
			    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   527
			}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   528
		    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   529
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   530
		    // Throw exception if it didn't work.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   531
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   532
		    if (errorp) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   533
			throw new ServiceLocationException(
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   534
				ServiceLocationException.PARSE_ERROR,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   535
				"syntax_error_prop",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   536
				new Object[] {prop, attrs});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   537
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   538
		    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   539
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   540
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   541
		// Add attribute to vector.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   542
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   543
		attrs.addElement(attr);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   544
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   545
	    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   546
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   547
	    return attrs;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   548
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   549
	} catch (Exception ex) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   550
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   551
	    writeLog("syntax_error_prop",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   552
		     new Object[] {prop, attrList});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   553
	    return (Vector)defaults.clone();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   554
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   555
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   556
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   557
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   558
    // -------------------------------------------------------------
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   559
    // Do we support V1?
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   560
    //
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   561
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   562
    boolean isV1Supported() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   563
	return false;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   564
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   565
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   566
    // -------------------------------------------------------------
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   567
    // Queue length for server socket.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   568
    //
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   569
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   570
    int getServerSocketQueueLength() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   571
	return getIntProperty("sun.net.slp.serverSocketQueueLength",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   572
			      Defaults.iSocketQueueLength,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   573
			      0,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   574
			      Integer.MAX_VALUE);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   575
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   576
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   577
    // ------------------------------------------------------------
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   578
    // Testing options
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   579
    //
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   580
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   581
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   582
    boolean traceAll() {// not official!
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   583
	return Boolean.getBoolean("sun.net.slp.traceALL");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   584
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   585
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   586
    boolean regTest() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   587
	if (Boolean.getBoolean("sun.net.slp.traceALL") ||
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   588
	    Boolean.getBoolean("net.slp.traceReg"))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   589
	    return true;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   590
	else
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   591
	    return false;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   592
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   593
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   594
    boolean traceMsg() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   595
	if (Boolean.getBoolean("sun.net.slp.traceALL") ||
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   596
	    Boolean.getBoolean("net.slp.traceMsg"))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   597
	    return true;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   598
	else
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   599
	    return false;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   600
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   601
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   602
    boolean traceDrop() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   603
	if (Boolean.getBoolean("sun.net.slp.traceALL") ||
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   604
	    Boolean.getBoolean("net.slp.traceDrop"))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   605
	    return true;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   606
	else
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   607
	    return false;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   608
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   609
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   610
    boolean traceDATraffic() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   611
	if (Boolean.getBoolean("sun.net.slp.traceALL") ||
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   612
	    Boolean.getBoolean("net.slp.traceDATraffic"))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   613
	    return true;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   614
	else
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   615
	    return false;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   616
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   617
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   618
    // cannot use Boolean.getBoolean as the default is 'true'
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   619
    // using that mechanism, absense would be considered 'false'
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   620
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   621
    boolean passiveDADetection() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   622
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   623
	String sPassive =
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   624
	    System.getProperty("net.slp.passiveDADetection", "true");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   625
	if (sPassive.equalsIgnoreCase("true"))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   626
	    return true;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   627
	else
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   628
	    return false;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   629
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   630
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   631
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   632
    // Initialized when the SLPConfig object is created to avoid changing
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   633
    //  during the program.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   634
    private boolean broadcastOnly = false;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   635
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   636
    boolean isBroadcastOnly() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   637
	return broadcastOnly;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   638
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   639
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   640
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   641
    // ------------------------------------------------------------
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   642
    // Multicast/broadcast socket mangement.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   643
    //
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   644
    DatagramSocket broadSocket = null;   // cached broadcast socket.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   645
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   646
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   647
    // Reopen the multicast/broadcast socket bound to the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   648
    //  interface. If groups is not null, then join all
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   649
    //  the groups. Otherwise, this is send only.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   650
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   651
    DatagramSocket
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   652
	refreshMulticastSocketOnInterface(InetAddress interfac,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   653
					  Vector groups) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   654
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   655
	try {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   656
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   657
	    // Reopen it.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   658
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   659
	    DatagramSocket dss =
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   660
		getMulticastSocketOnInterface(interfac,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   661
					      (groups == null ? true:false));
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   662
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   663
	    if ((groups != null) && (dss instanceof MulticastSocket)) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   664
		int i, n = groups.size();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   665
		MulticastSocket mss = (MulticastSocket)dss;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   666
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   667
		for (i = 0; i < n; i++) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   668
		    InetAddress maddr = (InetAddress)groups.elementAt(i);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   669
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   670
		    mss.joinGroup(maddr);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   671
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   672
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   673
	    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   674
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   675
	    return dss;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   676
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   677
	} catch (Exception ex) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   678
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   679
	    // Any exception in error recovery causes program to die.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   680
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   681
	    Assert.slpassert(false,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   682
			  "cast_socket_failure",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   683
			  new Object[] {ex, ex.getMessage()});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   684
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   685
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   686
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   687
	return null;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   688
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   689
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   690
    // Open a multicast/broadcast socket on the interface. Note that if
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   691
    //  the socket is broadcast, the network interface is not specified in the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   692
    //  creation message. Is it bound to all interfaces? The isSend parameter
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   693
    //  specifies whether the socket is for send only.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   694
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   695
    DatagramSocket
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   696
	getMulticastSocketOnInterface(InetAddress interfac, boolean isSend)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   697
	throws ServiceLocationException {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   698
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   699
	DatagramSocket castSocket = null;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   700
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   701
	// Substitute broadcast if we are configured for it.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   702
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   703
	if (isBroadcastOnly()) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   704
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   705
	    try {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   706
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   707
		// If transmit, then simply return a new socket.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   708
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   709
		if (isSend) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   710
		    castSocket = new DatagramSocket();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   711
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   712
		} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   713
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   714
		    // Return cached socket if there.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   715
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   716
		    if (broadSocket != null) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   717
			castSocket = broadSocket;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   718
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   719
		    } else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   720
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   721
			// Make a new broadcast socket.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   722
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   723
			castSocket =
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   724
			    new DatagramSocket(Defaults.iSLPPort,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   725
					       getBroadcastAddress());
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   726
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   727
		    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   728
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   729
		    // Cache for future reference.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   730
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   731
		    broadSocket = castSocket;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   732
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   733
	    } catch (SocketException ex) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   734
		throw 	
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   735
		    new ServiceLocationException(
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   736
				ServiceLocationException.NETWORK_INIT_FAILED,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   737
				"socket_creation_failure",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   738
				new Object[] {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   739
			getBroadcastAddress(), ex.getMessage()});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   740
	    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   741
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   742
	} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   743
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   744
	    // Create a multicast socket.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   745
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   746
	    MulticastSocket ms;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   747
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   748
	    try {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   749
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   750
		if (isSend) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   751
		    ms = new MulticastSocket();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   752
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   753
		} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   754
		    ms = new MulticastSocket(Defaults.iSLPPort);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   755
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   756
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   757
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   758
	    } catch (IOException ex) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   759
		throw
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   760
		    new ServiceLocationException(
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   761
				ServiceLocationException.NETWORK_INIT_FAILED,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   762
				"socket_creation_failure",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   763
				new Object[] {interfac, ex.getMessage()});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   764
	    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   765
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   766
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   767
	    try {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   768
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   769
		// Set the TTL and the interface on the multicast socket.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   770
		//  Client is responsible for joining group.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   771
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   772
		ms.setTimeToLive(getMCRadius());
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   773
		ms.setInterface(interfac);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   774
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   775
	    } catch (IOException ex) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   776
		throw
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   777
		    new ServiceLocationException(
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   778
				ServiceLocationException.NETWORK_INIT_FAILED,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   779
				"socket_initializtion_failure",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   780
				new Object[] {interfac, ex.getMessage()});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   781
	    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   782
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   783
	    castSocket = ms;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   784
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   785
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   786
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   787
	return castSocket;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   788
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   789
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   790
    // ------------------------------------------------------------
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   791
    // Type hint
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   792
    //
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   793
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   794
    // Return a vector of ServiceType objects for the type hint.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   795
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   796
    Vector getTypeHint() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   797
	Vector hint = new Vector();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   798
	String sTypeList = System.getProperty("net.slp.typeHint", "");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   799
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   800
	if (sTypeList.length() <= 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   801
	    return hint;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   802
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   803
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   804
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   805
	// Create a vector of ServiceType objects for the type hint.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   806
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   807
	try {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   808
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   809
	    hint = SrvLocHeader.parseCommaSeparatedListIn(sTypeList, true);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   810
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   811
	    int i, n = hint.size();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   812
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   813
	    for (i = 0; i < n; i++) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   814
		String type = (String)hint.elementAt(i);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   815
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   816
		hint.setElementAt(new ServiceType(type), i);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   817
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   818
	    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   819
	} catch (ServiceLocationException ex) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   820
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   821
	    writeLog("syntax_error_prop",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   822
		     new Object[] {"net.slp.typeHint", sTypeList});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   823
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   824
	    hint.removeAllElements();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   825
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   826
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   827
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   828
	return hint;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   829
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   830
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   831
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   832
    // ------------------------------------------------------------
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   833
    // Configured scope handling
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   834
    //
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   835
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   836
    // Vector of configured scopes.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   837
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   838
    private Vector configuredScopes = null;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   839
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   840
    // Vector of configures scopes for SA.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   841
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   842
    private Vector saConfiguredScopes = null;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   843
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   844
    // Vector of scopes only in the sa server.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   845
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   846
    private Vector saOnlyScopes = null;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   847
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   848
    // Return the configured scopes.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   849
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   850
    Vector getConfiguredScopes() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   851
	return (Vector)configuredScopes.clone();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   852
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   853
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   854
    // Return SA scopes.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   855
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   856
    Vector getSAOnlyScopes() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   857
	return (Vector)saOnlyScopes.clone();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   858
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   859
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   860
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   861
    // Return the configured scopes for the SA.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   862
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   863
    Vector getSAConfiguredScopes() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   864
	return (Vector)saConfiguredScopes.clone();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   865
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   866
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   867
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   868
    // Add scopes discovered during preconfigured DA contact.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   869
    //  These count as configured scopes.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   870
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   871
    void addPreconfiguredDAScopes(Vector scopes) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   872
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   873
	int i, n = scopes.size();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   874
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   875
	for (i = 0; i < n; i++) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   876
	    Object scope = scopes.elementAt(i);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   877
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   878
	    if (!configuredScopes.contains(scope)) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   879
		configuredScopes.addElement(scope);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   880
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   881
	    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   882
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   883
	    // There better be none extra here for the SA server/DA.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   884
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   885
	    if (isSA() || isDA()) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   886
		Assert.slpassert(saConfiguredScopes.contains(scope),
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   887
			      "sa_new_scope",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   888
			      new Object[] {scope, saConfiguredScopes});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   889
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   890
	    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   891
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   892
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   893
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   894
    // Initialize the scopes list on property.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   895
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   896
    private Vector initializeScopes(String prop) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   897
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   898
	String sScopes = System.getProperty(prop);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   899
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   900
	if (sScopes == null || sScopes.length() <= 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   901
	    return new Vector();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   902
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   903
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   904
	try {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   905
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   906
	    Vector vv =
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   907
		SrvLocHeader.parseCommaSeparatedListIn(sScopes, true);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   908
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   909
	    // Unescape scope strings.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   910
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   911
	    SLPHeaderV2.unescapeScopeStrings(vv);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   912
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   913
	    // Validate, lower case scope names.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   914
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   915
	    DATable.validateScopes(vv, getLocale());
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   916
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   917
	    if (vv.size() > 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   918
		return vv;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   919
	    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   920
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   921
	} catch (ServiceLocationException ex) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   922
	    writeLog("syntax_error_prop",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   923
		     new Object[] {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   924
		prop,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   925
		    sScopes});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   926
	
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   927
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   928
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   929
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   930
	return new Vector();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   931
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   932
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   933
    // Vector of preconfigured DAs. Read only after initialized.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   934
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   935
    private Vector preconfiguredDAs = null;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   936
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   937
    // Return a vector of DA addresses.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   938
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   939
    Vector getPreconfiguredDAs() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   940
	return (Vector)preconfiguredDAs.clone();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   941
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   942
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   943
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   944
    // Initialize preconfigured DA list.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   945
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   946
    private Vector initializePreconfiguredDAs() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   947
	String sDAList = System.getProperty("net.slp.DAAddresses", "");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   948
	Vector ret = new Vector();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   949
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   950
	sDAList.trim();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   951
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   952
	if (sDAList.length() <= 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   953
	    return ret;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   954
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   955
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   956
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   957
	try {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   958
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   959
	    ret = SrvLocHeader.parseCommaSeparatedListIn(sDAList, true);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   960
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   961
	} catch (ServiceLocationException ex) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   962
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   963
	    writeLog("syntax_error_prop",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   964
		     new Object[] {"net.slp.DAAddress", sDAList});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   965
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   966
	    return ret;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   967
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   968
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   969
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   970
	// Convert to InetAddress objects.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   971
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   972
	int i;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   973
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   974
	for (i = 0; i < ret.size(); i++) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   975
	    String da = "";
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   976
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   977
	    try {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   978
		da = ((String)ret.elementAt(i)).trim();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   979
		InetAddress daAddr = InetAddress.getByName(da);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   980
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   981
		ret.setElementAt(daAddr, i);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   982
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   983
	    } catch (UnknownHostException ex) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   984
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   985
		writeLog("resolve_failed",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   986
			 new Object[] {da});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   987
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   988
		/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   989
		 *  Must decrement the index 'i' otherwise the next iteration
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   990
		 *  around the loop will miss the element immediately after
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   991
		 *  the element removed.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   992
		 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   993
		 *  WARNING: Do not use 'i' again until the loop has
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   994
		 *           iterated as it may, after decrementing,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   995
		 *           be negative.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   996
		 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   997
		ret.removeElementAt(i);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   998
		i--;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   999
		continue;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1000
	    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1001
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1002
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1003
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1004
	return ret;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1005
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1006
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1007
    // ------------------------------------------------------------
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1008
    // SLPv1 Support Switches
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1009
    //
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1010
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1011
    boolean getSLPv1NotSupported() {// not official!
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1012
	return Boolean.getBoolean("sun.net.slp.SLPv1NotSupported");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1013
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1014
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1015
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1016
    boolean getAcceptSLPv1UnscopedRegs() {// not official!
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1017
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1018
	if (!getSLPv1NotSupported()) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1019
	    return Boolean.getBoolean("sun.net.slp.acceptSLPv1UnscopedRegs");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1020
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1021
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1022
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1023
	return false;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1024
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1025
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1026
    // ------------------------------------------------------------
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1027
    // Accessor for SLPConfig object
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1028
    //
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1029
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1030
    protected static SLPConfig theSLPConfig = null;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1031
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1032
    static SLPConfig getSLPConfig() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1033
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1034
	if (theSLPConfig == null) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1035
	    theSLPConfig = new SLPConfig();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1036
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1037
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1038
	return theSLPConfig;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1039
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1040
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1041
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1042
    /**
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1043
     * @return Maximum number of messages/objects to return.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1044
     */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1045
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1046
    int getMaximumResults()  {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1047
	int i = Integer.getInteger("net.slp.maxResults",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1048
				   Defaults.iMaximumResults).intValue();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1049
	if (i == -1) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1050
	    i = Integer.MAX_VALUE;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1051
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1052
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1053
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1054
	if (OKBound(i, 1, Integer.MAX_VALUE)) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1055
	    return i;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1056
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1057
	} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1058
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1059
	    writeLog("bad_prop_tag",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1060
		     new Object[] {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1061
		"net.slp.maxResults"});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1062
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1063
	    return Defaults.iMaximumResults;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1064
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1065
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1066
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1067
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1068
    /**
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1069
     * Convert a language tag into a locale.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1070
     */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1071
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1072
    static Locale langTagToLocale(String ltag) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1073
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1074
	// We treat the first part as the ISO 639 language and the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1075
	// second part as the ISO 3166 country tag, even though RFC
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1076
	// 1766 doesn't necessarily require that. We should probably
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1077
	// use a lookup table here to determine if they are correct.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1078
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1079
	StringTokenizer tk = new StringTokenizer(ltag, "-");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1080
	String lang = "";
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1081
	String country = "";
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1082
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1083
	if (tk.hasMoreTokens()) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1084
	    lang = tk.nextToken();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1085
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1086
	    if (tk.hasMoreTokens()) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1087
		country = tk.nextToken("");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1088
					// country name may have "-" in it...
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1089
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1090
	    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1091
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1092
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1093
	return new Locale(lang, country);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1094
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1095
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1096
    /**
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1097
     * Convert a Locale object into a language tag for output.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1098
     *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1099
     * @param locale The Locale.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1100
     * @return String with the language tag encoded.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1101
     */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1102
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1103
    static String localeToLangTag(Locale locale) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1104
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1105
	// Construct the language tag.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1106
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1107
	String ltag = locale.getCountry();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1108
	ltag = locale.getLanguage() + (ltag.length() <= 0 ? "" : ("-" + ltag));
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1109
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1110
	return ltag;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1111
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1112
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1113
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1114
    /**
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1115
     * @return the language requests will be made in.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1116
     */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1117
    static Locale  getLocale()    {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1118
	String s = System.getProperty("net.slp.locale");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1119
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1120
	if (s != null && s.length() > 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1121
	    return langTagToLocale(s);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1122
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1123
	} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1124
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1125
	    // Return the Java default if the SLP property is not set.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1126
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1127
	    return Locale.getDefault();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1128
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1129
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1130
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1131
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1132
    /**
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1133
     * @return the InetAddress of the broadcast interface.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1134
     */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1135
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1136
    static private InetAddress broadcastAddress;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1137
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1138
    static InetAddress getBroadcastAddress() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1139
	if (broadcastAddress == null) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1140
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1141
	    try {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1142
		broadcastAddress =
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1143
		    InetAddress.getByName(Defaults.sBroadcast);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1144
	    } catch (UnknownHostException uhe) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1145
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1146
		Assert.slpassert(false,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1147
			      "cast_address_failure",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1148
			      new Object[] {Defaults.sBroadcast});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1149
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1150
	    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1151
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1152
	return broadcastAddress;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1153
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1154
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1155
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1156
    /**
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1157
     * @return the InetAddress of the multicast group.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1158
     */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1159
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1160
    static private InetAddress multicastAddress;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1161
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1162
    static InetAddress getMulticastAddress() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1163
	if (multicastAddress == null) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1164
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1165
	    try {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1166
		multicastAddress =
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1167
		    InetAddress.getByName(Defaults.sGeneralSLPMCAddress);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1168
	    } catch (UnknownHostException uhe) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1169
		Assert.slpassert(false,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1170
			      "cast_address_failure",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1171
			      new Object[] {Defaults.sGeneralSLPMCAddress});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1172
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1173
	    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1174
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1175
	return multicastAddress;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1176
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1177
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1178
    /**
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1179
     * @return the interfaces on which SLP should listen and transmit.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1180
     */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1181
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1182
    private static Vector interfaces = null;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1183
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1184
    Vector getInterfaces() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1185
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1186
	if (interfaces == null) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1187
	    InetAddress iaLocal = null;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1188
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1189
	    // Get local host.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1190
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1191
	    try {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1192
		iaLocal =  InetAddress.getLocalHost();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1193
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1194
	    }  catch (UnknownHostException ex) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1195
		Assert.slpassert(false,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1196
			      "resolve_failed",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1197
			      new Object[] {"localhost"});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1198
	    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1199
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1200
	    String mcastI = System.getProperty("net.slp.interfaces");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1201
	    interfaces = new Vector();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1202
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1203
	    // Only add local host if nothing else is given.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1204
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1205
	    if (mcastI == null || mcastI.length() <= 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1206
		interfaces.addElement(iaLocal);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1207
		return interfaces;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1208
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1209
	    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1210
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1211
	    Vector nintr;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1212
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1213
	    try {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1214
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1215
		nintr = SrvLocHeader.parseCommaSeparatedListIn(mcastI, true);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1216
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1217
	    } catch (ServiceLocationException ex) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1218
		writeLog("syntax_error_prop",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1219
			 new Object[] {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1220
		    "net.slp.multicastInterfaces",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1221
			mcastI});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1222
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1223
		// Add local host.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1224
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1225
		interfaces.addElement(iaLocal);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1226
	
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1227
		return interfaces;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1228
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1229
	    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1230
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1231
	    // See if they are really there.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1232
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1233
	    int i, n = nintr.size();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1234
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1235
	    for (i = 0; i < n; i++) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1236
		InetAddress ia;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1237
		String host = (String)nintr.elementAt(i);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1238
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1239
		try {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1240
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1241
		    ia = InetAddress.getByName(host);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1242
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1243
		} catch (UnknownHostException ex) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1244
		    writeLog("unknown_interface",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1245
			     new Object[] {host,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1246
					       "net.slp.multicastInterfaces"});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1247
		    continue;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1248
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1249
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1250
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1251
		if (!interfaces.contains(ia)) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1252
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1253
		    // Add default at beginning.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1254
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1255
		    if (ia.equals(iaLocal)) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1256
			interfaces.insertElementAt(ia, 0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1257
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1258
		    } else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1259
			interfaces.addElement(ia);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1260
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1261
		    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1262
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1263
	    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1264
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1265
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1266
	return interfaces;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1267
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1268
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1269
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1270
    /**
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1271
     * @return An InetAddress object representing 127.0.0.1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1272
     */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1273
    InetAddress getLoopback() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1274
	InetAddress iaLoopback = null;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1275
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1276
	try {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1277
	    iaLoopback = InetAddress.getByName(Defaults.LOOPBACK_ADDRESS);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1278
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1279
	}  catch (UnknownHostException ex) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1280
	    Assert.slpassert(false,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1281
			  "resolve_failed",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1282
			  new Object[] {"localhost loopback"});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1283
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1284
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1285
	return iaLoopback;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1286
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1287
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1288
    /**
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1289
     * @return The default interface, which should be the first in the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1290
     *         interfaces vector Vector.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1291
     */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1292
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1293
    InetAddress getLocalHost() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1294
	Vector inter = getInterfaces();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1295
	return (InetAddress)inter.elementAt(0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1296
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1297
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1298
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1299
    // Return true if the address is one of the local interfaces.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1300
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1301
    boolean isLocalHostSource(InetAddress addr) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1302
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1303
	// First check loopback
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1304
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1305
	if (addr.equals(getLoopback())) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1306
	    return true;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1307
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1308
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1309
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1310
	return interfaces.contains(addr);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1311
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1312
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1313
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1314
    // -----------------
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1315
    // Timeouts
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1316
    //
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1317
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1318
    // Return the maximum wait for multicast convergence.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1319
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1320
    final static private int iMultiMin = 1000;  // one second
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1321
    final static private int iMultiMax = 60000; // one minute
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1322
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1323
    int getMulticastMaximumWait() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1324
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1325
	return getIntProperty("net.slp.multicastMaximumWait",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1326
			      Defaults.iMulticastMaxWait,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1327
			      iMultiMin,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1328
			      iMultiMax);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1329
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1330
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1331
    /*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1332
     * @return Vector of timeouts for multicast convergence.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1333
     */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1334
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1335
    int[] getMulticastTimeouts() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1336
	int[] timeouts = parseTimeouts("net.slp.multicastTimeouts",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1337
			     Defaults.a_iConvergeTimeout);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1338
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1339
	timeouts = capTimeouts("net.slp.multicastTimeouts",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1340
			       timeouts,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1341
			       false,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1342
			       0,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1343
			       0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1344
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1345
	return timeouts;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1346
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1347
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1348
    /**
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1349
     * @return Vector of timeouts to try for datagram transmission.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1350
     */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1351
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1352
    int[] getDatagramTimeouts() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1353
	int[] timeouts = parseTimeouts("net.slp.datagramTimeouts",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1354
			     Defaults.a_iDatagramTimeout);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1355
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1356
	timeouts = capTimeouts("net.slp.datagramTimeouts",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1357
			       timeouts,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1358
			       true,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1359
			       iMultiMin,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1360
			       iMultiMax);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1361
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1362
	return timeouts;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1363
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1364
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1365
    /**
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1366
     * @return Vector of timeouts for DA discovery multicast.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1367
     */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1368
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1369
    int[] getDADiscoveryTimeouts() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1370
	int[] timeouts = parseTimeouts("net.slp.DADiscoveryTimeouts",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1371
			     Defaults.a_iDADiscoveryTimeout);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1372
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1373
	timeouts = capTimeouts("net.slp.DADiscoveryTimeouts",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1374
				timeouts,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1375
				false,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1376
				0,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1377
				0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1378
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1379
	return timeouts;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1380
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1381
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1382
    /**
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1383
     *  This method ensures that all the timeouts are within valid ranges.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1384
     *  The sum of all timeouts for the given property name must not
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1385
     *  exceed the value returned by <i>getMulticastMaximumWait()</i>. If
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1386
     *  the sum of all timeouts does exceed the maximum wait period the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1387
     *  timeouts are averaged out so that the sum equals the maximum wait
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1388
     *  period.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1389
     *	<br>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1390
     *  Additional range checking is also performed when <i>rangeCheck</i>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1391
     *  is true. Then the sum of all timeouts must also be between <i>min</i>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1392
     *  and <i>max</i>. If the sum of all timeouts is not within the range
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1393
     *  the average is taken from the closest range boundary.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1394
     *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1395
     *  @param property
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1396
     *	    Name of timeout property being capped. This is only present for
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1397
     *	    reporting purposes and no actual manipulation of the property
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1398
     *      is made within this method.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1399
     *  @param timeouts
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1400
     *      Array of timeout values.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1401
     *  @param rangeCheck
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1402
     *      Indicator of whether additional range checking is required. When
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1403
     *      false <i>min</i> and <i>max</i> are ignored.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1404
     *  @param min
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1405
     *      Additional range checking lower boundary.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1406
     *  @param max
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1407
     *      Additional range checking upper boundary.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1408
     *  @return
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1409
     *      Array of capped timeouts. Note this may be the same array as
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1410
     *      passed in (<i>timeouts</i>).
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1411
     */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1412
    private int[] capTimeouts(String property,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1413
			      int[] timeouts,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1414
			      boolean rangeCheck,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1415
			      int min,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1416
			      int max) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1417
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1418
	int averagedTimeout;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1419
	int totalWait = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1420
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1421
	for (int index = 0; index < timeouts.length; index++) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1422
	    totalWait += timeouts[index];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1423
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1424
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1425
	if (rangeCheck) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1426
	    // If sum of timeouts within limits then finished.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1427
	    if (totalWait >= min && totalWait <= max) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1428
		return timeouts;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1429
	    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1430
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1431
	    // Average out the timeouts so the sum is equal to the closest
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1432
	    // range boundary.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1433
	    if (totalWait < min) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1434
		averagedTimeout = min / timeouts.length;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1435
	    } else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1436
		averagedTimeout = max / timeouts.length;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1437
	    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1438
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1439
	    writeLog("capped_range_timeout_prop",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1440
		     new Object[] {property,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1441
				   String.valueOf(totalWait),
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1442
				   String.valueOf(min),
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1443
				   String.valueOf(max),
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1444
				   String.valueOf(timeouts.length),
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1445
				   String.valueOf(averagedTimeout)});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1446
	} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1447
	    // Sum of all timeouts must not exceed this value.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1448
	    int maximumWait = getMulticastMaximumWait();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1449
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1450
	    // If sum of timeouts within limits then finished.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1451
	    if (totalWait <= maximumWait) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1452
		return timeouts;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1453
	    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1454
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1455
	    // Average out the timeouts so the sum is equal to the maximum
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1456
	    // timeout.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1457
	    averagedTimeout = maximumWait / timeouts.length;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1458
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1459
	    writeLog("capped_timeout_prop",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1460
		     new Object[] {property,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1461
				   String.valueOf(totalWait),
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1462
				   String.valueOf(maximumWait),
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1463
				   String.valueOf(timeouts.length),
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1464
				   String.valueOf(averagedTimeout)});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1465
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1466
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1467
	for (int index = 0; index < timeouts.length; index++) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1468
	    timeouts[index] = averagedTimeout;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1469
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1470
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1471
	return timeouts;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1472
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1473
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1474
    private int[] parseTimeouts(String property, int[] defaults) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1475
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1476
	String sTimeouts = System.getProperty(property);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1477
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1478
	if (sTimeouts == null || sTimeouts.length() <= 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1479
	    return defaults;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1480
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1481
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1482
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1483
	Vector timeouts = null;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1484
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1485
	try {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1486
	    timeouts = SrvLocHeader.parseCommaSeparatedListIn(sTimeouts, true);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1487
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1488
	} catch (ServiceLocationException ex) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1489
	    writeLog("syntax_error_prop",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1490
		     new Object[] {property, sTimeouts});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1491
	    return defaults;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1492
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1493
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1494
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1495
	int iCount = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1496
	int[] iTOs = new int[timeouts.size()];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1497
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1498
	for (Enumeration en = timeouts.elements(); en.hasMoreElements(); ) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1499
	    String s1 = (String)en.nextElement();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1500
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1501
	    try {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1502
		iTOs[iCount] = Integer.parseInt(s1);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1503
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1504
	    }	catch (NumberFormatException nfe) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1505
		writeLog("syntax_error_prop",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1506
			 new Object[] {property, sTimeouts});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1507
		return defaults;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1508
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1509
	    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1510
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1511
	    if (iTOs[iCount] < 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1512
		writeLog("invalid_timeout_prop",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1513
			 new Object[] {property, String.valueOf(iTOs[iCount])});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1514
		return defaults;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1515
	    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1516
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1517
	    iCount++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1518
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1519
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1520
	return iTOs;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1521
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1522
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1523
    // -----------------------------
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1524
    // SLP Time Calculation
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1525
    //
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1526
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1527
    /**
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1528
     * Returns the number of seconds since 00:00 Universal Coordinated
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1529
     * Time, January 1, 1970.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1530
     *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1531
     * Java returns the number of milliseconds, so all the method does is
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1532
     * divide by 1000.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1533
     *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1534
     * This implementation still will have a problem when the Java time
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1535
     * values wraps, but there isn't much we can do now.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1536
     */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1537
    static long currentSLPTime() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1538
	return (System.currentTimeMillis() / 1000);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1539
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1540
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1541
    /* security */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1542
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1543
    // Indicates whether security class is available.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1544
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1545
    boolean getSecurityEnabled() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1546
	return securityEnabled;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1547
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1548
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1549
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1550
    private static boolean securityEnabled;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1551
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1552
    // Indicates whether the securityEnabled property is true
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1553
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1554
    boolean getHasSecurity() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1555
	return securityEnabled &&
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1556
	    (new Boolean(System.getProperty("net.slp.securityEnabled",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1557
					    "false")).booleanValue());
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1558
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1559
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1560
    // I18N Support.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1561
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1562
    private static final String BASE_BUNDLE_NAME = "com/sun/slp/ClientLib";
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1563
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1564
    ResourceBundle getMessageBundle(Locale locale) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1565
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1566
	ResourceBundle msgBundle = null;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1567
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1568
	// First try the Solaris Java locale area
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1569
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1570
	try {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1571
	    URL[] urls = new URL[] {new URL("file:/usr/share/lib/locale/")};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1572
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1573
	    URLClassLoader ld = new URLClassLoader(urls);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1574
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1575
	    msgBundle = ResourceBundle.getBundle(BASE_BUNDLE_NAME, locale, ld);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1576
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1577
	    return msgBundle;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1578
	} catch (MalformedURLException e) {	// shouldn't get here
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1579
	} catch (MissingResourceException ex) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1580
	    System.err.println("Missing resource bundle ``"+
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1581
			       "/usr/share/lib/locale/" + BASE_BUNDLE_NAME +
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1582
			       "'' for locale ``" +
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1583
			       locale + "''; trying default...");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1584
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1585
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1586
	try {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1587
	    msgBundle = ResourceBundle.getBundle(BASE_BUNDLE_NAME, locale);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1588
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1589
	} catch (MissingResourceException ex) {  // can't localize this one!
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1590
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1591
	    // We can't print out to the log, because we may be in the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1592
	    //  process of trying to.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1593
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1594
	    System.err.println("Missing resource bundle ``"+
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1595
			       BASE_BUNDLE_NAME+
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1596
			       "'' for locale ``"+
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1597
			       locale+
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1598
			       "''");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1599
	    // Hosed if the default locale is missing.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1600
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1601
	    if (locale.equals(Defaults.locale)) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1602
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1603
		System.err.println("Exiting...");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1604
		System.exit(1);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1605
	    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1606
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1607
	    // Otherwise, return the default locale.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1608
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1609
	    System.err.println("Using SLP default locale ``" +
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1610
			       Defaults.locale +
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1611
			       "''");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1612
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1613
	    msgBundle = getMessageBundle(Defaults.locale);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1614
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1615
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1616
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1617
	return msgBundle;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1618
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1619
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1620
    String formatMessage(String msgTag, Object[] params) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1621
	ResourceBundle bundle = getMessageBundle(getLocale());
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1622
	return formatMessageInternal(msgTag, params, bundle);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1623
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1624
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1625
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1626
    // MessageFormat is picky about types. Convert the params into strings.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1627
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1628
    static void convertToString(Object[] params) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1629
	int i, n = params.length;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1630
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1631
	for (i = 0; i < n; i++) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1632
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1633
	    if (params[i] != null) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1634
		params[i] = params[i].toString();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1635
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1636
	    } else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1637
		params[i] = "<null>";
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1638
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1639
	    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1640
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1641
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1642
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1643
    static String
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1644
	formatMessageInternal(String msgTag,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1645
			      Object[] params,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1646
			      ResourceBundle bundle) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1647
	String pattern = "";
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1648
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1649
	try {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1650
	    pattern = bundle.getString(msgTag);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1651
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1652
	} catch (MissingResourceException ex) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1653
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1654
	    // Attempt to report error. Can't use Assert here because it
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1655
	    //  calls back into SLPConfig.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1656
	    String msg = "Can''t find message ``{0}''''.";
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1657
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1658
	    try {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1659
		pattern = bundle.getString("cant_find_resource");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1660
		msg = MessageFormat.format(pattern, new Object[] {msgTag});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1661
	
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1662
	    } catch (MissingResourceException exx) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1663
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1664
	    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1665
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1666
	    System.err.println(msg);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1667
	    System.exit(-1);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1668
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1669
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1670
	convertToString(params);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1671
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1672
	return MessageFormat.format(pattern, params);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1673
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1674
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1675
    // logging.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1676
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1677
    // Protected so slpd can replace it.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1678
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1679
    protected Writer log;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1680
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1681
    // Synchronized so writes from multiple threads don't get interleaved.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1682
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1683
    void writeLog(String msgTag, Object[] params) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1684
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1685
	// MessageFormat is picky about types. Convert the params into strings.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1686
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1687
	convertToString(params);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1688
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1689
	try {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1690
	    synchronized (log) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1691
		log.write(formatMessage(msgTag, params));
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1692
		log.flush();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1693
	    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1694
	} catch (IOException ex) {}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1695
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1696
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1697
    void writeLogLine(String msgTag, Object[] params) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1698
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1699
	try {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1700
	    String pattern = getMessageBundle(getLocale()).getString(msgTag);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1701
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1702
	    synchronized (log) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1703
		log.write(formatMessage(msgTag, params));
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1704
		log.write("\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1705
		log.flush();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1706
	    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1707
	} catch (IOException ex) {}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1708
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1709
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1710
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1711
    static String getDateString() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1712
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1713
	DateFormat df = DateFormat.getDateTimeInstance(DateFormat.DEFAULT,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1714
						       DateFormat.DEFAULT,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1715
						       getLocale());
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1716
	Calendar calendar = Calendar.getInstance(getLocale());
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1717
	return df.format(calendar.getTime());
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1718
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1719
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1720
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1721
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1722
    // On load, check whether the signature class is available, and turn
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1723
    //  security off if not.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1724
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1725
    static {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1726
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1727
	securityEnabled = true;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1728
	try {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1729
	    Class c = Class.forName("com.sun.slp.AuthBlock");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1730
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1731
	} catch (ClassNotFoundException e) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1732
	    securityEnabled = false;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1733
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1734
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1735
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1736
}