162190cd439f163c7a53604b01836a576ef88013aChad Brubaker/*
262190cd439f163c7a53604b01836a576ef88013aChad Brubaker * Copyright (C) 2015 The Android Open Source Project
362190cd439f163c7a53604b01836a576ef88013aChad Brubaker *
462190cd439f163c7a53604b01836a576ef88013aChad Brubaker * Licensed under the Apache License, Version 2.0 (the "License");
562190cd439f163c7a53604b01836a576ef88013aChad Brubaker * you may not use this file except in compliance with the License.
662190cd439f163c7a53604b01836a576ef88013aChad Brubaker * You may obtain a copy of the License at
762190cd439f163c7a53604b01836a576ef88013aChad Brubaker *
862190cd439f163c7a53604b01836a576ef88013aChad Brubaker *      http://www.apache.org/licenses/LICENSE-2.0
962190cd439f163c7a53604b01836a576ef88013aChad Brubaker *
1062190cd439f163c7a53604b01836a576ef88013aChad Brubaker * Unless required by applicable law or agreed to in writing, software
1162190cd439f163c7a53604b01836a576ef88013aChad Brubaker * distributed under the License is distributed on an "AS IS" BASIS,
1262190cd439f163c7a53604b01836a576ef88013aChad Brubaker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1362190cd439f163c7a53604b01836a576ef88013aChad Brubaker * See the License for the specific language governing permissions and
1462190cd439f163c7a53604b01836a576ef88013aChad Brubaker * limitations under the License.
1562190cd439f163c7a53604b01836a576ef88013aChad Brubaker */
1662190cd439f163c7a53604b01836a576ef88013aChad Brubakerpackage com.android.org.conscrypt;
1762190cd439f163c7a53604b01836a576ef88013aChad Brubaker
1862190cd439f163c7a53604b01836a576ef88013aChad Brubakerimport java.io.FileDescriptor;
1962190cd439f163c7a53604b01836a576ef88013aChad Brubakerimport java.io.IOException;
2062190cd439f163c7a53604b01836a576ef88013aChad Brubakerimport java.io.InputStream;
2162190cd439f163c7a53604b01836a576ef88013aChad Brubakerimport java.io.OutputStream;
2262190cd439f163c7a53604b01836a576ef88013aChad Brubakerimport java.net.InetAddress;
2362190cd439f163c7a53604b01836a576ef88013aChad Brubakerimport java.net.Socket;
2462190cd439f163c7a53604b01836a576ef88013aChad Brubakerimport java.net.SocketException;
2562190cd439f163c7a53604b01836a576ef88013aChad Brubakerimport java.security.PrivateKey;
2662190cd439f163c7a53604b01836a576ef88013aChad Brubakerimport java.security.cert.CertificateEncodingException;
2762190cd439f163c7a53604b01836a576ef88013aChad Brubakerimport java.security.cert.CertificateException;
2862190cd439f163c7a53604b01836a576ef88013aChad Brubakerimport javax.net.ssl.HandshakeCompletedEvent;
2962190cd439f163c7a53604b01836a576ef88013aChad Brubakerimport javax.net.ssl.HandshakeCompletedListener;
3062190cd439f163c7a53604b01836a576ef88013aChad Brubakerimport javax.net.ssl.SSLException;
3162190cd439f163c7a53604b01836a576ef88013aChad Brubakerimport javax.net.ssl.SSLSession;
3262190cd439f163c7a53604b01836a576ef88013aChad Brubaker
3362190cd439f163c7a53604b01836a576ef88013aChad Brubaker
3462190cd439f163c7a53604b01836a576ef88013aChad Brubaker
3562190cd439f163c7a53604b01836a576ef88013aChad Brubaker/**
3662190cd439f163c7a53604b01836a576ef88013aChad Brubaker * Implementation of the class OpenSSLSocketImpl based on OpenSSL.
3762190cd439f163c7a53604b01836a576ef88013aChad Brubaker * <p>
3862190cd439f163c7a53604b01836a576ef88013aChad Brubaker * Extensions to SSLSocket include:
3962190cd439f163c7a53604b01836a576ef88013aChad Brubaker * <ul>
4062190cd439f163c7a53604b01836a576ef88013aChad Brubaker * <li>handshake timeout
4162190cd439f163c7a53604b01836a576ef88013aChad Brubaker * <li>session tickets
4262190cd439f163c7a53604b01836a576ef88013aChad Brubaker * <li>Server Name Indication
4362190cd439f163c7a53604b01836a576ef88013aChad Brubaker * </ul>
4462190cd439f163c7a53604b01836a576ef88013aChad Brubaker */
4562190cd439f163c7a53604b01836a576ef88013aChad Brubakerpublic class OpenSSLSocketImpl
4662190cd439f163c7a53604b01836a576ef88013aChad Brubaker        extends javax.net.ssl.SSLSocket
4762190cd439f163c7a53604b01836a576ef88013aChad Brubaker        implements NativeCrypto.SSLHandshakeCallbacks {
4862190cd439f163c7a53604b01836a576ef88013aChad Brubaker
4962190cd439f163c7a53604b01836a576ef88013aChad Brubaker
5062190cd439f163c7a53604b01836a576ef88013aChad Brubaker    protected OpenSSLSocketImpl(SSLParametersImpl sslParameters) throws IOException {
5162190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
5262190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
5362190cd439f163c7a53604b01836a576ef88013aChad Brubaker
5462190cd439f163c7a53604b01836a576ef88013aChad Brubaker    protected OpenSSLSocketImpl(SSLParametersImpl sslParameters,
5562190cd439f163c7a53604b01836a576ef88013aChad Brubaker                                String[] enabledProtocols,
5662190cd439f163c7a53604b01836a576ef88013aChad Brubaker                                String[] enabledCipherSuites) throws IOException {
5762190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
5862190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
5962190cd439f163c7a53604b01836a576ef88013aChad Brubaker
6062190cd439f163c7a53604b01836a576ef88013aChad Brubaker    protected OpenSSLSocketImpl(String host, int port, SSLParametersImpl sslParameters)
6162190cd439f163c7a53604b01836a576ef88013aChad Brubaker            throws IOException {
6262190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
6362190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
6462190cd439f163c7a53604b01836a576ef88013aChad Brubaker
6562190cd439f163c7a53604b01836a576ef88013aChad Brubaker    protected OpenSSLSocketImpl(InetAddress address, int port, SSLParametersImpl sslParameters)
6662190cd439f163c7a53604b01836a576ef88013aChad Brubaker            throws IOException {
6762190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
6862190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
6962190cd439f163c7a53604b01836a576ef88013aChad Brubaker
7062190cd439f163c7a53604b01836a576ef88013aChad Brubaker
7162190cd439f163c7a53604b01836a576ef88013aChad Brubaker    protected OpenSSLSocketImpl(String host, int port,
7262190cd439f163c7a53604b01836a576ef88013aChad Brubaker                                InetAddress clientAddress, int clientPort,
7362190cd439f163c7a53604b01836a576ef88013aChad Brubaker                                SSLParametersImpl sslParameters) throws IOException {
7462190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
7562190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
7662190cd439f163c7a53604b01836a576ef88013aChad Brubaker
7762190cd439f163c7a53604b01836a576ef88013aChad Brubaker    protected OpenSSLSocketImpl(InetAddress address, int port,
7862190cd439f163c7a53604b01836a576ef88013aChad Brubaker                                InetAddress clientAddress, int clientPort,
7962190cd439f163c7a53604b01836a576ef88013aChad Brubaker                                SSLParametersImpl sslParameters) throws IOException {
8062190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
8162190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
8262190cd439f163c7a53604b01836a576ef88013aChad Brubaker
8362190cd439f163c7a53604b01836a576ef88013aChad Brubaker    protected OpenSSLSocketImpl(Socket socket, String host, int port,
8462190cd439f163c7a53604b01836a576ef88013aChad Brubaker            boolean autoClose, SSLParametersImpl sslParameters) throws IOException {
8562190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
8662190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
8762190cd439f163c7a53604b01836a576ef88013aChad Brubaker
8862190cd439f163c7a53604b01836a576ef88013aChad Brubaker    @Override public synchronized void startHandshake() throws IOException {
8962190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
9062190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
9162190cd439f163c7a53604b01836a576ef88013aChad Brubaker
9262190cd439f163c7a53604b01836a576ef88013aChad Brubaker    @SuppressWarnings("unused") // used by NativeCrypto.SSLHandshakeCallbacks / client_cert_cb
9362190cd439f163c7a53604b01836a576ef88013aChad Brubaker    public void clientCertificateRequested(byte[] keyTypeBytes, byte[][] asn1DerEncodedPrincipals)
9462190cd439f163c7a53604b01836a576ef88013aChad Brubaker            throws CertificateEncodingException, SSLException {
9562190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
9662190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
9762190cd439f163c7a53604b01836a576ef88013aChad Brubaker
9862190cd439f163c7a53604b01836a576ef88013aChad Brubaker    @SuppressWarnings("unused") // used by NativeCrypto.SSLHandshakeCallbacks / info_callback
9962190cd439f163c7a53604b01836a576ef88013aChad Brubaker    public void handshakeCompleted() {
10062190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
10162190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
10262190cd439f163c7a53604b01836a576ef88013aChad Brubaker    @SuppressWarnings("unused") // used by NativeCrypto.SSLHandshakeCallbacks
10362190cd439f163c7a53604b01836a576ef88013aChad Brubaker    @Override public void verifyCertificateChain(byte[][] bytes, String authMethod)
10462190cd439f163c7a53604b01836a576ef88013aChad Brubaker            throws CertificateException {
10562190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
10662190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
10762190cd439f163c7a53604b01836a576ef88013aChad Brubaker
10862190cd439f163c7a53604b01836a576ef88013aChad Brubaker    @Override public InputStream getInputStream() throws IOException {
10962190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
11062190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
11162190cd439f163c7a53604b01836a576ef88013aChad Brubaker
11262190cd439f163c7a53604b01836a576ef88013aChad Brubaker    @Override public OutputStream getOutputStream() throws IOException {
11362190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
11462190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
11562190cd439f163c7a53604b01836a576ef88013aChad Brubaker    @Override public SSLSession getSession() {
11662190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
11762190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
11862190cd439f163c7a53604b01836a576ef88013aChad Brubaker
11962190cd439f163c7a53604b01836a576ef88013aChad Brubaker    @Override public void addHandshakeCompletedListener(
12062190cd439f163c7a53604b01836a576ef88013aChad Brubaker            HandshakeCompletedListener listener) {
12162190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
12262190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
12362190cd439f163c7a53604b01836a576ef88013aChad Brubaker
12462190cd439f163c7a53604b01836a576ef88013aChad Brubaker    @Override public void removeHandshakeCompletedListener(
12562190cd439f163c7a53604b01836a576ef88013aChad Brubaker            HandshakeCompletedListener listener) {
12662190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
12762190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
12862190cd439f163c7a53604b01836a576ef88013aChad Brubaker
12962190cd439f163c7a53604b01836a576ef88013aChad Brubaker    @Override public boolean getEnableSessionCreation() {
13062190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
13162190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
13262190cd439f163c7a53604b01836a576ef88013aChad Brubaker
13362190cd439f163c7a53604b01836a576ef88013aChad Brubaker    @Override public void setEnableSessionCreation(boolean flag) {
13462190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
13562190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
13662190cd439f163c7a53604b01836a576ef88013aChad Brubaker
13762190cd439f163c7a53604b01836a576ef88013aChad Brubaker    @Override public String[] getSupportedCipherSuites() {
13862190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
13962190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
14062190cd439f163c7a53604b01836a576ef88013aChad Brubaker
14162190cd439f163c7a53604b01836a576ef88013aChad Brubaker    @Override public String[] getEnabledCipherSuites() {
14262190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
14362190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
14462190cd439f163c7a53604b01836a576ef88013aChad Brubaker
14562190cd439f163c7a53604b01836a576ef88013aChad Brubaker    @Override public void setEnabledCipherSuites(String[] suites) {
14662190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
14762190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
14862190cd439f163c7a53604b01836a576ef88013aChad Brubaker
14962190cd439f163c7a53604b01836a576ef88013aChad Brubaker    @Override public String[] getSupportedProtocols() {
15062190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
15162190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
15262190cd439f163c7a53604b01836a576ef88013aChad Brubaker
15362190cd439f163c7a53604b01836a576ef88013aChad Brubaker    @Override public String[] getEnabledProtocols() {
15462190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
15562190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
15662190cd439f163c7a53604b01836a576ef88013aChad Brubaker
15762190cd439f163c7a53604b01836a576ef88013aChad Brubaker    @Override public void setEnabledProtocols(String[] protocols) {
15862190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
15962190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
16062190cd439f163c7a53604b01836a576ef88013aChad Brubaker    public void setUseSessionTickets(boolean useSessionTickets) {
16162190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
16262190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
16362190cd439f163c7a53604b01836a576ef88013aChad Brubaker
16462190cd439f163c7a53604b01836a576ef88013aChad Brubaker    public void setHostname(String hostname) {
16562190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
16662190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
16762190cd439f163c7a53604b01836a576ef88013aChad Brubaker
16862190cd439f163c7a53604b01836a576ef88013aChad Brubaker    public void setChannelIdEnabled(boolean enabled) {
16962190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
17062190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
17162190cd439f163c7a53604b01836a576ef88013aChad Brubaker
17262190cd439f163c7a53604b01836a576ef88013aChad Brubaker    public byte[] getChannelId() throws SSLException {
17362190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
17462190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
17562190cd439f163c7a53604b01836a576ef88013aChad Brubaker    public void setChannelIdPrivateKey(PrivateKey privateKey) {
17662190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
17762190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
17862190cd439f163c7a53604b01836a576ef88013aChad Brubaker
17962190cd439f163c7a53604b01836a576ef88013aChad Brubaker    @Override public boolean getUseClientMode() {
18062190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
18162190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
18262190cd439f163c7a53604b01836a576ef88013aChad Brubaker
18362190cd439f163c7a53604b01836a576ef88013aChad Brubaker    @Override public void setUseClientMode(boolean mode) {
18462190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
18562190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
18662190cd439f163c7a53604b01836a576ef88013aChad Brubaker
18762190cd439f163c7a53604b01836a576ef88013aChad Brubaker    @Override public boolean getWantClientAuth() {
18862190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
18962190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
19062190cd439f163c7a53604b01836a576ef88013aChad Brubaker
19162190cd439f163c7a53604b01836a576ef88013aChad Brubaker    @Override public boolean getNeedClientAuth() {
19262190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
19362190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
19462190cd439f163c7a53604b01836a576ef88013aChad Brubaker
19562190cd439f163c7a53604b01836a576ef88013aChad Brubaker    @Override public void setNeedClientAuth(boolean need) {
19662190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
19762190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
19862190cd439f163c7a53604b01836a576ef88013aChad Brubaker
19962190cd439f163c7a53604b01836a576ef88013aChad Brubaker    @Override public void setWantClientAuth(boolean want) {
20062190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
20162190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
20262190cd439f163c7a53604b01836a576ef88013aChad Brubaker
20362190cd439f163c7a53604b01836a576ef88013aChad Brubaker    @Override public void sendUrgentData(int data) throws IOException {
20462190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
20562190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
20662190cd439f163c7a53604b01836a576ef88013aChad Brubaker
20762190cd439f163c7a53604b01836a576ef88013aChad Brubaker    @Override public void setOOBInline(boolean on) throws SocketException {
20862190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
20962190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
21062190cd439f163c7a53604b01836a576ef88013aChad Brubaker
21162190cd439f163c7a53604b01836a576ef88013aChad Brubaker    @Override public void setSoTimeout(int readTimeoutMilliseconds) throws SocketException {
21262190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
21362190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
21462190cd439f163c7a53604b01836a576ef88013aChad Brubaker
21562190cd439f163c7a53604b01836a576ef88013aChad Brubaker    @Override public int getSoTimeout() throws SocketException {
21662190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
21762190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
21862190cd439f163c7a53604b01836a576ef88013aChad Brubaker
21962190cd439f163c7a53604b01836a576ef88013aChad Brubaker    /**
22062190cd439f163c7a53604b01836a576ef88013aChad Brubaker     * Note write timeouts are not part of the javax.net.ssl.SSLSocket API
22162190cd439f163c7a53604b01836a576ef88013aChad Brubaker     */
22262190cd439f163c7a53604b01836a576ef88013aChad Brubaker    public void setSoWriteTimeout(int writeTimeoutMilliseconds) throws SocketException {
22362190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
22462190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
22562190cd439f163c7a53604b01836a576ef88013aChad Brubaker
22662190cd439f163c7a53604b01836a576ef88013aChad Brubaker    /**
22762190cd439f163c7a53604b01836a576ef88013aChad Brubaker     * Note write timeouts are not part of the javax.net.ssl.SSLSocket API
22862190cd439f163c7a53604b01836a576ef88013aChad Brubaker     */
22962190cd439f163c7a53604b01836a576ef88013aChad Brubaker    public int getSoWriteTimeout() throws SocketException {
23062190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
23162190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
23262190cd439f163c7a53604b01836a576ef88013aChad Brubaker
23362190cd439f163c7a53604b01836a576ef88013aChad Brubaker    /**
23462190cd439f163c7a53604b01836a576ef88013aChad Brubaker     * Set the handshake timeout on this socket.  This timeout is specified in
23562190cd439f163c7a53604b01836a576ef88013aChad Brubaker     * milliseconds and will be used only during the handshake process.
23662190cd439f163c7a53604b01836a576ef88013aChad Brubaker     */
23762190cd439f163c7a53604b01836a576ef88013aChad Brubaker    public void setHandshakeTimeout(int handshakeTimeoutMilliseconds) throws SocketException {
23862190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
23962190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
24062190cd439f163c7a53604b01836a576ef88013aChad Brubaker
24162190cd439f163c7a53604b01836a576ef88013aChad Brubaker    @Override public void close() throws IOException {
24262190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
24362190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
24462190cd439f163c7a53604b01836a576ef88013aChad Brubaker
24562190cd439f163c7a53604b01836a576ef88013aChad Brubaker    public FileDescriptor getFileDescriptor$() {
24662190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
24762190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
24862190cd439f163c7a53604b01836a576ef88013aChad Brubaker
24962190cd439f163c7a53604b01836a576ef88013aChad Brubaker    /**
25062190cd439f163c7a53604b01836a576ef88013aChad Brubaker     * Returns the protocol agreed upon by client and server, or null if no
25162190cd439f163c7a53604b01836a576ef88013aChad Brubaker     * protocol was agreed upon.
25262190cd439f163c7a53604b01836a576ef88013aChad Brubaker     */
25362190cd439f163c7a53604b01836a576ef88013aChad Brubaker    public byte[] getNpnSelectedProtocol() {
25462190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
25562190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
25662190cd439f163c7a53604b01836a576ef88013aChad Brubaker
25762190cd439f163c7a53604b01836a576ef88013aChad Brubaker    /**
25862190cd439f163c7a53604b01836a576ef88013aChad Brubaker     * Sets the list of protocols this peer is interested in. If null no
25962190cd439f163c7a53604b01836a576ef88013aChad Brubaker     * protocols will be used.
26062190cd439f163c7a53604b01836a576ef88013aChad Brubaker     *
26162190cd439f163c7a53604b01836a576ef88013aChad Brubaker     * @param npnProtocols a non-empty array of protocol names. From
26262190cd439f163c7a53604b01836a576ef88013aChad Brubaker     *     SSL_select_next_proto, "vector of 8-bit, length prefixed byte
26362190cd439f163c7a53604b01836a576ef88013aChad Brubaker     *     strings. The length byte itself is not included in the length. A byte
26462190cd439f163c7a53604b01836a576ef88013aChad Brubaker     *     string of length 0 is invalid. No byte string may be truncated.".
26562190cd439f163c7a53604b01836a576ef88013aChad Brubaker     */
26662190cd439f163c7a53604b01836a576ef88013aChad Brubaker    public void setNpnProtocols(byte[] npnProtocols) {
26762190cd439f163c7a53604b01836a576ef88013aChad Brubaker        throw new RuntimeException("Stub!");
26862190cd439f163c7a53604b01836a576ef88013aChad Brubaker    }
26962190cd439f163c7a53604b01836a576ef88013aChad Brubaker}
270