Class UpnpIgdPortMapping

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

public class UpnpIgdPortMapping extends Object implements PortMapping
Port Forwarding on NAT-enabled routers via UPnP-IGD.

This methods requires the following steps:

  • SSDP: do a discovery to find internet gateway devices
  • UPnP: request service information from each discovered gateway
  • UPnP: check if device is connected and has an external ip address
  • UPnP: check for existing port mapping and reuse it
  • UPnP: if there is no port mapping, create a new one
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final Duration
     
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    boolean
    acceptMessage(InetSocketAddress sender, io.netty.buffer.ByteBuf msg)
    Is called for incoming messages and returns true if the message should be consumed and removed from the pipeline.
    void
    handleMessage(io.netty.channel.ChannelHandlerContext ctx, InetSocketAddress sender, io.netty.buffer.ByteBuf msg)
    Is called for incoming messages and thus enables this method to react to relevant messages.
    void
    start(io.netty.channel.ChannelHandlerContext ctx, int port, Runnable onFailure)
    Tells the method to create a port forwarding and renew it independently.
    void
    stop(io.netty.channel.ChannelHandlerContext ctx)
    Shall remove any existing port forwarding again.
     

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Field Details

    • TIMEOUT

      public static final Duration TIMEOUT
  • Constructor Details

    • UpnpIgdPortMapping

      public UpnpIgdPortMapping()
  • 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