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 client-side SSL sessions
2408ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * across processes. For example, this cache enables applications to
2508ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * persist and reuse sessions across restarts.
2608ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project *
2708ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * <p>The {@code SSLSessionContext} implementation converts
2808ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * {@code SSLSession}s into raw bytes and vice versa. The exact makeup of the
2908ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * session data is dependent upon the caller's implementation and is opaque to
3008ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * the {@code SSLClientSessionCache} implementation.
3108ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project */
3208ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Projectpublic interface SSLClientSessionCache {
3308ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project
3408ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project  /**
3508ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project   * Gets data from a pre-existing session for a given server host and port.
3608ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project   *
3708ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project   * @param host from {@link javax.net.ssl.SSLSession#getPeerHost()}
3808ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project   * @param port from {@link javax.net.ssl.SSLSession#getPeerPort()}
3908ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project   * @return the session data or null if none is cached
4008ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project   * @throws NullPointerException if host is null
4108ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project   */
4208ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project  public byte[] getSessionData(String host, int port);
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, result of
5008ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project   *  {@code session.getPeerHost()} or data is null
5108ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project   */
5208ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project  public void putSessionData(SSLSession session, byte[] sessionData);
5308ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project}