/* * 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(); } }