Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/share/classes/javax/net/ssl/SSLEngineResult.java
38918 views
1
/*
2
* Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation. Oracle designates this
8
* particular file as subject to the "Classpath" exception as provided
9
* by Oracle in the LICENSE file that accompanied this code.
10
*
11
* This code is distributed in the hope that it will be useful, but WITHOUT
12
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
* version 2 for more details (a copy is included in the LICENSE file that
15
* accompanied this code).
16
*
17
* You should have received a copy of the GNU General Public License version
18
* 2 along with this work; if not, write to the Free Software Foundation,
19
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20
*
21
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22
* or visit www.oracle.com if you need additional information or have any
23
* questions.
24
*/
25
26
package javax.net.ssl;
27
28
/**
29
* An encapsulation of the result state produced by
30
* <code>SSLEngine</code> I/O calls.
31
*
32
* <p> A <code>SSLEngine</code> provides a means for establishing
33
* secure communication sessions between two peers. <code>SSLEngine</code>
34
* operations typically consume bytes from an input buffer and produce
35
* bytes in an output buffer. This class provides operational result
36
* values describing the state of the <code>SSLEngine</code>, including
37
* indications of what operations are needed to finish an
38
* ongoing handshake. Lastly, it reports the number of bytes consumed
39
* and produced as a result of this operation.
40
*
41
* @see SSLEngine
42
* @see SSLEngine#wrap(ByteBuffer, ByteBuffer)
43
* @see SSLEngine#unwrap(ByteBuffer, ByteBuffer)
44
*
45
* @author Brad R. Wetmore
46
* @since 1.5
47
*/
48
49
public class SSLEngineResult {
50
51
/**
52
* An <code>SSLEngineResult</code> enum describing the overall result
53
* of the <code>SSLEngine</code> operation.
54
*
55
* The <code>Status</code> value does not reflect the
56
* state of a <code>SSLEngine</code> handshake currently
57
* in progress. The <code>SSLEngineResult's HandshakeStatus</code>
58
* should be consulted for that information.
59
*
60
* @author Brad R. Wetmore
61
* @since 1.5
62
*/
63
public static enum Status {
64
65
/**
66
* The <code>SSLEngine</code> was not able to unwrap the
67
* incoming data because there were not enough source bytes
68
* available to make a complete packet.
69
*
70
* <P>
71
* Repeat the call once more bytes are available.
72
*/
73
BUFFER_UNDERFLOW,
74
75
/**
76
* The <code>SSLEngine</code> was not able to process the
77
* operation because there are not enough bytes available in the
78
* destination buffer to hold the result.
79
* <P>
80
* Repeat the call once more bytes are available.
81
*
82
* @see SSLSession#getPacketBufferSize()
83
* @see SSLSession#getApplicationBufferSize()
84
*/
85
BUFFER_OVERFLOW,
86
87
/**
88
* The <code>SSLEngine</code> completed the operation, and
89
* is available to process similar calls.
90
*/
91
OK,
92
93
/**
94
* The operation just closed this side of the
95
* <code>SSLEngine</code>, or the operation
96
* could not be completed because it was already closed.
97
*/
98
CLOSED;
99
}
100
101
/**
102
* An <code>SSLEngineResult</code> enum describing the current
103
* handshaking state of this <code>SSLEngine</code>.
104
*
105
* @author Brad R. Wetmore
106
* @since 1.5
107
*/
108
public static enum HandshakeStatus {
109
110
/**
111
* The <code>SSLEngine</code> is not currently handshaking.
112
*/
113
NOT_HANDSHAKING,
114
115
/**
116
* The <code>SSLEngine</code> has just finished handshaking.
117
* <P>
118
* This value is only generated by a call to
119
* <code>SSLEngine.wrap()/unwrap()</code> when that call
120
* finishes a handshake. It is never generated by
121
* <code>SSLEngine.getHandshakeStatus()</code>.
122
*
123
* @see SSLEngine#wrap(ByteBuffer, ByteBuffer)
124
* @see SSLEngine#unwrap(ByteBuffer, ByteBuffer)
125
* @see SSLEngine#getHandshakeStatus()
126
*/
127
FINISHED,
128
129
/**
130
* The <code>SSLEngine</code> needs the results of one (or more)
131
* delegated tasks before handshaking can continue.
132
*
133
* @see SSLEngine#getDelegatedTask()
134
*/
135
NEED_TASK,
136
137
/**
138
* The <code>SSLEngine</code> must send data to the remote side
139
* before handshaking can continue, so <code>SSLEngine.wrap()</code>
140
* should be called.
141
*
142
* @see SSLEngine#wrap(ByteBuffer, ByteBuffer)
143
*/
144
NEED_WRAP,
145
146
/**
147
* The <code>SSLEngine</code> needs to receive data from the
148
* remote side before handshaking can continue.
149
*/
150
NEED_UNWRAP;
151
}
152
153
154
private final Status status;
155
private final HandshakeStatus handshakeStatus;
156
private final int bytesConsumed;
157
private final int bytesProduced;
158
159
/**
160
* Initializes a new instance of this class.
161
*
162
* @param status
163
* the return value of the operation.
164
*
165
* @param handshakeStatus
166
* the current handshaking status.
167
*
168
* @param bytesConsumed
169
* the number of bytes consumed from the source ByteBuffer
170
*
171
* @param bytesProduced
172
* the number of bytes placed into the destination ByteBuffer
173
*
174
* @throws IllegalArgumentException
175
* if the <code>status</code> or <code>handshakeStatus</code>
176
* arguments are null, or if <code>bytesConsumed</code> or
177
* <code>bytesProduced</code> is negative.
178
*/
179
public SSLEngineResult(Status status, HandshakeStatus handshakeStatus,
180
int bytesConsumed, int bytesProduced) {
181
182
if ((status == null) || (handshakeStatus == null) ||
183
(bytesConsumed < 0) || (bytesProduced < 0)) {
184
throw new IllegalArgumentException("Invalid Parameter(s)");
185
}
186
187
this.status = status;
188
this.handshakeStatus = handshakeStatus;
189
this.bytesConsumed = bytesConsumed;
190
this.bytesProduced = bytesProduced;
191
}
192
193
/**
194
* Gets the return value of this <code>SSLEngine</code> operation.
195
*
196
* @return the return value
197
*/
198
final public Status getStatus() {
199
return status;
200
}
201
202
/**
203
* Gets the handshake status of this <code>SSLEngine</code>
204
* operation.
205
*
206
* @return the handshake status
207
*/
208
final public HandshakeStatus getHandshakeStatus() {
209
return handshakeStatus;
210
}
211
212
/**
213
* Returns the number of bytes consumed from the input buffer.
214
*
215
* @return the number of bytes consumed.
216
*/
217
final public int bytesConsumed() {
218
return bytesConsumed;
219
}
220
221
/**
222
* Returns the number of bytes written to the output buffer.
223
*
224
* @return the number of bytes produced
225
*/
226
final public int bytesProduced() {
227
return bytesProduced;
228
}
229
230
/**
231
* Returns a String representation of this object.
232
*/
233
@Override
234
public String toString() {
235
return ("Status = " + status +
236
" HandshakeStatus = " + handshakeStatus +
237
"\nbytesConsumed = " + bytesConsumed +
238
" bytesProduced = " + bytesProduced);
239
}
240
}
241
242