/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.jini.jeri;
import net.jini.core.constraint.ConstraintAlternatives;
import net.jini.core.constraint.Integrity;
import net.jini.core.constraint.InvocationConstraints;
import net.jini.io.UnsupportedConstraintException;
/**
* Represents the constraint support capabilities of a server-side
* transport layer implementation.
*
* <p>The {@link #checkConstraints checkConstraints} method is
* intended to be used by an {@link InvocationDispatcher} to verify
* support for constraints.
*
* @author Sun Microsystems, Inc.
* @since 2.0
**/
public interface ServerCapabilities {
/**
* Verifies that this instance supports the transport layer
* aspects of all of the specified requirements (both in general
* and in the current security context), and returns the
* requirements that must be at least partially implemented by
* higher layers in order to fully satisfy all of the specified
* requirements. This method may also return preferences that
* must be at least partially implemented by higher layers in
* order to fully satisfy some of the specified preferences.
*
* <p>For any given constraint, there must be a clear delineation
* of which aspects (if any) must be implemented by the transport
* layer. This method must not return a constraint (as a
* requirement or a preference, directly or as an element of
* another constraint) unless this instance can implement all of
* those aspects. Also, this method must not return a constraint
* for which all aspects must be implemented by the transport
* layer. Most of the constraints in the {@link
* net.jini.core.constraint} package must be fully implemented by
* the transport layer and thus must not be returned by this
* method; the one exception is {@link Integrity}, for which the
* transport layer is responsible for the data integrity aspect
* and higher layers are responsible for the code integrity
* aspect.
*
* <p>For any {@link ConstraintAlternatives} in the specified
* constraints, this method should only return a corresponding
* constraint if all of the alternatives supported by this
* instance need to be at least partially implemented by higher
* layers in order to be fully satisfied.
*
* <p>The constraints passed to this method may include
* constraints based on relative time.
*
* @param constraints the constraints that must be supported
*
* @return the constraints that must be at least partially
* implemented by higher layers
*
* @throws UnsupportedConstraintException if the transport layer
* aspects of any of the specified requirements are not supported
* by this instance (either in general or in the current security
* context)
*
* @throws SecurityException if the current security context does
* not have the permissions necessary to perform this operation
*
* @throws NullPointerException if <code>constraints</code> is
* <code>null</code>
**/
InvocationConstraints checkConstraints(InvocationConstraints constraints)
throws UnsupportedConstraintException;
}