package com.sun.slp;
import java.net.*;
import java.util.*;
import java.text.*;
import java.io.*;
class SLPConfig {
public static class SLPProperties extends Properties {
SLPProperties(Properties p) {
super(p);
}
public synchronized void load(InputStream in) throws IOException {
BufferedReader rd = new BufferedReader(new InputStreamReader(in));
while (rd.ready()) {
String ln = rd.readLine();
if (ln.startsWith("#") ||
ln.startsWith(";") ||
ln.length() <= 0) {
continue;
}
SLPTokenizer tk = new SLPTokenizer(ln, "=");
if (!tk.hasMoreTokens()) {
continue;
}
String prop = tk.nextToken().trim();
if (prop.trim().length() <= 0) {
continue;
}
if (!tk.hasMoreTokens()) {
continue;
}
String def = tk.nextToken().trim();
this.setProperty(prop, def);
}
}
}
protected SLPConfig() {
log = new StderrLog();
Properties sysProps = (Properties)(System.getProperties().clone());
try {
Class.forName("com.sun.slp.Defaults");
} catch (ClassNotFoundException ex) {
Assert.printMessageAndDie(this,
"no_class",
new Object[] {"com.sun.slp.Defaults"});
}
Properties defaultProps = System.getProperties();
SLPProperties slpProps = new SLPProperties(new Properties());
try {
InputStream fis = getConfigURLStream();
if (fis != null) {
slpProps.load(fis);
System.setProperties(slpProps);
}
} catch (IOException ex) {
writeLog("unparsable_config_file",
new Object[] {ex.getMessage()});
}
defaultProps.putAll(slpProps);
defaultProps.putAll(sysProps);
System.setProperties(defaultProps);
configuredScopes = initializeScopes("net.slp.useScopes");
saConfiguredScopes = (Vector)configuredScopes.clone();
if (saConfiguredScopes.size() <= 0) {
saConfiguredScopes.addElement(Defaults.DEFAULT_SCOPE);
}
saOnlyScopes = initializeScopes(DATable.SA_ONLY_SCOPES_PROP);
preconfiguredDAs = initializePreconfiguredDAs();
broadcastOnly = Boolean.getBoolean("net.slp.isBroadcastOnly");
String failed = null;
try {
String loggerClassName =
System.getProperty("sun.net.slp.loggerClass");
if (loggerClassName != null) {
Class loggerClass = Class.forName(loggerClassName);
if (Class.forName("java.io.Writer").isAssignableFrom(
loggerClass)) {
Object logger = loggerClass.newInstance();
log = (Writer) logger;
} else {
failed = formatMessage(
"bad_log_class",
new Object[] {
loggerClass.toString()}) + "\n";
}
}
} catch (Throwable ex) {
log = null;
failed = formatMessage(
"bad_log",
new Object[] {
ex.toString()}) + "\n";
}
if (log == null) {
log = new StderrLog();
if (failed != null) {
try {
synchronized (log) {
log.write(failed);
log.flush();
}
} catch (IOException giveUp) {}
}
}
}
private InputStream getConfigURLStream() {
String conf = System.getProperty("sun.net.slp.configURL");
if (conf == null) {
conf = Defaults.SOLARIS_CONF;
}
InputStream str = null;
try {
URL confURL = new URL(conf);
str = confURL.openStream();
} catch (MalformedURLException ex) {
writeLog("url_malformed",
new Object[] {conf});
} catch (IOException ex) {
if (conf != Defaults.SOLARIS_CONF) {
writeLog("unparsable_config_file",
new Object[] {ex.getMessage()});
}
}
return str;
}
private boolean OKBound(int i, int lb, int ub) {
if (i < lb || i > ub)
return false;
else
return true;
}
int getIntProperty(String prop, int df, int lb, int ub) {
int i = Integer.getInteger(prop, df).intValue();
if (OKBound(i, lb, ub)) {
return i;
} else {
writeLog("bad_prop_tag", new Object[] {prop});
return df;
}
}
private int iMinMCRadius = 1;
private int iMaxMCRadius = 255;
int getMCRadius() {
return getIntProperty("net.slp.multicastTTL",
Defaults.iMulticastRadius,
iMinMCRadius,
iMaxMCRadius);
}
private final int iMinHeart = 2000;
private final int iMaxHeart = 259200000;
int getAdvertHeartbeatTime() {
return getIntProperty("net.slp.DAHeartBeat",
Defaults.iHeartbeat,
iMinHeart,
iMaxHeart);
}
private final int iMinDisc = 300;
private final int iMaxDisc = 10800;
int getActiveDiscoveryInterval() {
int prop = getIntProperty("net.slp.DAActiveDiscoveryInterval",
Defaults.iActiveDiscoveryInterval,
0,
iMaxDisc);
if (prop > 0 && prop < iMinDisc) {
writeLog("bad_prop_tag",
new Object[] {"net.slp.DAActiveDiscoveryInterval"});
return iMinDisc;
}
return prop;
}
private int iMaxDiscGran = iMaxDisc * 2;
int getActiveDiscoveryGranularity() {
return getIntProperty("sun.net.slp.DAActiveDiscoveryGranularity",
Defaults.iActiveDiscoveryGranularity,
0,
iMaxDiscGran);
}
private final int iMinWait = 1000;
private final int iMaxWait = 3000;
int getRandomWaitBound() {
return getIntProperty("net.slp.randomWaitBound",
Defaults.iRandomWaitBound,
iMinWait,
iMaxWait);
}
private static Random randomWait = null;
long getRandomWait() {
if (randomWait == null) {
randomWait = new Random();
}
double r = randomWait.nextDouble();
double max = (double)getRandomWaitBound();
return (long)(max * r);
}
final static private int iMinTimeout = 100;
final static private int iMaxTimeout = 360000;
int getTCPTimeout() {
return getIntProperty("sun.net.slp.TCPTimeout",
Defaults.iTCPTimeout,
iMinTimeout,
iMaxTimeout);
}
private final int iMinMTU = 128;
private final int iMaxMTU = 8192;
int getMTU() {
return getIntProperty("net.slp.MTU",
Defaults.iMTU,
iMinMTU,
iMaxMTU);
}
String getSerializedRegURL() {
return System.getProperty("net.slp.serializedRegURL", null);
}
protected static boolean isSA = false;
boolean isDA() {
return false;
}
boolean isSA() {
return isSA;
}
Vector getDAAttributes() {
return getAttributes("net.slp.DAAttributes",
Defaults.defaultDAAttributes,
true);
}
Vector getSAAttributes() {
return getAttributes("net.slp.SAAttributes",
Defaults.defaultSAAttributes,
false);
}
private Vector getAttributes(String prop,
Vector defaults,
boolean daAttrs) {
String attrList =
System.getProperty(prop);
if (attrList == null || attrList.length() <= 0) {
return (Vector)defaults.clone();
}
try {
Vector sAttrs =
SrvLocHeader.parseCommaSeparatedListIn(attrList, false);
Vector attrs = new Vector();
int i, n = sAttrs.size();
for (i = 0; i < n; i++) {
String attrExp = (String)sAttrs.elementAt(i);
ServiceLocationAttribute attr =
new ServiceLocationAttribute(attrExp, false);
if (daAttrs &&
attr.getId().equals(
Defaults.MIN_REFRESH_INTERVAL_ATTR_ID)) {
Vector values = attr.getValues();
boolean errorp = true;
if (values != null && values.size() == 1) {
Object val = values.elementAt(0);
if (val instanceof Integer) {
int ival = ((Integer)val).intValue();
if (ival >= 0 &&
ival <= ServiceURL.LIFETIME_MAXIMUM) {
errorp = false;
}
}
}
if (errorp) {
throw new ServiceLocationException(
ServiceLocationException.PARSE_ERROR,
"syntax_error_prop",
new Object[] {prop, attrs});
}
}
attrs.addElement(attr);
}
return attrs;
} catch (Exception ex) {
writeLog("syntax_error_prop",
new Object[] {prop, attrList});
return (Vector)defaults.clone();
}
}
boolean isV1Supported() {
return false;
}
int getServerSocketQueueLength() {
return getIntProperty("sun.net.slp.serverSocketQueueLength",
Defaults.iSocketQueueLength,
0,
Integer.MAX_VALUE);
}
boolean traceAll() {
return Boolean.getBoolean("sun.net.slp.traceALL");
}
boolean regTest() {
if (Boolean.getBoolean("sun.net.slp.traceALL") ||
Boolean.getBoolean("net.slp.traceReg"))
return true;
else
return false;
}
boolean traceMsg() {
if (Boolean.getBoolean("sun.net.slp.traceALL") ||
Boolean.getBoolean("net.slp.traceMsg"))
return true;
else
return false;
}
boolean traceDrop() {
if (Boolean.getBoolean("sun.net.slp.traceALL") ||
Boolean.getBoolean("net.slp.traceDrop"))
return true;
else
return false;
}
boolean traceDATraffic() {
if (Boolean.getBoolean("sun.net.slp.traceALL") ||
Boolean.getBoolean("net.slp.traceDATraffic"))
return true;
else
return false;
}
boolean passiveDADetection() {
String sPassive =
System.getProperty("net.slp.passiveDADetection", "true");
if (sPassive.equalsIgnoreCase("true"))
return true;
else
return false;
}
private boolean broadcastOnly = false;
boolean isBroadcastOnly() {
return broadcastOnly;
}
DatagramSocket broadSocket = null;
DatagramSocket
refreshMulticastSocketOnInterface(InetAddress interfac,
Vector groups) {
try {
DatagramSocket dss =
getMulticastSocketOnInterface(interfac,
(groups == null ? true:false));
if ((groups != null) && (dss instanceof MulticastSocket)) {
int i, n = groups.size();
MulticastSocket mss = (MulticastSocket)dss;
for (i = 0; i < n; i++) {
InetAddress maddr = (InetAddress)groups.elementAt(i);
mss.joinGroup(maddr);
}
}
return dss;
} catch (Exception ex) {
Assert.slpassert(false,
"cast_socket_failure",
new Object[] {ex, ex.getMessage()});
}
return null;
}
DatagramSocket
getMulticastSocketOnInterface(InetAddress interfac, boolean isSend)
throws ServiceLocationException {
DatagramSocket castSocket = null;
if (isBroadcastOnly()) {
try {
if (isSend) {
castSocket = new DatagramSocket();
} else {
if (broadSocket != null) {
castSocket = broadSocket;
} else {
castSocket =
new DatagramSocket(Defaults.iSLPPort,
getBroadcastAddress());
}
broadSocket = castSocket;
}
} catch (SocketException ex) {
throw
new ServiceLocationException(
ServiceLocationException.NETWORK_INIT_FAILED,
"socket_creation_failure",
new Object[] {
getBroadcastAddress(), ex.getMessage()});
}
} else {
MulticastSocket ms;
try {
if (isSend) {
ms = new MulticastSocket();
} else {
ms = new MulticastSocket(Defaults.iSLPPort);
}
} catch (IOException ex) {
throw
new ServiceLocationException(
ServiceLocationException.NETWORK_INIT_FAILED,
"socket_creation_failure",
new Object[] {interfac, ex.getMessage()});
}
try {
ms.setTimeToLive(getMCRadius());
ms.setInterface(interfac);
} catch (IOException ex) {
throw
new ServiceLocationException(
ServiceLocationException.NETWORK_INIT_FAILED,
"socket_initializtion_failure",
new Object[] {interfac, ex.getMessage()});
}
castSocket = ms;
}
return castSocket;
}
Vector getTypeHint() {
Vector hint = new Vector();
String sTypeList = System.getProperty("net.slp.typeHint", "");
if (sTypeList.length() <= 0) {
return hint;
}
try {
hint = SrvLocHeader.parseCommaSeparatedListIn(sTypeList, true);
int i, n = hint.size();
for (i = 0; i < n; i++) {
String type = (String)hint.elementAt(i);
hint.setElementAt(new ServiceType(type), i);
}
} catch (ServiceLocationException ex) {
writeLog("syntax_error_prop",
new Object[] {"net.slp.typeHint", sTypeList});
hint.removeAllElements();
}
return hint;
}
private Vector configuredScopes = null;
private Vector saConfiguredScopes = null;
private Vector saOnlyScopes = null;
Vector getConfiguredScopes() {
return (Vector)configuredScopes.clone();
}
Vector getSAOnlyScopes() {
return (Vector)saOnlyScopes.clone();
}
Vector getSAConfiguredScopes() {
return (Vector)saConfiguredScopes.clone();
}
void addPreconfiguredDAScopes(Vector scopes) {
int i, n = scopes.size();
for (i = 0; i < n; i++) {
Object scope = scopes.elementAt(i);
if (!configuredScopes.contains(scope)) {
configuredScopes.addElement(scope);
}
if (isSA() || isDA()) {
Assert.slpassert(saConfiguredScopes.contains(scope),
"sa_new_scope",
new Object[] {scope, saConfiguredScopes});
}
}
}
private Vector initializeScopes(String prop) {
String sScopes = System.getProperty(prop);
if (sScopes == null || sScopes.length() <= 0) {
return new Vector();
}
try {
Vector vv =
SrvLocHeader.parseCommaSeparatedListIn(sScopes, true);
SLPHeaderV2.unescapeScopeStrings(vv);
DATable.validateScopes(vv, getLocale());
if (vv.size() > 0) {
return vv;
}
} catch (ServiceLocationException ex) {
writeLog("syntax_error_prop",
new Object[] {
prop,
sScopes});
}
return new Vector();
}
private Vector preconfiguredDAs = null;
Vector getPreconfiguredDAs() {
return (Vector)preconfiguredDAs.clone();
}
private Vector initializePreconfiguredDAs() {
String sDAList = System.getProperty("net.slp.DAAddresses", "");
Vector ret = new Vector();
sDAList.trim();
if (sDAList.length() <= 0) {
return ret;
}
try {
ret = SrvLocHeader.parseCommaSeparatedListIn(sDAList, true);
} catch (ServiceLocationException ex) {
writeLog("syntax_error_prop",
new Object[] {"net.slp.DAAddress", sDAList});
return ret;
}
int i;
for (i = 0; i < ret.size(); i++) {
String da = "";
try {
da = ((String)ret.elementAt(i)).trim();
InetAddress daAddr = InetAddress.getByName(da);
ret.setElementAt(daAddr, i);
} catch (UnknownHostException ex) {
writeLog("resolve_failed",
new Object[] {da});
ret.removeElementAt(i);
i--;
continue;
}
}
return ret;
}
boolean getSLPv1NotSupported() {
return Boolean.getBoolean("sun.net.slp.SLPv1NotSupported");
}
boolean getAcceptSLPv1UnscopedRegs() {
if (!getSLPv1NotSupported()) {
return Boolean.getBoolean("sun.net.slp.acceptSLPv1UnscopedRegs");
}
return false;
}
protected static SLPConfig theSLPConfig = null;
static SLPConfig getSLPConfig() {
if (theSLPConfig == null) {
theSLPConfig = new SLPConfig();
}
return theSLPConfig;
}
int getMaximumResults() {
int i = Integer.getInteger("net.slp.maxResults",
Defaults.iMaximumResults).intValue();
if (i == -1) {
i = Integer.MAX_VALUE;
}
if (OKBound(i, 1, Integer.MAX_VALUE)) {
return i;
} else {
writeLog("bad_prop_tag",
new Object[] {
"net.slp.maxResults"});
return Defaults.iMaximumResults;
}
}
static Locale langTagToLocale(String ltag) {
StringTokenizer tk = new StringTokenizer(ltag, "-");
String lang = "";
String country = "";
if (tk.hasMoreTokens()) {
lang = tk.nextToken();
if (tk.hasMoreTokens()) {
country = tk.nextToken("");
}
}
return new Locale(lang, country);
}
static String localeToLangTag(Locale locale) {
String ltag = locale.getCountry();
ltag = locale.getLanguage() + (ltag.length() <= 0 ? "" : ("-" + ltag));
return ltag;
}
static Locale getLocale() {
String s = System.getProperty("net.slp.locale");
if (s != null && s.length() > 0) {
return langTagToLocale(s);
} else {
return Locale.getDefault();
}
}
static private InetAddress broadcastAddress;
static InetAddress getBroadcastAddress() {
if (broadcastAddress == null) {
try {
broadcastAddress =
InetAddress.getByName(Defaults.sBroadcast);
} catch (UnknownHostException uhe) {
Assert.slpassert(false,
"cast_address_failure",
new Object[] {Defaults.sBroadcast});
}
}
return broadcastAddress;
}
static private InetAddress multicastAddress;
static InetAddress getMulticastAddress() {
if (multicastAddress == null) {
try {
multicastAddress =
InetAddress.getByName(Defaults.sGeneralSLPMCAddress);
} catch (UnknownHostException uhe) {
Assert.slpassert(false,
"cast_address_failure",
new Object[] {Defaults.sGeneralSLPMCAddress});
}
}
return multicastAddress;
}
private static Vector interfaces = null;
Vector getInterfaces() {
if (interfaces == null) {
InetAddress iaLocal = null;
try {
iaLocal = InetAddress.getLocalHost();
} catch (UnknownHostException ex) {
Assert.slpassert(false,
"resolve_failed",
new Object[] {"localhost"});
}
String mcastI = System.getProperty("net.slp.interfaces");
interfaces = new Vector();
if (mcastI == null || mcastI.length() <= 0) {
interfaces.addElement(iaLocal);
return interfaces;
}
Vector nintr;
try {
nintr = SrvLocHeader.parseCommaSeparatedListIn(mcastI, true);
} catch (ServiceLocationException ex) {
writeLog("syntax_error_prop",
new Object[] {
"net.slp.multicastInterfaces",
mcastI});
interfaces.addElement(iaLocal);
return interfaces;
}
int i, n = nintr.size();
for (i = 0; i < n; i++) {
InetAddress ia;
String host = (String)nintr.elementAt(i);
try {
ia = InetAddress.getByName(host);
} catch (UnknownHostException ex) {
writeLog("unknown_interface",
new Object[] {host,
"net.slp.multicastInterfaces"});
continue;
}
if (!interfaces.contains(ia)) {
if (ia.equals(iaLocal)) {
interfaces.insertElementAt(ia, 0);
} else {
interfaces.addElement(ia);
}
}
}
}
return interfaces;
}
InetAddress getLoopback() {
InetAddress iaLoopback = null;
try {
iaLoopback = InetAddress.getByName(Defaults.LOOPBACK_ADDRESS);
} catch (UnknownHostException ex) {
Assert.slpassert(false,
"resolve_failed",
new Object[] {"localhost loopback"});
}
return iaLoopback;
}
InetAddress getLocalHost() {
Vector inter = getInterfaces();
return (InetAddress)inter.elementAt(0);
}
boolean isLocalHostSource(InetAddress addr) {
if (addr.equals(getLoopback())) {
return true;
}
return interfaces.contains(addr);
}
final static private int iMultiMin = 1000;
final static private int iMultiMax = 60000;
int getMulticastMaximumWait() {
return getIntProperty("net.slp.multicastMaximumWait",
Defaults.iMulticastMaxWait,
iMultiMin,
iMultiMax);
}
int[] getMulticastTimeouts() {
int[] timeouts = parseTimeouts("net.slp.multicastTimeouts",
Defaults.a_iConvergeTimeout);
timeouts = capTimeouts("net.slp.multicastTimeouts",
timeouts,
false,
0,
0);
return timeouts;
}
int[] getDatagramTimeouts() {
int[] timeouts = parseTimeouts("net.slp.datagramTimeouts",
Defaults.a_iDatagramTimeout);
timeouts = capTimeouts("net.slp.datagramTimeouts",
timeouts,
true,
iMultiMin,
iMultiMax);
return timeouts;
}
int[] getDADiscoveryTimeouts() {
int[] timeouts = parseTimeouts("net.slp.DADiscoveryTimeouts",
Defaults.a_iDADiscoveryTimeout);
timeouts = capTimeouts("net.slp.DADiscoveryTimeouts",
timeouts,
false,
0,
0);
return timeouts;
}
private int[] capTimeouts(String property,
int[] timeouts,
boolean rangeCheck,
int min,
int max) {
int averagedTimeout;
int totalWait = 0;
for (int index = 0; index < timeouts.length; index++) {
totalWait += timeouts[index];
}
if (rangeCheck) {
if (totalWait >= min && totalWait <= max) {
return timeouts;
}
if (totalWait < min) {
averagedTimeout = min / timeouts.length;
} else {
averagedTimeout = max / timeouts.length;
}
writeLog("capped_range_timeout_prop",
new Object[] {property,
String.valueOf(totalWait),
String.valueOf(min),
String.valueOf(max),
String.valueOf(timeouts.length),
String.valueOf(averagedTimeout)});
} else {
int maximumWait = getMulticastMaximumWait();
if (totalWait <= maximumWait) {
return timeouts;
}
averagedTimeout = maximumWait / timeouts.length;
writeLog("capped_timeout_prop",
new Object[] {property,
String.valueOf(totalWait),
String.valueOf(maximumWait),
String.valueOf(timeouts.length),
String.valueOf(averagedTimeout)});
}
for (int index = 0; index < timeouts.length; index++) {
timeouts[index] = averagedTimeout;
}
return timeouts;
}
private int[] parseTimeouts(String property, int[] defaults) {
String sTimeouts = System.getProperty(property);
if (sTimeouts == null || sTimeouts.length() <= 0) {
return defaults;
}
Vector timeouts = null;
try {
timeouts = SrvLocHeader.parseCommaSeparatedListIn(sTimeouts, true);
} catch (ServiceLocationException ex) {
writeLog("syntax_error_prop",
new Object[] {property, sTimeouts});
return defaults;
}
int iCount = 0;
int[] iTOs = new int[timeouts.size()];
for (Enumeration en = timeouts.elements(); en.hasMoreElements(); ) {
String s1 = (String)en.nextElement();
try {
iTOs[iCount] = Integer.parseInt(s1);
} catch (NumberFormatException nfe) {
writeLog("syntax_error_prop",
new Object[] {property, sTimeouts});
return defaults;
}
if (iTOs[iCount] < 0) {
writeLog("invalid_timeout_prop",
new Object[] {property, String.valueOf(iTOs[iCount])});
return defaults;
}
iCount++;
}
return iTOs;
}
static long currentSLPTime() {
return (System.currentTimeMillis() / 1000);
}
boolean getSecurityEnabled() {
return securityEnabled;
}
private static boolean securityEnabled;
boolean getHasSecurity() {
return securityEnabled &&
(Boolean.valueOf(System.getProperty("net.slp.securityEnabled",
"false")).booleanValue());
}
private static final String BASE_BUNDLE_NAME = "com/sun/slp/ClientLib";
ResourceBundle getMessageBundle(Locale locale) {
ResourceBundle msgBundle = null;
try {
URL[] urls = new URL[] {new URL("file:/usr/share/lib/locale/")};
URLClassLoader ld = new URLClassLoader(urls);
msgBundle = ResourceBundle.getBundle(BASE_BUNDLE_NAME, locale, ld);
return msgBundle;
} catch (MalformedURLException e) {
} catch (MissingResourceException ex) {
System.err.println("Missing resource bundle ``"+
"/usr/share/lib/locale/" + BASE_BUNDLE_NAME +
"'' for locale ``" +
locale + "''; trying default...");
}
try {
msgBundle = ResourceBundle.getBundle(BASE_BUNDLE_NAME, locale);
} catch (MissingResourceException ex) {
System.err.println("Missing resource bundle ``"+
BASE_BUNDLE_NAME+
"'' for locale ``"+
locale+
"''");
if (locale.equals(Defaults.locale)) {
System.err.println("Exiting...");
System.exit(1);
}
System.err.println("Using SLP default locale ``" +
Defaults.locale +
"''");
msgBundle = getMessageBundle(Defaults.locale);
}
return msgBundle;
}
String formatMessage(String msgTag, Object[] params) {
ResourceBundle bundle = getMessageBundle(getLocale());
return formatMessageInternal(msgTag, params, bundle);
}
static void convertToString(Object[] params) {
int i, n = params.length;
for (i = 0; i < n; i++) {
if (params[i] != null) {
params[i] = params[i].toString();
} else {
params[i] = "<null>";
}
}
}
static String
formatMessageInternal(String msgTag,
Object[] params,
ResourceBundle bundle) {
String pattern = "";
try {
pattern = bundle.getString(msgTag);
} catch (MissingResourceException ex) {
String msg = "Can''t find message ``{0}''''.";
try {
pattern = bundle.getString("cant_find_resource");
msg = MessageFormat.format(pattern, new Object[] {msgTag});
} catch (MissingResourceException exx) {
}
System.err.println(msg);
System.exit(-1);
}
convertToString(params);
return MessageFormat.format(pattern, params);
}
protected Writer log;
void writeLog(String msgTag, Object[] params) {
convertToString(params);
try {
synchronized (log) {
log.write(formatMessage(msgTag, params));
log.flush();
}
} catch (IOException ex) {}
}
void writeLogLine(String msgTag, Object[] params) {
try {
String pattern = getMessageBundle(getLocale()).getString(msgTag);
synchronized (log) {
log.write(formatMessage(msgTag, params));
log.write("\n");
log.flush();
}
} catch (IOException ex) {}
}
static String getDateString() {
DateFormat df = DateFormat.getDateTimeInstance(DateFormat.DEFAULT,
DateFormat.DEFAULT,
getLocale());
Calendar calendar = Calendar.getInstance(getLocale());
return df.format(calendar.getTime());
}
static {
securityEnabled = true;
try {
Class c = Class.forName("com.sun.slp.AuthBlock");
} catch (ClassNotFoundException e) {
securityEnabled = false;
}
}
}