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.provider.jsse;
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.xnet.provider.jsse.Message;
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException;
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/**
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Represents Finished message
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see <a href="http://www.ietf.org/rfc/rfc2246.txt">TLS 1.0 spec., 7.4.9.
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Finished</a>
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class Finished extends Message {
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // verify data
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private byte[] data;
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Creates outbound message
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param bytes
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public Finished(byte[] bytes) {
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        data = bytes;
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        length = data.length;
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Creates inbound message
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param in
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param length
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IOException
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public Finished(HandshakeIODataStream in, int length)
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws IOException {
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (length == 12 || length == 36) {
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            data = in.read(length);
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            length = data.length;
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else {
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fatalAlert(AlertProtocol.DECODE_ERROR, "DECODE ERROR: incorrect Finished");
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
61a055db83f05034fcd5564ab5930e8d16d4ececfbJesse Wilson    @Override
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void send(HandshakeIODataStream out) {
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        out.write(data);
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns message type
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
70a055db83f05034fcd5564ab5930e8d16d4ececfbJesse Wilson    @Override
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public int getType() {
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return Handshake.FINISHED;
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns verify data
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public byte[] getData() {
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return data;
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
83