108ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project/*
208ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * Copyright (C) 2009 The Android Open Source Project
308ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project *
408ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
508ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * you may not use this file except in compliance with the License.
608ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * You may obtain a copy of the License at
708ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project *
808ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
908ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project *
1008ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
1108ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
1208ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1308ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * See the License for the specific language governing permissions and
1408ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * limitations under the License.
1508ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project */
1608ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project
17860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Rootpackage org.conscrypt;
1808ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project
1908ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Projectimport javax.net.ssl.SSLSession;
2008ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project
2108ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project/**
2208ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * A persistent {@link javax.net.ssl.SSLSession} cache used by
2308ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * {@link javax.net.ssl.SSLSessionContext} to share server-side SSL sessions
2408ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * across processes. For example, this cache enables one server to resume
2508ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * a session started by a different server based on a session ID provided
2608ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * by the client.
2708ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project *
2808ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * <p>The {@code SSLSessionContext} implementation converts
2908ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * {@code SSLSession}s into raw bytes and vice versa. The exact makeup of the
3008ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * session data is dependent upon the caller's implementation and is opaque to
3108ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * the {@code SSLServerSessionCache} implementation.
3208ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project */
3308ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Projectpublic interface SSLServerSessionCache {
3408ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project
3508ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project  /**
3608ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project   * Gets the session data for given session ID.
3708ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project   *
3808ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project   * @param id from {@link javax.net.ssl.SSLSession#getId()}
3908ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project   * @return the session data or null if none is cached
4008ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project   * @throws NullPointerException if id is null
4108ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project   */
4208ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project  public byte[] getSessionData(byte[] id);
4308ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project
4408ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project  /**
4508ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project   * Stores session data for the given session.
4608ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project   *
4708ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project   * @param session to cache data for
4808ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project   * @param sessionData to cache
4908ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project   * @throws NullPointerException if session or data is null
5008ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project   */
5108ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project  public void putSessionData(SSLSession session, byte[] sessionData);
5208ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project}