1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  this work for additional information regarding copyright ownership.
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  the License.  You may obtain a copy of the License at
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  See the License for the specific language governing permissions and
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  limitations under the License.
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage org.apache.harmony.xnet.tests.support;
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.nio.ByteBuffer;
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.KeyManagementException;
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.SecureRandom;
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.net.ssl.KeyManager;
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.net.ssl.SSLContextSpi;
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.net.ssl.SSLEngine;
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.net.ssl.SSLEngineResult;
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.net.ssl.SSLException;
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.net.ssl.SSLSession;
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.net.ssl.SSLSessionContext;
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.net.ssl.SSLServerSocketFactory;
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.net.ssl.SSLSocketFactory;
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.net.ssl.TrustManager;
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/**
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Additional class for verification of SSLContextSpi and SSLContext
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * functionality
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class MySSLContextSpi extends SSLContextSpi {
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private boolean init = false;
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected void engineInit(KeyManager[] km, TrustManager[] tm,
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            SecureRandom sr) throws KeyManagementException {
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (sr == null) {
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new KeyManagementException(
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "secureRandom is null");
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        init = true;
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected SSLSocketFactory engineGetSocketFactory() {
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (!init) {
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new RuntimeException("Not initialiazed");
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return null;
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected SSLServerSocketFactory engineGetServerSocketFactory() {
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (!init) {
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new RuntimeException("Not initialiazed");
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return null;
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected SSLSessionContext engineGetServerSessionContext() {
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (!init) {
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new RuntimeException("Not initialiazed");
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return null;
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected SSLSessionContext engineGetClientSessionContext() {
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (!init) {
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new RuntimeException("Not initialiazed");
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return null;
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * FIXME: add these methods
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected SSLEngine engineCreateSSLEngine(String host, int port) {
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (!init) {
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new RuntimeException("Not initialiazed");
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return new tmpSSLEngine(host, port);
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected SSLEngine engineCreateSSLEngine() {
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (!init) {
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new RuntimeException("Not initialiazed");
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return new tmpSSLEngine();
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public class tmpSSLEngine extends SSLEngine {
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String tmpHost;
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int tmpPort;
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public tmpSSLEngine() {
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            tmpHost = null;
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            tmpPort = 0;
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public tmpSSLEngine(String host, int port) {
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            tmpHost = host;
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            tmpPort = port;
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public String getPeerHost() {
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return tmpHost;
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public int getPeerPort() {
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return tmpPort;
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void beginHandshake() throws SSLException { }
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void closeInbound() throws SSLException { }
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void closeOutbound() {}
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public Runnable getDelegatedTask() { return null; }
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public String[] getEnabledCipherSuites() { return null; }
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public String[] getEnabledProtocols() {return null; }
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public boolean getEnableSessionCreation() { return true; }
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public SSLEngineResult.HandshakeStatus getHandshakeStatus() { return null; }
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public boolean getNeedClientAuth() { return true; }
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public SSLSession getSession() { return null; }
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public String[] getSupportedCipherSuites()  { return null; }
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public String[] getSupportedProtocols()  { return null; }
126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public boolean getUseClientMode()  { return true; }
127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public boolean getWantClientAuth()  { return true; }
128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public boolean isInboundDone()  { return true; }
129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public boolean isOutboundDone()  { return true; }
130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void setEnabledCipherSuites(String[] suites) { }
131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void setEnabledProtocols(String[] protocols) { }
132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void setEnableSessionCreation(boolean flag) { }
133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void setNeedClientAuth(boolean need) { }
134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void setUseClientMode(boolean mode) { }
135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void setWantClientAuth(boolean want) { }
136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public SSLEngineResult unwrap(ByteBuffer src, ByteBuffer[] dsts,
137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                int offset, int length) throws SSLException {
138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return null;
139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public SSLEngineResult wrap(ByteBuffer[] srcs, int offset,
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                int length, ByteBuffer dst) throws SSLException {
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return null;
143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}