@@ -91,26 +91,11 @@ protected int readPackets(ByteBuffer readingBuffer) {
9191 }
9292 }
9393
94- protected ByteBuffer moveDataToNetworkBuffer (ByteBuffer readingBuffer ) {
95- log .debug (remoteAddress (), readingBuffer ,
96- (address , buf ) -> "[%s] Append new part of received data:\n %s" .formatted (address , hexDump (buf )));
97- ByteBuffer sslNetworkBuffer = sslNetworkBuffer ();
98- int availableSpace = sslNetworkBuffer .capacity () - sslNetworkBuffer .limit ();
99- if (availableSpace >= readingBuffer .limit ()) {
100- BufferUtils .appendAndClear (sslNetworkBuffer , readingBuffer );
101- } else {
102- sslNetworkBuffer = increaseNetworkBuffer (readingBuffer .limit ());
103- BufferUtils .appendAndClear (sslNetworkBuffer , readingBuffer );
104- }
105- log .debug (remoteAddress (), sslNetworkBuffer ,
106- (address , buf ) -> "[%s] Result pending received network data:\n %s" .formatted (address , hexDump (buf )));
107- return sslNetworkBuffer ;
108- }
109-
11094 protected int doHandshake (ByteBuffer networkBuffer , int receivedBytes ) {
11195 HandshakeStatus handshakeStatus = sslEngine .getHandshakeStatus ();
96+ String remoteAddress = remoteAddress ();
11297 while (SslUtils .needToProcess (handshakeStatus )) {
113- log .debug (remoteAddress () , handshakeStatus , "[%s] Do handshake with status:[%s] " ::formatted );
98+ log .debug (remoteAddress , handshakeStatus , "[%s] Do handshake with status:[%s] " ::formatted );
11499 switch (handshakeStatus ) {
115100 case NEED_UNWRAP : {
116101 SSLEngineResult result ;
@@ -128,15 +113,14 @@ protected int doHandshake(ByteBuffer networkBuffer, int receivedBytes) {
128113 handshakeStatus = sslEngine .getHandshakeStatus ();
129114 break ;
130115 } else if (!networkBuffer .hasRemaining ()) {
131- cleanNetworkBuffer (networkBuffer );
116+ NetworkUtils . cleanNetworkBuffer (networkBuffer );
132117 return SKIP_READ_PACKETS ;
133118 }
134119 try {
135- log .debug (remoteAddress (), networkBuffer ,
136- (address , buff ) -> "[%s] Try to unwrap data:\n %s" .formatted (address , hexDump (buff )));
120+ logDataBeforeUnwrap (remoteAddress , networkBuffer );
137121 result = sslEngine .unwrap (networkBuffer , EMPTY_BUFFERS );
138122 handshakeStatus = result .getHandshakeStatus ();
139- log .debug (remoteAddress () , handshakeStatus , "[%s] Handshake status:[%s] after unwrapping" ::formatted );
123+ log .debug (remoteAddress , handshakeStatus , "[%s] Handshake status:[%s] after unwrapping" ::formatted );
140124 } catch (SSLException sslException ) {
141125 log .error ("A problem was encountered while processing the data that caused the "
142126 + "SSLEngine to abort. Will try to properly close connection..." );
@@ -149,15 +133,11 @@ protected int doHandshake(ByteBuffer networkBuffer, int receivedBytes) {
149133 break ;
150134 }
151135 case BUFFER_OVERFLOW : {
152- throw new IllegalStateException ("Unexpected ssl engine result" );
136+ throw new IllegalStateException ("Unexpected SSL Engine result:" + result . getStatus () );
153137 }
154138 case BUFFER_UNDERFLOW : {
155- log .debug (remoteAddress (), "[%s] Wait for more received data..." ::formatted );
156- if (networkBuffer .position () > 0 ) {
157- networkBuffer
158- .compact ()
159- .limit (networkBuffer .position ());
160- }
139+ log .debug (remoteAddress , "[%s] Wait for more received data..." ::formatted );
140+ NetworkUtils .compactNetworkBufferIfNeed (networkBuffer );
161141 return SKIP_READ_PACKETS ;
162142 }
163143 case CLOSED : {
@@ -170,92 +150,105 @@ protected int doHandshake(ByteBuffer networkBuffer, int receivedBytes) {
170150 }
171151 }
172152 default : {
173- throw new IllegalStateException ("Invalid SSL status: " + result .getStatus ());
153+ throw new IllegalStateException ("Invalid SSL Engine result: " + result .getStatus ());
174154 }
175155 }
176156 break ;
177157 }
178158 case NEED_WRAP : {
179- log .debug (remoteAddress () , "[%s] Send command to wrap data" ::formatted );
180- packetWriter .accept (SslWritableNetworkPacket .getInstance ());
181- cleanNetworkBuffer (networkBuffer );
159+ log .debug (remoteAddress , "[%s] Send command to wrap data" ::formatted );
160+ packetWriter .accept (SslWrapRequestPacket .getInstance ());
161+ NetworkUtils . cleanNetworkBuffer (networkBuffer );
182162 return SKIP_READ_PACKETS ;
183163 }
184164 case NEED_TASK : {
185165 handshakeStatus = SslUtils .executeSslTasks (sslEngine );
186- log .debug (remoteAddress () , handshakeStatus , "[%s] Handshake status:[%s] after engine tasks" ::formatted );
166+ log .debug (remoteAddress , handshakeStatus , "[%s] Handshake status:[%s] after engine tasks" ::formatted );
187167 if (handshakeStatus == HandshakeStatus .NEED_UNWRAP && !networkBuffer .hasRemaining ()) {
188- cleanNetworkBuffer (networkBuffer );
168+ NetworkUtils . cleanNetworkBuffer (networkBuffer );
189169 return SKIP_READ_PACKETS ;
190170 }
191171 break ;
192172 }
193173 default : {
194- throw new IllegalStateException ("Invalid SSL status: " + handshakeStatus );
174+ throw new IllegalStateException ("Invalid SSL status:" + handshakeStatus );
195175 }
196176 }
197177 }
198178
199179 if (!networkBuffer .hasRemaining ()) {
200180 // if buffer is empty and status is FINISHED then we can notify writer
201181 if (handshakeStatus == HandshakeStatus .FINISHED ) {
202- packetWriter .accept (SslWritableNetworkPacket .getInstance ());
182+ packetWriter .accept (SslWrapRequestPacket .getInstance ());
203183 }
204- cleanNetworkBuffer (networkBuffer );
184+ NetworkUtils . cleanNetworkBuffer (networkBuffer );
205185 return SKIP_READ_PACKETS ;
206186 }
207187
208188 return decryptAndRead (networkBuffer );
209189 }
210190
211191 protected int decryptAndRead (ByteBuffer receivedBuffer ) {
192+ String remoteAddress = remoteAddress ();
212193 int total = 0 ;
213194 while (receivedBuffer .hasRemaining ()) {
195+ ByteBuffer sslDataBuffer = sslDataBuffer ();
214196 SSLEngineResult result ;
215197 try {
216- log .debug (remoteAddress (), receivedBuffer ,
217- (address , buf ) -> "[%s] Try to decrypt data:\n %s" .formatted (address , hexDump (buf )));
198+ logDataBeforeDecrypt (remoteAddress , receivedBuffer );
218199 result = sslEngine .unwrap (receivedBuffer , sslDataBuffer .clear ());
219200 } catch (SSLException e ) {
220201 throw new IllegalStateException (e );
221202 }
222203 switch (result .getStatus ()) {
223204 case OK : {
224205 sslDataBuffer .flip ();
225- log .debug (remoteAddress (), sslDataBuffer ,
226- (address , buf ) -> "[%s] Decrypted data:\n %s" .formatted (address , hexDump (buf )));
206+ logDataAfterDecrypt (remoteAddress , sslDataBuffer );
227207 total += readPackets (sslDataBuffer , sslDataPendingBuffer );
228208 break ;
229209 }
230210 case BUFFER_OVERFLOW : {
231- log .debug (remoteAddress () , "Increase SSL data buffer and try again..." ::formatted );
211+ log .debug (remoteAddress , "[%s] Increase SSL data buffer and try again..." ::formatted );
232212 increaseDataBuffer ();
233213 return decryptAndRead (receivedBuffer );
234214 }
235215 case BUFFER_UNDERFLOW : {
236- log .debug (remoteAddress (), "[%s] Wait for more received data..." ::formatted );
237- if (receivedBuffer .position () > 0 ) {
238- receivedBuffer
239- .compact ()
240- .limit (receivedBuffer .position ());
241- }
216+ log .debug (remoteAddress , "[%s] Wait for more received data..." ::formatted );
217+ NetworkUtils .compactNetworkBufferIfNeed (receivedBuffer );
242218 return SKIP_READ_PACKETS ;
243219 }
244220 case CLOSED : {
245221 connection .close ();
246222 return SKIP_READ_PACKETS ;
247223 }
248224 default : {
249- throw new IllegalStateException ("Invalid SSL status: " + result .getStatus ());
225+ throw new IllegalStateException ("Invalid SSL status:" + result .getStatus ());
250226 }
251227 }
252228 }
253229
254- log .debug (remoteAddress () , "[%s] Clear SSL network buffer" ::formatted );
255- cleanNetworkBuffer (receivedBuffer );
230+ log .debug (remoteAddress , "[%s] Clear SSL network buffer" ::formatted );
231+ NetworkUtils . cleanNetworkBuffer (receivedBuffer );
256232 return total ;
257233 }
258234
235+ protected ByteBuffer moveDataToNetworkBuffer (ByteBuffer readingBuffer ) {
236+ String remoteAddress = remoteAddress ();
237+ logAcceptedNewDataPart (remoteAddress , readingBuffer );
238+
239+ ByteBuffer sslNetworkBuffer = sslNetworkBuffer ();
240+ int availableSpace = sslNetworkBuffer .capacity () - sslNetworkBuffer .limit ();
241+ if (availableSpace >= readingBuffer .limit ()) {
242+ BufferUtils .appendAndClear (sslNetworkBuffer , readingBuffer );
243+ } else {
244+ sslNetworkBuffer = increaseNetworkBuffer (readingBuffer .limit ());
245+ BufferUtils .appendAndClear (sslNetworkBuffer , readingBuffer );
246+ }
247+
248+ logPendingNetworkData (remoteAddress , sslNetworkBuffer );
249+ return sslNetworkBuffer ;
250+ }
251+
259252 protected synchronized ByteBuffer increaseNetworkBuffer (int extra ) {
260253 ByteBuffer current = sslNetworkBuffer ();
261254 int newSize = (int ) Math .max (current .capacity () * 1.3 , current .capacity () + extra );
@@ -287,7 +280,28 @@ public void close() {
287280 super .close ();
288281 }
289282
290- protected static void cleanNetworkBuffer (ByteBuffer networkBuffer ) {
291- networkBuffer .clear ().limit (0 );
283+ private static void logDataBeforeUnwrap (String remoteAddress , ByteBuffer networkBuffer ) {
284+ log .debug (remoteAddress , networkBuffer ,
285+ (address , buff ) -> "[%s] Try to unwrap data:\n %s" .formatted (address , hexDump (buff )));
286+ }
287+
288+ private static void logDataBeforeDecrypt (String remoteAddress , ByteBuffer receivedBuffer ) {
289+ log .debug (remoteAddress , receivedBuffer ,
290+ (address , buf ) -> "[%s] Try to decrypt data:\n %s" .formatted (address , hexDump (buf )));
291+ }
292+
293+ private static void logDataAfterDecrypt (String remoteAddress , ByteBuffer sslDataBuffer ) {
294+ log .debug (remoteAddress , sslDataBuffer ,
295+ (address , buf ) -> "[%s] Decrypted data:\n %s" .formatted (address , hexDump (buf )));
296+ }
297+
298+ private static void logAcceptedNewDataPart (String remoteAddress , ByteBuffer readingBuffer ) {
299+ log .debug (remoteAddress , readingBuffer ,
300+ (address , buf ) -> "[%s] Append new part of received data:\n %s" .formatted (address , hexDump (buf )));
301+ }
302+
303+ private static void logPendingNetworkData (String remoteAddress , ByteBuffer sslNetworkBuffer ) {
304+ log .debug (remoteAddress , sslNetworkBuffer ,
305+ (address , buf ) -> "[%s] Result pending received network data:\n %s" .formatted (address , hexDump (buf )));
292306 }
293307}
0 commit comments