root/usr/src/lib/libslp/javalib/com/sun/slp/SLPV1SSrvDereg.java
/*
 * 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;

    }
}