mirror of
https://github.com/servalproject/serval-dna.git
synced 2025-02-20 17:33:08 +00:00
Add buffer space for MDP MTU & headers for MDP_INTERFACE
This commit is contained in:
parent
0a061e0fe8
commit
298849b25b
@ -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) {
|
||||
|
@ -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();
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user