You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by dr...@apache.org on 2017/05/06 00:56:56 UTC
directory-kerby git commit: Improved default network transport in
error handling
Repository: directory-kerby
Updated Branches:
refs/heads/trunk 02f06c3cb -> d8528688f
Improved default network transport in error handling
Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/d8528688
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/d8528688
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/d8528688
Branch: refs/heads/trunk
Commit: d8528688ff2468155144067d6b4eb38c468a7802
Parents: 02f06c3
Author: Drankye <dr...@gmail.com>
Authored: Sat May 6 08:49:45 2017 +0800
Committer: Drankye <dr...@gmail.com>
Committed: Sat May 6 08:49:45 2017 +0800
----------------------------------------------------------------------
.../kerberos/kerb/transport/KdcNetwork.java | 46 +++++++++++++-------
.../kerb/transport/KrbTcpTransport.java | 7 ++-
.../kerb/transport/KrbUdpTransport.java | 2 +-
3 files changed, 36 insertions(+), 19 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/d8528688/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/transport/KdcNetwork.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/transport/KdcNetwork.java b/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/transport/KdcNetwork.java
index d883774..926eec6 100644
--- a/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/transport/KdcNetwork.java
+++ b/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/transport/KdcNetwork.java
@@ -23,11 +23,9 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.net.ServerSocket;
-import java.net.Socket;
-import java.net.SocketTimeoutException;
+import java.net.*;
import java.nio.ByteBuffer;
+import java.nio.channels.ClosedChannelException;
import java.nio.channels.DatagramChannel;
import java.util.HashMap;
import java.util.Map;
@@ -49,16 +47,18 @@ public abstract class KdcNetwork {
new HashMap<InetSocketAddress, KdcUdpTransport>();
private ByteBuffer recvBuffer;
- public void init() {
+ public synchronized void init() {
isStopped = false;
}
- public void listen(TransportPair tpair) throws IOException {
+ public synchronized void listen(TransportPair tpair) throws IOException {
this.tpair = tpair;
- tcpServer = new ServerSocket();
- tcpServer.setSoTimeout(KDC_TCP_SERVER_TIMEOUT);
- tcpServer.bind(tpair.tcpAddress);
+ if (tpair.tcpAddress != null) {
+ tcpServer = new ServerSocket();
+ tcpServer.setSoTimeout(KDC_TCP_SERVER_TIMEOUT);
+ tcpServer.bind(tpair.tcpAddress);
+ }
if (tpair.udpAddress != null) {
udpServer = DatagramChannel.open();
@@ -68,7 +68,7 @@ public abstract class KdcNetwork {
}
}
- public void start() {
+ public synchronized void start() {
new Thread(new Runnable() {
@Override
public void run() {
@@ -89,7 +89,7 @@ public abstract class KdcNetwork {
if (tpair.tcpAddress != null) {
try {
checkAndAccept();
- } catch (SocketTimeoutException e) { //NOPMD
+ } catch (SocketTimeoutException | ClosedChannelException | SocketException e) { //NOPMD
//NOOP as normal
} catch (IOException e) {
throw new RuntimeException("Error occured while checking tcp connections", e);
@@ -99,7 +99,7 @@ public abstract class KdcNetwork {
if (tpair.udpAddress != null) {
try {
checkUdpMessage();
- } catch (SocketTimeoutException e) { //NOPMD
+ } catch (SocketTimeoutException | ClosedChannelException | SocketException e) { //NOPMD
//NOOP as normal
} catch (IOException e) {
throw new RuntimeException("Error occured while checking udp connections", e);
@@ -110,16 +110,26 @@ public abstract class KdcNetwork {
//CHECKSTYLE:ON
public synchronized void stop() {
- // TODO: waiting the network closed.
try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- LOG.warn("Interrupted when thread sleeping. " + e);
+ if (tcpServer != null) {
+ tcpServer.close();
+ }
+
+ if (udpServer != null) {
+ udpServer.close();
+ }
+ } catch (IOException e) {
+ LOG.warn("KDC network stopping error " + e);
}
+
isStopped = true;
}
private void checkAndAccept() throws IOException {
+ if (tcpServer.isClosed()) {
+ return;
+ }
+
Socket socket;
if ((socket = tcpServer.accept()) != null) {
socket.setSoTimeout(KDC_TCP_TRANSPORT_TIMEOUT);
@@ -129,6 +139,10 @@ public abstract class KdcNetwork {
}
private void checkUdpMessage() throws IOException {
+ if (!udpServer.isOpen()) {
+ return;
+ }
+
InetSocketAddress fromAddress = (InetSocketAddress) udpServer.receive(recvBuffer);
if (fromAddress != null) {
recvBuffer.flip();
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/d8528688/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/transport/KrbTcpTransport.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/transport/KrbTcpTransport.java b/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/transport/KrbTcpTransport.java
index 4a51611..50f8306 100644
--- a/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/transport/KrbTcpTransport.java
+++ b/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/transport/KrbTcpTransport.java
@@ -40,7 +40,7 @@ public class KrbTcpTransport
this.socket = socket;
this.outputStream = new DataOutputStream(socket.getOutputStream());
this.inputStream = new DataInputStream(socket.getInputStream());
- this.messageBuffer = new byte[1024 * 1024]; // TODO.
+ this.messageBuffer = new byte[4 * 1024 * 1024]; // TODO.
}
@@ -53,6 +53,9 @@ public class KrbTcpTransport
public ByteBuffer receiveMessage() throws IOException {
int msgLen = inputStream.readInt();
if (msgLen > 0) {
+ if (msgLen > messageBuffer.length) {
+ throw new IOException("Recv buffer overflowed, too large message?");
+ }
inputStream.readFully(messageBuffer, 0, msgLen);
return ByteBuffer.wrap(messageBuffer, 0, msgLen);
}
@@ -75,7 +78,7 @@ public class KrbTcpTransport
try {
socket.close();
} catch (IOException e) { //NOPMD
- System.err.println(e); // NOOP
+ // System.err.println(e); // NOOP
}
}
}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/d8528688/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/transport/KrbUdpTransport.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/transport/KrbUdpTransport.java b/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/transport/KrbUdpTransport.java
index 72a3c2b..c8e83c8 100644
--- a/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/transport/KrbUdpTransport.java
+++ b/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/transport/KrbUdpTransport.java
@@ -77,7 +77,7 @@ public class KrbUdpTransport
try {
channel.close();
} catch (IOException e) { //NOPMD
- System.err.println(e); //NOOP
+ // System.err.println(e); //NOOP
}
}
}