Skip to content

Commit

Permalink
Merge pull request #1419 from ubitricity/fix_issue_1418_websocketserv…
Browse files Browse the repository at this point in the history
…er_misses_get

Fix issue #1418: WebSocketServer sometimes misses GET request after SSL handshake
  • Loading branch information
PhilipRoman authored Jun 10, 2024
2 parents c793f34 + ad3d043 commit cd08f83
Showing 1 changed file with 6 additions and 6 deletions.
12 changes: 6 additions & 6 deletions src/main/java/org/java_websocket/SSLSocketChannel2.java
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ public SSLSocketChannel2(SocketChannel channel, SSLEngine sslEngine, ExecutorSer
createBuffers(sslEngine.getSession());
// kick off handshake
socketChannel.write(wrap(emptybuffer));// initializes res
processHandshake();
processHandshake(false);
}

private void consumeFutureUninterruptible(Future<?> f) {
Expand All @@ -148,7 +148,7 @@ private void consumeFutureUninterruptible(Future<?> f) {
* This method will do whatever necessary to process the sslEngine handshake. Thats why it's
* called both from the {@link #read(ByteBuffer)} and {@link #write(ByteBuffer)}
**/
private synchronized void processHandshake() throws IOException {
private synchronized void processHandshake(boolean isReading) throws IOException {
if (sslEngine.getHandshakeStatus() == HandshakeStatus.NOT_HANDSHAKING) {
return; // since this may be called either from a reading or a writing thread and because this method is synchronized it is necessary to double check if we are still handshaking.
}
Expand All @@ -167,7 +167,7 @@ private synchronized void processHandshake() throws IOException {
}
}

if (sslEngine.getHandshakeStatus() == SSLEngineResult.HandshakeStatus.NEED_UNWRAP) {
if (isReading && sslEngine.getHandshakeStatus() == SSLEngineResult.HandshakeStatus.NEED_UNWRAP) {
if (!isBlocking() || readEngineResult.getStatus() == Status.BUFFER_UNDERFLOW) {
inCrypt.compact();
int read = socketChannel.read(inCrypt);
Expand Down Expand Up @@ -273,7 +273,7 @@ protected void createBuffers(SSLSession session) {

public int write(ByteBuffer src) throws IOException {
if (!isHandShakeComplete()) {
processHandshake();
processHandshake(false);
return 0;
}
// assert(bufferallocations > 1); // see #190
Expand Down Expand Up @@ -303,10 +303,10 @@ public int read(ByteBuffer dst) throws IOException {
if (!isHandShakeComplete()) {
if (isBlocking()) {
while (!isHandShakeComplete()) {
processHandshake();
processHandshake(true);
}
} else {
processHandshake();
processHandshake(true);
if (!isHandShakeComplete()) {
return 0;
}
Expand Down

0 comments on commit cd08f83

Please sign in to comment.