diff --git a/java/org/servalproject/servaldna/AbstractExternalInterface.java b/java/org/servalproject/servaldna/AbstractExternalInterface.java index 837f3201..fc8a3d94 100644 --- a/java/org/servalproject/servaldna/AbstractExternalInterface.java +++ b/java/org/servalproject/servaldna/AbstractExternalInterface.java @@ -12,6 +12,7 @@ import java.nio.channels.SelectionKey; public abstract class AbstractExternalInterface extends ChannelSelector.Handler { private final ChannelSelector selector; protected final MdpSocket socket; + private boolean isUp = false; public AbstractExternalInterface(ChannelSelector selector, int loopbackMdpPort) throws IOException { this.socket = new MdpSocket(loopbackMdpPort); @@ -41,9 +42,11 @@ public abstract class AbstractExternalInterface extends ChannelSelector.Handler packet.payload.put(config.getBytes()); packet.payload.flip(); packet.send((DatagramChannel)socket.getChannel()); + isUp = true; } public void down() throws IOException { + isUp = false; MdpPacket packet = new MdpPacket(); packet.setRemotePort(MDP_INTERFACE); packet.payload.put((byte) MDP_INTERFACE_DOWN); @@ -55,6 +58,9 @@ public abstract class AbstractExternalInterface extends ChannelSelector.Handler receivedPacket(recvaddr, recvbytes, 0, recvbytes==null?0:recvbytes.length); } public void receivedPacket(byte recvaddr[], byte recvbytes[], int offset, int len) throws IOException { + if (!isUp) + return; + MdpPacket packet = new MdpPacket(); packet.setRemotePort(MDP_INTERFACE); packet.payload.put((byte) MDP_INTERFACE_RECV); @@ -73,6 +79,8 @@ public abstract class AbstractExternalInterface extends ChannelSelector.Handler try { MdpPacket response = new MdpPacket(); socket.receive(response); + if (!isUp) + return; int addrlen = response.payload.get() & 0xFF; byte addr[]=null; if (addrlen>0) { diff --git a/java/org/servalproject/servaldna/MdpPacket.java b/java/org/servalproject/servaldna/MdpPacket.java index 6b04d223..d24da9c6 100644 --- a/java/org/servalproject/servaldna/MdpPacket.java +++ b/java/org/servalproject/servaldna/MdpPacket.java @@ -12,7 +12,7 @@ public class MdpPacket { private ByteBuffer buff; public ByteBuffer payload; - private static final int MDP_MTU = 1200; + private static final int MDP_MTU = 1400; private static final int HEADER_LEN = 32+4+32+4+1+1+1; public static final byte MDP_FLAG_NO_CRYPT = (1<<0); @@ -26,7 +26,7 @@ public class MdpPacket { public static final int MDP_PORT_SERVICE_DISCOVERY = 11; public MdpPacket(){ - buff = ByteBuffer.allocate(MDP_MTU); + buff = ByteBuffer.allocate(MDP_MTU + HEADER_LEN); buff.order(ByteOrder.nativeOrder()); buff.position(HEADER_LEN); payload = buff.slice(); diff --git a/overlay_mdp.c b/overlay_mdp.c index fa4ef0a2..2cf6e7cd 100644 --- a/overlay_mdp.c +++ b/overlay_mdp.c @@ -1667,7 +1667,7 @@ static int mdp_send2(struct __sourceloc __whence, const struct socket_address *c static void mdp_poll2(struct sched_ent *alarm) { if (alarm->poll.revents & POLLIN) { - uint8_t payload[1200]; + uint8_t payload[1400]; struct mdp_header header; struct socket_address client; bzero(&client, sizeof client);