Documentation ¶
Index ¶
Constants ¶
const CacheTime = time.Second * 15
CacheTime is the time a mapping will cache an external address for
const MappingDuration = time.Second * 60
MappingDuration is a default port mapping duration. Port mappings are renewed every (MappingDuration / 3)
Variables ¶
var ( // ErrNoMapping signals no mapping exists for an address ErrNoMapping = errors.New("mapping not established") )
Functions ¶
This section is empty.
Types ¶
type Mapping ¶
type Mapping interface { // NAT returns the NAT object this Mapping belongs to. NAT() *NAT // Protocol returns the protocol of this port mapping. This is either // "tcp" or "udp" as no other protocols are likely to be NAT-supported. Protocol() string // InternalPort returns the internal device port. Mapping will continue to // try to map InternalPort() to an external facing port. InternalPort() int // ExternalPort returns the external facing port. If the mapping is not // established, port will be 0 ExternalPort() int // ExternalAddr returns the external facing address. If the mapping is not // established, addr will be nil, and and ErrNoMapping will be returned. ExternalAddr() (addr net.Addr, err error) // Close closes the port mapping Close() error }
Mapping represents a port mapping in a NAT.
type NAT ¶
type NAT struct { Notifier // contains filtered or unexported fields }
NAT is an object that manages address port mappings in NATs (Network Address Translators). It is a long-running service that will periodically renew port mappings, and keep an up-to-date list of all the external addresses.
func DiscoverNAT ¶
DiscoverNAT looks for a NAT device in the network and returns an object that can manage port mappings.
func (*NAT) NewMapping ¶
NewMapping attemps to construct a mapping on protocol and internal port It will also periodically renew the mapping until the returned Mapping -- or its parent NAT -- is Closed.
May not succeed, and mappings may change over time; NAT devices may not respect our port requests, and even lie. Clients should not store the mapped results, but rather always poll our object for the latest mappings.
type Notifiee ¶
type Notifiee interface { // Called every time a successful mapping happens // Warning: the port mapping may have changed. If that is the // case, both MappingSuccess and MappingChanged are called. MappingSuccess(nat *NAT, m Mapping) // Called when mapping a port succeeds, but the mapping is // with a different port than an earlier success. MappingChanged(nat *NAT, m Mapping, oldport, newport int) // Called when a port mapping fails. NAT will continue attempting after // the next period. To stop trying, use: mapping.Close(). After this failure, // mapping.ExternalPort() will be zero, and nat.ExternalAddrs() will not // return the address for this mapping. With luck, the next attempt will // succeed, without the client needing to do anything. MappingFailed(nat *NAT, m Mapping, oldport int, err error) }
Notifiee is an interface objects must implement to listen to NAT events.
type Notifier ¶
type Notifier struct {
// contains filtered or unexported fields
}
Notifier is an object that assists NAT in notifying listeners. It is implemented using thirdparty/notifier
func (*Notifier) StopNotify ¶
StopNotify stops signaling events to notifiee.