Taken from taipei-torrent. Just enough UPnP to be able to forward ports For more information, see:



    This section is empty.


    This section is empty.


    This section is empty.


    type Device

    type Device struct {
    	XMLName     xml.Name    `xml:"device"`
    	DeviceType  string      `xml:"deviceType"`
    	DeviceList  DeviceList  `xml:"deviceList"`
    	ServiceList ServiceList `xml:"serviceList"`

    type DeviceList

    type DeviceList struct {
    	Device []Device `xml:"device"`

    type Envelope

    type Envelope struct {
    	XMLName xml.Name `xml:" Envelope"`
    	Soap    *SoapBody

    type ExternalIPAddress

    type ExternalIPAddress struct {
    	XMLName xml.Name `xml:"NewExternalIPAddress"`
    	IP      string

    type ExternalIPAddressResponse

    type ExternalIPAddressResponse struct {
    	XMLName   xml.Name `xml:"GetExternalIPAddressResponse"`
    	IPAddress string   `xml:"NewExternalIPAddress"`

    type NAT

    type NAT interface {
    	GetExternalAddress() (addr net.IP, err error)
    	AddPortMapping(protocol string, externalPort, internalPort int, description string, timeout int) (mappedExternalPort int, err error)
    	DeletePortMapping(protocol string, externalPort, internalPort int) (err error)

      protocol is either "udp" or "tcp"

      func Discover

      func Discover() (nat NAT, err error)

      type Root

      type Root struct {
      	Device Device

      type ServiceList

      type ServiceList struct {
      	Service []UPNPService `xml:"service"`

      type SoapBody

      type SoapBody struct {
      	XMLName    xml.Name `xml:" Body"`
      	ExternalIP *ExternalIPAddressResponse

      type UPNPCapabilities

      type UPNPCapabilities struct {
      	PortMapping bool
      	Hairpin     bool

      func Probe

      func Probe(logger log.Logger) (caps UPNPCapabilities, err error)

      type UPNPService

      type UPNPService struct {
      	ServiceType string `xml:"serviceType"`
      	ControlURL  string `xml:"controlURL"`

      Source Files