Class NatPmpPortMapping

java.lang.Object
org.drasyl.handler.remote.portmapper.NatPmpPortMapping
All Implemented Interfaces:
PortMapping

public class NatPmpPortMapping extends Object implements PortMapping
Port Forwarding on NAT-enabled routers via NAT-PMP.

This methods requires the following steps:

  • identify own default network gateway
  • request external address from gateway to ensure it is connected to a WAN
  • request port mapping from gateway
  • Field Details

    • TIMEOUT

      public static final Duration TIMEOUT
  • Constructor Details

    • NatPmpPortMapping

      public NatPmpPortMapping(AtomicBoolean externalAddressRequested, AtomicBoolean mappingRequested, int port, InetSocketAddress defaultGateway, InetAddress externalAddress, io.netty.util.concurrent.Future<?> timeoutGuard, io.netty.util.concurrent.Future<?> refreshTask, Runnable onFailure, Supplier<InetAddress> defaultGatewaySupplier)
    • NatPmpPortMapping

      public NatPmpPortMapping()
  • Method Details

    • start

      public void start(io.netty.channel.ChannelHandlerContext ctx, int port, Runnable onFailure)
      Description copied from interface: PortMapping
      Tells the method to create a port forwarding and renew it independently. If no forwarding can be created, onFailure must be called once.
      Specified by:
      start in interface PortMapping
      Parameters:
      ctx - the handler context
      port - the UdpServer.Port port
      onFailure - will be called once on failure
    • stop

      public void stop(io.netty.channel.ChannelHandlerContext ctx)
      Description copied from interface: PortMapping
      Shall remove any existing port forwarding again.
      Specified by:
      stop in interface PortMapping
      Parameters:
      ctx - the handler context
    • acceptMessage

      public boolean acceptMessage(InetSocketAddress sender, io.netty.buffer.ByteBuf msg)
      Description copied from interface: PortMapping
      Is called for incoming messages and returns true if the message should be consumed and removed from the pipeline.
      Specified by:
      acceptMessage in interface PortMapping
      Parameters:
      sender - the sender of the message
      msg - the message
      Returns:
      true if the message is relevant for the current port forwarding method. Otherwise false
    • handleMessage

      public void handleMessage(io.netty.channel.ChannelHandlerContext ctx, InetSocketAddress sender, io.netty.buffer.ByteBuf msg)
      Description copied from interface: PortMapping
      Is called for incoming messages and thus enables this method to react to relevant messages.

      ReferenceCounted.release() ownership of msg is transferred to this PartialReadMessage.

      Specified by:
      handleMessage in interface PortMapping
      Parameters:
      ctx - the handler context
      sender - the sender of the message
      msg - the message
    • toString

      public String toString()
      Overrides:
      toString in class Object