| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package javax.net.ssl; |
| |
| /** |
| * The result object describing the state of the {@code SSLEngine} produced |
| * by the {@code wrap()} and {@code unwrap()} operations. |
| */ |
| public class SSLEngineResult { |
| |
| /** |
| * The {@code enum} describing the state of the current handshake. |
| */ |
| public enum HandshakeStatus { |
| /** |
| * No handshake in progress. |
| */ |
| NOT_HANDSHAKING, |
| /** |
| * The handshake is finished. |
| */ |
| FINISHED, |
| /** |
| * The results of one (or more) delegated tasks are needed to continue |
| * the handshake. |
| */ |
| NEED_TASK, |
| /** |
| * The engine must send data to the remote side to continue the |
| * handshake. |
| */ |
| NEED_WRAP, |
| /** |
| * The engine needs to receive data from the remote side to continue the |
| * handshake. |
| */ |
| NEED_UNWRAP |
| } |
| |
| /** |
| * The {@code enum} describing the result of the {@code SSLEngine} |
| * operation. |
| */ |
| public static enum Status { |
| /** |
| * The size of the destination buffer is too small to hold the result of |
| * the current operation. |
| */ |
| BUFFER_OVERFLOW, |
| /** |
| * There were not enough bytes available in the source buffer to |
| * complete the current operation. |
| */ |
| BUFFER_UNDERFLOW, |
| /** |
| * The operation closed this side of the communication or was already |
| * closed. |
| */ |
| CLOSED, |
| /** |
| * The operation completed successfully. |
| */ |
| OK |
| } |
| |
| // Store Status object |
| private final SSLEngineResult.Status status; |
| |
| // Store HandshakeStatus object |
| private final SSLEngineResult.HandshakeStatus handshakeStatus; |
| |
| // Store bytesConsumed |
| private final int bytesConsumed; |
| |
| // Store bytesProduced |
| private final int bytesProduced; |
| |
| /** |
| * Creates a new {@code SSLEngineResult} instance with the specified state |
| * values. |
| * |
| * @param status |
| * the return value of the {@code SSLEngine} operation. |
| * @param handshakeStatus |
| * the status of the current handshake |
| * @param bytesConsumed |
| * the number of bytes retrieved from the source buffer(s). |
| * @param bytesProduced |
| * the number of bytes transferred to the destination buffer(s). |
| * @throws IllegalArgumentException |
| * if {@code status} or {@code handshakeStatus} is {@code null}, |
| * or if {@code bytesConsumed} or {@code bytesProduces} are |
| * negative. |
| */ |
| public SSLEngineResult(SSLEngineResult.Status status, |
| SSLEngineResult.HandshakeStatus handshakeStatus, int bytesConsumed, int bytesProduced) { |
| if (status == null) { |
| throw new IllegalArgumentException("status is null"); |
| } |
| if (handshakeStatus == null) { |
| throw new IllegalArgumentException("handshakeStatus is null"); |
| } |
| if (bytesConsumed < 0) { |
| throw new IllegalArgumentException("bytesConsumed is negative"); |
| } |
| if (bytesProduced < 0) { |
| throw new IllegalArgumentException("bytesProduced is negative"); |
| } |
| this.status = status; |
| this.handshakeStatus = handshakeStatus; |
| this.bytesConsumed = bytesConsumed; |
| this.bytesProduced = bytesProduced; |
| } |
| |
| /** |
| * Returns the return value of the {@code SSLEngine} operation. |
| * |
| * @return the return value of the {@code SSLEngine} operation. |
| */ |
| public final Status getStatus() { |
| return status; |
| } |
| |
| /** |
| * Returns the status of the current handshake. |
| * |
| * @return the status of the current handshake. |
| */ |
| public final HandshakeStatus getHandshakeStatus() { |
| return handshakeStatus; |
| } |
| |
| /** |
| * Returns the number of bytes retrieved from the source buffer(s). |
| * |
| * @return the number of bytes retrieved from the source buffer(s). |
| */ |
| public final int bytesConsumed() { |
| return bytesConsumed; |
| } |
| |
| /** |
| * Returns the number of bytes transferred to the destination buffer(s). |
| * |
| * @return the number of bytes transferred to the destination buffer(s). |
| */ |
| public final int bytesProduced() { |
| return bytesProduced; |
| } |
| |
| @Override |
| public String toString() { |
| return "SSLEngineReport: Status = " + status + " HandshakeStatus = " + handshakeStatus |
| + "\n bytesConsumed = " + bytesConsumed + " bytesProduced = " |
| + bytesProduced; |
| } |
| } |