/*
* 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.
*
*/
// SLPV1SSrvDereg.java: Message class for SLP service deregistration
// request.
// Author: James Kempf
// Created On: Thu Oct 9 15:00:38 1997
// Last Modified By: James Kempf
// Last Modified On: Mon Jan 4 15:26:33 1999
// Update Count: 82
//
package com.sun.slp;
import java.util.*;
import java.io.*;
/**
* The SLPV1SSrvDereg class models the server side SLP service
* deregistration.
*
* @author James Kempf
*/
class SLPV1SSrvDereg extends SSrvDereg {
// Construct a SLPV1SSrvDereg from the byte input stream.
SLPV1SSrvDereg(SrvLocHeader hdr, DataInputStream dis)
throws ServiceLocationException, IOException {
super(hdr, dis);
}
// Initialize the object.
void initialize(DataInputStream dis)
throws ServiceLocationException, IOException {
SLPHeaderV1 hdr = (SLPHeaderV1)getHeader();
StringBuffer buf = new StringBuffer();
// Parse in the service URL.
URL =
hdr.parseServiceURLIn(dis,
false,
ServiceLocationException.INVALID_REGISTRATION);
hdr.getString(buf, dis);
tags = hdr.parseCommaSeparatedListIn(buf.toString().trim(), true);
// Error if any tags are wildcarded. Only allowed for AttrRqst.
int i, n = tags.size();
for (i = 0; i < n; i++) {
String tag = (String)tags.elementAt(i);
// Unescape tag.
tag =
ServiceLocationAttributeV1.unescapeAttributeString(tag,
hdr.charCode);
if (tag.startsWith("*") || tag.endsWith("*")) {
throw
new ServiceLocationException(
ServiceLocationException.PARSE_ERROR,
"v1_dereg_wildcard",
new Object[0]);
}
tags.setElementAt(tag, i);
}
// If no tags, then set the tags vector to null. This indicates
// that the service: URL needs to be deregistered.
if (tags.size() <= 0) {
tags = null;
}
// We need to find all the scopes for this guy and put them into the
// scope list on the header.
ServiceTable table = ServiceTable.getServiceTable();
ServiceStore.ServiceRecord rec = table.getServiceRecord(URL,
hdr.locale);
// If the record is there, then get the scopes.
if (rec != null) {
hdr.scopes = (Vector)rec.getScopes().clone();
} else {
SLPConfig config = SLPConfig.getSLPConfig();
// We simply put in the useScopes, just to make the request.
// The request will be rejected when presented to ServiceTable.
hdr.scopes = (Vector)config.getSAConfiguredScopes().clone();
}
hdr.constructDescription("SrvDereg",
" URL=``" + URL + "''\n" +
" tags=``" + tags + "''\n");
}
// Return a SrvAck.
SrvLocMsg makeReply() {
SLPHeaderV1 hdr = ((SLPHeaderV1)getHeader()).makeReplyHeader();
// Construct description.
hdr.constructDescription("SrvAck", "");
return hdr;
}
}