/* * 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. * */ // CSAAdvert.java: Message class for SLP CSAAdvert message // Author: James Kempf // Created On: Fri Oct 10 10:48:05 1997 // Last Modified By: James Kempf // Last Modified On: Tue Oct 27 10:57:41 1998 // Update Count: 95 // package com.sun.slp; import java.util.*; import java.io.*; /** * The CSAAdvert class models the SLP SAAdvert message, client side. * * @author James Kempf */ class CSAAdvert extends SrvLocMsgImpl { ServiceURL URL = null; // The DA's service URL Hashtable authBlock = null; // Scope auth blocks. Vector attrs = new Vector(); // The attributes. // Construct a CSAAdvert from the input stream. CSAAdvert(SLPHeaderV2 hdr, DataInputStream dis) throws ServiceLocationException, IOException { super(hdr, SrvLocHeader.SAAdvert); // Parse in SA's service URL. StringBuffer buf = new StringBuffer(); byte[] urlBytes = hdr.getString(buf, dis); try { URL = new ServiceURL(buf.toString(), ServiceURL.LIFETIME_NONE); } catch (IllegalArgumentException ex) { throw new ServiceLocationException( ServiceLocationException.PARSE_ERROR, "malformed_url", new Object[] {ex.getMessage()}); } // Validate the service URL. ServiceType serviceType = URL.getServiceType(); if (!serviceType.equals(Defaults.SA_SERVICE_TYPE)) { throw new ServiceLocationException( ServiceLocationException.PARSE_ERROR, "not_right_url", new Object[] {URL, "SA"}); } // Parse in the scope list. byte[] scopeBytes = hdr.getString(buf, dis); hdr.scopes = hdr.parseCommaSeparatedListIn(buf.toString(), true); // Unescape scopes. hdr.unescapeScopeStrings(hdr.scopes); // Validate scope list. DATable.validateScopes(hdr.scopes, hdr.locale); // Parse in attributes. byte attrBytes[] = hdr.parseAttributeVectorIn(attrs, dis, false); // Construct bytes for auth. Object[] message = new Object[6]; // None of the strings have leading length fields, so add them here ByteArrayOutputStream abaos = new ByteArrayOutputStream(); hdr.putInteger(urlBytes.length, abaos); message[0] = abaos.toByteArray(); message[1] = urlBytes; abaos = new ByteArrayOutputStream(); hdr.putInteger(attrBytes.length, abaos); message[2] = abaos.toByteArray(); message[3] = attrBytes; abaos = new ByteArrayOutputStream(); hdr.putInteger(scopeBytes.length, abaos); message[4] = abaos.toByteArray(); message[5] = scopeBytes; // Parse in an auth block if there. authBlock = hdr.parseSignatureIn(message, dis); // Set number of replies. hdr.iNumReplies = 1; } }