/* * 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 javax.net.ssl; import java.security.Principal; import java.security.cert.Certificate; import javax.security.cert.X509Certificate; /** * The interface representing an SSL session. */ public interface SSLSession { /** * Returns the maximum size that an application buffer can be for this * session. * * @return the maximum application buffer size. */ public int getApplicationBufferSize(); /** * Returns the name of the cipher suite used in this session. * * @return the name of the cipher suite used in this session. */ public String getCipherSuite(); /** * Returns the time this session was created, in milliseconds since midnight * January 1st 1970 UTC. * * @return the time the session was created. */ public long getCreationTime(); /** * Returns this sessions identifier. * * @return this sessions identifier. */ public byte[] getId(); /** * Returns the time this session was last accessed, in milliseconds since * midnight January 1st 1970 UTC. * * @return the time this session was last accessed. */ public long getLastAccessedTime(); /** * Returns the list of certificates that were used to identify the local * side to the peer during the handshake. * * @return the list of certificates, ordered from local certificate to * CA's certificates. */ public Certificate[] getLocalCertificates(); /** * Returns the principal used to identify the local side to the peer during * the handshake. * * @return the principal used to identify the local side. */ public Principal getLocalPrincipal(); /** * Returns the maximum size that a network buffer can be for this session. * * @return the maximum network buffer size. */ public int getPacketBufferSize(); /** * Returns the list of certificates the peer used to identify itself during * the handshake. * <p> * Note: this method exists for compatility reasons, use * {@link #getPeerCertificates()} instead. * * @return the list of certificates, ordered from the identity certificate to * the CA's certificates * @throws SSLPeerUnverifiedException * if the identity of the peer is not verified. */ public X509Certificate[] getPeerCertificateChain() throws SSLPeerUnverifiedException; /** * Returns the list of certificates the peer used to identify itself during * the handshake. * * @return the list of certificates, ordered from the identity certificate to * the CA's certificates. * @throws SSLPeerUnverifiedException * if the identity of the peer is not verified. */ public Certificate[] getPeerCertificates() throws SSLPeerUnverifiedException; /** * Returns the host name of the peer of this session. The host name is not * authenticated. * * @return the host name of the peer of this session, or {@code null} if no * host name is available. */ public String getPeerHost(); /** * Returns the port number of the peer of this session. The port number is * not authenticated. * * @return the port number of the peer, of {@code -1} is no port number is * available. */ public int getPeerPort(); /** * Returns the principal identifying the peer during the handshake. * * @return the principal identifying the peer. * @throws SSLPeerUnverifiedException * if the identity of the peer has not been verified. */ public Principal getPeerPrincipal() throws SSLPeerUnverifiedException; /** * Returns the protocol name that is used for all connections in this * session. * * @return the protocol name that is used for all connections in this * session. */ public String getProtocol(); /** * Returns the context of this session, or null if no context is available. */ public SSLSessionContext getSessionContext(); /** * Returns the object bound to the specified name in this session's * application layer data. * * @param name * the name of the bound value. * @return the value bound to the specified name, or {@code null} if the * specified name does not exist or is not accessible in the current * access control context. * @throws IllegalArgumentException * if {@code name} is {@code null}. */ public Object getValue(String name); /** * Returns the list of the object names bound to this session's application * layer data.. * <p> * Depending on the current access control context, the list of object names * may be different. * * @return the list of the object names bound to this session's application * layer data. */ public String[] getValueNames(); /** * Invalidates this session. * <p> * No new connections can be created, but any existing connection remains * valid until it is closed. */ public void invalidate(); /** * Returns whether this session is valid. * * @return {@code true} if this session is valid, otherwise {@code false}. */ public boolean isValid(); /** * Binds the specified object under the specified name in this session's * application layer data. * <p> * For bindings (new or existing) implementing the * {@code SSLSessionBindingListener} interface the object will be notified. * * @param name * the name to bind the object to. * @param value * the object to bind. * @throws IllegalArgumentException * if either {@code name} or {@code value} is {@code null}. */ public void putValue(String name, Object value); /** * Removes the binding for the specified name in this session's application * layer data. If the existing binding implements the * {@code SSLSessionBindingListener} interface the object will be notified. * * @param name * the binding to remove. * @throws IllegalArgumentException * if {@code name} is {@code null}. */ public void removeValue(String name); }