Add buffer space for MDP MTU & headers for MDP_INTERFACE

This commit is contained in:
Jeremy Lakeman 2015-07-20 16:36:51 +09:30
parent 0a061e0fe8
commit 298849b25b
3 changed files with 11 additions and 3 deletions

View File

@ -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) {

View File

@ -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();

View File

@ -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);