57 lines
1,011 B
Go
57 lines
1,011 B
Go
package net
|
|
|
|
import "net"
|
|
|
|
type LuxChannelType uint
|
|
|
|
const (
|
|
LuxChannelInterior = 0
|
|
LuxChannelExterior = 1
|
|
)
|
|
|
|
type LuxChannel struct {
|
|
Type LuxChannelType
|
|
Address *net.UDPAddr
|
|
conn *net.UDPConn
|
|
}
|
|
|
|
// bind udp socket to receive packets
|
|
func NewLuxInboundChannel(udpStr string, chType LuxChannelType) (LuxChannel, error) {
|
|
addr, err := net.ResolveUDPAddr("udp", udpStr)
|
|
if err != nil {
|
|
return LuxChannel{}, err
|
|
}
|
|
|
|
conn, err := net.ListenUDP("udp", addr)
|
|
if err != nil {
|
|
return LuxChannel{}, err
|
|
}
|
|
|
|
return LuxChannel{
|
|
Type: chType,
|
|
Address: addr,
|
|
conn: conn,
|
|
}, nil
|
|
}
|
|
|
|
func NewLuxOutboundChannel(udpStr string, chType LuxChannelType) (LuxChannel, error) {
|
|
addr, err := net.ResolveUDPAddr("udp", udpStr)
|
|
if err != nil {
|
|
return LuxChannel{}, err
|
|
}
|
|
|
|
conn, err := net.DialUDP("udp", nil, addr)
|
|
if err != nil {
|
|
return LuxChannel{}, err
|
|
}
|
|
|
|
return LuxChannel{
|
|
Type: chType,
|
|
Address: addr,
|
|
conn: conn,
|
|
}, nil
|
|
}
|
|
|
|
func (ch *LuxChannel) Close() {
|
|
ch.conn.Close()
|
|
}
|