vppn/peer/peer.go
2024-12-08 09:45:29 +01:00

68 lines
1.1 KiB
Go

package peer
import (
"io"
"log"
"net"
)
type Peer struct {
// Immutable data.
ip byte // Last byte of IPv4 address.
hubAddr string
apiKey string
encPubKey []byte
encPrivKey []byte
signPubKey []byte
signPrivKey []byte
conn *net.UDPConn
iface io.ReadWriteCloser
router *Router
}
func NewPeer(netName, listenIP string, port uint16) (*Peer, error) {
conf, err := loadPeerConfig(netName)
if err != nil {
return nil, err
}
peer := &Peer{
ip: conf.PeerIP,
hubAddr: conf.HubAddress,
apiKey: conf.APIKey,
encPubKey: conf.EncPubKey,
encPrivKey: conf.EncPrivKey,
signPubKey: conf.SignPubKey,
signPrivKey: conf.SignPrivKey,
}
peer.router = NewRouter(conf)
port = determinePort(conf.Port, port)
conn, err := openUDPConn(listenIP, port)
if err != nil {
return nil, err
}
peer.conn = conn
peer.iface, err = openInterface(conf.Network, conf.PeerIP, netName)
if err != nil {
log.Fatal(err)
}
if err != nil {
return nil, err
}
return peer, nil
}
func (p *Peer) Run() {
go p.netReader()
p.ifReader()
}