/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright (c) 1999 by Sun Microsystems, Inc.
* All rights reserved.
*
*/
// CSrvReg.java: Service Registration, Client Side.
// Author: James Kempf
// Created On: Tue Feb 10 12:15:43 1998
// Last Modified By: James Kempf
// Last Modified On: Tue Oct 27 10:57:38 1998
// Update Count: 49
//
package com.sun.slp;
import java.util.*;
import java.io.*;
/**
* The CSrvReg class models the client side SLP service registration
* message.
*
* @author James Kempf
*/
class CSrvReg extends SrvLocMsgImpl {
ServiceURL URL;
// Construct a CSrvReg from the arguments. This is the SrvReg for
CSrvReg(boolean fresh,
Locale locale,
ServiceURL urlEntry,
Vector scopes,
Vector attrs,
Hashtable URLSignatures,
Hashtable attrSignatures)
throws ServiceLocationException {
this.URL = urlEntry;
// We do heavy checking of attributes here so that any registrations
// are correct.
Hashtable attrHash = new Hashtable();
int i, n = attrs.size();
// Verify each attribute, merging duplicates in the vector
// and throwing an error if any duplicates have mismatched types.
Vector attrList = new Vector();
for (i = 0; i < n; i++) {
Object o = attrs.elementAt(i);
if (!(o instanceof ServiceLocationAttribute)) {
throw
new IllegalArgumentException(
SLPConfig.getSLPConfig().formatMessage("not_an_attribute",
new Object[0]));
}
// Make a new copy of the attribute, so we can modify it.
ServiceLocationAttribute attr = (ServiceLocationAttribute)o;
ServiceLocationAttribute.mergeDuplicateAttributes(
new ServiceLocationAttribute(attr.getId(), attr.getValues()),
attrHash,
attrList,
false);
}
this.initialize(fresh,
locale,
urlEntry,
scopes,
attrList,
URLSignatures,
attrSignatures);
}
// Initialize the object. V1 will do it differently.
void initialize(boolean fresh,
Locale locale,
ServiceURL urlEntry,
Vector scopes,
Vector attrs,
Hashtable URLSignatures,
Hashtable attrSignatures)
throws ServiceLocationException {
SLPConfig config = SLPConfig.getSLPConfig();
SLPHeaderV2 hdr = new SLPHeaderV2(SrvLocHeader.SrvReg, fresh, locale);
this.hdr = hdr;
hdr.scopes = (Vector)scopes.clone();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// Parse out the URL. Ignore overflow.
hdr.parseServiceURLOut(urlEntry,
config.getHasSecurity(),
URLSignatures,
baos,
false);
// Parse out service type. It may be different from the
// service URL.
ServiceType serviceType = urlEntry.getServiceType();
hdr.putString(serviceType.toString(), baos);
// Escape scope strings.
hdr.escapeScopeStrings(scopes);
// Parse out the scope list.
hdr.parseCommaSeparatedListOut(scopes, baos);
// Parse out the attribute list.
hdr.parseAttributeVectorOut(attrs,
urlEntry.getLifetime(),
config.getHasSecurity(),
attrSignatures,
baos,
true);
hdr.payload = baos.toByteArray();
}
}