Add MDP_INTERFACE_PEER for external unicast peer discovery to trigger a probe

This commit is contained in:
Jeremy Lakeman
2018-05-15 10:57:58 +09:30
parent 0043e20b81
commit c2103e3b86
4 changed files with 40 additions and 10 deletions

View File

@ -51,6 +51,7 @@ public abstract class AbstractExternalInterface extends ChannelSelector.Handler
private static final int MDP_INTERFACE_UP=0;
private static final int MDP_INTERFACE_DOWN=1;
private static final int MDP_INTERFACE_RECV=2;
private static final int MDP_INTERFACE_PEER=3;
public void up(String config) throws IOException {
MdpPacket packet = new MdpPacket();
@ -71,16 +72,12 @@ public abstract class AbstractExternalInterface extends ChannelSelector.Handler
packet.send((DatagramChannel) socket.getChannel());
}
public void receivedPacket(byte recvaddr[], byte recvbytes[]) throws IOException {
receivedPacket(recvaddr, recvbytes, 0, recvbytes==null?0:recvbytes.length);
}
public void receivedPacket(byte recvaddr[], byte recvbytes[], int offset, int len) throws IOException {
private void deliverPacket(int type, 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);
packet.payload.put((byte) type);
packet.payload.put((byte) recvaddr.length);
packet.payload.put(recvaddr);
if (len>0)
@ -89,6 +86,17 @@ public abstract class AbstractExternalInterface extends ChannelSelector.Handler
packet.send((DatagramChannel) socket.getChannel());
}
public void discovered(byte recvaddr[]) throws IOException{
deliverPacket(MDP_INTERFACE_PEER, recvaddr, null, 0, 0);
}
public void receivedPacket(byte recvaddr[], byte recvbytes[]) throws IOException {
deliverPacket(MDP_INTERFACE_RECV, recvaddr, recvbytes, 0, recvbytes==null?0:recvbytes.length);
}
public void receivedPacket(byte recvaddr[], byte recvbytes[], int offset, int len) throws IOException {
deliverPacket(MDP_INTERFACE_RECV, recvaddr, recvbytes, offset, len);
}
protected abstract void sendPacket(byte addr[], ByteBuffer payload);
@Override

View File

@ -51,8 +51,7 @@ public class MdpSocket{
this.loopbackMdpPort = loopbackMdpPort;
}
public MdpSocket(int loopbackMdpPort, int port) throws IOException {
this(loopbackMdpPort);
bind(SubscriberId.ANY, port);
this(loopbackMdpPort, SubscriberId.ANY, port);
}
public MdpSocket(int loopbackMdpPort, SubscriberId sid, int port) throws IOException {
this(loopbackMdpPort);