ztn

package
v0.0.0-...-2b8e069 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 26, 2021 License: MIT Imports: 47 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// These will get ordered in the BindTechniques.
	// Lower string == tried first if available
	// NAT PMP hasn't worked well in a few places so its left to be tried last
	BindAutomatic    = BindTechnique("AUTOMATIC")
	BindDirectPublic = BindTechnique("DIRECT_PUBLIC")
	BindNATPMP       = BindTechnique("NATPMP")
	BindSTUN         = BindTechnique("STUN")
	BindThroughPeer  = BindTechnique("THROUGH_PEER")
	BindUPNPIGD      = BindTechnique("UPNPIGD")
)
View Source
const (
	ConnectionTypeLANIN   = "LAN IN"
	ConnectionTypeLANOUT  = "LAN OUT"
	ConnectionTypeWANIN   = "WAN IN"
	ConnectionTypeWANOUT  = "WAN OUT"
	ConnectionTypeWANSTUN = "WAN STUN"
)
View Source
const (
	EnvServer          = "WG_SERVER"
	EnvServerPort      = "WG_SERVER_PORT"
	EnvServerVerifyTLS = "WG_SERVER_VERIFY_TLS"

	EnvUsername = "WG_USERNAME"
	EnvPassword = "WG_PASSWORD"

	EnvHonorRoutes = "WG_HONOR_ROUTES"

	EnvBindTechnique       = "WG_BIND_TECHNIQUE"
	EnvStaticBindTechnique = "WG_STATIC_BIND_TECHNIQUE"

	EnvPublicPortIP = "WG_PUBLIC_PORT_IP"

	EnvOffersBridging = "WG_OFFERS_BRIDGING"
	EnvMaxPeerBridges = "WG_MAX_PEER_BRIDGES"

	EnvGatewayOutboundInterface = "WG_GATEWAY_OUTBOUND_INTERFACE"

	EnvCLIInterractive = "WG_CLI_INTERACTIVE"
	EnvCLI             = "WG_CLI"

	EnvGUIPID = "WG_GUI_PID"

	EnvSetupDNS = "WG_SETUP_DNS"
)
View Source
const (
	STATUS_CONNECTED      = "CONNECTED"
	STATUS_ERROR          = "ERROR"
	STATUS_FETCHING_PEERS = "FETCHING_PEERS"
	STATUS_NOT_READY      = ""

	PEER_STATUS_CONNECTED             = "Connected"
	PEER_STATUS_INITIATING_CONNECTION = "Waiting for peer to register"
	PEER_STATUS_CONNECT_PRIVATE       = "Attempting to connect to peer via local area network"
	PEER_STATUS_CONNECT_PUBLIC        = "Attempting to connect to peer via the Internet"
)
View Source
const (
	MsgNcBindPeerBridge = uint64(1)
)
View Source
const PeerServiceServerPort = 12676

Variables

View Source
var APIClientCtx context.Context
View Source
var AutomatedMaxBindFailures = 8
View Source
var BindTechniqueNames = map[string]BindTechnique{
	"DIRECT_PUBLIC": BindDirectPublic,
	"NATPMP":        BindNATPMP,
	"STUN":          BindSTUN,
	"THROUGH_PEER":  BindThroughPeer,
	"UPNPIGD":       BindUPNPIGD,
}
View Source
var BindTechniques = BindTechniquesStruct{}
View Source
var ConnectedConnectionLivenessTolerance = 10 * time.Second
View Source
var DefaultBindTechnique = BindSTUN
View Source
var File_peerrpc_proto protoreflect.FileDescriptor
View Source
var InboundAttemptsTolerance = 2
View Source
var InboundAttemptsTryAtLeast = 20 * time.Second
View Source
var InitialConnectionLivenessTolerance = device.RekeyTimeout * 2
View Source
var PublicPortLivenessTolerance = 10 * time.Minute
View Source
var UserDefinedMaxBindFailures = 120

Functions

func DoServerChallenge

func DoServerChallenge(profile *Profile) (string, error)

func GLPClient

func GLPClient(category string) *glpclient.Client

func GLPPrivateClient

func GLPPrivateClient(priv, pub, serverPub [32]byte) *glpclient.Client

func GLPPublish

func GLPPublish(category string, e Event) error

func GetAPIClient

func GetAPIClient() *unifiedapiclient.Client

func PauseOnError

func PauseOnError(quit func())

func PublicPortTTL

func PublicPortTTL() int

func ReadPassword

func ReadPassword() string

func RegisterPeerServiceServer

func RegisterPeerServiceServer(s grpc.ServiceRegistrar, srv PeerServiceServer)

func RunningInCLI

func RunningInCLI() bool

func SetConfig

func SetConfig(device *device.Device, k, v string)

func SetConfigMulti

func SetConfigMulti(device *device.Device, conf string)

func SetupAPIClientCLI

func SetupAPIClientCLI()

TODO: replace with prompts or configuration

func SetupAPIClientEnv

func SetupAPIClientEnv()

func StartPeerServiceRPC

func StartPeerServiceRPC(ip net.IP, logger *device.Logger, profile Profile)

func UPNPIGDCleanupMapped

func UPNPIGDCleanupMapped()

Types

type BindTechnique

type BindTechnique string

func (BindTechnique) Priority

func (bt BindTechnique) Priority() int

func (BindTechnique) Weight

func (bt BindTechnique) Weight() int

type BindTechniqueBase

type BindTechniqueBase struct {
	// contains filtered or unexported fields
}

func (*BindTechniqueBase) AddIDToPacket

func (btm *BindTechniqueBase) AddIDToPacket(buf []byte)

func (*BindTechniqueBase) BindRequestPkt

func (btm *BindTechniqueBase) BindRequestPkt(externalIP net.IP, externalPort int) []byte

func (*BindTechniqueBase) InitID

func (btm *BindTechniqueBase) InitID()

func (*BindTechniqueBase) IsMessage

func (btm *BindTechniqueBase) IsMessage(b []byte) bool

func (*BindTechniqueBase) ParseBindRequestPkt

func (btb *BindTechniqueBase) ParseBindRequestPkt(buf []byte) (net.IP, int, error)

type BindTechniqueInterface

type BindTechniqueInterface interface {
	ParseBindRequestPkt([]byte) (net.IP, int, error)
}

type BindTechniquesStruct

type BindTechniquesStruct struct {
	sync.Mutex
	// contains filtered or unexported fields
}

func (*BindTechniquesStruct) Add

func (bts *BindTechniquesStruct) Add(bt BindTechnique)

func (*BindTechniquesStruct) CopyNew

func (*BindTechniquesStruct) Len

func (bts *BindTechniquesStruct) Len() int

func (*BindTechniquesStruct) Less

func (bts *BindTechniquesStruct) Less(i, j int) bool

func (*BindTechniquesStruct) Next

func (bts *BindTechniquesStruct) Next() BindTechnique

func (*BindTechniquesStruct) Swap

func (bts *BindTechniquesStruct) Swap(i, j int)

type BindThroughPeerAgent

type BindThroughPeerAgent struct {
	sync.Mutex
	BindTechniqueBase
	// contains filtered or unexported fields
}

func NewBindThroughPeerAgent

func NewBindThroughPeerAgent(connection *Connection, networkConnection *NetworkConnection) *BindThroughPeerAgent

func (*BindThroughPeerAgent) BindRequest

func (btp *BindThroughPeerAgent) BindRequest(conn *net.UDPConn, sendTo chan *pkt) error

func (*BindThroughPeerAgent) ParseBindRequestPkt

func (btp *BindThroughPeerAgent) ParseBindRequestPkt(buf []byte) (net.IP, int, error)

func (*BindThroughPeerAgent) StillAlive

func (btp *BindThroughPeerAgent) StillAlive() bool

type BufferPool

type BufferPool struct {
	sync.Pool
	sync.Mutex
	// contains filtered or unexported fields
}

func NewBufferPool

func NewBufferPool() *BufferPool

func (*BufferPool) Get

func (bp *BufferPool) Get() []byte

func (*BufferPool) GetAliveBuffers

func (bp *BufferPool) GetAliveBuffers() int

func (*BufferPool) Put

func (bp *BufferPool) Put(a []byte)

type CanOfferForwardingReply

type CanOfferForwardingReply struct {
	Result bool `protobuf:"varint,1,opt,name=result,proto3" json:"result,omitempty"`
	// contains filtered or unexported fields
}

func (*CanOfferForwardingReply) Descriptor deprecated

func (*CanOfferForwardingReply) Descriptor() ([]byte, []int)

Deprecated: Use CanOfferForwardingReply.ProtoReflect.Descriptor instead.

func (*CanOfferForwardingReply) GetResult

func (x *CanOfferForwardingReply) GetResult() bool

func (*CanOfferForwardingReply) ProtoMessage

func (*CanOfferForwardingReply) ProtoMessage()

func (*CanOfferForwardingReply) ProtoReflect

func (x *CanOfferForwardingReply) ProtoReflect() protoreflect.Message

func (*CanOfferForwardingReply) Reset

func (x *CanOfferForwardingReply) Reset()

func (*CanOfferForwardingReply) String

func (x *CanOfferForwardingReply) String() string

type CanOfferForwardingRequest

type CanOfferForwardingRequest struct {
	// contains filtered or unexported fields
}

func (*CanOfferForwardingRequest) Descriptor deprecated

func (*CanOfferForwardingRequest) Descriptor() ([]byte, []int)

Deprecated: Use CanOfferForwardingRequest.ProtoReflect.Descriptor instead.

func (*CanOfferForwardingRequest) ProtoMessage

func (*CanOfferForwardingRequest) ProtoMessage()

func (*CanOfferForwardingRequest) ProtoReflect

func (*CanOfferForwardingRequest) Reset

func (x *CanOfferForwardingRequest) Reset()

func (*CanOfferForwardingRequest) String

func (x *CanOfferForwardingRequest) String() string

type Connection

type Connection struct {
	sync.Mutex
	Profile   *Profile
	Peers     map[string]*PeerConnection
	Status    string
	LastError error
	// contains filtered or unexported fields
}

func NewConnection

func NewConnection(logger *device.Logger) *Connection

func (*Connection) StartPeer

func (c *Connection) StartPeer(device *device.Device, profile Profile, peerID string, networkConnection *NetworkConnection)

func (*Connection) Update

func (c *Connection) Update(f func())

type Event

type Event struct {
	Type      string          `json:"type"`
	Data      json.RawMessage `json:"data"`
	Timestamp int64           `json:"timestamp"`
}

type ForwardingIsAliveReply

type ForwardingIsAliveReply struct {
	Result bool `protobuf:"varint,1,opt,name=result,proto3" json:"result,omitempty"`
	// contains filtered or unexported fields
}

func (*ForwardingIsAliveReply) Descriptor deprecated

func (*ForwardingIsAliveReply) Descriptor() ([]byte, []int)

Deprecated: Use ForwardingIsAliveReply.ProtoReflect.Descriptor instead.

func (*ForwardingIsAliveReply) GetResult

func (x *ForwardingIsAliveReply) GetResult() bool

func (*ForwardingIsAliveReply) ProtoMessage

func (*ForwardingIsAliveReply) ProtoMessage()

func (*ForwardingIsAliveReply) ProtoReflect

func (x *ForwardingIsAliveReply) ProtoReflect() protoreflect.Message

func (*ForwardingIsAliveReply) Reset

func (x *ForwardingIsAliveReply) Reset()

func (*ForwardingIsAliveReply) String

func (x *ForwardingIsAliveReply) String() string

type ForwardingIsAliveRequest

type ForwardingIsAliveRequest struct {
	Id    uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
	Token uint64 `protobuf:"varint,2,opt,name=token,proto3" json:"token,omitempty"`
	// contains filtered or unexported fields
}

func (*ForwardingIsAliveRequest) Descriptor deprecated

func (*ForwardingIsAliveRequest) Descriptor() ([]byte, []int)

Deprecated: Use ForwardingIsAliveRequest.ProtoReflect.Descriptor instead.

func (*ForwardingIsAliveRequest) GetId

func (x *ForwardingIsAliveRequest) GetId() uint64

func (*ForwardingIsAliveRequest) GetToken

func (x *ForwardingIsAliveRequest) GetToken() uint64

func (*ForwardingIsAliveRequest) ProtoMessage

func (*ForwardingIsAliveRequest) ProtoMessage()

func (*ForwardingIsAliveRequest) ProtoReflect

func (x *ForwardingIsAliveRequest) ProtoReflect() protoreflect.Message

func (*ForwardingIsAliveRequest) Reset

func (x *ForwardingIsAliveRequest) Reset()

func (*ForwardingIsAliveRequest) String

func (x *ForwardingIsAliveRequest) String() string

type NATPMP

type NATPMP struct {
	sync.Mutex
	BindTechniqueBase
	// contains filtered or unexported fields
}

func NewNATPMP

func NewNATPMP() *NATPMP

func (*NATPMP) AddPortMapping

func (u *NATPMP) AddPortMapping(localPort, remotePort int) error

func (*NATPMP) BindRequest

func (u *NATPMP) BindRequest(localPeerConn *net.UDPConn, localPeerPort int, sendTo chan *pkt) error

func (*NATPMP) CheckNet

func (u *NATPMP) CheckNet() error

func (*NATPMP) ExternalIPAddr

func (u *NATPMP) ExternalIPAddr() (net.IP, error)

type NetworkConnection

type NetworkConnection struct {
	Connection *Connection

	BindTechnique            BindTechnique
	UserDefinedBindTechnique BindTechnique
	BindTechniques           *BindTechniquesStruct

	WGAddr *net.UDPAddr
	// contains filtered or unexported fields
}

func NewNetworkConnection

func NewNetworkConnection(description string, logger *device.Logger, port int) *NetworkConnection

func (*NetworkConnection) CheckConnectionLiveness

func (nc *NetworkConnection) CheckConnectionLiveness() bool

func (*NetworkConnection) Description

func (nc *NetworkConnection) Description() string

func (*NetworkConnection) GetPrivateIP

func (nc *NetworkConnection) GetPrivateIP() net.IP

func (*NetworkConnection) GetPublicAddr

func (nc *NetworkConnection) GetPublicAddr() *net.UDPAddr

func (*NetworkConnection) ID

func (nc *NetworkConnection) ID() uint64

func (*NetworkConnection) IsMessage

func (nc *NetworkConnection) IsMessage(b []byte) bool

func (*NetworkConnection) MaxBindFailures

func (nc *NetworkConnection) MaxBindFailures() int

func (*NetworkConnection) PrintDebug

func (nc *NetworkConnection) PrintDebug()

func (*NetworkConnection) RecordInboundAttempt

func (nc *NetworkConnection) RecordInboundAttempt()

func (*NetworkConnection) SetupForwarding

func (nc *NetworkConnection) SetupForwarding(ct string, profile Profile) (string, *net.UDPAddr)

func (*NetworkConnection) Start

func (nc *NetworkConnection) Start()

func (*NetworkConnection) Token

func (nc *NetworkConnection) Token() uint64

type NetworkEndpointEvent

type NetworkEndpointEvent struct {
	ID              string        `json:"id"`
	PublicEndpoint  string        `json:"public_endpoint"`
	PrivateEndpoint string        `json:"private_endpoint"`
	Try             int           `json:"try"`
	BindTechnique   BindTechnique `json:"bind_technique"`
	OffersBridging  bool          `json:"offers_bridging"`
	SentOn          time.Time     `json:"sent_on"`
	LaunchedAt      time.Time     `json:"launched_at"`
}

func (NetworkEndpointEvent) ToJSON

func (nee NetworkEndpointEvent) ToJSON() []byte

type PeerConnection

type PeerConnection struct {
	MyProfile   Profile
	PeerProfile PeerProfile

	Status         string
	ConnectionType string
	// contains filtered or unexported fields
}

func NewPeerConnection

func NewPeerConnection(d *device.Device, logger *device.Logger, myProfile Profile, peerProfile PeerProfile, networkConnection *NetworkConnection) *PeerConnection

func (*PeerConnection) CheckConnectionLiveness

func (pc *PeerConnection) CheckConnectionLiveness() bool

func (*PeerConnection) Connected

func (pc *PeerConnection) Connected() bool

func (*PeerConnection) ConnectionLivenessTolerance

func (pc *PeerConnection) ConnectionLivenessTolerance() time.Duration

func (*PeerConnection) FindConnectionType

func (pc *PeerConnection) FindConnectionType(nee *NetworkEndpointEvent) string

func (*PeerConnection) HandleNetworkEndpointEvent

func (pc *PeerConnection) HandleNetworkEndpointEvent(nee *NetworkEndpointEvent)

func (*PeerConnection) IAmTheBestTryHolder

func (pc *PeerConnection) IAmTheBestTryHolder(nee *NetworkEndpointEvent) bool

func (*PeerConnection) IAmTheBestWANIN

func (pc *PeerConnection) IAmTheBestWANIN(nee *NetworkEndpointEvent) bool

func (*PeerConnection) IAmTheSmallestKey

func (pc *PeerConnection) IAmTheSmallestKey() bool

func (*PeerConnection) ListenP2PKey

func (pc *PeerConnection) ListenP2PKey() string

func (*PeerConnection) OffersBridging

func (pc *PeerConnection) OffersBridging() bool

func (*PeerConnection) PublishP2PKey

func (pc *PeerConnection) PublishP2PKey() string

func (*PeerConnection) RemovePeer

func (pc *PeerConnection) RemovePeer()

func (*PeerConnection) Start

func (pc *PeerConnection) Start()

func (*PeerConnection) StartConnection

func (pc *PeerConnection) StartConnection(foundPeer chan bool) chan *NetworkEndpointEvent

type PeerProfile

type PeerProfile struct {
	remoteclients.Peer
}

func GetPeerProfile

func GetPeerProfile(id string) (PeerProfile, error)

type PeerServiceClient

type PeerServiceClient interface {
	CanOfferForwarding(ctx context.Context, in *CanOfferForwardingRequest, opts ...grpc.CallOption) (*CanOfferForwardingReply, error)
	SetupForwarding(ctx context.Context, in *SetupForwardingRequest, opts ...grpc.CallOption) (*SetupForwardingReply, error)
	ForwardingIsAlive(ctx context.Context, in *ForwardingIsAliveRequest, opts ...grpc.CallOption) (*ForwardingIsAliveReply, error)
}

PeerServiceClient is the client API for PeerService service.

For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.

func ConnectPeerServiceClient

func ConnectPeerServiceClient(addr string) (PeerServiceClient, *grpc.ClientConn)

type PeerServiceServer

type PeerServiceServer interface {
	CanOfferForwarding(context.Context, *CanOfferForwardingRequest) (*CanOfferForwardingReply, error)
	SetupForwarding(context.Context, *SetupForwardingRequest) (*SetupForwardingReply, error)
	ForwardingIsAlive(context.Context, *ForwardingIsAliveRequest) (*ForwardingIsAliveReply, error)
	// contains filtered or unexported methods
}

PeerServiceServer is the server API for PeerService service. All implementations must embed UnimplementedPeerServiceServer for forward compatibility

type PeerServiceServerHandler

type PeerServiceServerHandler struct {
	sync.Mutex
	UnimplementedPeerServiceServer
	// contains filtered or unexported fields
}

func NewPeerServiceServerHandler

func NewPeerServiceServerHandler(logger *device.Logger, profile Profile) *PeerServiceServerHandler

func (*PeerServiceServerHandler) CanOfferForwarding

func (*PeerServiceServerHandler) ForwardingIsAlive

func (*PeerServiceServerHandler) PrintDebug

func (s *PeerServiceServerHandler) PrintDebug()

func (*PeerServiceServerHandler) SetupForwarding

type Profile

type Profile struct {
	remoteclients.Peer
	PrivateKey string `json:"private_key"`
	// contains filtered or unexported fields
}

func (*Profile) FillProfileFromServer

func (p *Profile) FillProfileFromServer(connection *Connection, logger *device.Logger) error

func (*Profile) ParseRoutes

func (p *Profile) ParseRoutes() []RouteInfo

func (*Profile) SetupGateway

func (p *Profile) SetupGateway() error

func (*Profile) SetupRoutes

func (p *Profile) SetupRoutes() error

func (*Profile) SetupWireguard

func (p *Profile) SetupWireguard(d *device.Device, WGInterface string) error

type PublicPort

type PublicPort struct {
	sync.Mutex
	BindTechniqueBase
	// contains filtered or unexported fields
}

func NewPublicPort

func NewPublicPort() *PublicPort

func (*PublicPort) BindRequest

func (pp *PublicPort) BindRequest(conn *net.UDPConn, sendTo chan *pkt) error

type RouteInfo

type RouteInfo struct {
	Network *net.IPNet
	Gateway net.IP
}

type ServerChallenge

type ServerChallenge struct {
	Challenge      string `json:"challenge"`
	PublicKey      string `json:"public_key"`
	BytesChallenge []byte
	BytesPublicKey [32]byte
}

func GetServerChallenge

func GetServerChallenge(profile *Profile) (ServerChallenge, error)

func (*ServerChallenge) Decrypt

func (sc *ServerChallenge) Decrypt(privateKey [32]byte) ([]byte, error)

func (*ServerChallenge) Encrypt

func (sc *ServerChallenge) Encrypt(privateKey [32]byte, message []byte) ([]byte, error)

type SetupForwardingReply

type SetupForwardingReply struct {
	Id         uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
	Token      uint64 `protobuf:"varint,2,opt,name=token,proto3" json:"token,omitempty"`
	Raddr      string `protobuf:"bytes,3,opt,name=raddr,proto3" json:"raddr,omitempty"`
	PublicIP   []byte `protobuf:"bytes,4,opt,name=publicIP,proto3" json:"publicIP,omitempty"`
	PublicPort int32  `protobuf:"varint,5,opt,name=publicPort,proto3" json:"publicPort,omitempty"`
	// contains filtered or unexported fields
}

func (*SetupForwardingReply) Descriptor deprecated

func (*SetupForwardingReply) Descriptor() ([]byte, []int)

Deprecated: Use SetupForwardingReply.ProtoReflect.Descriptor instead.

func (*SetupForwardingReply) GetId

func (x *SetupForwardingReply) GetId() uint64

func (*SetupForwardingReply) GetPublicIP

func (x *SetupForwardingReply) GetPublicIP() []byte

func (*SetupForwardingReply) GetPublicPort

func (x *SetupForwardingReply) GetPublicPort() int32

func (*SetupForwardingReply) GetRaddr

func (x *SetupForwardingReply) GetRaddr() string

func (*SetupForwardingReply) GetToken

func (x *SetupForwardingReply) GetToken() uint64

func (*SetupForwardingReply) ProtoMessage

func (*SetupForwardingReply) ProtoMessage()

func (*SetupForwardingReply) ProtoReflect

func (x *SetupForwardingReply) ProtoReflect() protoreflect.Message

func (*SetupForwardingReply) Reset

func (x *SetupForwardingReply) Reset()

func (*SetupForwardingReply) String

func (x *SetupForwardingReply) String() string

type SetupForwardingRequest

type SetupForwardingRequest struct {
	Name               string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	PeerConnectionType string `protobuf:"bytes,2,opt,name=peerConnectionType,proto3" json:"peerConnectionType,omitempty"`
	// contains filtered or unexported fields
}

func (*SetupForwardingRequest) Descriptor deprecated

func (*SetupForwardingRequest) Descriptor() ([]byte, []int)

Deprecated: Use SetupForwardingRequest.ProtoReflect.Descriptor instead.

func (*SetupForwardingRequest) GetName

func (x *SetupForwardingRequest) GetName() string

func (*SetupForwardingRequest) GetPeerConnectionType

func (x *SetupForwardingRequest) GetPeerConnectionType() string

func (*SetupForwardingRequest) ProtoMessage

func (*SetupForwardingRequest) ProtoMessage()

func (*SetupForwardingRequest) ProtoReflect

func (x *SetupForwardingRequest) ProtoReflect() protoreflect.Message

func (*SetupForwardingRequest) Reset

func (x *SetupForwardingRequest) Reset()

func (*SetupForwardingRequest) String

func (x *SetupForwardingRequest) String() string

type UPNPIGD

type UPNPIGD struct {
	sync.Mutex
	BindTechniqueBase
	// contains filtered or unexported fields
}

func NewUPNPIGD

func NewUPNPIGD() *UPNPIGD

func (*UPNPIGD) AddPortMapping

func (u *UPNPIGD) AddPortMapping(localPort, remotePort int) error

func (*UPNPIGD) BindRequest

func (u *UPNPIGD) BindRequest(localPeerConn *net.UDPConn, localPeerPort int, sendTo chan *pkt) error

func (*UPNPIGD) CheckNet

func (u *UPNPIGD) CheckNet() error

func (*UPNPIGD) DelPortMapping

func (u *UPNPIGD) DelPortMapping() error

func (*UPNPIGD) ExternalIPAddr

func (u *UPNPIGD) ExternalIPAddr() (net.IP, error)

type UnimplementedPeerServiceServer

type UnimplementedPeerServiceServer struct {
}

UnimplementedPeerServiceServer must be embedded to have forward compatible implementations.

func (UnimplementedPeerServiceServer) CanOfferForwarding

func (UnimplementedPeerServiceServer) ForwardingIsAlive

func (UnimplementedPeerServiceServer) SetupForwarding

type UnsafePeerServiceServer

type UnsafePeerServiceServer interface {
	// contains filtered or unexported methods
}

UnsafePeerServiceServer may be embedded to opt out of forward compatibility for this service. Use of this interface is not recommended, as added methods to PeerServiceServer will result in compilation errors.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL